3.2.1. Sơ đồ khối tổng quan
Chức năng:
- Điều khiển và giám sát việc thu thập dữ liệu từng Slave.
- ESP8266 là cách thức liên lạc giữa Master và Google Sheets.
- Màn hình Oled cho phép người theo dõi toàn bộ hoạt động của hệ thống. - Các công tắt ấngiúp người dùng thao tác trực tiếp để điều khiển và ra lệnh cho các Slave.
- Lưu trữ dữ liệu tạm thời trên bộ nhớ của bộ vi điều khiển và mọi tiến trình của hệ thống đều thông qua vi xử lý trung tâm.
- Dữ liệu được lưu trữ trên Google Sheets để người dùng dễ dàng theo dõi. Sơđồ khối
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 19
Cấu trúc và chức năng các khốicủa bộ xử lý trung tâm gồm:
- Khối Vi điều khiển: sử dụng Kit Arduino Mega 2560 R3 đóng vai trò là bộ xử lí trung tâm cho toàn khối Master.
- Khối thu phát wifi ESP8266: thực hiện giao tiếp giữa Master với Google
Sheets trong lưu trữ, theo dõi, cập nhật dữ liệu và điều khiển hệ thống.
- Khối truyền nhận dữ liệu LoRa SX1278: thực hiện giao tiếp không dây giữa Master và các nút Slave.
- Khối màn hình hiển thị Oled 0.96Inch: thực hiện việc theo dõi hoạt động của
hệ thống.
- Khối Button: thực hiện việc điều khiển hệ thống từcác công tắc ấn.
3.2.2. Các thao tác trên Khối Button
Các thao tác tại Button gồm 3 phím với các chức năng:
- OK: chọn.
- Move: dichuyển.
- Menu: đến danh sách các tùy chọn chính, các tùy chọn được giải thích như bảng sau:
STT TÊN Ý NGHĨA
1 Cai Dat Vào cài đặt các cảm biến cho Slave
2 Xoa Xóa Slave hoặc xóa Port
3 Sheet Cài đặt trực tiếp trên Google Sheets
4 Thoat Thoát tiến trình làm việc
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 20
3.2.3. Sơ đồ nguyên lí
Hình 3.3: Sơ đồ nguyên lí của Master
3.2.4. Khối Master hoàn chỉnh
Hình ảnh bên trong
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 21
Hình ảnh bên ngoài
Hình 3.5: Hình ảnh bên ngoài của Master hoàn chỉnh
Hình ảnh cạnh bên
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 22
3.3. Các khối nút cảm biến – Slave 3.3.1. Sơ đồ khối tổng quan 3.3.1. Sơ đồ khối tổng quan
Chức năng
- Tổng quan hệ thống gồm có 3 Slave Node được đặt dưới sự quản lí và điều khiển của Khối xử lí trung tâm (Slave Node). Các Slave Node được cấp phát địa chỉ tự động khi kết nối và được gọi tên là Slave 1, Slave 2, Slave 3 theo thứ tự phảnhồi khi được Master tìm kiếm và cấp địa chỉ.
- Mỗi Slave Node đều được thiết kế có 3 Port để giao tiếp được với các loại cảm biến với các chuẩn khác nhau, trong đó mỗi Port có khả năng tương thích với các chuẩn giao tiếp như UART, Analog, Digital. Riêng Port 3 của mỗi Node có thêm chuẩn giao tiếp I2C và SPI.
- Các Slave Node sẽ phản hồi hay thực hiện các lệnh: đọc cảm biến, gởi dữ liệu,... tùy thuộc vào lệnh nhận được từ Master Node.
- Chức năng đặc biệt của Slave Node là khi muốn thay đổi cảm biến mới, chuẩn giao tiếp mới, người dùng chỉ cần cài đặt các thông số cảm biến trên Menu điều khiển ở Master hoặc giao diện người dùng trên Google Sheet mà không cần nạp lại chương trình. Có thể thay đổi nhiều loại cảm biến khác nhau trên cùng một Port.
Ví dụ: khi thay đổi cảm biến A tại Port 1 của Slave 1 thành cảm biến B thì
không cần nạp lại chương trình tại Slave 1 mà chỉ cần cài đặt qua giao diện người dùng trên Master và Master sẽ tự động set up xuống Slave 1.
Sơ đồ khối
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 23
Cấu trúc và chức năng các khối của các Slave Node
- Khối Vi điều khiển: Sử dụng chip MSP430G2553, đóng vai trò là bộ xử lí trung tâm của Slave Node, quản lí và điều khiển tất cả hoạt động của Slave Node.
- Khối LoRa là công cụ giúp Slave và Master truyền - nhận tín hiệu, dữ liệu.
- Khối Port đảm nhiệm việc kết nối giữa các cảm biến và khối vi điều khiển.
- Khối Cảm biến là các cảm biến được kết nối, thực hiện đọc cảm biến theo yêu cầu.
3.3.2. Vi xử lí trung tâm
Chip sử dụng tại Slave là MSP430G2553 có sơ đồ chân chi tiết như hình 3.8:
Hình 3.8: Sơ đồ chân của chip MSP430G2553
Trong đó:
•Số chân GPIO : 16
•Giao tiếp UART : 1 bộ UARTvới P1.1 và P1.2 •Giao tiếp SPI : 1 bộ SPI với P1.4, P1.5, P1.6 và P1.7 •Giao tiếp I2C : 1 bộvới P1.6 và P1.7
Với các chuẩn giao tiếp đã được xây dựng sẵn trên chip cơ bản đã đáp ứng được yêu cầu cho nhiều chuẩn giao tiếp cần cho hệ thống. Tuy nhiên, chip chỉ có 1 bộ chuẩn UART và đã được sử dụng cho module LORA để thực hiện việc truyền, nhận. Do đó, cần phải xây dựng thêm thư viện mới cho chuẩn LORA để đáp ứng được yêu cầu của hệ thống.
3.3.3. Thiết kế chi tiết các Port
- Để các Port đảm bảo việc tương thích với nhiều chuẩn giao tiếp khác nhau, nên việc thiết kế các Port phải phù hợp cùng lúc nhiều chuẩn giao tiếp để tích hợp vào cùng với nhau. Trong đề tài này, chúng emthiết kế mỗi Slave gồm có 3 Port, mỗi Port có 4 chân bao gồm: Nguồn, Mass, Xung Clock, Data. Chân Nguồn được thiết kế linh hoạt với hai loại là 3.3V và 5Vđể cấp nguồn cho cảm biến.
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 24
- Với thiết kế này thì các cảm biến sẽ tương thích với các chân dữ liệu sau:
Analog, Digital: sử dụng chân Data đọc dữ liệu, nguồn cung cấp có thể là 3.3V hoặc 5V tùy loại cảm biến.
UART: sử dụng chân TX là xung clock và chân RX là chân Data, tương ứng với chân P1.2 và P1.1, nguồn cung cấp có thể là 3.3V hoặc 5V tùy loại cảm biến.
SPI: sử dụng các chân SDA, SCL, MOSI, MISO kết nối với các chân P1.4, P1.5, P1.7, P1.6, nguồn cung cấp có thể là 3.3V hoặc 5V tùy loại cảm biến.
I2C: sử dụngchân Data là SDA và xung clock là SCL, ứng với P1.7 và P1.6, nguồn cung cấp có thể là 3.3V hoặc 5V tùy loại cảm biến.
Tuy nhiên, do chân P1.1 và P1.2 đã được sử dụng cho việc truyền nhận qua LORA, nên chúng em sẽxây dựng thư viện mới cho chuẩn giao tiếp UART trên chân GPIO để đọc các cảm biển chuần UART.
Từ các chuẩn giao tiếp tương ứng với các chân trên chip, chúng em đã thiết kế cụ thể như sau:
+ Port 1 và Port 2: có khả năng tương thích với các chuẩn Analog, Digital, UART + Port 3: có khả năng tương thích với các chuẩn Analog, Digital, UART, I2C, SPI.
a. Thiết kếchi tiết Port 1
Port 1 được thiếtkế tương thích với các chuẩn giao tiếp: Analog, Digital, UART với tổng cộng 5 chân: nguồn nguồn (tùy chỉnh 5V hoặc 3.3V), mass và 3 chân dữ liệu.
Trong đó:
- Chuẩn giao tiếp Analog, Digital sử dụng chuẩn giao tiếp được xây dựng sẵn trên chip MSP430G2553 ứngvới P1.0
- Chuẩn giao tiếp UART được xây dựng thư viện mới cho chuẩn giao tiếp trên chân GPIO, cụ thể chân TX ứng với P2.0 và RX ứng với chân P2.1
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 25
b. Thiết kế chi tiết Port 2
Tương tựPort 1, Port 2 cũng tương thích với các chuẩn giao tiếp: Analog,
Digital, UART với tổng cộng 5 chân: nguồn nguồn (tùy chỉnh 5V hoặc 3.3V), mass và 3 chân dữ liệu.
Trong đó:
- Chuẩn giao tiếp Analog, Digital sử dụng chuẩn giao tiếp được xây dựng sẵn trên chip MSP430G2553 ứng với P1.3
- Chuẩn giao tiếp UART được xây dựng thư viện mới cho chuẩn giao tiếp trên chân GPIO, cụ thể chân TX ứng với P2.3 và RX ứng với chân P2.2
Hình 3.10: Sơ đồ chi tiết thiết kế Port 2
c. Thiết kế chi tiết Port 3
Ngoài các chuẩn giao tiếp như các Port 1 và 2, Port 3 được thiết kế tương thích thêm với các chuẩn I2C và SPI với tổng cộng 6 chân: nguồn (tùy chỉnh 5V hoặc 3.3V), mass, xung clock, chân dữ liệu. Cụ thể như sau:
- Chuẩn giao tiếp Analog, Digital: P1.4
- Chuẩn giao tiếp I2C: P1.6 và P1.7
- Chuẩn giao tiếp SPI: P1.4, P1.5, P1.6, P1.7
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 26
3.3.4. Sơ đồ nguyên lí
Hình 3.12: Sơ đồ nguyên lí của nút Slave
- Nguồn cấp cho cảm biến được thiết kế tùy chỉnh: 5V hoặc 3.3V tùy loại cảm biến khác nhau. Người dùng chỉ cần bật công tắc qua lại là có thể biến đổi giá trị nguồn.
3.3.5. Khối Slave hoàn chỉnh
Hình ảnh bên trong
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 27
Hình ảnh bên ngoài
Hình 3.14: Hình ảnh bên ngoài của nút Slave
Hình ảnh cạnh bên
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 28
Hình ảnh bố trí các Port
Hình 3.16: Hình ảnh bố trí các Port của nút Slave
3.4. Chi tiết hoạt động của các Port
Mỗi Slave có cấu trúc gồm có 3 Port, mỗi Port được thiết kế tương thích với các chuẩn giao tiếp khác nhau, cụ thể như sau:
- Port 1, 2 có thể tương thích với các chuẩn UART, Analog, Digital.
- Port 3 tương thích với các chuẩn Analog, Digital, I2C, UART, SPI.
Ngoài ra, còn có bộ nguồn tùy chỉnh cho người dùng lựa chọn nguồn 5V hay 3.3V tùy loại cảm biến khác nhau.
Chi tiết hoạt động: mỗi Port của Slave sẽ được gắn với một loại cảm biến tại một thời điểm cụ thể tùy theo yêu cầu. Như vậy sẽ có thể có các trường hợp sau:
Trường hợp 1: gắn cảm biến vào đầy đủ các Port, như vậy sẽ có 3 cảm biến (cùng loại hoặc khác loại) được gắn tương ứng với 3 Port.
Trường hợp 2: một hoặc một số Port không được cài đặt cảm biến
Do thiết kế mỗi Slave gồm có 3 Port, tuy nhiên do nhu cầu tại mộtthời điểm cụ thể nào đó chỉ cần sử dụng có 1 (hoặc 2) Port để đọc giá trị của 1 (hoặc 2) cảm biến, thì người dùng chỉ cần thực hiện các bước đơn giản sau: để trống vị trí Port không sử dụng, vào Menu ở Master hoặc Giao diện người dùng ở Google Sheets để tiến hành xóa Port tương ứng là xong, khi muốn sử dụng lại Port đã bỏ trống chỉ việc thực hiện việc điều khiển tương tự và gắn cảm biến tương ứng vào. Tất cả mọi thay đổi đó được tự động hoàn toàn, và không cần nạp lại chương trình phần mềm cho cả Master và Slave.
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 29
Trường hợp 3: tất cả các Port đều không được cài đặt cảm biến
Trường hợp này là khi hệ thống không cần nhiều Slave hoạt động, mà chỉ cần duy nhất một Slave chẳng hạn. Khi đó người dùng muốn xóa đi các Slave không cần sử dụng, người dùng chỉ việc sử dụng Menu ở Master hoặc Giao diện người dùng ở Google Sheets để tiến hành xóa Slave đó đi, khi muốnkết nối lại thì chỉ cần bật Slave lên là thiết bị sẽ được tự động kết nối. Tất cả mọi thay đổi đó được tự động hoàn toàn, và không cần nạp lại chương trình phần mềm cho cả Master và Slave.
Nói chung, tất cả mọi sự thay đổi từ: gắn cảm biến mới, đổi cảm biến, xóa Port, xóa Slave,... đều được diễn ra tự động, không cần nạp lại chương trình cho cả hệ thống.
SVTH: Huỳnh Văn Biên –Nguyễn Nhật Linh Trang 30
CHƯƠNG 4: THIẾT KẾ PHẦN MỀM
Trên cơ sở những công việc đã xây dựng từ luận văn trước đó như: xây dựng toàn bộ hệ thống dựa trên Kit Arduino, sử dụng các thư viện cảm biến có sẵn để đọc cảm biến, sử dụng các thư viện chuẩn giao tiếp đãđược thiết lập sẵn trên Kit Arduino, thu thập và cập nhật dữ liệu lên Google Sheets,…Chúng em sẽ xây dựng lại hệ thống với:
- Sử dụng lại chức năng của bộ xử lí trung tâm của Master, nhưng đồng bộ về phần số byte của cảm biến giữa Slave và Master, nhằm tinh gọn hệ thống, tiết kiệm thời gian và hạn chế sai sót khi thiết lập sử dụng.
- Xây dựng lại hoàn toàn hệ thống các Slave trên chip MSP430G2553.
- Tự xây dựng các thư viện cho cảm biến để đọc các giá trị cảm biến mà không sử dụng thư viện có sẵn như trên Arduino.
- Xây dựng mới thư viện cho chuẩn giao tiếp UART trên chân GPIO của chip MSP430G2553 của các Slave.
- Số hóa các lệnh, thông tin cài đặt trên Google Sheets để việc điều khiển diễn ra nhanh chóng so với việc sử dụng các lệnh ở dạng chuỗi trước đó.
4.1. Giải thuật chạy trên bộ xử lí trung tâm 4.1.1. Chức năng 4.1.1. Chức năng
- 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