thiẾt kẾ vÀ thi cÔng hỆ...
TRANSCRIPT
CHƯƠNG 3
THIẾT KẾ VÀ THI CÔNG HỆ THỐNG
3.1. MỞ ĐẦU CHƯƠNG
Trong chương này, luận văn tập trung vào thiết kế và thi công hệ thống điều
khiển, giám sát các thiết bị và xây dựng phần mềm viết trên ngôn ngữ C kết nối với
internet thông qua giao thức MQTT.
3.2. XÂY DỰNG SƠ ĐỒ KHỐI HỆ THỐNG
Hình 3.1. Sơ đồ khối hệ thống
Khối xử lý trung tâm : Là trái tim của toàn bộ hệ thống, là nơi thu nhận, xử lý và
truyền tải tất cả các thông tin dữ liệu của hệ thống. Khối xử lý trung tâm nhận lệnh từ
các kết nối trên đường truyền internet để điều khiển các thiết bị ngoại vi, và ngược lại,
phản hồi trạng thái của ngoại vi đến các thiết bị đầu cuối.
Khối giao tiếp Internet : Đóng vai trò là cầu nối để dữ liệu di chuyển từ khối
trung tâm ra internet và ngược lại.
Khối ngoại vi : Là các cơ cấu chấp hành thông thường như quạt, đèn...
Khối nguồn : Cung cấp nguồn ổn áp cho toàn hệ thống.
3.3. SƠ ĐỒ NGUYÊN LÝ VÀ CHỨC NĂNG CÁC KHỐI TRONG HỆ
THỐNG
3.3.1. Mạch nguồn
a. Cơ sở lý thuyết
Khối xử
lý trung
tâm
Khối
giao
tiếp
Interne
Khối nguồn
Khối
ngoại vi
PC,
Laptop
Smartpho
ne
Thiết
bị gia
dụng
Mạch nguồn đóng vai trò quan trọng trong toàn bộ hệ thống. Các IC giao tiếp
hoạt động tốt trong điều kiện nhiệt độ phòng, vì vậy Luận văn hướng đến việc thiết
kế mạch nguồn xung để loại bỏ tổn hao nhiệt trên mạch nguồn tuyến tính
Bộ nguồn xung cung cấp tín hiệu đầu ra nhờ hoạt động của các phần tử đóng
cắt trong mạch điện. Bộ nguồn xung cung cấp hiệu suất cao nhưng thiết kế phức
tạp hơn.
Mạch sử dụng các linh kiện L – C để lưu trữ và giải phóng năng lượng trong
quá trình hoạt động đóng ngắt của bộ switch.
Nguồn xung mang lại nhiều ưu điểm như hiệu suất cao, có thể chế tạo boots
hoặc buck, kích thước mạch nhỏ gọn. Với các đặc tính đó, nguồn xung thường
được dùng trong các máy móc hiện đại. Nhược điểm chính của nguồn xung là
nhiễu EMI cao hơn so với nguồn tuyến tính.
Hình 3.2. Sơ đồ nguyên lý mạch buck
Gọi D là duty cycle của van điều khiển đóng khóa 1.
Khi van điều khiển đóng khóa 1, năng lượng được tích trữ trong L – C. Khi
van ở khóa 2, lượng năng lượng này giải phóng để cấp cho tải. Điện áp trung bình
trên cuộn dây bằng 0.
D(Vin - Vout) – (1 - D)Vout = 0 suy ra Vout = D. Vin
b. Yêu cầu
Nguồn cần đảm bảo các tiêu chí: mức áp dòng ổn định, độ gợn sóng đầu ra
thấp, tính ổn định nhiệt độ cao và không bị ảnh hưởng của các yếu tố môi trường.
Cụ thể các thông số hệ thống cho như sau:
- Điện áp nguồn cấp : 3.3VDC
- Điện áp đầu vào : điện áp lưới 220VAC/50Hz
- Độ gợn sóng tín hiệu : < 3%
- Dải nhiệt độ hoạt động : 00C đến 50
0C
c. Sơ đồ nguyên lý
Hình 3.3. Sơ đồ nguyên lý mạch nguồn
Trong đó :
- C1, C5 : Tụ lọc nguồn
- F1, RV1, D2 : Linh kiện bảo vệ nguồn
- U2 : LM2596 IC nguồn xung
- L1 : Cuộn dây tích trữ năng lượng
- R4, D4 : Led báo nguồn
3.3.2. Khối xử lý trung tâm
a. Cơ sở lý thuyết
Luận văn lựa chọn chip vi xử lý PIC24EP512GP806 cho khối xử lý trung
tâm. Ưu điểm lớn của PIC là bộ nạp trình có thể tự lắp ráp một cách dễ dàng với
chi phí thấp theo chuẩn ICSP (In –Circuit Siral Programming).
Microchip cũng cung cấp rất đầy đủ và chi tiết các tài liệu kỹ thuật về tất cả
các loại vi điều khiển PIC. Ngoài ra cộng đồng sử dụng PIC rất lớn mạnh tại Việt
Nam.
PIC24EP512G806 là vi điều khiển thuộc nhóm cao cấp trong dòng vi điều
khiển PIC24 – hiệu suất tính toán lớn, giá cả phù hợp - độ bền cao, dung lượng bộ
nhớ chương trình được nâng cấp. Ngoài ra chúng còn được thiết kế để phù hợp cho
những ứng dụng có hiệu suất cao, ít tiêu tốn năng lượng.
* Những tính năng chính
- Program Flash Memory 586 Kbyte
- RAM : 52 Kbyte
- Bộ nhớ EEPROM dữ liệu (Bytes): 256
- Cổng I/O: Ports A,B,C,D,E
- 16 bits Timers: 9
- Module Capture/Compare/PWM: 16
- Giao tiếp nối tiếp: MSSP, USART cải tiến.
- Module 10-Bit Analog-to Digital: 24 Input Channels
Hình 3. 4. Sơ đồ chân PIC24EP512GP806
b. Sơ đồ nguyên lý
Hình 3.5. Sơ đồ nguyên lý khối xử lý trung tâm
Trong đó :
- PORTD9, PORTD10, PORTD11, PORTG2 kết nối SPI với chip Ethernet
- PORTB2, PORTB3, PORTB4, PORTB5 kết nối led chỉ thị
- Thạch anh 20 MHz
3.3.3. Khối giao tiếp qua Internet
a. Cơ sở lý thuyết
ENC424J600 là chip hỗ trợ kết nối Ethernet ở lớp vật lý tương tự trong mô
hình OSI cho bất kỳ vi điều khiển nào có giao tiếp SPI hoặc giao tiếp song song.
Phần cứng của ENC424J600 được tích hợp trong cả hai lớp kết nối dữ liệu và lớp
vật lý. Chip đáp ứng tất cả các thông số của tiêu chuẩn IEEE 802.3 với các ứng
dụng Ethernet 10Base-T và 100Base-TX. Chip hỗ trợ bộ DMA 16 bit đáp ứng tốc
độ thông suốt dữ liệu nhanh hơn, đồng thời hỗ trợ việc tính toán IP checksum.
Chip hỗ trợ truyền song công và bán song công với cơ chế CSMA/CD chống xung
đột kênh truyền
ENC424J600 cung cấp giao diện truyền thông SPI với vi điều khiển tốc độ
14Mbit/s, bộ nhớ đệm thu/phát lên đến 24Kbyte RAM
Hình 3.6. Sơ đồ khối chức năng chip ENC424J600
b. Một số lưu ý khi thiết kế mạch giao tiếp Ethernet
* Kết nối thạch anh
ENC424J600 được thiết kế hoạt động với thạch anh 25Mhz, đảm bảo tính
chính xác thấp hơn 50ppm phù hợp tiêu chuẩn IEEE 802.3
* Điện áp phân cực
Để giảm thiểu tối đa các điện áp nhiễu gây ảnh hưởng đến đường truyền
Ethernet và đảm bảo công suất dòng lớn, chip được tích hợp nhiều chân nguồn, cụ
thể là VDD và VSS, VDDOSC và VSSOSC, VDDPLL và VSSPLL, VDDRX và VSSRX, VDDTX và
VSSTX. Các cặp chân nguồn này luôn phải nối đến các tụ bypass gần nhất để triệt
nhiễu EMI.
Hình 3.7. Các tụ ngoại vi cho ENC424J600
Các linh kiện bên trong chip hoạt động ở điện áp 1.8V, được cấp bởi bộ ổn áp
on-chip, vì vậy cần kết nối tụ lọc tại chân VCAP để đảm bảo điện áp chuẩn. Tụ điện
này phải được lựa chọn là tụ có trở kháng nối tiếp tương đương thấp, cụ thể là các
tụ ceramic hay tantalum, tránh dùng tụ aluminum electrolytic.
* RBIAS
Được sử dụng để phục vụ chức năng cho tầng vật lý bên trong chip.
Trở này phải đặt sát chip, nhưng phải tránh xa các đường tín hiệu để nhiễu EMI
dung kháng không ảnh hưởng đến đường truyền.
Hình 3.8. Điện trở phân cực cho ENC424J600
* Kết nối đến cổng RJ45
Hình 3.9. Sơ đồ nguyên lý kết nối ENC424J600 với cổng RJ45
Các tụ điện và điện trở kèm theo được tích hợp bên ngoài chip để đảm bảo
phân cực và kết nối Ethernet, ngoài ra chúng còn kết hợp như một bộ lọc thông cao
triệt nhiễu baseline. Điện trở 10 Ω được kết nối để tạo đường dẫn nguồn nến điểm
giữa biến áp nhằm tạo ra dạng sóng Ethernet. Ngoài ra, điện trở này còn giúp tiêu
tán bớt nhiệt mà PHY phải gánh trong quá trình truyền dẫn.
Giao diện truyền Ethernet bao gồm 2 chân TPOUT + và TPOUT-. Đây là các
chân vi sai và chế độ truyền là current-mode. Để có thể tạo ra một dạng sóng
Ethernet, thông thường yêu cầu sử dụng một biến áp điểm giữa,khi module
Ethernet được kích hoạt và kết nối đến thiết bị khác, sóng sẽ xuất hiện thông qua
cả hai chân TPOUT. Khi lớp PHY là tích cực truyền, một điện áp vi sai sẽ được tạo
ra trên cáp Ethernet bằng cách thay dòng ở TPOUT + so với TPOUT-. Cơ chế hoạt
động hoàn toàn tương tự cho mode nhận. PHY sử dụng bộ ADC tốc độ cao để lấy
mẫu sóng và giải mã nó bằng cách sử dụng bộ DSP onchip.
* Kết nối đến vi điều khiển
Kết nối từ ENC424J600 đến vi điều khiển theo giao thức SPI nên các chân
song song của chip sẽ tự động bị khóa ở trạng thái trở kháng cao và bộ nhớ đệm
song song sẽ ngắt. Vì vậy tốt nhất nên nối mass cho các chân song song này.
Hình 3.10. Sơ đồ nguyên lý kết nối ENC424J600 với vi xử lý
- SCK Serial Clock – Xung đồng bộ cho đường nối tiếp
- SI Serial Input – Tín hiệu nối tiếp vào (ghi)
- SO Serial Output – Tín hiệu nối tiếp ra (đọc)
c. Chuẩn truyền thông SPI trên chip ENC424J600
SPI (Serial Peripheral Inteface) là một chuẩn truyền thông nối tiếp tốc độ cao
do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1
chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển
bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách
truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và
nhận có thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây”
vì có 4 đường giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master
Input Slave Output), MOSI (Master Output Slave Input) và SS (Slave Select).
SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên
cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây
là điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn
UART. Sự tồn tại của chân SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc độ
truyền của SPI có thể đạt rất cao. Xung nhịp chỉ được tạo ra bởi chip Master.
MISO– Master Input/Slave Output: nếu là chip Master thì đây là đường Input
còn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves được
nối trực tiếp với nhau.
MOSI – Master Output/Slave Input: nếu là chip Master thì đây là đường
Output còn nếu là chip Slave thì MOSI là Input. MOSI của Master và các Slaves
được nối trực tiếp với nhau.
SS – Slave Select: SS là đường chọn Slave cần giap tiếp, trên các chip Slave
đường SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đường SS của
một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và
Slave đó. Chỉ có 1 đường SS trên mỗi Slave nhưng có thể có nhiều đường điều
khiển SS trên Master, tùy thuộc vào thiết kế của người dùng.
Hoạt động: mỗi chip Master hay Slave có một thanh ghi dữ liệu 8 bits. Cứ
mỗi xung nhịp do Master tạo ra trên đường giữ nhịp SCK, một bit trong thanh ghi
dữ liệu của Master được truyền qua Slave trên đường MOSI, đồng thời một bit
trong thanh ghi dữ liệu của chip Slave cũng được truyền qua Master trên đường
MISO. Do 2 gói dữ liệu trên 2 chip được gởi qua lại đồng thời nên quá trình truyền
dữ liệu này được gọi là “song công”.
Hình 3.11. Quá trình truyền 1 gói dữ liệu thực hiện bởi module SPI
d. Chuẩn truyền thông Ethernet trên chip ENC424J600
Cấu trúc Packet
Hình 3.12. Cấu trúc packet truyền thông Ethernet
Giao tiếp Ethernet thiết lập thông tin truyền dẫn giữa các node thoogn qua
chuẩn chung, bao gồm nhiều byte tạo thành một packets. Thông thường 1 packet
dài 64 byte đến 1518 bytes. Mỗi packet có thể chứa 6 trường :địa chỉ MAC đích ,
địa chỉ MAC nguồns, type/length field, trường dữ liệu payload, trường optional
padding và trường mã Cyclic Redundancy Check (CRC).
Trên đường truyền Ethernet, trường CRC rất quan trọng trong quá trình mã
hóa kênh. Mã CRC thường có độ dài 4-byte được tính toán thông qua địa chỉ
nguồn, địa chỉ đích, dạng dữ liệu và trường padding. CRC cho phép phát hiện lỗi
sai trên đường truyền. Khi thực hiện truyền thông, ENC424J600 nguồn có thể tự
động tạo ra mã CRC nếu thiết lập bit PADCFG<2:0> chuẩn xác. Khi
ENC424J600 đích nhận được gói tin, bộ mã CRC này được ghi vào bộ đệm thu và
kiểm tra để loại bỏ các packet lỗi.
* Thiết lập truyền thông
- Ghi giá trị 1234h vào thanh ghi EUDAST.
- Đọc giá trị thanh ghi EUDAST, nếu đúng bằng 1234h thì thực hiện bước
tiếp theo, nếu không thì truyền thông SPI và PSP không thể thực thi được. Vì vậy
phải quay lại bước 1 để thiết lập lại.
- Poll bit CLKRDY (ESTAT<12>) à đợi cho đến khi được set lên 1.
- Thực hiện lệnh System Reset bằng cách set bit ETHRST (ECON2<4>).
- Phần mềm thực hiện đợi ít nhất 25 μs cho việc Reset và giao tiếp SPI/PSP
tái khởi động.
- Đọc giá trị thanh ghi EUDAST để xác nhận quá trình System Reset đã
đưuọc thực thi. EUDAST phải được reset và trả về giá trị mặc định là 0000h.
- Đợi ít nhất 256 μs cho thanh ghi PHY registers và bit PHY status khởi động.
Đến lúc này thì chip đã có thể truyền nhận lệnh thông thường.
* Quá trình truyền packet
Trước khi thực hiện truyền packets, thiết bị pahir được thiết lập đúng chuẩn.
Set bit TXRTS (ECON1<1>) để bắt đầu truyền tin, bit này sẽ tự động được xóa
sau khi quá trình truyền kết thức. Ngoài ra, quá trình truyền được cung cấp các
ngắt TXIF interrupt và ngắt ngoài cho coding.
Thiết lập địa chỉ MAC cho thiết bị, đây là địa chỉ duy nhất giúp thiết bị luôn
luôn là duy nhất trên đường truyền Internet. Hầu hết các ứng dụng đều sử dụng bit
PADCFG<3:0> và bit TXCRCEN ở trạng thái mặc định để đảm bảo quá trình tạo
mã CRC diễn ra tự động. Để chèn thông tin địa chỉ MAC vào packet tự động, phần
mềm set bit TXMAC lên 1.
- Thiết lập ngắt trong quá trình truyền bằng cách set bit TXIE và TXABTIE
(EIE<3:2>). Xóa các cờ ngắt liện quan TXIF và TXABTIF nếu chúng đang bằng
1. Thiết lập ngắt toàn cục bằng cách set bit INTIE (EIE<15>).
- Copy packet đến SRAM buffer.
- Nạp giá trị ETXST để bắt đầu địa chỉ của packet và ETXLEN là độ dài
packet copy vào bộ nhớ.
- Set bit TXRTS để bắt đầu truyền tin.
- Đợi cho đến khi phần cứng xóa bit TXRTS và kích hoạt ngắt truyền thì quá
trình truyền đã thực thi xong.
- Đọc giá trị thanh ghi ETXSTAT để xác định thông tin mô tả quá trình truyền
tiếp theo.
* Quá trình nhận packet
CONFIGURING PACKET RECEPTION
Khi các thanh ghi phục vụ MAC và PHY được thiết lập chính xác, thiết bị có
thể bắt đầu quá trình nhận tin.
- Thiết lập ERXST Pointer để xác định địa chỉ đầu tiên cho bộ đệm thu. Head
Pointer ERXHEAD cũng sẽ tự động được set đến cùng giá trị đó.
- Tạo giá trị biến NextPacketPointer để lưu giữ giá trị địa chỉ cho packet nhận
tiếp theo.
- Thiết lập Tail Pointer, ERXTAIL, là điểm nhớ cuối cho bộ đệm thu, giá trị là
5FFEh.
- Thiết lập ngắt nhận nếu cần.
- Set bit RXEN (ECON1<0>) cho phép nhận.
* Đọc giá trị packet từ bộ đệm thu:
- Xác định các packet có trong bộ nhớ đệm bằng cách xét giá trị bit
PKTCNT<7:0> bits khác không và cờ ngắt PKTIF (EIR<6>) được set.
- Đọc vào giá trị NextPacketPointer.
- Đọc 2 byte đầu của frame để xác định địa chỉ cho packet tiếp theo, ghi giá trị
này vào NextPacketPointer.
- Đọc vào 6 byte tiếp theo để xác định Receive Status Vector (RSV).
- Đọc vào frame Ethernet. Độ dài của frame thông tin này được xác định bằng
giá trị ghi trong RSV đọc được ở trên.
- Khi frame đã được đọc xong, tăng giá trị bộ nhớ đệm lên 1 đơn vị bằng cách
tăng giá trị ERXTAIL, giá trị cuối cùng của thanh ghi ERXTAIL phải bằng
(NextPacketPointer– 2).
- Set bt PKTDEC (ECON1<8>) để giảm PKTCNT bits. PKTDEC được tự
động reset khi PKTCNT giảm về zero.
e. Sơ đồ nguyên lý
Hình 3.13. Sơ đồ nguyên lý khối giao tiếp Ethernet
Nguyên lý hoạt động
- Nhận dữ liệu: Tín hiệu yêu cầu từ mạng truyền qua cổng RJ45 vào
ENC424J600. Chip được thiết kế để giải mã tín hiệu và chuyển tín hiệu đó thành
dữ liệu và lưu vào bộ đệm thu. Thông qua giao tiếp SPI, PIC liên tục kiểm tra bộ
đệm của ENC28J60. Nếu phát hiện có dữ liệu nó sẽ đọc dữ liệu và xử lí.
- Truyền dữ liệu: Thông qua giao tiếp SPI, PIC sẽ gửi dữ liệu vào bộ đệm phát
của ENC424J600. Chip sẽ mã hóa dữ liệu và truyền ra đường RJ45 đến địa chỉ
mong muốn.
- Trong mạch này, sử dụng đầu cắm giao tiếp RJ45 là HR911105A của
HANRUN.HR911105A được tích hợp sẵn biến áp cad có 2 đèn led để thông báo
trạng thái kết nối của mạch.
3.3.4. Khối ngoại vi
Khối ngoại vi bao gồm tất cả các cơ cấu chấp hành và thiết bị gia dụng thông
thường trong gia đình như : các công tắc đèn điện, hệ thống chiếu sáng...
Khối ngoại vi nhận lệnh điều khiển trực tiếp thông qua khối xử lý trung tâm,
trạng thái luôn được cập nhật với thời gian thực cho từng ứng dụng
3.4. XÂY DỰNG PHẦN MỀM
3.4.1. Stack TCP/IP:
Microchip cung cấp miễn phí bộ thư viện và công cụ TCP/IP Stack được tối
ưu hóa cho các dòng PIC18, PIC24, DsPIC và PIC32. Stack được chia thành nhiều
lớp, trong đó mỗi lớp có thể truy cập trực tiếp các service từ một hoặc nhiều lớp
dưới nó.
Hình 3.14.Cấu trúc của Stack.
TCP/IP Stack của Microchip bao gồm các tính năng đặc trưng sau:
- Hỗ trợ các giao thức: ARP, IP, ICPM, UDP, TCP, DHCP, SNMP, HTTP,
FTP, TFTP
- Hỗ trợ TCP, UDP
- Secure Sockets Layer (SSL)
- NetBIOS Name Service
- DNS – Domain Name System
- Ethernet Device Discovery
Stack được thiết kế theo kiểu module trên ngôn ngữ C. Sau khi biên dịch,
dung lượng bộ nhớ chương trình khoảng từ 28-34 KB tùy theo các module sử
dụng.
3.4.2. Thiết kế lớp ứng dụng MQTT Client
Stack TCP/IP của Microchip tuy hỗ trợ hầu hết các giao thức để thiết kế các
ứng dụng qua giao tiếp Ethernet, nhưng với điều kiện đặt ra của đề tài là thiết kế
một ứng dụng điều khiển thiết bị qua internet theo tiêu chí IOT thì stack này chưa
hỗ trợ. Vì vậy, người nghiên cứu đã thiết kế thêm ứng dụng theo giao thức MQTT
theo chuẩn mới nhất mà IBM đã đưa ra.
Hình 3.15. Lớp MQTT Client được thêm vào TCP/IP Stack
Một đoạn code thực hiện việc kết nối MQTT Client đến Server.
Code
case MQTTCONNECT:
/* Fixed header */
MQTTBuffer[pos++] = header&MQTTMTMASK;
/* calculate remaining length */
remlen = 6 + 1 + 1 + 2;
if (MQTTClient.ClientId.szRAM)
remlen += 2 + strlen(MQTTClient.ClientId.szRAM);
if (MQTTClient.ConnFlags.bits.WillFlag)
remlen += 2 + strlen(MQTTClient.WillTopic.szRAM);
remlen += 2 + strlen(MQTTClient.WillMessage.szRAM);
if (MQTTClient.ConnFlags.bits.UserNameFlag)
remlen += 2 + strlen(MQTTClient.Username.szRAM);
if (MQTTClient.ConnFlags.bits.PasswordFlag)
remlen += 2 + MQTTClient.PassLength;
if (remlen > (MQTT_MAX_PACKET_SIZE - 5)) return
(MQTTERROR);
/* fill in remaining length */
pos = MQTTWriteRemainingLength(MQTTBuffer, pos, remlen);
/* variable header */
MQTTBuffer[pos++] = 0x00;
MQTTBuffer[pos++] = 0x04;
MQTTBuffer[pos++] = 'M';
MQTTBuffer[pos++] = 'Q';
MQTTBuffer[pos++] = 'T';
MQTTBuffer[pos++] = 'T';
/* Protocol Level */
MQTTBuffer[pos++] = MQTTPROTOCOLVERSION;
/* Connect Flags */
MQTTBuffer[pos++] = MQTTClient.ConnFlags.Val;
/* Keep Alive */
MQTTBuffer[pos++] = HIBYTE(MQTTClient.KeepAlive);
MQTTBuffer[pos++] = LOBYTE(MQTTClient.KeepAlive);
/* Client Identifier */
pos = MQTTWriteString(MQTTClient.ClientId.szRAM,
MQTTBuffer, pos);
/* Will Topic & Will Message */
if (MQTTClient.ConnFlags.bits.WillFlag)
pos = MQTTWriteString(MQTTClient.WillTopic.szRAM,
MQTTBuffer, pos);
pos = MQTTWriteString(MQTTClient.WillMessage.szRAM,
MQTTBuffer, pos);
/* Username */
if (MQTTClient.ConnFlags.bits.UserNameFlag)
pos = MQTTWriteString(MQTTClient.Username.szRAM,
MQTTBuffer, pos);
/* Password, binary format must be allowed */
if (MQTTClient.ConnFlags.bits.PasswordFlag)
pos = MQTTWriteArray(MQTTClient.Password.szRAM,
MQTTClient.PassLength, MQTTBuffer, pos);
break
3.4.3. Server
Hình 3.16. Mô hình kết nối thiết bị trong giao thức MQTT
Trong giới hạn của đề tài, người nghiên cứu sử dụng server broker mosquito.
Mosquitto là broker mã nguồn mở để thực hiện giao thức MQ Telemetry Transport
version 3.1 và 3.1.1, đây là phương pháp truyền nhận các message một cách nhẹ
nhất (lightweight). Broker này phù hợp với các ứng dụng giám sát và điều khiển
các thiết bị theo các message (machine-to-machine).