Tinker C6 เป็นอุปกรณ์ IoT แบบใช้พลังงานจากแบตเตอรี่ ที่รองรับการเชื่อมต่อเซ็นเซอร์ผ่านมาตรฐาน RS485 / Modbus RTU และสามารถเชื่อมต่อเครือข่ายอินเทอร์เน็ตผ่าน Wi-Fi โดยสนับสนุนโปรโตคอลสื่อสารหลากหลายรูปแบบ รวมถึง MQTT
บทความนี้นำเสนอแนวทางการพัฒนาโปรแกรมสำหรับ Tinker C6 เพื่ออ่านข้อมูลจากเซ็นเซอร์วัดอุณหภูมิและความชื้น XY-MD02 และส่งข้อมูลไปยังแอปพลิเคชันบนโทรศัพท์มือถือผ่านโปรโตคอล MQTT รวมทั้งทำการทดสอบการใช้พลังงานของอุปกรณ์ เพื่อประเมินระยะเวลาที่เหมาะสมสำหรับการชาร์จแบตเตอรี่ครั้งถัดไป
ChatGPT พูดว่า:
MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลสื่อสารแบบ Publish/Subscribe ที่ออกแบบมาให้มีความ เบา (Lightweight) ใช้แบนด์วิดท์ต่ำ และเหมาะสำหรับอุปกรณ์ที่มีข้อจำกัดด้านพลังงาน เช่น อุปกรณ์ IoT
จุดเด่นของ MQTT ได้แก่:
- โครงสร้างแบบ Publish/Subscribe:
- Publisher ส่งข้อมูล (Message) ไปยัง Topic
- Subscriber รับข้อมูลจาก Topic ที่สนใจ
- ใช้ Broker (Server) เป็นตัวกลาง ทำหน้าที่รับและกระจายข้อความระหว่างอุปกรณ์
- ใช้พลังงานและทรัพยากรต่ำ เหมาะกับการส่งข้อมูลระหว่างอุปกรณ์ IoT ที่ใช้แบตเตอรี่
- รองรับ QoS (Quality of Service) 3 ระดับ เพื่อกำหนดความน่าเชื่อถือในการส่งข้อมูล
- ทำงานผ่าน TCP/IP และมักใช้พอร์ต 1883 (ไม่เข้ารหัส) หรือ 8883 (เข้ารหัส TLS/SSL
จุดสำคัญของการใช้งาน MQTT คือจะต้องมี Broker (Server) เป็นตัวกลางในการรับข้อมูลจากอุปกรณ์ Tinker C6 แล้วส่งต่อไปยังแอพฯ ในมือถือ โดย Public Broker (Server สาธารณะ-ฟรี) มีให้เลือกใช้งานหลายเจ้า สำหรับบทความนี้เลือกใช้ของ EMQX
ให้ต่อ V+, V-, A+, B- จากเซ็นเซอร์ XY-MD02 เข้ากับจุด RS485 ของ Tinker C6 ดังนี้
รูปที่ 1 การต่อ XY-MD02 เข้ากับ Tinker C6
XY-MD02 รองรับไฟเลี้ยงได้ 5V - 30V โดย Tinker C6 จ่ายไฟ 12V ออกมา ดังนั้นการเชื่อมต่อจึงสามารถเชื่อมต่อตรงได้ทันที (ไม่ต้องใช้อุปกรณ์เสริม)
มาตรฐาน Modbus RTU จำเป็นต้องรู้ข้อมูลดังต่อไปนี้ จึงจะเขียนโปรแกรมอ่านค่าได้
นอกจากข้อมูลเรื่องตำแหน่งข้อมูลของ Modbus แล้ว การเขียนโปรแกรมจริงจำเป็นต้องรู้การตั้งค่า Serial/UART ด้วย โดยข้อมูลการตั้งค่าแต่ละอุปกรณ์จะมีบอกไว้ สำหรับ XY-MD02 ต้องตั้งค่าเป็น 9600 baud, 1 stop bit, none parity bit
ตารางที่ 1 Modbus Protocol ของ XY-MD02
ตารางที่ 2 UART Communication Protocol ของ XY-MD02
Modbus RTU เป็นโปรโตคอลในระดับ Data Link Layer แบ่งอุปกรณ์เป็น 2 ฝั่ง คือ
การเขียนโปรแกรมผ่านค่าต้องใช้ไลบรารี่ ModbusMaster เพื่อช่วยให้การอ่านค่าทำได้ง่ายมากขึ้น ผู้ใช้เพียงกำหนด Device ID, Register Address, จำนวนข้อมูลที่ต้องการอ่านค่า ก็ได้ค่ามาเก็บลงตัวแปรเลย
การติดตั้งไลบรารี่ ModbusMaster ให้ติดตั้งผ่าน Library Manager ตามขั้นตอนต่อไปนี้
1) กดที่ไอค่อนรูปหนังสือ (1) ค้นหา ModbusMaster (2) แล้วกด INSTALL (3)
2) เมื่อติดตั้งเสร็จ จะแสดงข้อความ installed (ดังรูป)
ทดสอบเขียนโปรแกรมอ่านค่าเซ็นเซอร์ XY-MD02 แสดงค่าผ่าน Serial Monitor ดังนี้
อัพโหลดโปรแกรมลงบอร์ด เปิด Serial Monitor ขึ้นมา ค่าจากเซ็นเซอร์จะแสดงขึ้นมาแล้ว
การเขียนโปรแกรมส่งค่าขึ้น MQTT ต้องติดตั้งไลบรารี่ PubSubClient ก่อน มีขั้นตอนดังนี้
1) เข้าไปที่ https://github.com/knolleary/pubsubclient/releases แล้วกดดาวน์โหลด Source code
(zip) เวอร์ชั่นล่าสุด
2) เปิดโปรแกรม Arduino IDE ขึ้นมา แล้วกด Sketch > Include Library > Add .ZIP Library...
3) เลือกไฟล์ .zip ที่ได้ดาวน์โหลดมา แล้วกด Open
4) เมื่อติดตั้งเสร็จ จะมีข้อความ Library installed ขึ้น (ดังรูป)
ทดสอบเขียนโปรแกรมส่งข้อความ Hello, Tinker C6 ! ผ่าน MQTT ดังนี้
ทดสอบรับข้อมูลผ่าน MQTT จากคอมพิวเตอร์ โดยติดตั้งโปรแกรม MQTTX จากนั้นตั้งค่ารับข้อมูลดังนี้
1) กดเพิ่ม New กำหนดชื่อที่ต้องการในช่อง Name แล้วใส่ broker.emqx.io ลงในช่อง Host แล้วกด Connect
2) กด New Subscription
3) ใส่ TinkerC6/outTopic ลงในช่อง Topic แล้วกด Confirm
4) จะเห็นว่าสามารถรับข้อมูลจาก Tinker C6 ที่ส่งข้อความ Hello World ผ่าน MQTT มาได้แล้ว
เมื่อนำโค้ดมารวมกัน และเพิ่มคำสั่งเข้าโหมดประหยัดพลังงาน ได้โค้ดฉบับเต็มดังนี้
อัพโหลดโปรแกรมลงบอร์ด กด New Subscription ใส่ /Tinker-C6/sensor1 ลงในช่อง Topic แล้วกด Confirm ผลที่ได้ค่าอุณหภูมิและความชื้นจะแสดงขึ้นมาในโปรแกรม MQTTX แล้ว
แอพฯ MQTT Dashboard มีหลายแอพฯ ในบทความนี้เลือกใช้แอพฯ ฟรี และยอดนิยมอย่าง MQTT Dash
ติดตั้ง MQTT Dash จาก Google Play ตามขั้นตอนปกติ จากนั้นเปิดแอพฯ ขึ้นมา ตั้งค่าดังนี้
1) กดปุ่ม +
2) ใส่ Name เป็น Tinker C6 และใส่ Address เป็น broker.emqx.io แล้วกด Save
3) กดเข้าไปที่ Tinker C6
4) กดปุ่ม + เพิ่มกล่องอุณหภูมิ
5) กดเลือก Range/progress
6) ช่อง Name ใส่ อุณหภูมิ และใส่ค่าอื่น ๆ ตามรูป แล้วกด Save
7) กด + เพื่อเพิ่มกล่องแสดง ความชื้นอากาศ
8) กำหนดค่าต่าง ๆ ตามรูป แล้วกด Save
9) จะเห็นว่าค่าอุณหภูมิและความชื้นแสดงขึ้นมาแล้ว
ทดสอบใช้เครื่องมือวัดการใช้พลังงาน Power Profiler Kit II ต่อคั่นระหว่างแบตเตอรี่และวงจรทั้งหมดผ่านจุดจั้มเปอร์ JP2 กราฟการใช้พลังงานช่วงอ่านค่า-ส่งค่า มีดังนี้
ช่วงพัก กราฟการใช้พลังงานมีดังนี้
เมื่อนำข้อมูลจากกราฟป้อนข้อมูลให้ ChatGPT คำนวณหาระยะเวลาที่อุปกรณ์ทำงานได้ ผลที่ได้คือ
เยี่ยม — จะคำนวณให้ครับ โดยผม สมมติว่าแบตสองก้อนต่อแบบขนาน (รวมความจุเป็นกัน) ซึ่งเป็นการต่อที่ปกติใช้เพื่อเพิ่มความจุ (ถ้าต่ออนุกรม ผลลัพธ์ต่างไป)
ข้อมูลที่ใช้
แบต: 2 × 18650 ขนาด 2000 mAh → ความจุรวม = 4000 mAh (2,000 × 2)
กระแสช่วงส่ง = 32 mA
กระแสช่วงพัก = 1 mA
รอบ = ทุก 15 นาที = 900 วินาที
สมมติ ช่วงส่ง = 5 วินาที (ตามข้อสมมติเดิม)
ขั้นตอนคำนวณ (ทีละขั้น)
เวลาช่วงพัก = 900 − 5 = 895 วินาที
กระแสเฉลี่ยต่อรอบ = ÷ 900 s
= ÷ 900 = 1055 ÷ 900 = 1.172222... mAเวลาใช้งาน (ชั่วโมง) = ความจุ ÷ กระแสเฉลี่ย = 4000 ÷ 1.172222... ≈ 3412.32 ชั่วโมง
แปลงเป็นวัน = 3412.32 ÷ 24 ≈ 142.18 วัน
แปลงเป็นเดือน (ใช้ 30 วัน/เดือนโดยประมาณ) = 142.18 ÷ 30 ≈ 4.74 เดือน
ผลสรุป:
ถ้าใช้แบต 2 ก้อน (2000 mAh each, ขนาน = 4000 mAh) และช่วงส่งจริงคือ 5 วินาที ต่อรอบ ทุก 15 นาที จะส่งได้ต่อเนื่องประมาณ 4.7 เดือน (≈ 142 วัน)
ถ้าช่วงส่งต่างออกไป ผลจะเป็นอย่างไร (เพื่อให้เห็นความไวของพารามิเตอร์):
ช่วงส่ง = 2 s → ~5.20 เดือน
ช่วงส่ง = 5 s → ~4.74 เดือน (ค่าที่คำนวณข้างต้น)
ช่วงส่ง =10 s → ~4.13 เดือน
ช่วงส่ง =20 s → ~3.29 เดือน
ถ้าคุณอยากให้ผมคำนวณแบบเป๊ะ ๆ สำหรับค่าส่งจริงของอุปกรณ์ (เช่น ช่วงส่ง = x วินาที หรือมีการใช้กระแสช่วงพักต่างจาก 1 mA) บอกค่า เวลาในการส่งจริง (วินาที) และ ว่าต่อแบตแบบขนาน/อนุกรมหรือไม่ มาได้เลย ผมจะคำนวณให้ตรงตามเงื่อนไขครับ :)
จะเห็นว่าสามารถใช้ Tinker C6 อ่านค่าจากเซ็นเซอร์แล้วแสดงผลผ่านอพฯ ในมือถือ โดยส่งข้อมูลผ่าน MQTT ได้แล้ว ขั้นตอนต่อไปสามารถนำไปประยุกต์เก็บข้อมูลลงฐานข้อมูลเพื่อใช้วิเคราะห์หรือส่งแจ้งเตือนต่อได้ โดยอาจใช้ node-red ในการรับค่าจาก MQTT แล้วส่งเข้าฐานข้อมูล หรือใช้ n8n รับข้อมูลแล้วส่งต่อให้ AI วิเคราะห์ข้อมูลต่อได้