[Khám phá thế giới IoT với bSmart] Bài 1 - Đ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).

    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!

lên
10 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Lập trình Arduino không cần viết code - Phần 6: Điều khiển led bằng nút nhấn kiểu 2

Đây là phần 6 của chuỗi bài viết "Lập trình arduino không cần viết code".

- Xem lại phần 5 tại đây

​Ở phần trước, mình đã hướng dẫn lập trình điều khiển led bằng nút nhấn kiểu 1, tuy nhiên kiểu này có 1 điểm yếu là giữ nút thì mới sáng led. Và ở phần này, mình sẽ nói đến kiểu 2 khắc phục nhược điểm trên. Tuy nhiên có thể nó cũng không phải là nhược điểm nếu như bạn cần nó vào 1 việc gì đó.

lên
27 thành viên đã đánh giá bài viết này hữu ích.

Lập trình Arduino không cần viết code - Phần 10: Tạo âm thanh với buzzer

Đây là phần 10 của chuỗi bài viết "Lập trình Arduino không cần viết code"

- Xem lại phần 9 tại đây

Xin chào các bạn, hôm nay chúng ta sẽ cùng tìm hiểu về cách phát âm thanh với buzzer. Qua phần này, bạn hoàn toàn có thể tự tạo cho mình một bản nhạc theo phong cách Arduino :)).

lên
20 thành viên đã đánh giá bài viết này hữu ích.