. Xin chào các bạn, tiếp nối seri bài viết “Khám phá thế giới IoT với bSmart”, hôm nay mình sẽ hướng dẫn các bạn cách tự tạo một mô hình IoT nho nhỏ với 8 chiếc rơ le được điều khiển qua mạng internet. Đặc biệt, với kit bSmart mình sẽ hướng dẫn các bạn cách lập trình để thiết bị của chúng ta có thể tự kết nối wifi khi đến vùng có sóng wifi cần kết nối và tự động chuyển sang sử dụng dữ liệu di động để kết nối khi ra khỏi vùng sóng wifi (Một tính năng thông minh y hệt như trên điện thoại di động của chúng ta).
Chú ý: Với link tải tài nguyên, phần hướng dẫn cài đặt, giải thích các khái niệm có trong bài viết thì mình sẽ không đưa ra tại bài mà sẽ gom chung lại vào bài số 0. Vì vậy nếu bạn có nhu cầu thì hãy vào bài viết số 0 nhé. Trong bài số 0 cũng sẽ tổng hợp link các bài viết khác trong seri. Mình làm cách này để sau này các bài viết khác có dùng lại các tài nguyên, khái niệm đó thì sẽ tiện cho bạn tìm kiếm và tiện cho mình khi viết bài hơn. Cảm ơn các bạn, mời các bạn tiếp tục đọc bài!
I. Ý tưởng:
Có thể coi đây là một project “Hello World” khi nghiên cứu IoT. Ý tưởng ở đây là tạo ra một webapp có 8 nút điều khiển trạng thái 8 relay (rơ le) sử dụng kit bSmart. Relay có 2 trạng thái bật/tắt hoặc HIGH/LOW hoặc 1/0 hoặc true/false. Như vậy mỗi khi nhấn nút thay đổi trạng thái relay trên webapp, ta sẽ cho webapp gửi 1 chuỗi JSON có cấu trúc như bên dưới đến mạch bSmart thông qua MQTT:
{“id”:<thứ tự relay>,”state”:<trạng thái relay>}
Đặc biệt, mình sẽ tận dụng sự kết hợp của ESP32 và SIM7600 trên bSmart để thiết lập cho thiết bị này có thể tự động chuyển đổi từ wifi sang dữ liệu di động (GPRS) và ngược lại – tất nhiên là ưu tiên wifi hơn. Để qua đó, thiết bị của bạn có thể mang đi di động khắp mọi miền tổ quốc mà vẫn có kết nối internet <3.
II. Chuẩn bị:
Như vậy chúng ta sẽ cần những thứ sau:
- Chắc chắn là 1 chiếc mạch bsmart và 8 con relay
- Một nền tảng giúp tạo webapp đẹp, nhanh, miễn phí, dễ => Node Red (Đã cài dashboard)
- Một nền tảng MQTT Broker miễn phí, dễ dùng => Tui chọn shiftr.io
- Công cụ xử lý chuỗi JSON cho ESP32 => thư viện ArduinoJSON
- Thư viện dành cho module SIM => TinyGSM
- Thư viện tạo kết nối MQTT cho ESP32 => PubSubClient
Và bạn cũng cần biết sơ về khái niệm, cách dùng các công cụ sau:
III. Lắp ráp phần cứng:
Các bạn nối module 8 relay với mạch bSmart theo sơ đồ sau:
Sơ đồ kết nối 8 relay với bSmart, các bạn có thể chọn 8 chân khác nếu thích
IV. Thiết lập phần mềm:
1. Thiết kế webapp:
Đầu tiên, chúng ta sẽ có 8 nút switch để chuyển đôi trạng thái tắt bật của 8 relay. Trong phần “When clicked, send:”, chúng ta chọn loại dữ liệu sẽ gửi ra là JSON (ký hiệu “{}”) và nhập chuỗi JSON theo cú pháp đã nêu ở trên phần ý tưởng. Trong đó “On Payload” là khi switch bật, “Off Payload” là khi switch tắt.
Thiết đặt settting cho 1 switch, các bạn làm tương tự cho 7 cái còn lại
Node tiếp theo sẽ nhận đối tượng JSON được gửi ra từ các switch và chuyển chúng thành chuỗi JSON, vì dữ liệu cần truyền đi là chuỗi ký tự.
Và node cuối cùng là mqtt out để publish dữ liệu vào 1 MQTT Broker, chọn biểu tượng cây bút (khoanh cam) để nhập thông tin MQTT cần kết nối tới.
Nhập host tại server, port, nhập user và pass ở bên tab Security.
Xong rồi thì nhấn Update để quay lại
Tiêp theo là nhập topic cần publish dữ liệu vào, ở đây mình nhập “bsmart/relays”. Bạn có thể nhập bất kỳ thứ gì, không nhất thiết phải theo mình.
Nhớ chọn thiết lập MQTT vừa nhập tại mục Server
Và Done, như vậy khá đơn giản chúng ta đã hoàn thành một cái webapp. Nhấn Deploy và mở localhost:1880/ui để xem webapp nha. Giao diện mình làm hơi xấu, các bạn thử khám phá thêm để trau truốt hơn mình nha :Đ
2. Lập trình cho ESP32:
Xem code đầy đủ tại đây: https://github.com/loc4atnt/bwbsmart1
Các bạn xem code đầy đủ ở phía trên, trong đó mình cũng đã viết vài dòng giải thích, các bạn đọc giải thích xong vẫn chưa hiểu thì cứ gửi câu hỏi ở dưới, mình sẽ giải đáp. Còn phía dưới là code khung sườn 2 hàm setup và loop để mô tả hoạt động của ESP32 với đoạn code phía trên.
void setup() { Serial.begin(115200); // pinmode, tắt các rơ le khi mới khởi động for (int i =0;i<RELAYS_AMOUNT;i++){ pinMode(relays[i], OUTPUT); digitalWrite(relays[i], LOW); } // Kết nối tới wifi connectToWifi(); // Khởi động SIM => Thành công thì khởi tạo kết nối GPRS if (initModemSIM()) connectToGPRS(); // Có 2 đối tượng MQTT Client: 1 dành cho kết nối Wifi, 1 dành cho GPRS // Do đó chạy 2 lần lệnh setup mqtt setupMQTT(&wifiMqtt); setupMQTT(&gsmMqtt); } void loop() { if (isWifiConnected()) {// Ưu tiên đầu, nếu có wifi thì xử lý kết nối mqtt với wifi mqttLoopWithWifi(); } else if (modem.isGprsConnected()) {// Còn khi không có wifi thì chuyển qua dùng GPRS mqttLoopWithGPRS(); } else { Serial.println("Khong co ket noi ca wifi va GRPS!"); delay(2000); } }
Nối dây, cắm cáp, nạp code và Xong! Chúng ta đã vừa hoàn thành một dự án IoT nhỏ đầu tiên với kit bSmart, bước đầu tiến vào thế giới IoT <3. Đây là video thành quả của mình:
V. Lời kết:
Cảm ơn các bạn đã quan tâm đến bài viết! Hi vọng chúng ta sẽ tiếp tục đồng hành cùng nhau trong bài viết tiếp theo của seri “Khám phá thế giới IoT với bSmart”. Chúc các bạn có thật nhiều sức khỏe, niềm vui để từ đó cho ra nhiều sản phẩm, dự án hay ho và độc đáo hơn nữa nhé. Nếu có bất kỳ thắc mắc nào, đừng ngần ngại để lại câu hỏi bên dưới hoặc nhắn tin vào facebook cá nhân của mình, mình sẽ sẵn lòng giúp đỡ ngay khi có thời gian rảnh nhé! Hẹn gặp các bạn ở bài viết tiếp theo – Tại bài viết kế, mình sẽ hướng dẫn các bạn nâng cấp mô hình 8 relay này nhé <3
Chúc các bạn thành công!