Khi được cấp nguồn thì hệ thống sẽ hoạt động theo nguyên lý sau:
Các nút giám sát nhận tín hiệu từ cảm biến (ở đây là cảm biến nhiệt độ, độ ẩm DHT22) sau đó gửi giá trị đo được về node truyền thông qua đường truyền RS485 (Module RS485 thực hiện chuyển đổi “TTL to RS485” và ngược lại). Khung truyền này được thể hiện ở hình dưới.
Start Byte ID Byte Check Byte Temp Byte Humi Byte Stop Byte Các byte trong khung truyền bao gồm:
+ Start Byte: Ta chọn là ký tự “@”. + Check Byte: Ta chọn là ký tự “#”.
+ Dữ liệu gồm có hai byte, một byte là giá trị nhiệt độ, byte thứ hai là giá trị độ ẩm. Mặc dù kết quả trả về từ cảm biến DHT22 gồm cả phần nguyên và phần thập phân của nhiệt độ, độ ẩm nhưng ta chỉ lấy phần nguyên của những giá trị này.
+ Stop Byte : Ta chọn là ký tự “$”.
Từ đó ta thấy các bước thu thập tín hiệu của Module truyền thông sẽ là:
Bước 1: Chờ tín hiệu nhận được trên đường truyền RS485, nếu tín hiệu
nhận được là “@” thì chuyển sang bước 2.
Bước 2: Lưu các byte nhận được vào mảng dữ liệu, mảng dữ liệu ở đây
gồm có 6 byte như đã nêu ở phía trên.
Bước 3: Kiểm tra tính đúng đắn của khung truyền nhận được, nếu byte thứ
nhất là “@’, byte thứ 3 là “#” và byte thứ 6 là “$” thì khung truyền là đúng. Ta chuyển sang bước 4.
Bước 4: Lấy byte thứ 2 trong mảng vừa nhận được để xác định ID của
Sau khi nhận được dữ liệu từ các module cảm biến thì module truyền thông gửi dữ liệu lên server thông qua ESP8266.
Ở đây, ta sử dụng ESP8266 để tạo một sever, ESP8266 hỗ trợ tạo server lưu trên bộ nhớ flash lên tới 4MB, với dung lượng của ứng dụng trong bài này thì dung lượng đó hoàn toàn đủ. Sau này, ta có thể tiếp tục phát triển hệ thống với nhũng tính năng lưu trữ, thống kê số liệu thì có thể chuyển qua những sever khác. Địa chỉ đường dẫn của server này mặc định là “192.168.4.1”. Khi đã kết nối với wifi ta có thể mở trình duyệt và truy cập đến server theo đường dẫn này hoặc “192.168.4.1/index”. Wifi dùng cho ứng dụng này, ta có thể thiết lập cho bất kỳ một wifi đang khả dụng nào với cú pháp:
WiFi.begin("tenwifi","matkhau");
Tuy nhiên, nếu muốn kiểm tra hoạt động của hệ thống ngay cả khi không có mạng wifi và Internet thì ta có thể chọn thêm một cách khác là sử dụng wifi của chính ESP8266. Trong chương trình, ta thiết lập ESP8266 ở chế độ phát wifi với tên wifi là “esp1” và mật khẩu là “12345678” với thao tác như sau:
WiFi.mode(WIFI_AP);
WiFi.softAP("esp1","12345678");
Khi đã thiết lập wifi như vậy, khi kiểm tra hoạt động của hệ thống, ta chỉ cần kết nối với wifi “esp1”và truy cập vào server đã tạo trước đó.
Ở đây, ta đặt đối tượng “sv” mang thuộc tính của server trên ESP8266. Hay có thể hiểu chính là tên của server trên ESP8266:
ESP8266WebServer sv(80);
Ta có dữ liệu từ khối truyền thông lên server như sau:
sv.on("/index",[]{sv.send(200,"text/html",readData("index.html"));}); sv.on("/temp.html",[]{ sv.send(200,"text/html",String(temp));}); sv.on("/humi.html",[]{ sv.send(200,"text/html",String(humi));});
sv.on("/temp2.html",[]{ sv.send(200,"text/html",String(temp2));}); sv.on("/humi2.html",[]{ sv.send(200,"text/html",String(humi2));}); sv.on("/trangthai.html",[]{sv.send(200,"text/html",String(trangthai));});
Ở dòng cuối cùng, ta gửi thêm một biến “trạng thái” để biết được server đã kết nối với cảm biến hay chưa.
Giao diện trên server ngoài chức năng hiển thị thông số nhiệt độ, độ ẩm thu thập được còn có thêm chức năng điều khiển xuống module cảm biến. Với cơ cấu chấp hành ở đây là quạt hoặc bộ phận làm lạnh, ta có thể tắt hoặc cho hoạt động với ba cấp độ khác nhau. Trong mô hình thực nghiệm này, cơ cấu chấp hành chọn là quạt DC với 3 cấp tốc độ được điều khiển bằng cách thay đổi độ rộng xung (PWM). Tín hiệu gửi từ server gửi về tương ứng có các giá trị 0, 1, 2, 3. Các tín hiệu này được gửi chung đến nút truyền thông một cách liên tục.