Tài liệu thực hành IoT cchi tiết 7 buổi Học viện công nghệ bưu chính Viễn thông Tài liệu thực hành IoT cchi tiết 7 buổi Học viện công nghệ bưu chính Viễn thông Tài liệu thực hành IoT cchi tiết 7 buổi Học viện công nghệ bưu chính Viễn thông
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Posts and Telecommunications Institute of Technology
openlab@gmail.com
TRANG CHỦ LỚP THIẾT BỊ LỚP MẠNG LỚP ỨNG DỤNG DASHBOARD BrokerMQTT REPORT
BUỔI 1 : THỰC HÀNH LẬP TRÌNH CƠ BẢN VI ĐIỀU KHIỂN
Hướng dẫn tải và cài đặt phần mềm Arduino IDE
Bước 1: Truy cập vào địa chỉ: https://www.arduino.cc/en/software
Bước 2: Chọn 1 trong tất cả các phiên bản đã cho
Danh sách video Vào làm bài
Trang 2Bước 3: Chọn “Just dowload” để tải
về
Bước 4: Sau khi tải về, cho chạy file mới tải
Bước 5: Cho nơi cài đặt chương trình Arduino IDE xong ấn “Install”
Bước 6: Sau khi đã cài đặt xong phần mềm sẽ yêu cầu Cài một số Driver để nạp chương trình cho viđiều khiển, bạn chỉ cần ấn Install tất cả Driver phần mềm đề nghị
Trang 3I.2: Viết và nạp một chương trình cho Arduino Uno
Giao diện Arduino IDE khi mới
khởi động
Các chức năng nút lệnh trên Arduino:
Biên dịch chương trình đang soạn thảo
để kiểm tra các lỗi lập trìnhBiên Dịch và upload chương trình đang
soạn thảo
Gỡ lỗi chương trình đang soạn thảoBoard đang được chọn để nạp chương
trình vàoHiển thị đồ thị các đầu ra giữa máy tính
và Board ArduinoHiển thị các dữ liệu được gửi và nhận
dữ liệu giữa máy tính và board ArduinoSoạn một chương trình đơn giản: Hiển thị chữ “Hello World” ra Serial Monitor:
Chọn Cổng COM và Board đang sử dụng (Arduino UNO):
Trang 4Nhấn Upload để nạp, màn hình báo Done uploading là hoàn thành:
I.3: Giới thiệu cơ bản về Arduino
Uno
Arduino Uno là một vi điều khiển dựa trên ATmega328P Nó có 14 chân đầu vào/đầu ra kỹ thuật số (trong đó 6 chân
có thể được sử dụng làm đầu ra PWM), 6 đầu vào tương tự, tinh thể thạch anh 16 MHz, kết nối USB, giắc cắmnguồn, header ICSP và nút reset Mạch chứa mọi thứ cần thiết để hỗ trợ vi điều khiển, chỉ cần kết nối với máy tínhbằng cáp USB hoặc cấp nguồn bằng bộ chuyển đổi AC-to-DC hoặc qua chân nguồn để bắt đầu
• Sơ đồ chân Arduino Uno:
Chức năng các chân:
• VIN: dùng để cung cấp nguồn khi không dùng USB hoặc các nguồn khác, điện áp 7-12VDC
• 5V: Chân này xuất ra nguồn 5V
• 3V3: Nguồn cung cấp 3.3V (dòng điện trên chân này tối đa là 50mA)
• GND: Là chân mang điện cực âm trên board
• IOREF: chân này dùng để cung cấp tham chiếu điện áp mà bộ vi điều khiển hoạt động
• Reset: dùng để kết nối với nút reset ra bên ngoài
Trang 5Trên Board Arduino Uno có 14 chân Digital được sử dụng để làm chân đầu vào và đầu ra, chúng sử dụng các hàmpinMode(), digitalWrite(), digitalRead() Điện áp trên mỗi chân là 5V, dòng trên mỗi chân là 20mA và bên trong cóđiện trở kéo lên là 20-50 ohm Dòng tối đa trên mỗi chân I/O không vượt quá 40mA để tránh trường hợp gây hỏngboard mạch Uno có 6 chân đầu vào Analog từ A0 đến A5, mỗi chân cung cấp 10 bit độ phân giải (tức là 1024 giá trịkhác nhau).
• Serial: chân 0 (RX) và 1 (TX): Được sử dụng để nhận dữ liệu (RX) và truyền dữ liệu (TX) TTL
• Ngắt ngoài: chân 2 và 3
• PWM (điều chế độ rộng xung): chân 3, 5, 6, 9 và 11 cung cấp đầu ra xung PWM với độ phân giải 8 bit bằnghàm analogWrite ()
• SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Các chân này hỗ trợ giao tiếp SPI bằng thư viện SPI
• TWI/I2C: A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác
• AREF: điện áp tham chiếu cho các đầu vào tương tự
Nội dung 1 Lập trình cho vi điều khiển hiển thị dòng chữ lên màn hình LCD Màn hình LCD 16x2:
- LCD 16×2 có 16 chân trong đó 8 chân dữ liệu (D0 – D7) và 3 chân điều khiển (RS, RW, EN)
- chân còn lại dùng để cấp nguồn và đèn nền cho LCD 16×2
- Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu
- Chúng còn giúp ta cấu hình ở chế độ đọc hoặc ghi
Thông số kĩ thuật:
- Điện áp hoạt động là 5 V
- Địa chỉ I2C: 0x27 (có thể thay đổi theo đơn hàng của nsx ví dụ như: 0x3F )
- Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780)
- Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít điện năng hơn
- Có thể được điều khiển với 6 dây tín hiệu
• Module I2C Arduino:
- LCD có quá nhiều nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều chân trên vi điềukhiển Do đó Module I2C LCD ra đời để giải quyết vấn đề này Thay vì phải mất 6 chân vi điều khiển để kết nối vớiLCD 16×2 (RS, EN, D7, D6, D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối
• Sơ đồ đấu nối:
Trang 6• Code tham khảo:
- Thư viện cho LCD: “LiquidCrystal I2C ” của Frank de Brabander
Link tham khảo có code mẫu:
lcd init () ; // Khởi động màn hình lCD lcd backlight () ; // Bật đèn nền LCD
lcd setCursor ( 0 , 0 ) ; //Đưa con trỏ vị trí tới hàng 1 cột 1, nếu là (1,0) thì là hàng 1 cột thứ 2
lcd print ( "Hello, world!" ) ; // In ra màn hình LCD lcd setCursor ( 0 , 1 ) ; // Đưa con trỏ tới vị trí hàng 1 cột 2 lcd print ( "IoT LAB" ) ; // In ra màn hình LCD
}
void loop () {
Trang 7- Điện áp: Mỗi đèn led đều có một mức điện áp đầu vào nhất định (led 5mm dao động 1.9 – 3.2 Vol), nếu cung cấpkhông đủ đèn sẽ không phát sáng hoặc cung cấp nguồn lớn hơn thì cần phải sử dụng trở để giảm điện thế vào led.
Nếu bạn mắc nhiều đèn led nối tiếp, song song thì cần phải tính toán mức điện áp, dòng điện cung cấp cho tất cả cácled
- Dòng điện: Nếu bạn cung cấp dòng điện vượt qua ngưỡng cho phép, tương đương với việc làm gia tăng nhiệt độ vàlàm giảm tuổi thọ của led Dòng điện phù hợp với led 5mm thường ở mức 20mA, tối đa có thể là 30mA, chúng takiểm soát dòng điện bằng cách mắc một điện trở nối tiếp với đèn led,nó giúp dòng điện của led luôn ở mức cho phép
• Sơ đồ đấu nối:
void loop () { digitalWrite ( red,HIGH ) ; // Chân red lên mức Cao hay Bật Đèn Led delay ( 1000 ) ; // Đèn sáng tầm 1 giây
Trang 8digitalWrite ( red,LOW ) ; // Chân red xuống mức Thấp hay Tắt Đèn Led digitalWrite ( green,HIGH ) ; // Chân green lên mức Cao hay Bật Đèn Led delay ( 1000 ) ; // Đèn sáng tầm 1 giây
digitalWrite ( green,LOW ) ; // Chân green xuống mức Thấp hay Tắt Đèn Led digitalWrite ( blue,HIGH ) ; // Chân blue lên mức Cao hay Bật Đèn Led delay ( 1000 ) ; // Đèn sáng tầm 1 giây
digitalWrite ( blue,LOW ) ; // Chân blue xuống mức Thấp hay Tắt Đèn Led }
• Nhiệt độ hoạt động 0 ~ 70oC
• Đầu nối ra 7 chân
• Kích thước bàn phím 65 x 64mm
Sơ đồ chân:
• Sơ đồ đấu nối:
Trang 9const byte ROWS = 4 ; // 4 hàng
const byte COLS = 3 ; // 3 cột
String arr [ 8 ] = {} ; String password [ 8 ] = { "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" } ;
int place = 0 ; int input = 6 ; bool value = true ;
char keys [ROWS][COLS] = { { '1','2','3' } ,
{ '4','5','6' } , { '7','8','9' } , { '*','0','#' } } ;
LiquidCrystal_I2C lcd ( 0x 27 , 16 , 2 ) ; // Khai báo địa chỉ của LCD gồm 16 cột, 2 dòng
byte rowPins [ROWS] = { 8 , 3 , 4 , 6 } ; // nối hàng của keypad byte colPins [COLS] = { 7 , 9 , 5 } ; // nối cột keypad Keypad keypad = Keypad ( makeKeymap ( keys ) , rowPins, colPins, ROWS, COLS ) ;
void setup (){
lcd init () ; // Khởi động màn hình lCD lcd backlight () ; // Bật đèn nền LCD
lcd setCursor ( 0 , 0 ) ; //Đưa con trỏ vị trí tới hàng 1 cột 1, nếu là (1,0) thì lcd print ( "pass: " ) ;
lcd setCursor ( 0 , 1 ) ; lcd print ( "status: " ) ; Serial begin ( 9600 ) ; // khởi tạo serial }
Trang 10arr [place] = key;
place++;
input++;
}
if ( place == 8 ) {
for ( int i = 0 ;i< 8 ;i++ ) {
if ( arr [i] != password [i] ) {
value = false ; break ;
} }
if ( value == true ) {
lcd setCursor ( 0 , 1 ) ; lcd print ( " Welcome! " ) ; }
else
{ place = 0 ; value = true ; lcd setCursor ( 8 , 1 ) ; lcd print ( "Wrong!" ) ; input = 6 ;
lcd setCursor ( input, 0 ) ; lcd print ( " " ) ; delay ( 1000 ) ;
lcd setCursor ( 8 , 1 ) ; lcd print ( " " ) ; }
} }
Kết quả:
Trang 11Add your comments here
Submit comment
Trang 12HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Posts and Telecommunications Institute of Technology
openlab@gmail.com
TRANG CHỦ LỚP THIẾT BỊ LỚP MẠNG LỚP ỨNG DỤNG DASHBOARD BrokerMQTT REPORT
BUỔI 2: THỰC HÀNH GIAO TIẾP CẢM BIẾN-VI ĐIỀU
chính xác mà không phải qua bất kỳ tính toán nào
- Cảm biến DHT11 được tích hợp trong một mạch duy nhất Chỉ cần nối dây nguồn (VCC), dây đất (GND) và dây tín
hiệu (Data, Signal) là xong
Thông số kĩ thuật của DHT11:
Trang 13- Màn hình LCD 16x2 giao tiếp I2C
Sơ đồ đấu nối:
Code tham khảo :
- Thư viện DHT11: “DHT sensor library” của Adafruit, link tham khảo code hoặc có thể tải qua:
https://github.com/adafruit/DHT-sensor-library
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd ( 0x 27 , 16 , 2 ) ;
#include "DHT.h" //khai báo thư viện DHT
const int DHTPIN = 7 ; //khai báo chân dữ liệu DHT
const int DHTTYPE = DHT22; //khai báo kiểu DHT, có 3 loại DHT11, DHT21, DHT22 tùykết quả có thể thay loại
DHT dht ( DHTPIN, DHTTYPE ) ;
void setup () { Serial begin ( 9600 ) ; dht begin () ; // Khởi động cảm biến
lcd init () ; // Khởi tạo LCD
lcd backlight () ; // Bật đèn LCD
}
void loop () { float h = dht readHumidity () ; //Đọc độ ẩm
float t = dht readTemperature () ; //Đọc nhiệt độ
lcd setCursor ( 0 , 0 ) ; // Đặt con trỏ hàng 1 cột 1
lcd print ( "Do Am:" ) ; // In ra chữ Độ ẩm
lcd print ( h ) ; // In ra giá trị Độ ẩm
lcd setCursor ( 0 , 1 ) ; // Đặt con trỏ hàng 2 cột 1
lcd print ( "Nhiet Do:" ) ; // In ra chữ Nhiệt độ
lcd print ( t ) ; // In ra giá trị Nhiệ độ
delay ( 1000 ) ; //Đợi 1 giây
Trang 14Kết quả :
Nội dung 2 Thực hành cho vi điều khiển điều khiển bóng đèn qua relay Relay (Rơ- le)
- Relay là một thiết bị điện tử dùng để điều khiển mạch điện bằng cách sử dụng một tín hiệu điều khiển nhỏ
Nó hoạt động dựa trên nguyên lý của cuộn dây điện dẫn điện và cơ cấu chuyển mạch
(NC) và trạng thái thường mở (NO) Khi một tín hiệu điều khiển được đưa vào cuộn dây điện, relay sẽ chuyển từ
trạng thái thường mở (NO) sang trạng thái thường đóng (NC) giúp cho thiết bị được hoạt động
Nguyên lý hoạt động
- Khi một tín hiệu điều khiển được cấp vào cuộn dây điện, dòng điện chạy qua cuộn dây sẽ tạo ra một
trường từ xung quanh cuộn dây Trường từ này sẽ tác
động lên cơ cấu chuyển mạch trong relay, làm cho nó chuyển từ trạng thái thường mở (NO) sang trạng thái
thường đóng (NC)
- Khi rơ le ở trạng thái thường mở (NO) thì các tiếp điểm trong mạch relay không được kết nối với nhau
Khi tín hiệu điều khiển được cấp, relay chuyển sang trạng thái thường đóng (NC)
Trang 15Code tham khảo :
int Relay = 8 ; void setup () {pinMode ( Relay, OUTPUT ) ; digitalWrite ( Relay, HIGH ) ;}
void loop () { digitalWrite ( Relay, LOW ) ; delay ( 1000 ) ;
digitalWrite ( Relay, HIGH ) ; delay ( 1000 ) ;}
Kết quả :
Nội dung 3 Thực hành cho vi điều khiển điều khiển động cơ bước
Trang 16Động cơ bước (Step Motor)
- Động cơ bước là một loại động cơ mà ở đó bạn sẽ có thể quy định chính xác số góc quay và động cơ bước
sẽ phải quay Động cơ bước có thể quay bao nhiêu độ tùy ý và mỗi lần quay nó sẽ quay được 1 step, 1 step ở đây là
bao nhiêu còn phụ thuộc vào động cơ bước của bạn
Động cơ bước 28BYJ- 48
- Động cơ bước sử dụng trong bài toán là động cơ bước 4 pha (thực ra là 2 pha được chia ra làm 2 ở mỗi phangay tại vị trí giữa) (gồm 5 dây), 4 trong 5 dây này được kết nối với 2 cuộn dây trong động cơ và 1 dây là dây nguồnchung cho cả 2 cuộn dây Mỗi bước của động cơ quét 1 góc 5.625 độ, vậy để quay 1 vòng động cơ phải thực hiện 64
- Động cơ bước 28BYJ- 48
Sơ đồ đấu nối:
Code tham khảo :
- Thư viện cho động cơ bước: “Stepper” của chính hãng Arduino thông tin thư viện chi tiết tại link:
https://www.arduino.cc/reference/en/libraries/stepper/
Trang 17Add your comments here
void loop () {
// Quay theo chiều kim đồng hồ 1 vòng
stepper step ( stepsPerRevolution ) ; delay ( 1000 ) ; // Dừng 1 giây
// Quay ngược chiều kim đồng hồ 1 vòng
stepper step ( -stepsPerRevolution ) ;
delay ( 1000 ) ; // Dừng 1 giây
}
Kết quả :
Trang 18HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Posts and Telecommunications Institute of Technology
openlab@gmail.com
TRANG CHỦ LỚP THIẾT BỊ LỚP MẠNG LỚP ỨNG DỤNG DASHBOARD BrokerMQTT REPORT
BUỔI 3 : THỰC HÀNH CÁC GIAO THỨC TRUYỀN NHẬN DỮ
LIỆU SPI/I2C/UARTChuẩn giao tiếp SPI:
truyền thông nối tiếp thường được sử dụng trong các hệ thống nhúng để trao đổi dữ liệu tốc độ cao giữa nhiều thiết bịtrên bus Các thiết bị giao tiếp qua SPI có kiến trúc chủ-phụ với nhiều thiết bị phụ được kết nối với một thiết bịchính Ngoài ra, giao tiếp SPI hỗ trợ giao tiếp song công hoàn toàn, nghĩa là cả chủ và phụ đều có thể truyền và nhận
dữ liệu đồng th ời
- Không giống như các giao thức truyền thông khác như UART hay I2C, SPI không có giao thức được xác định trước
và không có thông số truyền thông cố định Tính linh hoạt này làm cho SPI trở nên lý tưởng cho các ứng dụng truyền
dữ liệu yêu cầu truyền dữ liệu theo thời gian thực hoặc băng thông cao
Chuẩn giao tiếp I2C :
Danh sách video Vào làm bài
Trang 19- I2C (viết tắt của Inter-Integrated Circuit), còn được gọi là I2C hoặc IIC, là một bus truyền thông nối tiếp đồng bộ,
đa chủ/đa nô lệ Nó là bus nối tiếp hai dây hai chiều sử dụng dây đồng hồ nối tiếp (SCL) và dây dữ liệu nối tiếp(SDA) để gửi và quản lý dữ liệu từng bit giữa nhiều thiết bị Với I2C, nhiều nô lệ có thể được kết nối với một chủduy nhất (như SPI) và nhiều chủ có thể điều khiển một hoặc nhiều nô lệ
- I2C mang lại khả năng mở rộng và tính linh hoạt cao trong việc kết nối nhiều thiết bị Tuy nhiên, nó có một vàinhược điểm Nó hoạt động ở tốc độ chậm hơn so với SPI, đồng hồ và đường dữ liệu cần có điện trở kéo lên I2Ccũng liên quan đến việc xử lý lỗi và logic phức tạp hơn cũng như các vấn đề tiềm ẩn như xung đột bus và nhiễu
• Chuẩn giao tiếp UART :
- UART hay còn gọi là bộ thu/phát không đồng bộ phổ quát là một trong những giao thức nối tiếp sớm nhất và đơngiản nhất để trao đổi dữ liệu nối tiếp giữa hai thiết bị Giao thức truyền thông không đồng bộ chỉ sử dụng hai dây, đó
là đường truyền (TX) và đường nhận (RX), để truyền và nhận dữ liệu
- Các thiết bị được kết nối qua UART giao tiếp bằng cách gửi các bit ở tốc độ truyền được xác định trước, thườngbao gồm các bit bắt đầu, dừng và các bit chẵn lẻ tùy chọn Các thiết bị UART không sử dụng tín hiệu đồng hồ dùngchung Thay vào đó, họ phải thống nhất về tốc độ truyền và định dạng dữ liệu
- Nhiều nhà phát triển sử dụng UART để kết nối không dây và xử lý máy tính vì tính dễ cài đặt, giao diện thân thiệnvới người dùng và giá cả phải chăng
Receiver UART là tên gọi để chỉ một bộ phận phần cứng dùng để chuyển đổi thông tin từ thanh ghi chứa nội dung cần traođổi ra bên ngoài (thông thường có 8 bits) thành 2 dây tín hiệu Serial, phục vụ cho chuẩn giao tiếp Serial chứ khôngphải là tên gọi của một chuẩn giao tiếp
Trang 20• Baudrate:
- V iệc truyền 1 bit data sau mỗi 1 micro giây, ta nhận thấy rằng để việc giao tiếp diễn ra thành công, giữa 2 thiết bịcần có những thống nhất rõ ràng về khoảng thời gian truyền cho mỗi bit dữ liệu, hay nói cách khác tốc độ truyền cầnphải được thống nhất với nhau Tốc độ này được gọi là tốc độ baud (baudrate), được định nghĩa là số bit truyền trongmỗi giây Ví dụ, nếu tốc độ baud được sử dụng là 9600, có nghĩa thời gian truyền cho 1 bit là 1/9600 = 104.167micro giây
• Khung truyền (frame):
- Bên cạnh tốc độ baud, khung truyền đối với chuẩn giao tiếp Serial cũng hết sức quan trọng để đảm bảo việc truyềnnhận được diễn ra chính xác Khung truyền quy định về số lượng bit truyền trong mỗi lần truyền, bao gồm start bit,các bit data stop bits, ngoài ra còn có thể có parity bit (kiểm tra lỗi dữ liệu trong quá trình truyền nhận)
Hình 1: V í dụ về khung truyền, bao gồm 1 bit start, 8 bits data và cuối cùng là 1 bit
stop.
• Start bit
- Đây là bit đầu tiên được truyền vào khung truyền, có chức năng thông báo cho thiết bị nhận biết đang có một chuỗi
dữ liệu sắp truyền đến Đối với các dòng AVR nói chung và UnoX nói riêng, ở trạng thái chưa có dữ liệu (Idle)đường truyền luôn kéo lên mức cao Khi có dữ liệu mới, đường truyền được kéo xuống mức thấp, do đó start bit sẽđược quy định là mức 0
• Dữ liệu (data)
- Dữ liệu cần truyền thông thường gồm 8 bits, tuy nhiên chúng ta hoàn toàn có thể tùy chỉnh số lượng bit data chomột gói tin, có thể là 5, 6, 7, 9… Trong quá trình truyền, bit có trọng số thấp nhất (LSB) sẽ được truyền trước, vàcuối cùng sẽ là bit có trọng số cao nhất (MSB)
• Stop bits
- Stop bits là một hoặc nhiều bit có chức năng thông báo cho thiết bị nhận biết rằng một gói dữ liệu đã được gởixong Đây là bit quan trọng, cần phải có trong một khung truyền Giá trị của các stop bit luôn bằng mức Idle (mứcnghỉ) và ngược với giá trị của start bit Đối với các dòng vi điều khiển AVR các bit kết thúc này luôn là mức cao
• Sử dụng chuẩn giao tiếp Serial với boad Arduino Uno
- Giao tiếp Serial giữa 2 thiết bị với nhau thông thường sẽ có 2 dây tín hiệu, đó là TX (Transmitter) có chức năngtruyền tải dữ liệu và RX (Receiver) có chức năng thu nhận dữ liệu 2 dây tín hiệu này được kết nối chéo nhau giữa 2thiết bị Cụ thể, TX của thiết bị 1 kết nối với RX của thiết bị 2 và RX của thiết bị 1 kết nối với TX của thiết bị 2
Điều đặc biệt của Serial đó là quá trình truyền và quá trình nhận dữ liệu được diễn ra hoàn toàn độc lập với nhau
Serial Đối với board Arduino Uno, cổng Serial được ra chân tại vị trí chân số 1 và chân số 0 trên board), đây đượcgọi là Hardware Serial, tức là giao tiếp Serial dựa trên phần cứng (có sử dụng UART) Ngoài ra, đối với các vi điềukhiển không hỗ trợ UART hoặc trong trường hợp muốn mở rộng nhiều cổng Serial để giao tiếp với nhiều thiết bị có
hỗ trợ giao ti ếp Serial, ta hoàn toàn có thể giả lập giao tiếp Serial bằng thư viện cho Arduino có tên làSoftwareSerial,
Trang 211 Nội dung 1 Thực hành cho vi điều khiển Arduino truyền dữ liệu nhiệt độ độ ẩm lên máy tính thông qua giao thức SPI/I2C
- Việc máy tính lắng nghe dữ liệu từ board Arduino Uno thông thường được sử dụng khi debug chương trình, qua đóchúng ta có thể quan sát và kiểm tra kết quả trả về từ board trong khi hoạt động thông qua cửa sổ Serial Monitor Một
số hàm cần lưu ý khi sử dụng chức năng này:
- message ở đây là thông tin mà Arduino muốn truyền qua Serial Thông tin này có thể là các kiểu dữ liệu như String,int, byte, char, double…
- Serial.begin(baudrate) có chức năng khai báo sử dụng Serial với tốc độ baud là baudrate
- Serial.print(message) có chức năng truyền Serial với nôị dung là message mà không có kí tự kết thúc dòng Ta sửdụng hàm này khi cần ghi dữ liệu lên Serial Monitor trên cùng 1 dòng
- Serial.println(message) có chức năng truyền Serial với nôị dung là message có kí tự kết thúc dòng Ta sử dụng hàmnày khi cần ghi cần kết thúc dòng nội dung ghi trên Serial Monitor
Chuẩn bị phần cứng:
- Dây cáp nối arduino và máy tính
Sơ đồ đấu nối:
- Dây cáp nối arduino và máy tính
- A rduino và DHT11 : (xem lại N ội dung 1 Buổi 2 )
Trang 22#include "DHT.h" //khai báo thư viện DHT
const int DHTPIN = 7 ; //khai báo chân dữ liệu DHT
const int DHTTYPE = DHT22; //khai báo kiểu DHT, có 3 loại DHT11, DHT21, DHT22 tùy kết quả có thể thay loại DHT dht ( DHTPIN, DHTTYPE ) ;
void setup () { dht begin () ; // Khởi động cảm biến.
Serial begin ( 9600 ) ; }
void loop () { float h = dht readHumidity () ; //Đọc độ ẩm float t = dht readTemperature () ; //Đọc nhiệt độ delay ( 1000 ) ; //Đợi 1 giây
Serial print ( "Nhiet do: " ) ; Serial println ( t ) ;
Serial print ( "Do am: " ) ; Serial println ( h ) ; }
Kết quả :
Code tham khảo (MQ02) :
void setup () { // put your setup code here, to run once:
Serial begin ( 9600 ) ; }
void loop () { // put your main code here, to run repeatedly:
int value = analogRead ( A 1 ) ; // Đọc giá trị analog từ chân A 1 int threshold = 500 ; // Xet ngưỡng cảnh báo
Serial print ( "AnalogRead: " ) ; Serial println ( value ) ;
if ( value < 500 ) // Nếu vượt quá ngưỡng Serial println ( "An toan" ) ;
else
Serial println ( "Bao Dong" ) ; }
Kết Quả:
Trang 23Nội dung 2 Thực hành điều khiển bóng đèn bằng giao thức UART giữa máy tính và Arduino Chuẩn bị phần cứng:
- Bóng đèn + relay
- Board Arduino
- Dây cáp nối arduino và máy tính
• Sơ đồ đấu nối
o Dây cáp nối arduino và máy tính
o A rduino -relay-bóng đèn : (xem lại Nội dung 2 Buổi 2)
void loop () { // put your main code here, to run repeatedly:
if ( Serial available () > 0 ){
String str = Serial readStringUntil ( ' \n ' ) ; // Khởi tạo chuỗi để nó lưu từng byte data kí tự, 1 ký
tự = 1 byte
if ( str == "on" ) digitalWrite ( 8 ,HIGH ) ; // Nếu chuỗi mình gửi nó nhận là on thì đèn sáng
if ( str == "off" ) digitalWrite ( 8 ,LOW ) ; // Nếu chuỗi mình gửi nó nhận là off thì đèn tắt }
}
Kết quả:
Trang 24• Lưu ý: Khi dùng giao thức UART từ các chân Tx, Rx trước khi nạp code thì hãy ngắt chân Tx, Rx Sau khi nạp xong thì mới đưa vào
• Kết quả: Bật Serial Monitor hoặc Ctrl + Shift + M sau đó gửi thử tin nhắn vào nó trông sẽ như này:
- Nhập thử on hoặc off sau đó Enter để xem trạng thái đèn Led có sáng hoặc tắt theo ý mình muốn gửi yêu cầu
không
\
Nội dung 3 Thực hành truyền dữ liệu giữa hai Arduino bằng giao thức UART : Thực hành truyền dữ liệu giữa hai Arduino sử dụng giao thức UART, trong đó một Arduino lấy dữ liệu
từ cảm biến, truyền tới Arduino thứ hai để hiển thị lên LCD.
- Để hoạt động được, 2 board này cần được cấp nguồn, nguồn này có thể chung hoặc riêng nhưng GND của cả haiboard cần được kết nối với nhau
• Cách truyền nhận dữ liệu Qua Json:
- Định nghĩa về Json: JSON là một kiểu định dạng dữ liệu trong đó sử dụng văn bản thuần tuý, định dạng JSON sử
dụng các cặp key - value để lưu dữ liệu sử dụng.
- Chuỗi Json đơn giản gồm 2 phần đó là key và value :
1 Chuỗi JSON được bao lại bởi dấu ngoặc nhọn {}
2 Một Chuỗi Json gồm 2 phần đó là key và value
o Key là từ khóa để tìm kiếm và trả về kết quả là value
o Key (TITLE)
o Value (Trợ Lý) Value phải đặt trong cặp dấu goặc kép “” khi khai báo
3 Nếu có nhiều dữ liệu (nhiều cặp key => value) thì ta dùng dấu phẩy (,) để ngăn cách
4 Các key của JSON nên đặt chữ cái không dấu hoặc số, dấu _ và không có khoảng trắng., ký tự đầu tiên không nênđặt là số
Ví dụ:
{“Nhiet_Do”:24.5, “Do_Am”:63, “Gas”: 205}
• Thư viện Cần chuẩn bị: “ArduinoJson” tác giả: Benoit Blachon
Trang 25- Khai báo thư viện ArduinoJson cho Arduino Ide: #include <ArduinoJson.h>
- StaticJsonDocument để khai báo Tên và nhóm bộ nhớ chứa tài liệu JsonStaticJsonDocument<100> doc;
- doc[“ten_doi_tuong”] = gia_tri: Gắn giá trị vào JsonDocument
- “serializeJson(doc,Serial)” : hàm này để in ra tài liệu Json trong Serial Monitor
Chuẩn bị phần cứng:
- Board Arduino 1 + 2
- Dây cáp nối arduino và máy tính
• Sơ đồ đấu nối
o A rduino 1 -DHT : (xem lại Nội dung 1 Buổi 3)
o Đấu nối 2 arduino
Arduino Uno 1 Arduino Uno 2
Trang 26#include <ArduinoJson.h>
#include <DHT.h>
#define DHTPIN 8 // Pin Chân Digtal Uno để giao tiếp DHT
#define DHTTYPE DHT22 //Loại DHT22 trên IoT Lab dùng
DHT dht ( DHTPIN, DHTTYPE ) ;
// Tạo một đối tượng JsonDocument có dung lượng 100 byte StaticJsonDocument< 100 > doc;
void setup () { // put your setup code here, to run once:
Serial begin ( 9600 ) ; dht begin () ;
}
void loop () { // put your main code here, to run repeatedly:
float humidity = dht readHumidity () ; float temperature = dht readTemperature () ;
// Gán giá trị nhiệt độ và độ ẩm vào đối tượng JsonDocument doc [ "temperature" ] = temperature;
doc [ "humidity" ] = humidity;
serializeJson ( doc, Serial ) ; Serial println () ;
delay ( 1000 ) ; }
Code Nhận Dữ liệu :
#include <ArduinoJson.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd ( 0x 27 , 16 , 2 ) ; StaticJsonDocument< 100 > doc;
void setup () { Serial begin ( 9600 ) ; lcd init () ;
lcd backlight () ; }
void loop () { while ( Serial available () > 0 ){
// Đọc Dữ liệu kênh truyền vừa gửi tới String data = Serial readStringUntil ( ' \n ' ) ; DeserializationError error = deserializeJson ( doc, data ) ; // Lấy giá trị nhiệt độ và độ ẩm từ đối tượng JsonDocument float temperature = doc [ "temperature" ];
float humidity = doc [ "humidity" ];
// In các giá trị ra màn hình nối tiếp lcd setCursor ( 0 , 0 ) ;
lcd print ( "Nhiet Do: " ) ; lcd print ( temperature ) ; lcd setCursor ( 0 , 1 ) ; lcd print ( "Do Am: " ) ; lcd print ( humidity ) ;
Trang 27Add your comments here
Submit comment
delay ( 1000 ) ; }
}
Kết quả:
• Lưu ý: Khi nạp code cho 2 con Arduino hãy ngắt Chân Tx(0) và Rx(1) để nạp Sau khinạp xong thì cắm lại vào
Kết Quả : Bật “Serial Monitor” hoặc Ctrl + Shift + M
1 Tài liệu Tham khảo:
1 https://www.facebook.com/photo/?fbid=249915710004369&set=a.143478370648104 (So sánh các giaothức)
2 https://trolyhoctap.blogspot.com/2020/03/Huong-Dan-Tu-Hoc-Esp8266-Su-dung-Arduino-Json-6.html
(Cách dùng Json cho Arduino)
3 https://blog.unicloud.com.vn/arduino/arduino-usb-serial/ (Truyền thông nối tiếp UART trên Board Arduino
Trang 28HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Posts and Telecommunications Institute of Technology
openlab@gmail.com
TRANG CHỦ LỚP THIẾT BỊ LỚP MẠNG LỚP ỨNG DỤNG DASHBOARD BrokerMQTT REPORT
BUỔI 4 : THỰC HÀNH TRUYỀN NHẬN DỮ LIỆU
BẰNG ZIGBEETổng quan về Zigbee:
Mạng Zigbee là một công nghệ không dây đã được ra đời cách đây hơn một thập kỷ Nó được xây dựng dựatrên tiêu chuẩn 802.15.4 của IEEE Là một giải pháp thay thế cho mạng wifi và bluetooth trên một số ứng dụng
Trong đó sẽ bao gồm các thiết bị sử dụng ít năng lượng Chẳng hạn như bóng đèn thông minh và công tắc thôngminh có thể kết nối thông qua mạng Zigbee nếu như chúng được thiết kế sử dụng cùng 1 chuẩn kết nối.
Công nghệ Zigbee không có tập trung vào các điểm kết nối quá nhiều Zigbee sẽ hoạt động tốt khi truyền dữliệu giữa hai thiết bị có công suất cao khác nhau trong phạm vi ngắn Trong thực thế, nếu dùng quá nhiều các thiết bị
sử dụng mạng Zigbee trong hệ thống smarthome, vẫn sẽ có thể xảy ra trường hợp một số thiết bị không thể kết nối
Bởi vì có quá nhiều thiết bị muốn kết nối để tương tác với bộ điều khiển trung tâm Do đó, bạn cần sử dụng các thiết
bị có kết nối không dây để giúp tối giản hệ thống
Trang 29Application Layer: chứa các ứng dụng chạy trong 1 node mạng Cung cấp cho thiết bị các tính năng của nó – ví
dụ như là ứng dụng chuyển đổi input thành tín hiệu số, chuyển đổi tín hiệu số sang output 1 Node có thể chạy nhiềuứng dụng – VD: cảm biến đo môi trường có thể bao gồm các sensor: temp, hump,ats,
Network Layer: Cung cấp các chức năng của Zigbee PRO và giao diện ứng dụng đến IEEE 802.15.4 Tầng nàyliên quan đến cấu trúc mạng và multi-hop routing
Data Link Layer: Được cung cấp bởi chuẩn IEEE 802.15.4 và chịu trách nhiệm trong việc quản lý địa chỉ - ví
dụ cho 1 data được truyền ra ngoài, nó sẽ quyết định xem địa chỉ của data sẽ được đi tới, hoặc như 1 data được nhận
về, nó sẽ phải biết được data được truyền từ đâu Nó cũng chịu trách nhiệm lắp ráp các gói dữ liệu (data packets)hoặc khung (frames) để truyền hoặc phân tách các khung nhận được
Physical Layer: Được cung cấp bởi chuẩn IEEE 802.15.4, liên quan tới giao diện truyền dẫn vật lý (sử dụngradio), trao đổi bit dữ liệu với lớp Data link
End-hệ giữa các node phả i được tuân thủ theo các luật:
- Coordinator và Router có thể có children, và do đó nó có thể là parent
- Router có thể làm được cả parent lẫn child
- End Devices không có children
Luật giao tiếp trong mesh-network:
- End Device chỉ có thể giao tiếp trực tiếp với parent của nó – Router có thể giao tiếp trực tiếp với children , parentcủa nó và với các Router,Coordinator trong mạng
- Co ordinator có thể giao tiếp trực tiếp với children của nó và với các Router khác trong mạng
Neighboor Table:
Trang 30Neighbour table trong các Routing node (Router hoặc Co-ordinator)sẽ giữ thông tin về các node giao tiếp trực tiếpvới nó:
- Phần đầu tiên trong bản sẽ chứa các thông tin về các node làm parent của nó
- Phần tiếp theo trong bảng giữ thông tin về các thiết bị con củ a nó
- Phần cuối cùng của bảng giữ thông tin về các node có thể giao tiếp trực tiếp với nó ( không phải parent cũng kophải child) Neighbour table size mặc định được để là 26 – đây là độ rộng size tối thiểu được yêu cầu bởi Zigbee-Compliant Platform Size có thể dễ dàng thay đổi thông qua Active Neighbour Table Size, nhưng khi tăng table-sizethì sẽ sử dụng nhiều RAM hơn Hơn nữa, nếu tăng Neighbour size > 26 thì packet sẽ bị dài ra ( vì 1 packet có thểchứa tố i đa là 26 neighbour), do đó, bản tin sẽ được truyền 2 lần cho những packet này, 2 phần đầu của bảngneighbor, dành cho các thiết bị parent và child, chúng được lưu ở 1 bảng phụ trong EEPROM, bảng phụ này khôngđược lớn hơn 2/3 bảng neighbor Bảng phụ này chứa các mục con, kích thước của bảng phụ xác định số lượngchildren mà thiết bị đượ c phép có Số lượng children là nhỏ hơn 1 so với độ rộng của bảng phụ
Network Identify
Hệ thống mạng zigbee yêu cầu có 1 tên nhận dạng độc lập Điều này cho phép có thể tồn tại nhiều mạng Zigbeecùng hoạt động trong 1 dải tần
Zigbee sử dụng 2 loại nhận diện:
- PAN ID: sử dụng giá trị 16-bit, sử dụng trong giao tiếp trong mạng để các node biết được chúng đang ở trong cùng
1 mạng Giá trị PAN ID được chọn random bởi Co-ordinator khi khởi tạo network Khi các nodes các join mạng, nó
sẽ học giá trị PAN-ID và sử dụng nó để giao tiếp trong mạng
- Extended PAN ID: sử dụng giá trị 64-bit, sử dụng để tạo mạng và sau đó có thể sửa đổi mạng – nếu cần Giá trị này
có thể được cài đặt trước bởi người dùng chạy trong Co-ordinator Hoặc thay vào đó, giá trị này có thể đặt trước là 0,khi đó Co-ordinator sẽ lựa chọn 1 địa chỉ Ex-PANID nhất định cho nó khi khởi tạo mạng điều này thì đảm bảo Ex-PANID không bị trùng so với những mạng khác
Khi Router hoặc End-device lần đầu tìm mạng để xin vào, nó sẽ sử dụng Ex-PANID trong 2 cách:
- Nếu Ex-PANID được đặt sẵn bởi người dùng cho Router hoặc End-device, Node sẽ tự vào mạng với giá trịEx-PANID có sẵn
- Nếu Ex-PANID chưa được đặt sẵn cho Router hoặc End-device, sau khi vàomạng, nó sẽ học Ex-PANID củamạng và sẽ sử dụng nó trong việc rejoin network nếu trong 1 vài trường hợp nó không thể liên kết được với mạng đó(rơi vào trạng thái orphaned) 5 Network Creation
Khơi tạo mạng Zigbee
Quá trình tạo mạng củ a (Co-Ordinator): Co-ordinator là node có khả tăng bắt đầu tạo 1 mạng mới Nó phải lànode đầu tiên trong mạng được hình thành, để tạo mạng, Coordinator hoạt động theo các bước:
- Set Ex -PANID và Co ordinator address: Cài đăt địa chỉ Ex-PanID cho mạng dựa theo tầng app của Coordinator (nếu giá trị trong Co ordinator được mặc định đặt là 0, nó sẽ tự tìm và cài đặt cho mình 1 địa chỉ 64-bitriêng) Sau đó, nó sẽ tự động cấu hình địa chỉ mạng cho nó là 0x0000
- Select radio channel: Coordinator thực hiện việc quét năng lượng (Energy Detected Scan) để tìm ra 1 kênhphù hợp
Set PAN ID:Sau khi radio channel được chọn, Co-ordinator sẽ lựa chọn 1địa chỉ 16-bit cho PAN ID network
Để làm được điều này, nó sẽ phải nghe các luồng mạng khác đang tồn tại và xác định các địa chỉ PAN ID của cácluồng mạng này Và để t ránh xung đột xảy ra, Co-or sẽ chọn 1 định danh PAN-ID không sử dụng những định danhđang tồn tại
Receive join requests from other devices : Bây giờ , Co ordinator có thể nhận yêu cầu xin gia nhập mạng từRouter và End devices
6 Tham gia mạng (Routers And End-Devices)Search for network1 node mới đầu tiên sẽ quét các kênh trong dải tần liên quan để tìm mạng Có thể có nhiềumạng Zigbee đang hoạt động,đôi khi có thể nhiều mạng trong cùng 1 kênh Nhưng việclựa chọn mạng có thể đượcđịnh trước do người dùng bằng việc định nghĩa trước địa chỉ Ex-PanID cho node đó Nếu không nó sẽ lựa chọnnhững mạng có năng lượng lớn và đang cho phép gia nhập mạng
Select Parent : Node sẽ lựa chọn parent cho chính nó bằng việc nghe hoạt động trong mạng Parent được nodelựa chọn sẽ là những parent có giá trị depth nhỏ nhất trong mạ ng, nghĩa là parent đó đang có đường route gần Co-ornhất
Trang 31Request joining: Node sau đó sẽ gửi message cho parent của nó, yêu cầu xin gia nhập mạngReceive Response: Sau khi gửi yêu cầu gia nhập, node sẽ đợi phản hồi từ parent của nó, để xác định node cóphải là thiết bị được phép vào mạng hay không và parent có đang permit join hay không Thì parent sẽ hỏi Trust-Center (trong trường hợp parent không phải là TC)
- Nếu các tiêu chí trên được thỏa mãn thì parent sẽ cho phép node tham gia mạng và thêm vào bảng child củanó
- Trong trường hợp parent không chấp nhận node là child, 1 tin nhắn hủy bỏ sẽ được gửi đến node, lúc đó node
sẽ phải đi tìm 1 parent khác (hoặc 1 mạng khác)
1 Nội dung 1 Thực hành cấu hình mạng Zigbee
Mục tiêu: C ấu hình một mạng Zigbee bao gồm hai thành phần là 1 thiết bị Coordinator và 3 thiết bị Routers,trong đó Coordinator quản lý các thiết bị trong mạng Zigbee , và thực hiện truyền nhận dữ liệu giữa các thiết bị trongmạng Zigbee
Cấu hình thành công có thể thấy được có 3 Router với addr lần lượt là 0xF874, 0x9A91 và 0x12A8, 1Coordinator có addr là 0x0000
• Module sử dụng: Zigbee CC2530 mẫu giống hình dưới
Mô-đun không dây CC2530 ZigBee là giải pháp hệ thống trên chip (SOC) thực sự cho các ứng dụng IEEE 802.15.4, mô-đun có thể được sử dụng rộng rãi trong lĩnh vực truyền thông không dây khoảng cách ngắn, với mức tiêu thụ điện năng thấp , âm lượng nhỏ, khả năng chống nhiễu mạnh mẽ.
Trang 32Mô-đun ZigBee này dựa trên chip TI CC2530F256, nó có tất cả các tính năng của giao thức ZigBee Khác với các loại mô-đun ZigBee khác, CC2530 khởi chạy mô-đun ZigBee tự tạo, sử dụng năng lượng, người dùng không cần hiểu sự phức tạp của giao thức ZigBee, tất cả phần xử lý giao thức ZigBee, trong mô-đun ZigBee tự động, người dùng chỉ cần truyền dữ liệu thông qua cổng nối tiếp, hiện đang có trên thị trường cách đơn giản nhất để sử dụng các ứng dụng ZigBee.
- Tần sô băng thông: 2394~2507MHz
Bước 1: Cài đặt Firmware cho Zigbee
Firmware là thuật ngữ nói về loại chương trình máy tính với khả năng kiểm soát các phần cứng của thiết bịđiện tử ở mức cơ bản Hoặc, hiểu đơn giản firmware là phần mềm hỗ trợ kiểm soát phần cứng
Đầu tiên để cài Firmware cho Zigbee các bạn nên cài các file theo đường link này sau:
https://github.com/HuyPhamm/CCLoader
Ở trong link có một file ino là Ccloader.ino, truy cập vào file này Trong code Ccloader.ino thì bạn chỉ cần chủ ý
về các chân ở chỗ dòng này
K huyến nghị nên dùng board của esp32/8266 hoặc là wemos
thay vì Arduino Uno để đỡ lỗi mất Firmware
Sơ đồ chân của Zigbee CC2530:
Các bạn nối dây Zigbee và Esp theo đúng chân file Ccloader.ino trong đó chân Zigbee là P2_2 được định nghĩa
Trang 33Lưu ý: Board Esp/Wemos phải nạp sẵn cái code của file Ccloader.ino giống như các bạn nạp code cho ArduinoUno
Cách nạp code cho ESP/WeMos sau:
Bước 1: Truy cập Arduino IDE vào File rồi Preference
Bước 2: Copy đường dẫn này và Paste vào chỗ giống trong hình
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Ấn Ok xong Vào Board Manager ở góc trái xong tìm kiếm “Esp8266” và ấn Install
Vậy là xong giờ các bạn có thể nạp Ccloader.ino vào con Esp/WemosLưu ý: Trước khi nạp nhớ chọn cổng COM đúng với cổng ESP/Wemos đã , Cách xem cổng COM bạn vào
“Device Manager”
Trang 34Như trên hình mình đang dùng COM5 thông thường Esp/Wemos nó thường nhận driver là CH340
Vào Chọn Cổng COM và chọn “Select other board and port”
Nhập tên Board các bạn đang cắm nếu các bạn dùng dòng ESP8266 thì là Node MCU 1.0 hoặc 0.9 còn nếu làWeMos thì vẫn là WeMos
Vậy là xong Các bạn nạp code file Ccloader.ino với Board ESP hoặc là Wemos
Giờ các bạn vào lại file Ccloader gõ cmd vào
mục đường dẫn file
Ấn Enter nó ra cửa sổ của cmd, giờ bạn paste cái này vào:
CCLoader_x86_64.exe 10 bootloader.bin 0Trong đó “10” là cổng COM bạn đang cắm ESP/Wemos vào máy tínhHình ở dưới cửa sổ cmd mình đang paste nó là COM5 nên nó sẽ thế này
Trang 35Ấn Enter nó sẽ trông như thế này:
Lưu ý: Nhớ cắm dây ESP/Wemos với lại Zigbee khi Paste vào CMD (Cách cắm ở trang thứ 8)
Bước 2: Cấu hình Mạng cho Zigbee
Theo lý thuyết, mạng Zigbee có 3 node chính: Coordinator, Router, End-device Zigbee được thiết kế để thựchiện giao thức Mesh-network
Để chọn node mình muốn trước tiên các bạn cài đặt các phần mềm này đã:
SerialBootTool dùng để cài đặt node mạng các bạn muốn link:
https://www.waveshare.com/wiki/File:SerialBootTool_1_3_2.zip
Ấn vào cái khung đỏ để Download
File bin để cấu hình mạng link:
https://www.waveshare.com/wiki/File:Core2530-B-Serial-Firmware.7z
Cách tải cũng giống cái SerialBootTool
Giờ hãy mở SerialBootTool lên tại Image File Selection bạn chọn Select file và trỏ tới file cấu hình mạng, nhớgiải nén file zip ra để có được file bin Ví dụ mình sẽ khai báo node mạng mình định cài đặt là Coordinator vì thôngthường khi bắt đầu một mạng Zigbee thì sẽ là khai báo Coordinator
Màn hình giao diện của nó
Trang 36Còn đây là file chứa cấu hình node mạng
Sau khi các bạn chọn file bin xong thì các bạn chọn cổng COM mà các bạn cắm USB TTL vào máy tính Cácbạn có thể check cổng COM qua “Device Manager” Cổng COM của USB TTL thường dùng chip CP210x nên Portcủa nó sẽ có tên là CP210x
Cách cắm USB TTL giao tiếp với Zigbee như sau USB TTL được định là một bộ chuyển
đổi USB sang UART Nó được dùng để giao tiếp và lập trình nhiều thiết bị như Node MCU, Lora, Resbery PiCách cắm để giao tiếp với Zigbee rất bởi nó chỉ có Nguồn(VCC) và Đất (GND), 2 chân Tx, Rx Cách cắm nhưsau
Sau khi các bạn chọn cổng COM xong thì ấn Load Image để hoàn thành bước cuối
Nếu nó xuất hiện dòng chữ “Write Image” và có thanh màu xanh suốt hiện thì các bạn đang nạp đúng Còn nếukhông xuất hiện gì cả hoặc có dòng Connecting to device thì đang có vấn đề về Firmware các bạn và có thể sẽ phảilàm lại bước 1
Trang 37Sau khi các bạn đã Load Image xong thì các bạn nên kiểm tra xem Z igbee thật sự đã đúng chưa
Bước 3: Kiểm tra Zigbee đã có cài đặt được chưa
Để kiểm tra thì các bạn cài thêm phần mềm dưới đây cách cài cũng giống như cài SerialBootTool, link:
https://www.waveshare.com/wiki/File:ZBSCOMM.7z
Giải nén file Zip trong đó có file “ReadMe” bạn có thể đọc và làm theo hoặc làm theo ở dưới đây
B1: Giống như hướng dẫn đầu tiên bạn vào file ZBSCOM phiên bản EN (ngôn ngữ Anh) và chạy file “register thecontrol” bằng quyền admin
Nó sẽ ra file cửa sổ cmd và nếu nó lỗi thì sang bước tiếp theo còn nếu nó báo thành công thì coi như kết thúc vàchỉ cần vào ZBSCOMM
B2:
Copy file “MSCOM32.OCX” và Paste vào đường dẫn C:\Windows\System32 Nếu máy tính ở phiên bản bit Copy xong thì chạy lại “register the control” bằng quyền admin
32-Copy file “MSCOM32.OCX” và Paste vào đường dẫn C:\Windows\SysWOW64 Nếu máy tính ở phiên bản64-bit Copy xong thì chạy lại “register the control” bằng quyền admin
Trong trường hợp máy tính dùng phiên bản 64-bit mà copy và paste xong, chạy “register the control” bằngquyền admin mà vẫn lỗi Thì copy file MSCOM32.OCX” và paste tiếp vào đường dẫn C:\Windows\System32 Xongchạy lại “register the control” bằng quyền admin
Khi thông báo thành công thì bạn có thể vào
ZBSCOMM được rồi và giao diện của nó trông thế này
Chọn cổng COM mà bạn đã cắm USB TTL vào máy tính xong đó ấn Open Rồi ấn vào chỗ “All info” nếu cóthông tin phản hồi như địa chỉ (Address), tốc độ Baud, Kênh, PAN ID Thì có nghĩa là Zigbee có thể được sử dụng vàkết thúc nội dung 1
Trang 38Vì đang khai báo Zigbee là Coordinator nên nó
có địa chỉ đặc chưng và duy nhất là 0x0000
2 Nội dung 2: Thực hành truyền dữ liệu từ router về coordinator
Mục tiêu: T ruyền dữ liệu từ router về coordinator trong mạng Zigbee, trong đó router lấy dữ liệu nhiệt độ độ ẩm từ cảm biến DHT, và truyền về coordinator để hiển thị lên LCD tại coordinator, báo hiệu bằng RGB.
Lưu ý: Mỗi nhóm sẽ có một Kit Zigbee router đánh số từ 1-3, và cùng truyền về một coordinator chung
Sơ đồ đấu nối cho Router:
Trang 39void setup () { // put your setup code here, to run once:
Serial begin ( 38400 ) ; mySerial begin ( 38400 ) ; dht begin () ;
}
void loop () { float temp = dht readTemperature () ; float hum = dht readHumidity () ; // doc[""]
mySerial println ( "Group: " + String ( group )) ; mySerial println ( "Nhiet do: " + String ( temp )) ; mySerial println ( "Do am: " + String ( hum )) ; delay ( 5000 ) ;
}
Kết quả đạt được Khi Router nhận dữ liệu:
Nội dung 3: Thực hành truyền tín hiệu điều khiển từ coordinator xuống router
Mục tiêu: T ruyền tín hiệu điều khiển từ coordinator xuống router trong mạng Zigbee, trong đó ấn nút
ấn từ coordinator thì còi tại router sẽ kêu
Lưu ý: Mỗi nhóm sẽ có một Kit Zigbee router đánh số từ 1-3, và cùng nhận tín hiệu điều khiển từ một coordinator chung
Sơ đồ đấu nối cho Router:
Trang 40Serial begin ( 38400 ) ; mySerial begin ( 38400 ) ; pinMode ( 8 , OUTPUT ) ; }
void loop () {
if ( mySerial available ()) {
String data = mySerial readStringUntil ( ' \n ' ) ; data remove ( data length () - 1 ) ;
if ( data == "on" ) {
digitalWrite ( 8 , HIGH ) ; Serial println ( "Led on" ) ; }
if ( data == "off" ) {
digitalWrite ( 8 , LOW ) ; Serial println ( "Led off" ) ; }
} }