Điều khiển 8 rơ le qua internet

28/06/2021
dieu-khien-8-ro-le-qua-internet

Bài 2 - Điều khiển 8 rơ le qua internet

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).

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/bwbsmart...

    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.

 
  1. void setup() {
  2. ​Serial.begin(115200)
  3.  
  4. ​// pinmode, tắt các rơ le khi mới khởi độn
  5. ​for (int i =0;i<RELAYS_AMOUNT;i++)
  6. ​pinMode(relays[i], OUTPUT)
  7. ​digitalWrite(relays[i], LOW)
  8.  
  9. ​// Kết nối tới wif
  10. ​connectToWifi()
  11.  
  12. ​// Khởi động SIM => Thành công thì khởi tạo kết nối GPR
  13. ​if (initModemSIM()
  14. ​connectToGPRS()
  15.  
  16. ​// Có 2 đối tượng MQTT Client: 1 dành cho kết nối Wifi, 1 dành cho GPR
  17. ​// Do đó chạy 2 lần lệnh setup mqt
  18. ​setupMQTT(&wifiMqtt)
  19. ​setupMQTT(&gsmMqtt)
  20. }
  21.  
  22. void loop() {
  23. ​if (isWifiConnected()) {// Ưu tiên đầu, nếu có wifi thì xử lý kết nối mqtt với wif
  24. ​mqttLoopWithWifi()
  25. ​} else if (modem.isGprsConnected()) {// Còn khi không có wifi thì chuyển qua dùng GPR
  26. ​mqttLoopWithGPRS()
  27. ​} else
  28. ​Serial.println("Khong co ket noi ca wifi va GRPS!")
  29. ​delay(2000)
  30. }

    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à link video để các bạn tham khảo:

https://www.youtube.com/watch?v=4Mjq95BmbFw

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!

Bình luận
Nội dung này chưa có bình luận, hãy gửi bình luận đầu tiên của bạn.
VIẾT BÌNH LUẬN CỦA BẠN