2. LÝ THUYẾT
1.4. Tìm hiểu về chuẩn ZigBee và module XBee
1.4.1. Chuẩn ZigBee
Hình18 The 802 Wireless Space
ZigBee là một công nghệ được xây dựng dựa trên tiêu chuẩn của IEEE, đáp ứng cho sự phát triển rộng khắp của mạng WSNs giá thành thấp, công suất tiêu thụ thấp, dùng cho các ứng dụng điều khiển từ xa, điều khiển thiết bị trong nhà, ứng dụng trong các tòa nhà tự động trong công nghiệp và thương mại.
Các chuẩn mạng không dây khác như Bluetooth, Wifi dùng cho ứng dụng đòi hỏi tốc độ dữ liệu cao tiêu thụ công suất lớn, phức tạp và giá thành cao. Tuy nhiên, có nhiều ứng dụng mạng không dây trong giám sát và điều khiển trong công nghiệp và thương mại đòi hỏi thời gian sử dụng pin dài hơn, tốc độ dữ liệu thấp và ít phức tạp hơn các chuẩn không dây này. Để đáp ứng cho sự phát triển theo hướng thương mại, cần có một chuẩn thỏa các yêu cầu về độ tin cậy, an ninh, công suất thấp và giá thành thấp.
Bảng 1 So sánh ZigBee, Wifi, Bluetooth
ZigBeeTM Wifi Bluetooth
Tần số 868MHz, 915MHz, 2.4GHz 2.4GHz 2.4GHz, 5GHz Tốc độ dữ liệu 20-250 Kbps 1-100Mbps 1-3Mbps Khoảng cách truyền 10-100m 30-100m 2-10m
Các ứng dụng không dây như thế đã được phát triển bởi IEEE. Tiêu chuẩn IEEE 802.15.4 cung cấp tốc độ dữ liệu thấp với thời gian sử dụng pin nhiều tháng đến nhiều năm và ít phức tạp. Tiêu chuẩn hướng đến hoạt động ở một băng tần quốc tế. Chuẩn này quy định về lớp vật lý (PHY) và điều khiển truy cập (MAC). Các chức năng được định nghĩa bởi ZigBee Alliance được dùng ở các lớp cao hơn.
Hình19 biểu diễn cấu trúc các lớp trong giao thức của ZigBee.
Hình19 Cấu trúc các lớp trong giao thức của ZigBee
Tổ chức ZigBee Alliance đưa ra các thông số ZigBee đầu tiên vào năm 2004, tạo tiền đề cho sự phát triển và ứng dụng rộng rãi của mạng WSNs. ZigBee/IEEE 802.15.4 được chờ đợi trở thành công nghệ dẫn đầu cho những ứng dụng thương mại.
Một số cấu trúc liên kết mạng cho công nghệ ZigBee: các node trong một mạng ZigBee có thể liên kết với nhau theo cấu trúc mạng hình sao (star), cấu trúc mạng hình lưới (mesh), hay cấu trúc mạng bó cụm hình cây (cluster tree). Ta có thể hình dung rõ hơn thông qua hình minh họa 1.20:
Hình20 Cấu trúc liên kết mạng cho công nghệ ZigBee
Ở hình trên ta thấy có 2 dạng thiết bị là FFD, RFD.
- FFD (full function device) là thiết bị có đầy đủ chức năng. FFD có thể thông tin với mọi thiết bị khác trong cùng mạng với nó và còn có khả năng giao tiếp với thiết bị thuộc mạng khác.
- RFD (reduced function device) là thiết bị có chức năng bị hạn chế. Một RFD là thiết bị đơn giản mang các chức năng hạn chế hơn so với FFD. RFD chỉ bao gồm giao diện vật lý đáp ứng tiêu chuẩn lớp MAC IEEE 802.15.4 với khả năng xử lý hạn chế, mức công suất tiêu thụ thấp và ít phức tạp hơn FFD.
Có ba nhóm thiết bị logic (theo chức năng):
- Bộ điều phối mạng (coordinator): Một thiết bị FFD chịu trác nhiệm xây dựng và điều hành mạng đóng vai trò bộ điều phối mạng. Bộ điều phối có chức năng chọn ra các thông số cho việc cấu hình mạng và lưu trữ các thông tin về hoạt động của mạng.
- Bộ định tuyến (Router): Một thiết bị FFD có chức năng định tuyến cho dữ liệu, hoạt động như một thiết bị trung gian liên kết các thành phần khác của mạng và truyền thông điệp giữa các thiết bị ở các xa nhau. Một router có thể thông tin với một router khác hay thiết bị đầu cuối.
- Thiết bị đầu cuối (End device): Một thiết bị RFD chỉ có chức năng thông tin với node cấp trên của nó (parent node) như bộ điều phối mạng hay bộ định tuyến. Một thiết bị đầu cuối không có khả năng chuyển tiếp thông điệp đến các thiết bị đầu cuối khác.
Bộ điều phối mạng PAN coordinator này tạo ra nhóm đầu tiên cách tự bầu ra người lãnh đạo cho mạng của mình, và gán cho người lãnh đạo đó một chỉ số nhận dạng cá nhân đặc biệt gọi là CID-0 bằng cách tự thành lập CLH (cluster head) bằng CID-0 (cluster identifier), nó chọn một PAN identifier rỗi và phát khung tin quảng bá nhận dạng tới các thiết bị lân cận. Thiết bị nào nhận được khung tin này có thể yêu cầu kết nối vào mạng với CLH. Nếu bộ điều phối mạng PAN (PAN coordinator) đồng ý cho thiết bị đó kết nối thì nó sẽ ghi tên thiết bị đó vào danh sách. Cứ thế thiết bị mới kết nối này lại trở thành CLH của nhánh cây mới và bắt đầu phát quảng bá định kỳ để các thiết bị khác có thể kết nối vào mạng.
1.4.2. Module Xbee:
Tổng quan về module XBee
Hình21 Module Xbee và Xbee Pro trong thực tế
Bảng 2 Tên gọi và chức năng các chân của module Xbee
Hoạt động của module Xbee
Serial communications
UART Data Flow
Thiết bị có giao tiếp UART có thể kết nối trực tiếp với module Xbee như hình dưới.
Hình23 Hệ thống sơ đồ dòng data qua giao tiếp UART
Serial Data
Dữ liệu truyền vào module UART thông qua chân DI (pin 3) như một tín hiệu liên tục không đồng bộ. Tín hiệu phải idle hight khi không có dữ liệu được truyền.
Mỗi byte dữ liệu bao gồm một start bit (low), 8 dữ liệu bits và 1 stop bit (hight). Hình vẽ dưới đây minh họa cho mô hình chuỗi bit dữ liệu truyền vào module.
Hình24 Gói dữ liệu UART 0x1F truyền qua RF module
Module UART làm nhiệm vụ định thời và kiểm tra chẵn lẻ, đây là điều cần thiết cho việc truyền thông tin. Chuỗi thông tin dựa vào 2 UARTs được cấu hình với các thiết lập tương thích (baud rate, parity, start bit, stop bit, data bits).
Flow Control
Hình25 Sơ đồ luồng dữ liệu nội bộ
DI (Data In) Buffer
Khi chuỗi dữ liệu truyền vào RF module thông qua DI pin (pin 3), dữ liệu sẽ được lưu trữ trong DI buffer cho đến khi có thể xử lý.
Hardware Flow Control (𝑪𝑻𝑺 ): Khi DI buffer còn 17 bytes trống; mặc định, module sẽ de-assert 𝐶𝑇𝑆 (hight) để ra tín hiệu cho host device ngừng gởi dữ liệu. 𝐶𝑇𝑆 sẽ re-asserted sau khi DI buffer đã có đủ 34 bytes trống.
o Gửi dữ liệu nhỏ hơn so với độ lớn của DI buffer
o Giao diện UART có tốc độ truyền thấp hơn tốc độ dữ liệu
Trƣờng hợp DI buffer có thể đầy hay tràn:
Nếu module nhận một chuỗi dữ liệu liên tục, một vài dữ liệu gửi đến chân DI sẽ được lưu ở DI buffer. Và dữ liệu ở DI buffer sẽ được truyền over-the-air khi module không còn nhận dữ liệu RF trong mạng.
DO Buffer (Data out)
Khi dữ liệu RF được nhận, dữ liệu vào DO buffer và được gửi ra khỏi serial port đến host device. Một khi DO buffer đã đầy thì bất kỳ dữ liệu nào truyền vào đều mất.
Hardware flow control (𝑹𝑻𝑺 ): Nếu 𝑅𝑇𝑆 cho phép flow control (D6 (DIO6 Configuration) Parameter = 1), dữ liệu sẽ không thể truyền ra khỏi DO buffer khi mà 𝑅𝑇𝑆 (pin 16) là de-asserted (hight)
Hai trƣờng hợp mà DO buffer đầy hay tràn:
o Nếu tốc độ dữ liệu RF cao hơn tốc độ dữ liệu cấu hình của
module, module sẽ nhận dữ liệu từ transmitting module nhanh hơn so với tốc độ nó có thể truyền dữ liệu đến host.
o Nếu host không cho phép module truyền dữ liệu ra khỏi DO
buffer, việc này cũng có thể làm cho DO buffer của module bị đầy hay tràn.
Xbee/Xbee-Pro addressing
Mỗi gói dữ liệu RF đều chứa đựng Source address và Destination address ở vùng header của nó. Xbee hỗ trợ cả 64 bit address và 16bits address. 64 bits address là duy nhất và được quy định bởi nhà sản xuất và có thể đọc thông qua SL (Serial number low) và SH (Serial number hight). Module sẽ sử dụng 64bits address của nó như là source address nếu như MY (16bits address) của nó có giá trị là “0xFFFF” hay “0xFFFE”.
Để gởi một gói dữ liệu đến một module sử dụng 64bits address: ta phải thiết lập Destination address (DL+DH) bằng với (SL+SH) của module đó.
Để gởi một gói dữ liệu đến một module sử dụng 16bits address: ta phải thiết lập giá trị DH = 0 và DL bằng với giá trị MY của module đó.
Chế độ Unicast:
Ở mặc định thì xbee sẽ hoạt động ở chế độ Unicast. Unicast hỗ trợ retries. Khi đang ở mode này, receiving module sẽ gởi ACK cho transmitting module khi nhận được gói dữ liệu từ transmitter này. Nếu như transmitting module không nhận được gói ACK này thì nó sẽ tiến hành gởi lại 3 lần hoặc cho đến khi nhận được gói ACK.
Short 16bits address. Module có thể được cấu hình để sử dụng 16 bits address như một source address (bằng cách thiết lập giá trị MY < 0xFFFE). Thiết lập DH = 0 và DL <0xFFFE thì destination address sẽ sử dụng 16bits address. Và để 2 module có thể truyền phát cho nhau thì destination address của transmitter phải bằng MY của receiver.
Bảng 3 Ví dụ về đặt địa chỉ cho 2 module
Long 64bits address. Module sẽ sử dụng Long 64 bits address như là source address khi mà giá trị MY của nó bằng 0xFFFF hay 0xFFFE. Và Long 64bits address được lưu trữ trong giá trị SH và SL. Khi đó để 2 module truyền được cho nhau thì Destination address (DL và DH) của transmitter phải bằng với Source address (SL và SH) của receiver.
Chế độ Broadcast:
Khi thiết lập chế độ Broadcast thì receiver sẽ không gởi gói ACK cũng như transmitter sẽ không tự động re-send gói tin như Unicast. Để gởi một gói tin Broadcast thì ta cần thiết lập giá trị cho DH và DL như sau:
- DL (Destination low address) = 0x0000FFFF
- DH (Destination hight address) = 0x00000000 (giá trị mặc định).
Các mode hoạt động của Xbee
Module Xbee hoạt động ở 5 mode như hình dưới:
Hình26 Các mode hoạt động của Xbee
Idle Mode:
Khi không truyền hay nhận dữ liệu, module RF sẽ ở chế độ Idle mode. Module sẽ chuyển sang hoạt động ở các mode khác trong những trường hợp sau đây:
- Transmit mode (Serial data được nhận ở DI buffer)
- Receiver mode (RF data hợp lệ nhận được bởi anten)
- Sleep mode (Điều kiện để vào sleep mode được đáp ứng)
- Command mode (Command Mode Sequence được ban hành)
Transmit/Receive mode:
RF data Packets Mỗi gói tin đều chứa một trường source address và destination address.
Truyền trực tiếp và gián tiếp (direct and indirect transmission): có 2 phương pháp đã truyền dữ liệu:
- Trực tiếp – Dữ liệu sẽ được truyền ngay cho destination address
- Gián tiếp – Một gói dữ liệu sẽ duy trì trong một khoảng thời gian và chỉ truyền
tại ở coordinator. Chế độ truyền gián tiếp này rất hữu dụng khi để chắc chắn rằng gói tin được giao cho một sleeping node. Coordinator có thể lưu trữ 2 thông tin gián tiếp.
Giá trị SP (cyclic sleep period) của coordinator phải được thiết lập bằng với khoảng thời gian ngủ của end device nào có khoảng thời gian ngủ dài nhất. Giá trị SP của coordinator xác định khoảng thời gian mà nó sẽ giữ lại một indirect message trước khi loại bỏ nó.
Trong mạng NonBeacon, một End device sẽ phải hỏi coordinator mỗi khi nó thức dậy từ chế độ sleep để xem coordinator có indirect message cho nó không. Việc này được thực hiện tự động mỗi khi module thức dậy (sau khoảng thời gian SP)
Acknowledgement: Nếu một gói tin (không phải broadcast) được gởi đi, module sẽ mong chờ nhận được một ACK từ destination node. Nếu không nhận được ACK, nó sẽ truyền lại 3 lần hay cho đến khi nào nhận được ACK.
Sleep mode:
Sleep mode sẽ cho phép module vào trạng thái tiêu thụ ít công suất khi module này không được sử dụng. Để vào sleep mode thì một trong các điều kiện dưới đây phải thỏa (giá trị SM của module phải khác 0):
- Sleep_RQ (pin 9) phải ở mức cao
- Module đang ở trạng thái Idle (không truyền nhận dữ liệu) trong một khoảng
thời gian được xác định bởi giá trị ST (Time before sleep). (Lưu ý rằng ST chỉ có giá trị khi SM bằng 4 hoặc 5)
Bảng 4 Cấu hình Sleep Mode
Thiết lập chế độ sleep mode Sự thay đổi để vào Sleep Mode Sự thay đổi để ra khỏi Sleep Mode Đặc tính Lệnh liên quan Công suất tiêu thụ Pin Hibernate (SM=1) Assert (high) Sleep_RQ (pin 9) De-assert (low) Sleep_RQ Pin/Hostcontrolled/ Nonbeacon systems only/ Lowest Power
(SM) < 10 μA (@3.0 VCC) Pin Doze (SM=2) Assert (high) Sleep_RQ (pin 9) De-assert (low) Sleep_RQ Pin/Hostcontrolled/ Nonbeacon systems only/ fastest
wake-up Cycle Sleep (SM =4-5) Tự động vào Sleep mode, được xác định bởi giá trị SM và ST (hoặc quá trình chuyển đổi cạnh xuống của pin 9 khi SM=5) Sự chuyển đổi xảy ra sau thời gian ngủ (được xác định bởi SP) RF module wakes in pre-determined time intervals to detect if RF data is present/ When SM = 5, NonBeacon systems only) (SM), SP, ST < 50 μA when sleeping
Pin/Host-controlled sleep mode
Pin Hibernate (SM=1)
o Pin/Host-controlled
o Dòng <10µA (tại VCC=3V)
o Wake-up time: 13.2 msec
Chế độ pin hibernate tối thiểu tiêu hao năng lượng cho module khi ở trong trạng thái nghỉ ngơi hay không hoạt động. Khi chân Sleep_RQ được đặt mức cao thì module sẽ ngưng tất cả các hoạt động thu phát, truyền nhận dữ liệu để vào trạng thái Idle và sau đó đi vào trạng thái ngủ. Trong khi ngủ nó sẽ không thực hiện bất cứ việc gì.
Để thoát khỏi trạng thái Sleep mode thì ta cần thiết lập mức thấp cho chân Sleep_RQ. Sau đó Module sẽ sẵn sàng để thực hiện việc truyền nhận dữ liệu khi CTS ở mức thấp. Khi module thức dậy, chân 9 phải được de-asserted một khoảng thời gian ít nhất bằng thời gian 2 byte sau khi CTS xuống mức thấp. Điều này để đảm bảo rằng có khoảng thời gian để dữ liệu có thể đi vào DI buffer.
Pin Doze (SM=2):
o Pin/Host-controlled
o Typical power-down current: <50µA (When asleep)
Chức năng Pin Doze giống như chế độ Pin Hibernate. Tuy nhiên trong chế độ này module sẽ tiêu thụ công suất nhiều hơn và Wake-up time nhanh hơn.
Cyclic Sleep mode
Cyclic sleep Remote (SM=4)
o Typical Power-down current: <50µA
o Wake-up time: 2msec
Chế độ này cho phép module kiểm tra tín hiệu RF một cách định kỳ. Mỗi lần thức dậy, module sẽ gởi thăm dò đến coordinator hỏi xem có dữ liệu gởi cho nó không tại thời điểm cụ thể được thiết lập bởi thông số SP. Nếu coordinator có dữ liệu thì nó sẽ truyền cho module remote này. Remote sẽ duy trì trạng thái wake để nhận xong dữ liệu và sẽ trở về trạng thái sleep mode sau khi hết thời gian ST. Nếu không có dữ liệu cho remote, coordinator sẽ không truyền và remote sẽ trở về trạng thái sleep.
Lưu ý: 𝐶𝑇𝑆 luôn xuống mức thấp mỗi khi remote thức dậy.
Cyclic Sleep Remote with Pin Wake-up (SM=5)
Sử dụng mode này để đánh thức sleeping remote module bằng cả RF interface hoặc bằng cách de-asserted of Sleep_RQ. Hoạt động của Cyclic sleep Remote hoạt động như mô tả ở phần trên, thêm vào đó là chức năng Pin-controlled wake-up ở remote module. Chân Sleep_RQ là edge-triggered, không phải là level-triggered. Module sẽ thức dậy khi nó xác định được cạnh xuống ở chân Sleep_RQ và nó sẽ thiết lập trạng thái mức logic thấp cho chân 𝐶𝑇𝑆 ngay khi module sẵn sàng truyền và nhận dữ liệu.
Bất kỳ hoạt động nào xảy ra cũng đều làm reset ST timer do đó module sẽ trở về trạng thái sleep mode khi không thực hiện bất kỳ hoạt động gì trong khoảng thời gian ST.
Command mode:
Để sửa đổi và đọc các thông số RF của module, đầu tiên module cần phải vào chế độ command mode. Có 2 lựa chọn cho Command mode được hỗ trợ là: AT command mode và API Command mode.
AT Command Mode:
Để vào AT command mode: Gởi 3 ký tự “+++” và quan sát khoảng thời gian
bảo vệ trước và sau ký tự lệnh. Tham khảo “Default AT Command Mode Sequence”
dưới đây:
- Không có ký tự nào gởi trong vòng 1giây. (Guard time (GT)=0x3E8).
- Nhập 3 ký tự “+++” trong vòng 1 giây. (CC (Command sequence
character)=0x2B).
- Không có ký tự nào gởi trong vòng 1 giây. (Guard time (GT)=0x3E8).
Sau khi thực hiện những yêu cầu trên, module sẽ gởi “OK/r” ra chân DOUT. Khi đã vào chế độ Command mode, bộ timer sẽ khởi động (CT), và module có thể nhận AT command mode ở chân DIN.
Để gởi AT Command: để gởi 1 AT command và thông số thì ta thực hiện theo