ESP32 Mini Gateway
Trung cấp10/5/2026

ESP32 Mini Gateway

Xây dựng IoT Gateway với ESP32: nhận dữ liệu từ cảm biến GPIO, BLE node, hoặc nRF24L01 node rồi gửi lên MQTT broker.

ESP32MQTTBLEnRF24L01GatewayIoTArduino
0 lượt thích0 người đã làm2 giờ5 bước7 linh kiện
← Quay lại dự án
Hướng dẫn chi tiết

Bài 2: Mode GPIO — Cảm biến cửa

Kết nối Magnetic Door Sensor vào GPIO 14, cấu hình config.h, nạp code và xem trạng thái cửa trên Serial Monitor và MQTT.

Cập nhật 10/05/2026

Bước 1 — Kết nối dây

ESP32 DevKit        Door Sensor
─────────────       ───────────
3.3V      ─────────  VCC
GND       ─────────  GND
GPIO 14   ─────────  OUT

Không có door sensor? Dùng button thường: 1 chân vào GPIO 14, chân còn lại vào GND. Nhấn = cửa mở.

Bước 2 — Cấu hình config.h

Mở firmware/esp32_mini_gateway/config.h và điền:

#define WIFI_SSID     "Tên_WiFi_2.4GHz"
#define WIFI_PASSWORD "Mật_khẩu"
#define MQTT_HOST     "mqtt.iotlabs.vn"
#define MQTT_USERNAME "YOUR_USERNAME"
#define MQTT_PASSWORD "YOUR_PASSWORD"
#define GATEWAY_MODE  MODE_GPIO

Bước 3 — Nạp code

  1. Mở firmware/esp32_mini_gateway/esp32_mini_gateway.ino
  2. Board: ESP32 Dev Module
  3. Partition Scheme: Default 4MB with spiffs
  4. Nhấn Upload
  5. Nếu lỗi "Failed to connect": nhấn giữ nút BOOT trên ESP32 trong khi nhấn Upload

Bước 4 — Mở Serial Monitor (baud 115200)

Kết nối thành công:

[BOOT] ESP32 Mini Gateway | Mode: GPIO
[WIFI] Connected. IP: 192.168.1.20
[MQTT] Connected
[GPIO] Door sensor initialized on GPIO 14
[BOOT] Gateway ready

Khi mở/đóng cửa:

[GPIO] door_open=true
[MQTT] Published to iotlabs/org_demo/gateways/gw_edu_001/devices/door_sensor_01/telemetry

[GPIO] door_open=false
[MQTT] Published to ...

Bước 5 — Xem dữ liệu MQTT (MQTTX)

  1. Mở MQTTX → New Connection → Host: mqtt.iotlabs.vn, Port: 1883
  2. Nhấn Connect
  3. Add Subscription: iotlabs/org_demo/gateways/gw_edu_001/#
  4. Mở/đóng cửa → thấy JSON xuất hiện trong MQTTX
{
  "version": "1.0",
  "gateway_id": "gw_edu_001",
  "mode": "gpio",
  "source_id": "door_sensor_01",
  "metrics": { "door_open": true },
  "ts": 1234567
}