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

22/06/2022
dieu-khien-8-ro-le-qua-internet

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:

MQTT
Node Red
Chuỗi JSON

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:

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

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.

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.

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.

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.

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