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