firmware ตัวอย่างของ TRIX สำหรับ ESP32 มี 2 ชุด ขอไฟล์ source ได้จากทีม TRIX
- sensor node อ่าน DHT22 (อุณหภูมิ ความชื้น) แล้วส่งเข้า TRIX Monitor ผ่าน MQTT บน WSS ด้วย login ของอุปกรณ์เอง
- OTA client ตรวจและติดตั้ง firmware รุ่นใหม่จาก TRIX ผ่าน HTTPS มีหน้าเว็บในตัวเครื่องพร้อมปุ่ม "Check for Update"
1. sensor node
DHT22 --> ESP32 --WiFi--> wss://mqtt.trix.technology/mqtt --> TRIX Monitor --> dashboard
ทำไมใช้ WSS และ login แยกต่อเครื่อง
- เข้ารหัสตั้งแต่บอร์ดถึง server MQTT ธรรมดาส่งรหัสผ่านเป็นข้อความเปล่าและใช้ได้เฉพาะใน LAN ส่วน WSS ใช้ได้จากทุกเครือข่ายและเป็น TLS firmware ตรวจใบรับรองด้วย certificate bundle ของ ESP-IDF จึงไม่ผูกกับ CA ตัวเดียว
- หนึ่งบอร์ดหนึ่ง login login ส่งได้เฉพาะ
trix/<site>/<device>/#ถ้าบอร์ดหายหรือรหัสหลุด ยกเลิกเฉพาะเครื่องนั้น เครื่องอื่นทำงานต่อ (สอดคล้อง ETSI EN 303 645 ข้อ 5.1 และ 5.5 และ NIST IR 8259A)
ต่อสาย
| ขา DHT22 | ESP32 |
|---|---|
| VCC | 3V3 |
| DATA | GPIO4 (ต่อตัวต้านทาน pull-up 10 kOhm ไป 3V3) |
| GND | GND |
ตั้งค่า Arduino IDE
- Boards Manager ติดตั้ง esp32 (Espressif Systems) รุ่น 3.x ซึ่งมี
esp-mqttและ certificate bundle (ทดสอบกับ 3.3.12) - Library Manager ติดตั้ง
DHT sensor library(Adafruit) และAdafruit Unified Sensor
ใส่ login
- ขอ login ของอุปกรณ์จากทีม TRIX จะได้บรรทัด
#define5 บรรทัด - วางในส่วน
CONFIGของesp32-sensor.inoแล้วตั้งWIFI_SSIDและWIFI_PASS
รหัสผ่านแสดงครั้งเดียว ระบบเก็บเฉพาะค่า hash ถ้าทำหายต้องขอรหัสใหม่แล้วแฟลชอีกครั้ง
แฟลชและตรวจผล
Serial Monitor ที่ 115200 ควรขึ้นแบบนี้
TRIX sensor fw 2.0.0
WiFi: connecting to ... ok, ip=192.168.x.x
MQTT: connected (wss)
-> trix/<site>/sensor-01/temperature_c 25.3
-> trix/<site>/sensor-01/humidity_pct 61.0
MQTT: refused แปลว่า login ผิดหรือถูกยกเลิกแล้ว
บอร์ดที่แฟลช fw 1.x ไว้ยังใช้ได้ (ดึง login ของ site จาก config.json และใช้ MQTT ธรรมดาใน LAN) ควรย้ายมาใช้ login ของอุปกรณ์เมื่ออัปเดตครั้งถัดไป
2. OTA client
สิ่งที่ต้องมี
- ESP32 รุ่นใดก็ได้ (esp32, esp32-s2, esp32-s3, esp32-c3)
- Arduino IDE 2.x หรือ PlatformIO
- ไลบรารี ArduinoJson 7.x (ที่เหลือมากับ board package)
ตั้งค่า
#define WIFI_SSID "your-wifi"
#define WIFI_PASS "your-password"
#define DEVICE_TYPE "esp32-sensor" // ต้องตรงกับชนิด firmware ที่ลงทะเบียนใน TRIX
#define CURRENT_VERSION "1.0.0" // semver
#define OTA_HOST "https://trix.technology"
แฟลช
- Arduino IDE: Tools > Board > ESP32 Dev Module แล้ว Tools > Partition Scheme เลือกแบบที่มี OTA partition เช่น "Default 4MB with spiffs" จากนั้น Upload
- PlatformIO:
pio run -t upload
ทดสอบ
- บูตเครื่อง Serial Monitor จะแสดง
IP: 192.168.x.x - เปิดเบราว์เซอร์ไปที่
http://192.168.x.x/ - กด Check for Update ถ้ามีรุ่นใหม่ เครื่องจะดาวน์โหลด แฟลช และรีบูตเอง
ปล่อย firmware รุ่นใหม่
ส่งไฟล์ .bin (Arduino: Sketch > Export Compiled Binary) พร้อมชนิดอุปกรณ์และเลขรุ่นให้ทีม TRIX
ทีม TRIX ลงลายเซ็นและตั้งเป็นรุ่นล่าสุด อุปกรณ์จะได้รุ่นใหม่เมื่อถึงรอบตรวจหรือเมื่อกดปุ่ม
ความปลอดภัย
- ตรวจใบรับรอง HTTPS ด้วย root CA ที่ฝังไว้ใน firmware
- เทียบ semver ปฏิเสธการ downgrade
- firmware ตามมาตรฐาน trix-node/1 ต้องตรวจลายเซ็น Ed25519 และ sha256 ก่อนแฟลชทุกครั้ง
ปัญหาที่พบบ่อย
| อาการ | สาเหตุ / วิธีแก้ |
|---|---|
HTTPS connection failed |
ใบรับรองหมดอายุ อัปเดต root CA ใน firmware |
OTA update failed: Not enough space |
partition scheme ไม่มี OTA เปลี่ยนในเมนู Tools |
ขึ้น Already up to date แต่มีรุ่นใหม่แล้ว |
DEVICE_TYPE สะกดไม่ตรงกับที่ลงทะเบียนไว้ |
| รีบูตวนหลังแฟลช | firmware ใหม่มีปัญหา ESP32 ที่มีสอง partition ย้อนกลับรุ่นเดิมได้ ขึ้นกับ partition table |
