ESP8266 + TTP223: ทำ Touch Sensor ดูสถานะผ่าน KiwisIoT
ถ้าแตะ Sensor หนึ่งครั้ง แล้วอยากให้สถานะ 0 หรือ 1 ไปโผล่บน Dashboard ผ่าน Wi-Fi ต้องต่อระบบยังไง?
Project นี้ใช้ NodeMCU ESP8266 ร่วมกับ TTP223 Capacitive Touch Sensor เพื่ออ่านสถานะการสัมผัสแบบ Digital แล้วส่งค่าไปยัง KiwisIoT ผ่าน Wi-Fi เป็นตัวอย่าง IoT Project ที่เหมาะสำหรับคนเริ่มเรียนรู้ ตั้งแต่ Sensor Input ไปจนถึง Cloud Dashboard
- ใช้ NodeMCU ESP8266 เป็น Controller หลัก
- ใช้ TTP223 Capacitive Touch Sensor เป็น Digital Input
- VCC ต่อ 3.3V, GND ต่อ GND และ OUT ต่อ D2 / GPIO4
- ใน Project นี้ Touch = HIGH = 1 และ No Touch = LOW = 0
- ส่งข้อมูลไปยัง KiwisIoT Channel 1
- Firmware ใช้ KiwisIoT Library
- Serial Monitor ใช้ 115200 baud
- Code ตัวอย่างมี delay 2000 ms จึงอ่านและส่งข้อมูลเป็นรอบประมาณ 2 วินาที
- TTP223 สามารถตั้ง Output Mode ได้ จึงไม่ควรถือว่า Module ทุกตัว Touch แล้วต้อง HIGH เสมอ
IoT Touch Sensor Project นี้คืออะไร?
แนวคิดของ Project มีเพียง Input แบบ Digital หนึ่งตัว แต่ครอบคลุม IoT Flow ได้ครบตั้งแต่ Hardware จนถึง Dashboard
ตรวจว่ามีการสัมผัสหรือไม่
อ่าน Digital Input ที่ D2
ส่งข้อมูลออกจาก ESP8266
รับค่าใน Channel 1
แสดง 1 เมื่อ Touch และ 0 เมื่อ No Touch
ความง่ายของ Project นี้เหมาะสำหรับคนที่ต้องการเข้าใจว่า Sensor ตัวหนึ่งถูกเปลี่ยนจาก Physical Input ให้กลายเป็นข้อมูลที่ดูผ่าน IoT Dashboard ได้อย่างไร
Hardware ที่ใช้มีอะไรบ้าง?
| อุปกรณ์ | หน้าที่ |
|---|---|
| NodeMCU ESP8266 | อ่าน Sensor และเชื่อม KiwisIoT ผ่าน Wi-Fi |
| TTP223 Touch Sensor | ตรวจ Capacitive Touch และส่ง Digital Output |
| Jumper Wires | เชื่อม Sensor กับ NodeMCU |
| USB Cable | เชื่อม NodeMCU กับ Computer สำหรับ Programming |
| Wi-Fi | เชื่อม ESP8266 ไปยัง KiwisIoT |
| Arduino IDE | ใช้ Upload Firmware |
| KiwisIoT | แสดง Touch State บน Dashboard |
ข้อมูลเดินทางจากนิ้วไปถึง Dashboard อย่างไร?
เมื่อ Sensor ตรวจพบการสัมผัส Output ของ Module ที่ใช้ใน Project นี้จะกลายเป็น HIGH
ESP8266 อ่านค่าด้วย digitalRead() แล้วส่งค่าดังกล่าวไปยัง KiwisIoT Channel 1
Sensor Output = HIGH
digitalRead(D2) → 1
send("1", 1)
แสดงค่า 1
เมื่อปล่อย Sensor Logic ใน Project นี้จะกลับเป็น LOW หรือ 0 และค่ารอบถัดไปก็ถูกส่งขึ้น Dashboard เช่นเดียวกัน
ต่อ TTP223 กับ NodeMCU อย่างไร?
| TTP223 | NodeMCU ESP8266 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| OUT | D2 / GPIO4 |
Touch = HIGH ทำงานอย่างไร?
ใน Project ต้นฉบับ Logic ถูกอธิบายว่า:
| สถานะ | Digital Output | ค่าที่ ESP8266 อ่าน |
|---|---|---|
| Touch | HIGH | 1 |
| No Touch | LOW | 0 |
แต่จุดนี้ต้องอ่านอย่างระวัง เพราะ TTP223 รองรับ Output Configuration มากกว่าหนึ่งแบบ
ตั้ง KiwisIoT Dashboard อย่างไร?
Main Source ใช้ Channel 1 สำหรับ Touch Sensor
Firmware ส่งค่า:
- 1 เมื่อแตะ Sensor
- 0 เมื่อไม่แตะ
หลังสร้าง Dashboard แล้ว ต้องนำ Dashboard Topic ID ไปใส่ใน Firmware เพื่อให้ ESP8266 ส่งข้อมูลไปยัง Panel ที่ถูกต้อง
ในบทความนี้ใช้รูปแบบ Placeholder:
dash_XXXXXXXXXXXXX
Arduino Code ทำงานอย่างไร?
Firmware มีหน้าที่หลักเพียงไม่กี่ขั้น:
- เชื่อมต่อ Wi-Fi และ KiwisIoT
- ตั้ง D2 เป็น Digital Input
- อ่านสถานะ TTP223
- พิมพ์ค่าผ่าน Serial Monitor
- ส่งค่าไป KiwisIoT Channel 1
- รอ 2 วินาทีแล้วทำซ้ำ
#include <KiwisIoT.h>
const char* ssid = "YOUR_WIFI_NAME";
const char* pass = "YOUR_WIFI_PASSWORD";
const char* topic = "dash_XXXXXXXXXXXXX";
#define TOUCH_PIN D2
KiwisIoT kiwisiot(ssid, pass, topic);
void setup() {
Serial.begin(115200);
delay(1000);
pinMode(TOUCH_PIN, INPUT);
kiwisiot.begin();
Serial.println();
Serial.println("Touch Sensor Started");
}
void loop() {
kiwisiot.run();
int touchValue = digitalRead(TOUCH_PIN);
Serial.print("Touch Value: ");
Serial.println(touchValue);
// Send data to KiwisIoT Channel 1
kiwisiot.send("1", touchValue);
delay(2000);
}
ทำไม Dashboard อัปเดตประมาณทุก 2 วินาที?
ตอนท้ายของ loop() มี:
delay(2000);
จึงทำให้ Firmware เว้นช่วงประมาณ 2 วินาที ก่อนเข้าสู่รอบการอ่านและส่งข้อมูลใหม่
Source ไม่ได้วัด Network Latency, Cloud Latency หรือ Dashboard Refresh Latency จึงไม่ควรระบุ End-to-end Response Time ที่ละเอียดกว่านี้
ทดสอบด้วย Serial Monitor อย่างไร?
หลัง Upload Firmware Source ใช้ Arduino Serial Monitor เพื่อตรวจว่า ESP8266 อ่าน Sensor ถูกก่อน
ตั้ง Baud Rate เป็น: 115200
เมื่อแตะ Sensor:
Touch Value: 1
เมื่อปล่อย:
Touch Value: 0
ถ้า Serial Monitor เปลี่ยน 0/1 ถูก แปลว่าฝั่ง Sensor → ESP8266 ทำงานตาม Logic ของ Project แล้ว จากนั้นค่อยตรวจ Wi-Fi → KiwisIoT → Dashboard ต่อ
ถ้า Serial ถูกแต่ Dashboard ไม่ขึ้น เช็กอะไร?
จากข้อมูลใน Source จุดที่ควรตรวจต่อมีอยู่หลัก ๆ:
- Wi-Fi Name ที่ใส่ใน Firmware ถูกต้องหรือไม่
- Wi-Fi Password ถูกต้องหรือไม่
- Dashboard Topic ID ตรงกับ Panel ที่สร้างหรือไม่
- Firmware เรียก kiwisiot.begin() แล้วหรือไม่
- ใน Loop มี kiwisiot.run() หรือไม่
- ส่งค่าที่ Channel 1 ตาม Project หรือไม่
TTP223 ทุก Module แตะแล้ว HIGH เหมือนกันไหม?
ไม่ควรสรุปแบบนั้น
Datasheet ของ TTP223 ระบุว่า IC สามารถ Configure Output ได้หลาย Mode เช่น Active High / Active Low และ Direct / Toggle
| ประเด็น | Project นี้ | TTP223 โดยทั่วไป |
|---|---|---|
| Touch Output | HIGH | ขึ้นกับ Configuration |
| No Touch | LOW | ขึ้นกับ Configuration |
| Operating Mode | Source ใช้เป็น Touch State แบบตรง | สามารถมี Direct / Toggle Mode ได้ |
ดังนั้นถ้า Copy Code แล้ว Logic กลับด้าน ควรตรวจ Module และ Configuration จริงก่อนแก้ Code แบบเดาสุ่ม
Project นี้ต่อยอดอะไรได้บ้าง?
Main Source เสนอ Idea สำหรับต่อยอด เช่น:
- Relay
- LED
- Buzzer
- Touch-based IoT Control
- ใช้ Touch Sensor เป็น Trigger สำหรับ Device อื่น
Project ต้นฉบับในบทความนี้ยังเน้น: Touch Monitoring → ส่งค่า 0/1 ขึ้น Dashboard เป็นหลัก
Maker ได้อะไรจาก Project นี้?
1. เริ่ม IoT ได้จากข้อมูลแค่ 1 Bit
เราไม่จำเป็นต้องเริ่มจาก Sensor ที่ส่งข้อมูลซับซ้อน เพราะค่า Digital เพียง 0/1 ก็เพียงพอสำหรับเรียนรู้ Data Flow ตั้งแต่ Hardware ถึง Cloud
2. Serial Monitor ช่วยแยกปัญหา Hardware กับ Cloud
ถ้า ESP8266 อ่าน 0/1 ได้ถูก เราสามารถโฟกัสการ Debug ส่วน Wi-Fi และ Dashboard ต่อ โดยไม่ต้องสงสัย Sensor ทุกครั้ง
3. Channel Mapping ทำให้ข้อมูลมีที่อยู่ชัดเจน
Project กำหนด Touch State ให้อยู่ Channel 1 ทำให้ ESP8266 และ Dashboard เข้าใจตรงกันว่าค่านี้หมายถึง Sensor ตัวใด
4. ต้องรู้ว่า Logic ของ Hardware เปลี่ยนได้
TTP223 เป็นตัวอย่างดีว่า Code ที่ทำงานกับ Module หนึ่ง ไม่ได้แปลว่า Hardware ทุก Revision จะมี Active Level เหมือนกัน
5. Monitoring กับ Control เป็นคนละขั้น
Project นี้ทำ Monitoring สำเร็จแล้ว ส่วน Relay, LED หรือ Buzzer เป็นอีก Layer หนึ่งที่ต้องมี Hardware, Wiring และ Firmware เพิ่มเติม
โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน
โดยเฉพาะขั้นตอนสร้าง KiwisIoT Dashboard และการตรวจ Module TTP223 จริง ควรเปิด Source และ Datasheet ประกอบ ก่อนเปลี่ยน Wiring หรือ Logic
FAQ: คำถามที่พบบ่อย
1. Project นี้ใช้บอร์ดอะไร?
ใช้ NodeMCU ESP8266 เป็น Controller หลัก
2. ใช้ Touch Sensor รุ่นอะไร?
Main Source ใช้ TTP223 Capacitive Touch Sensor
3. TTP223 ต่อกับ ESP8266 ขาไหน?
Source ต่อ OUT เข้ากับ D2 หรือ GPIO4
4. TTP223 ใช้ไฟเท่าไรใน Project นี้?
Source ต่อ VCC เข้ากับ 3.3V ของ NodeMCU
5. แตะ Sensor แล้วค่าอะไรออก?
ใน Module / Configuration ที่ Source ใช้ Touch = HIGH หรือ 1 และ No Touch = LOW หรือ 0
6. TTP223 ทุกตัว Touch แล้วเป็น HIGH หรือไม่?
ไม่ควรสรุปแบบนั้น Datasheet ระบุว่าสามารถ Configure Active High, Active Low และ Toggle Mode ได้
7. ส่งข้อมูลไป KiwisIoT Channel ไหน?
Project ใช้ Channel 1
8. Dashboard แสดงค่าอะไร?
แสดงค่า 1 เมื่อ Sensor ถูกแตะ และ 0 เมื่อไม่ถูกแตะตาม Logic ของ Project
9. Firmware ส่งข้อมูลบ่อยแค่ไหน?
Code มี delay(2000) จึงเว้นช่วงประมาณ 2 วินาทีต่อรอบ
10. Serial Monitor ใช้ Baud Rate เท่าไร?
115200 baud
11. ใช้ Library อะไรเชื่อม KiwisIoT?
Code ใน Source Include KiwisIoT.h
12. Topic ID คืออะไร?
เป็น Dashboard Topic ID ของ KiwisIoT ซึ่ง Source ใช้รูปแบบ dash_... และแต่ละ Dashboard ต้องใช้ Topic ที่ตรงกับของตัวเอง
13. ใช้ Touch Sensor ควบคุม Relay ได้เลยไหม?
Main Source เสนอ Relay เป็น Future Improvement แต่ไม่ได้ให้ Wiring หรือ Code สำหรับ Relay ใน Project ปัจจุบัน
14. TTP223 ตรวจ Touch ได้ไกลแค่ไหน?
Source ไม่ได้ระบุ Detection Range และความไวสามารถขึ้นกับ Module, Electrode และ Physical Setup
References / แหล่งข้อมูลต้นฉบับ
IoT ไม่จำเป็นต้องเริ่มจาก Project ใหญ่
แค่ Touch Sensor หนึ่งตัว ก็ใช้เรียนรู้ Digital Input, ESP8266, Wi-Fi, Cloud Channel และ Dashboard ได้ครบ Flow
หากกำลังเริ่มทดลอง IoT Sensor Project สามารถสอบถามทีม Globalbyte เรื่อง ESP8266, ESP32, Development Board, Sensor, Module และ Maker Accessories ที่เหมาะกับ Project ได้