- Gửi mã tìm kiếm (0xff) tìm kiếm các Slave mới, khi được phản hồi sẽ cấp địa chỉ cho Slave (0x01,0x02,0x03,…). Các địa chỉ này sẽđược gọi khi Master muốn yêu cầu Slave nào làm việc.
- Thiết lập các Port của Slave kết nối với cảm biến (có thể thiết lập bằng bảng điều khiểu trên Google sheets hoặc bằng bảng điều khiển trên Master).
- Thông tin về Slave (tên Slave, loại cảm biến, số byte dữ liệu cảm biến của từng port mỗi Slave) được Master lưu trữ trên EEPROM. Khi đó, Master sẽ phân tích và tổng hợp thông tin của gói dữ liệu và gửi cho ESP8266, gồm địa chỉ Slave đã gửi, số Byte tại từng Port, Cảm biến tại từng Port. Sau khi gửi thông tin, Master sẽ gửi gói dữ liệu.
- Dữ liệu được chia nhỏ thành từng Byte riêng lẻ có chèn thêm bit kiểm tra chẳn – lẻtrước khi gửi từSlave đến Master, Master sẽ tiến hành kiểm tra lại xem gối dữ liệu chính xác hay chưa trước khi gửi lên ESP8266. Tại ESP8266 dữ liệu sẽđược ghép hoàn chỉnh như dữ liệu gốc để chuẩn bị gửi lên Website điều khiển của hệ thống là Google Sheets.
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 31 4.1.2. Bố trí vùng nhớ 4.1.3. Bảng mã lệnh và chú thích Bảng 4.2: Bảngtậplệnh điều khiển TT Tên lệnh Mã lệnh Ý nghĩa 1 timkiem 0xff Tìm kiếm Slave mới 2 Slave1 0x01 Đặt tên cho Slave1 3 Slave2 0x02 Đặt tên cho Slave2 4 Slave3 0x03 Đặt tên cho Slave3 5 batdau 0x00 Bắt đầu một tiến trình mới
6 Read_data 0xaa Yêu cầu Slave thu thập dữ liệu từ cảm biến 7 Receive_data 0xbb Yêu cầu Slave gửi dữ liệu
8 Del_P1 0xa1 Yêu cầu xóa Port giao tiếp cảm biến 1 9 Del_P2 0xa2 Yêu cầu xóa Port giao tiếp cảm biến 2 10 Del_P3 0xa3 Yêu cầu xóa Port giao tiếp cảm biến 3 11 Del_Slave 0xa5 Xóa Slave
Địa chỉ tại
EEPROM Nội dung lưu trữ Địa chỉ tại
EEPROM Nội dung lưu trữ
Địa chỉ slave 1 Địa chỉ S1 X 2 Địa chỉ S2 3 Địa chỉ S3 Slave 1
11 Số Byte Port1 41 Thông tin Port1 12 Số Byte Port2 42 Thông tin Port2 13 Số Byte Port3 43 Thông tin Port3
Slave 2
21 Số Byte Port1 51 Thông tin Port1 22 Số Byte Port2 52 Thông tin Port2 23 Số Byte Port3 53 Thông tin Port3
Slave 3
31 Số Byte Port1 61 Thông tin Port1 32 Số Byte Port2 62 Thông tin Port2 33 Số Byte Port3 63 Thông tin Port3
Bảng 4.2: Các mã lệnh điều khiển Slave của Master Bảng 4.1: Tổ chức dữ liệu EEPROM tại Master
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 32 Bảng 4.3: Bảng tập lệnh cảm biến TT Nhóm lệnh Tên lệnh Mã lệnh Ý nghĩa 1 DHT11 DHT1 0x11 Port 1 2 DHT2 0x12 Port 2 3 DHT3 0x13 Port 3 4 US015 US1 0x21 Port 1 5 US2 0x22 Port 2 6 US3 0x23 Port 3 7 LM35 LM1 0x31 Port 1 8 LM2 0x32 Port 2 9 LM3 0x33 Port 3 10 UART UART1 0x41 Port 1 11 UART2 0x42 Port 2 12 UART3 0x43 Port 3 13 VẬT CẢN HN VC1 0x51 Port 1 14 VC2 0x52 Port 2 15 VC3 0x52 Port 3
16 Thẻ RFID RFID 0x60 Port 3
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 33
4.1.4. Lưu đồchương trình và chi tiết hoạt động
Lưu đồ giải thuật tại Master
Hình 4.1 Lưu đồ giải thuật cho Master
Bắt đầu
Khởi tạo LoRa, khởi tạo OLED, khởi tạo khối nút ấn Menu
Cài đặt từ
Gsheet
Nhận lệnh cài đặt từ ESPgửi về
Gửi lệnh tìm kiếm Slave mới
Chờ phản
hồi 2s Cấp địa chỉ cho Slave mới
Chờ phản
hồi 1s Xóa địa chỉ Slave vừa cấp
Gửi khung lệnh Read_data
Chờ phản hồi 1.5s Gửi khung lệnh Receive_data Nhận đủ dữ liệu trong 6s Kiểm tra lỗi
Gửi dữ liệu đến ESP8266
Gửi lệnh cập nhật đến Slave đã kết nối
Đ S Đ S S Đ S Đ Đ Đ S S
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 34
Mô tả hoạt động:
Khi hệ thống được cấp nguồn, MCU được khởi động và khởi tạo LoRa (giao tiếp UART) giúp truyền nhận tín hiệu với các Slave, màn hình Oled (giao tiếp I2C), các nút ấn điều khiển sẽ được khởi tạo để điều khiển các Slave.
Nếu có yêu cầu cập nhật dữ liệu từ Google sheets (Gsheet) thì Master sẽ gửi yêu cầu cập nhật đến ESP8266 và chờ để nhận lệnh cập nhật về, sau đó sẽ phân tích lệnh và tiến hành gửi lệnh cài đặt từ Gsheet đến các Slave đã kết nối.
Master sẽ gửi mã timkiem (0xff) để quét các Slave xung quanh, trong thời gian 2s nếu cóphản hồi (có sự xuất hiện của Slave mới) thì Master sẽ cấp địa chỉ cho Slave mới. Tiếp theo Master sẽ chờ tín hiệu phản hồi của Slave nhận được địa chỉ vừa cấp để chắc chắn Slave đã được cập nhật địa chỉ, nếu sau 1s không nhận được phản hồi thì Master sẽ xóa địa chỉ vừa cấp và tiếp tục công việc khác. Ngược lại nếu nhận được phản hồi thành công, Master sẽ gửi tiếp lệnh batdau (0x00) cho tất cả các Slave được kết nối, các Slave sẽ vào chế độ chờ gọi tên và thực thi lệnh do Master yêu cầu.
Master sẽ cài đặt cảm biến cho từng port của các Slave bằng việc gửi lệnh batdau, địa chỉ slave chỉ định và lệnh cài đặt cảm biến của port. Nó tiếp tục chỉ định Slave cần đọc cảm biến bằng khung lệnh Read_data, chờ trong 1,5s để Slave đọc cảm biến và yêu cầu Slave gửi dữ liệu về Master bằng khung lệnh Recieve_data.
Thời gian chờ nhận dữ liệu tổng cộng là 6s gồm 1s nhận địa chỉ và 5s cho dữ liệu, sau khi nhận đủ số byte dữ liệu, Master tiến hành kiểm tra lỗi bằng cách kiểm tra lẻ số bit 1 của dữ liệu. Tiếp theo đó sẽ EX-OR toàn bộ dữ liệu của Slave. Nếu tất cả bằng 0 và không có bắt kì lỗi xảy ra ở Byte nào thì sẽ gửi qua cho ESP8266.
Vậy khung truyền sẽ được tùy biến theo cách thức hoạt động của hệ thống
- Khung dữ liệusẽ là 1 Byte chỉ có mã lệnh nếu tìm kiếm thiết bị mới (timkiem).
- Khung dữ liệu là 3 Byte nếu điều khiển các Slave.
Ví dụ: cài đặt cảm biến DHT11 cho Port1của Slave 1.
Ví dụ: yêu cầu gửi dữ liệu Slave 1.
1 Byte 1 Byte 1 Byte
Mã lệnh Address Mã lệnh cài đặt
1 Byte 1 Byte 1 Byte
batdau (0x00) 0x01 (Slave1) DHT1 (0x11)
1 Byte 1 Byte 1 Byte
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 35
4.1.5. Chương trình con nhận lệnh cài đặt từ ESP gửi về
Nếu người dùng thiết lập trạng thái các Slave trên Google Sheets, ESP8266 sẽ lấy những thông tin đó về và gửi cho Master. Master sẽ xử lý chúng ở chương trình con có lưu đồ giải thuật tại Hình 4.2.
Lưu đồ giải thuật Hình 4.2 là chương trình con “Nhận lệnh cài đặt từ ESP gửi về”trong lưu đồ Hình 4.1.
Hình 4.2 Lưu đồ giải thuật cho chương trình con nhận lệnh cài đặt từ ESP gửi về
Bắt đầu Nhận đủ dữ liệu trong 2.5s Slave ON Port đã cài đặt Cài đặt cảm biến Xóa Port Cài đặt cảm biến theo yêu
cầu Web và lưu thay đổi
vào EEPROM
Gửi lệnh xóa Port và xóa
thông tin Port trong EEPROM
Kết thúc
Gửi lệnh cập nhật Gsheet đến ESP8266
Gửi lệnh xóa Slave và xóa EEPROM của Slave
S Đ Đ S S Đ Đ S Đ
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 36
4.1.6. Website điều khiển – Google Sheets (Gsheet)
Tại ESP8266:
ESP8266 là thiết bị kết nốiđể hệ thống có thể truy cập Internet và tương tác với Google Sheets.
Khi Master gửi dữ liệu cảm biến cho ESP8266, nó sẽ thực hiện việc kiểm tra lỗi, nếu không có lỗithì sẽ gửi dữ liệu lên Google Sheets.
Hình 4.3 là lưuđồ giải thuật chương trình xử lý/truy xuất dữ liệu Google Sheets:
Trước khi Master gửi dữ liệu đến ESP8266 thì Master sẽ gửi thông tin cảm biến, số byte cho ESP8266. ESP8266 tiến hành xử lý thông tin và lưu trữ chờ nhận khung dữ liệu.
Sau khi nhận đủ khung dữ liệu, ESP8266 sẽ bắt đầu ghép dữ liệu đã tách ban đầu sẽ được mô tả chi tiết ở phần 4.4. Cuối cùng là gửi dữ liệu lên Google Sheets và quay lại bước tìm kiếm Slave mới, nếu sai thì quay lại bước tìm kiếm Slave.
Trong trường hợp Master yêu cầu đọc giá trị từ Google Sheets. Hệ thống sẽ truy cập vào Website để lấy thông tin cập nhật từ Google Sheets. Tiếp theo chờ nhận tín hiệu gửi dữ liệu đi từ Master thì ESP8266 sẽ gửi tất cả dữ liệu đọc được ở Website về cho Master theo mỗi Slave riêng biệt.
Hình 4.3 Lưu đồ giải thuật cho ESP8266
Bắt đầu Kết nối Internet Tách và phân tích thông tin Lệnh nhận thông tin từ Master Nhận đủ thông tin 2s Nhận dữ liệu trong 6s Tách/ ghép dự liệu và gửi đến Gsheet Lệnh cập nhật dữ liệu Lấy thông tin cập nhật từ Web về bộ nhớ tạm Địa chỉ Slave cập nhật
Gửi thông tin cập nhật về Master S Đ S S Đ Đ Đ S S Đ Đ S
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 37
Trong trường hợp cảm biến có hai luồng dữ liệu (cụ thể trong đề tài là DHT11 với dữ liệu độ ẩm và nhiệt độ riêng biệt), ESP khi nhận được thông tin từ Master sẽ biết được và khi ghép dữ liệu, phân dữ liệu thành hai loại và gửi cho Google Sheets. Lúc này, Google Sheets sẽ upload dữ liệu trên hai cột khác nhau. Trường hợp không có dữ liệu Google Sheets sẽ upload giá trị 0 vào cột data không chứa dữ liệu đó. Lưu đồ giải thuật cho chương trình con lấy thông tin cập nhật từ Web về bộ
nhớ tạm trên ESP8266
Hình 4.4 mô tả giải thuật lấy thông tin cập nhật từ Web về bộ nhớ tạm trên ESP8266
Đ
Khi nhận được yêu cầu cập nhật dữ liệu từ Gsheet về của Master, ESP8226 sẽ truy cập vào WEB GSX2JSON để lấy JSON từ Gsheet. Sau khi thu thập JSON, ESP8266 sẽ tiến hành xử lý thông tin (tách chuỗi JSON để lấy thông tin trạng thái Slave, thông tin cảm biến tại các Port) và lưu trữ vào bộ nhớ tạm. Khi nhận được lệnh gửi thông tin cập nhật từ Master thì ESP8266 sẽ tiến hành gửi thông tin cập nhật của Gsheet cho Master theo thông tin riêng biệt của từng Slave như sau:
Tên Slave Trạng thái Slave Thông tin cảm biến Port 1 Thông tin cảm biến Port 2 Thông tin cảm biến Port 3
1 (Slave1) 1 (ON) 1 (DHT11) 2 (US015) 3 (LM35)
Bắt đầu
Kết thúc Lệnh lấy dữ liệu từ Gsheet
về
Truy cập vào WEB hỗ trợ để lấy JSON của Gsheet
Nhận JSON, xử lý thông
tin và lưu trữ trong bộ nhớ tạm
S
Hình 4.4 Lưu đồ giải thuật cho chương trình con lấy thông tin cập nhật từ Web về bộ nhớ tạm trên ESP8266
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 38
Lưu đồ giải thuật cho chương trình con xuất dữ liệu tại Google Sheets:
Google script thiết lập những thông số dùng để chứa các giá trị được gửi từ ESP8266 đến. Khi ESP8266 gửi dữ liệu lên thì trang Web sẽ phân tích chuỗi URL và bắt dữ liệu toàn bộ chuỗi được gửi lên. Chuỗi sẽ được kiểm tra theo các biến đã được thiệt lập tại trong Google script của Google Sheets và gửi giá trị theo các ô đã được chỉ định trên trang tính.Hình 4.5mô tả giải thuật xuất dữ liệu tại Google Sheets của hệ thống:
4.1.7. Lưu đồ giải thuật cho khối điều khiển các Slave trên MENU (Interrupt)
Khi hệ thống được cấp nguồn, sẽ khởi tạo LoRa, màn hình Oled và các nút ấn điều khiển sẽ được khởi tạo để điều khiển các Slave.
Master sẽ tiến hành kiểm tra xem MENU có đăng nhập hay không, nếu phím ấn đăng nhập MENU được thực hiện thì chương trình sẽ truy cập vào MENU và thực hiện các lệnh điều khiển do người dùng chỉ thị thông qua MENU. Nếu không có truy cập MENU hoặc Thoát khỏi MENU thì hệ thống sẽ quay lại quét Slave xung quanh và thực hiện công việc như bình thường.
Bắt đầu
Kết thúc Dữ liệu được gửi lên WEB
Xuất dữ liệu ra vị trí tương ứng
trên Gsheet
Khởi tạo các biến
Đ
S
Hình 4.5 Lưu đồ giải thuật cho chương trình con xuất dữ liệu tại Google Sheets
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 39
Hình 4.6là lưu đồ giải thuật cho khối điều khiển các Slave trên Menu bằng nút nhấn tại Master. Chương trình thực hiện việc thiết lập trạng thái Slave, Port, cài đặt cảm biến, cập nhật dữ liệu
Chương trình trên là chương trình ngắt (Interrupt) sau khi Master hoàn thành việc khởi tạo thì khi người dùng chọn cài đặt từ Menu chương trình này sẽ được thực hiện. Bắt đầu Kết thúc Kiểm tra nút “Chọn“ MENU Chọn Slave Vào MENU Cài đặt Chọn cảm biến và Port cần cài đặt
Lưu thông tin cài đặt Slave vào EEPROM và gửi
lệnh đến Slave
Xóa Chọn Slave cần xóa
Lưu thông tin vào EEPROM và gửi lệnh xóa Slave Xóa
Slave
Xóa
Port Chọn Port cần xóa Lưu thông tin vào EEPROM và gửi lệnh xóa Port
Gsheet Gửi yêu cầu cập nhật đến ESP8266
Thoát Đ S Đ S Đ S Đ S Đ S Đ Đ S S
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 40
4.2. Giải thuật trên các nút cảm biến và điều khiển (Slave) 4.2.1. Chức năng 4.2.1. Chức năng
-Làm việc theo sựđiều khiển của Master.
-Các Slave sẽđược kết nối và cấp địa chỉ tựđộng từ Master, sau sự cố mất điện hay mất kết nối, các Slave sẽ vẫn lưu địa chỉ được cấp trước đó và kết nối vào hệ hống.
-Có các Port có tính đa năng tương thích với các chuẩn giao tiếp khác nhau, dễ dàng tùy chỉnh mà không cần nạp mới chương trình cho vi xử lý.
-Slave sẽ xử lý dữ liệu trước khi gửi đi cho Master như sau: tách thành từng Byte và chèn bit kiểm tra chẳn – lẻ. Các dữ liệu sao đó được EX-OR để tạo ra một Byte kiểm tra BSC. Sau khi gửi dữ liệu hoàn tất, Byte BSC sẽ được gửi đi để làm công cụ cho Master kiểm tra độ chính xác dữ liệu.
4.2.2. Bố trí vùng nhớ cho Slave
Vùng nhớ của Slave được bố trí để lưu trữ tên Slave, thông tin cảm biến và số Byte của cảm biến tại từng port.
Việc bố trí vùng nhớ trên EEPROM nhằm đảm bảo địa chỉ các Slave sẽ không bị mất đi khi có sự cố mất điện, mất kết nối xảy ra. Chỉ cần có nguồn trở lại, các Slave sẽ tự động được kết nối vào hệ thống qua địa chỉ đã được cấp sẵn trước đó.
Bảng 4.4 và 4.5 mô tả cách thức tổ chức các Slave được lưu trữ trong EEPROM và
lưu trữ trong RAM:
DATA1 Port1 … (giới hạn 8 Byte) … DATA2 Port2 … (giới hạn 8 Byte) … DATA3 Port3 … (giới hạn 8 Byte) … Địa chỉ tại
EEPROM Nội dung lưu trữ
1 Địa chỉ Slave 11 Số Byte Port1 12 Số Byte Port2 13 Số Byte Port3 41 Thông tin Port1
42 Thông tin Port2
43 Thông tin Port3
Bảng 4.4: Tổ chức Slave Bảng 4.5: Tổ chức dữ liệu
Tối đa
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 41
4.2.3. Bảng mã lệnh và chú thích
Bảng 4.6: Bảng tập lệnh điểu khiểntại Slave
Các lệnh điều khiển trên là các lệnh trả lời phản hồi công việc của các Slave về Master cho từng công việc cụ thể, để Master đánh giá và biết được thông tin đã được truyền đến các Slave hay chưa.
STT Tên Lệnh Mã Lệnh Ý Nghĩa
1 RepNew 0xf0 Phản hồi khi Master tìm kiếm thiết bị
2 RepAdd 0xf1 Phản hồi khi được cấp địa chỉ
3 Slave1 0x01 Trả lời khi có lệnh cài đặt hoặc lệnh đọc cảm biến khi nó được đặt tên là Slave 1
4 Slave2 0x02 Trả lời khi có lệnh cài đặt hoặc lệnh đọc cảm biến khi nó được đặt tên là Slave 2
5 Slave3 0x03 Trả lời khi có lệnh cài đặt hoặc lệnh đọc cảm biến khi nó được đặt tên là Slave 3
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 42
4.2.4. Lưu đồchương trình và chi tiết hoạt động