DIY ESP32 Touchscreen Smart Home Dashboard ด้วย ESP-NOW
อยากมีจอ Smart Home ติดผนัง ที่ไม่ได้มีแค่ปุ่มเปิด-ปิดไฟ? โปรเจกต์นี้ใช้ ESP32 สองบอร์ดแบ่งหน้าที่กัน: ESP32-S3 พร้อมจอ Touchscreen 7 นิ้วทำ Dashboard ส่วน ESP32 อีกตัวควบคุม Relay 4 ช่องและอ่าน DHT22 แล้วคุยกันผ่าน ESP-NOW
ฝั่ง Dashboard ยังดึงข้อมูลอากาศจาก OpenWeather, ค่า UV จาก Open-Meteo และเวลาอ้างอิงจาก NTP ทำให้หน้าจอเดียวรวม Home Control, Indoor Climate, Weather, History และ Settings เอาไว้ด้วยกัน
Key Takeaways
- ใช้ ESP32 สองบอร์ด แยก Dashboard และ Relay Node
- Dashboard ใช้ VIEWE ESP32-S3 จอ 7 นิ้ว 800×480
- Relay Node ควบคุม Relay 4 ช่องและอ่าน DHT22
- สอง ESP32 สื่อสารกันผ่าน ESP-NOW โดยใช้ MAC Address
- ทั้งสองบอร์ดยังเชื่อม 2.4GHz Wi-Fi ตาม Architecture ของต้นฉบับ
- OpenWeather ใช้ Current Weather และ Forecast
- Open-Meteo ใช้ค่า UV
- NTP ใช้ Sync เวลา
- Relay ส่ง Status ทุก 2 วินาที
- Display ขอ Status ทุก 5 วินาที
- Pending Command Timeout 2.5 วินาที
- ไม่มี Status 15 วินาที → Relay Node แสดง Offline
- Dashboard มี Home, Weather, History และ Settings
- Settings Persist ใน Flash แต่ Relay Runtime อยู่ใน RAM
- มีไฟล์ Enclosure สำหรับ 3D Print
โปรเจกต์นี้ทำอะไรได้?
โปรเจกต์นี้สร้าง Wall-mounted Smart Home Dashboard ที่ใช้ ESP32 สองตัวทำงานร่วมกัน แทนที่จะให้บอร์ดเดียวทำทุกอย่าง
↓
Dashboard / Weather / UI
↕
ESP-NOW
↕
Relay ESP32
↓
Relay 4 ช่อง + DHT22
หมายเหตุเรื่องชื่อ Source: แม้หน้า Instructables มีคำว่า ESPHome อยู่ในชื่อ แต่เนื้อหาที่ใช้ในโปรเจกต์ แสดง Arduino-style Sketch, LVGL, WiFi Library และ ESP-NOW โดยไม่ได้แสดง ESPHome YAML จึงไม่ควรสรุปว่าใช้ ESPHome Framework หาก Source ไม่ได้ยืนยัน
อุปกรณ์ที่ใช้ในโปรเจกต์
Hardware หลักจากต้นฉบับมี:
- VIEWE ESP32-S3 Display Board ขนาด 7 นิ้ว
- ESP32 4-Channel Relay Board
- DHT22 Temperature and Humidity Sensor
- Jumper Wires
- USB Cables
Display Board ดูแลหน้า UI ส่วน Relay Board รับผิดชอบการควบคุม Relay และอ่าน Indoor Temperature / Humidity จาก DHT22
หัวใจฝั่ง Dashboard คือ ESP32-S3 จอ 7 นิ้ว
Display Board ที่ผู้สร้างใช้ เป็น VIEWE ESP32-S3 ซึ่งรวม MCU, TFT, Touch และระบบที่เกี่ยวข้องกับจอ มาให้บนบอร์ดเดียว
| รายการ | ข้อมูลจาก Source |
|---|---|
| MCU | ESP32-S3-N16R8 |
| CPU Clock | สูงสุด 240 MHz |
| Display | 7-inch 800×480 TFT |
| Touch | Multi-point Capacitive Touch |
| PSRAM | 8 MB |
| Flash | 16 MB |
| Wireless | 2.4 GHz Wi-Fi และ Bluetooth 5 |
| UI / Framework | รองรับ Arduino, ESP-IDF และ LVGL ตาม Source |
ผู้สร้างอธิบายว่า PSRAM 8 MB มีประโยชน์กับ UI LVGL ที่ใช้จอความละเอียด 800×480 ซึ่งต้องการ Memory มากกว่าหน้าจอ ESP32 ขนาดเล็กทั่วไป
Architecture ของระบบ: Wi-Fi กับ ESP-NOW ทำคนละงาน
จุดที่ต้องแยกให้ชัดคือ Project นี้ไม่ได้มี Wireless แค่ Layer เดียว
ESP-NOW
ใช้สำหรับ:
- Relay Command
- Scene Command
- Status Request
- Relay + Sensor Status
Wi-Fi / Internet
ใช้สำหรับ:
- OpenWeather
- Open-Meteo
- NTP
ESP-NOW ไม่ได้แปลว่า Smart Home ชุดนี้ Router-free ทั้งระบบ: การคุยระหว่าง ESP32 ใช้ ESP-NOW แต่ Weather และ NTP ยังต้องอาศัย Network
ESP-NOW ทำงานอย่างไรในโปรเจกต์นี้?
Project ใช้ Shared Protocol File:
espnow_protocol.h
Message หลักแบ่งเป็น 4 กลุ่ม:
| Message | หน้าที่ |
|---|---|
| Relay Command | สั่ง Relay หนึ่งช่อง |
| Scene Command | สั่ง Relay ทั้งสี่ช่องตาม Scene |
| Status Request | Display ขอ Current Status |
| Relay + Sensor Status | ส่งสถานะ Relay และค่า DHT22 กลับ Dashboard |
Timing ที่ Source กำหนด
- Relay ส่ง Status ทุก 2 วินาที
- Display ขอ Status ทุก 5 วินาที
- Pending Command Timeout 2.5 วินาที
- ไม่มี Status 15 วินาที → Relay Node Offline
↓
ส่ง ESP-NOW Command
↓
Relay Node ตรวจ Sender MAC
↓
Relay เปลี่ยน State
↓
ส่ง Actual State กลับ
↓
Dashboard Update UI
Wiring DHT22 และ Relay Board
DHT22 → ESP32
| DHT22 | ESP32 |
|---|---|
| VCC | 3.3V |
| OUT | GPIO 13 |
| GND | GND |
Relay → ESP32
| Relay | ESP32 |
|---|---|
| IN1 | GPIO 26 |
| IN2 | GPIO 25 |
| IN3 | GPIO 33 |
| IN4 | GPIO 32 |
| GND | GND |
| VCC | ตรวจ Datasheet ของ Relay Module ที่ใช้ |
อย่าเดา Relay VCC: Source ระบุให้ยึด Datasheet ของ Relay Module จริง ไม่ควรเหมารวมทุก Module ว่าใช้ Supply Voltage เหมือนกัน
ขั้น Testing ในต้นฉบับยังไม่ต่อ Relay Output Terminals: บทความนี้จึงไม่เพิ่มขั้นตอน ต่อ AC Mains หรือ Load ไฟบ้าน ขึ้นมาเอง
จาก Schematic ไปเป็น PCB จริง
ผู้สร้างแนบทั้ง:
- Schematic PDF
- Gerber Files
และยก NextPCB / HQDFM เป็น Workflow สำหรับตรวจ Gerber และส่งผลิต PCB
เคส 3D Print เปลี่ยน Prototype ให้กลายเป็น Wall Panel
Enclosure ประกอบด้วยส่วนหลักอย่าง:
- Front Frame
- Back Cover
- Wall Mount / Hook
- ช่อง USB และ Opening ที่จำเป็น
ผู้สร้างใช้ Black PLA กับตัวอย่างของตัวเอง แต่ไม่ได้กำหนด Print Recipe ครบทุกค่า
Source ไม่ได้ให้ Layer Height, Infill, Support, Nozzle หรือ Temperature ครบ: จึงไม่ควรสร้าง Print Setting แล้วอ้างว่าเป็นค่าของผู้สร้าง
ไฟล์ STL
มี STL แล้วแต่ไม่มีเครื่องพิมพ์? สามารถส่งไฟล์ให้ Globalbyte ช่วยประเมินบริการรับพิมพ์ 3D ได้ โดยเลือก Material, Orientation, Support และงาน Finish ตามชิ้นงานจริง
Weather Dashboard ใช้ OpenWeather + Open-Meteo + NTP
OpenWeather
ผู้สร้างใช้ Endpoint:
/data/2.5/weather/data/2.5/forecast
Current Weather ใช้ข้อมูลอย่าง:
- Temperature
- Feels-like
- Humidity
- Pressure
- Visibility
- Cloud Cover
- Wind
- Rain
- Sunrise / Sunset
Forecast ถูกใช้สร้าง:
- 24-hour Temperature Chart
- 5-day Forecast
Open-Meteo
ใช้สำหรับ:
UV Index
หาก Open-Meteo Request Fail Weather Data ส่วนอื่น ยังสามารถแสดงต่อได้ แต่ UV อาจไม่มีค่า
Refresh Logic
- Request ครั้งแรกประมาณ 3 วินาทีหลัง Wi-Fi Connect
- Refresh ทุก 10 นาที
- Request Fail → Retry หลัง 60 วินาที
OpenWeather Plan สามารถเปลี่ยนได้: ผู้สร้างระบุว่า Free API Key ที่ใช้ตอนพัฒนา เรียก One Call 3.0 แล้วได้ HTTP 401 จึงเปลี่ยนมาใช้ API 2.5 ควรตรวจ Plan ล่าสุดก่อนทำตาม
แยก Wi-Fi Password และ API Key ออกจาก Main Sketch
ผู้สร้างใช้:
-
secrets.hฝั่ง Display -
relay_secrets.hฝั่ง Relay
ฝั่ง Display เก็บ:
- Wi-Fi SSID
- Wi-Fi Password
- OpenWeather API Key
- Latitude
- Longitude
- POSIX Timezone
อย่า Commit Secret ขึ้น Public Repository: Credential และ API Key ควรแยกจาก Source Code หลัก
Timezone ตัวอย่างใน Source เป็นของ India: ไม่ควร Copy ค่าเดิม มาใช้กับประเทศไทย ให้ตรวจ POSIX Timezone ที่ตรงกับพื้นที่ใช้งานจริง
ก่อน ESP-NOW จะคุยกัน ต้องหา MAC Address ของทั้งสอง Board
ESP-NOW ใช้ MAC Address ระบุ Peer ดังนั้นผู้สร้างให้ Upload Sketch อ่าน STA MAC ไปทีละบอร์ด
หลังได้ MAC แล้ว ต้อง Update:
RELAY_ESP32_MACDISPLAY_ESP32_MACEXPECTED_RELAY_MAC
MAC Address ในตัวอย่างไม่ใช่ค่าที่ Copy ไปใช้ได้: แต่ละ ESP32 มี MAC Address ของตัวเอง
Upload Firmware แยก Relay Board และ Display Board
Relay ESP32
เปิด Serial Monitor ที่:
115200 baud
แล้วตรวจ:
- Relay Initialization
- DHT22 Initialization
- MAC Address
- Wi-Fi Connection
- ESP-NOW Peer Registration
Display ESP32-S3
ตรวจว่า:
- Display Initialize
- LVGL Start
- Dashboard ขึ้น
- Touch ทำงาน
Source ไม่ได้แจกแจง ESP32-S3 Board Option ทุกค่า: จึงไม่ควรแต่ง Flash Mode, Partition, PSRAM หรือ Upload Option เพิ่มขึ้นเอง
ทดสอบระบบก่อนต่อ Load จริง
ผู้สร้างระบุให้ทดสอบระบบ โดย:
ยังไม่ต่อ Relay Output Terminals
แล้วกด Relay Card เพื่อดู LED และดูว่าคำสั่ง ถูก Confirm กลับมาที่ Dashboard หรือไม่
Default Scene จาก Source
| Scene | R1 | R2 | R3 | R4 |
|---|---|---|---|---|
| Home | ON | ON | ON | OFF |
| Night | OFF | OFF | ON | ON |
| Away | OFF | OFF | OFF | ON |
| All Off | OFF | OFF | OFF | OFF |
Scene เหล่านี้เป็นค่าใน Project ต้นฉบับ: ผู้ใช้สามารถปรับชื่อ Relay และ Scene ให้ตรงกับอุปกรณ์ในบ้านของตัวเองได้
Dashboard มีทั้งหมด 4 หน้า
1. Home Page
- Living Room
- Kitchen
- Main Fan
- Garden
- Scene Buttons
- Current Weather
- Indoor Temperature / Humidity
2. Weather Page
- Temperature
- Feels-like
- Humidity
- Pressure
- Wind
- UV
- Sunrise / Sunset
- 24-hour Temperature Chart
- 5-day Forecast
3. History Page
- 8 Confirmed Relay Events ล่าสุด
- Session Runtime ของ Relay
4. Settings Page
- Brightness
- Dim Time
- Sleep Time
- Slate / AMOLED / Aurora Theme
- Celsius / Fahrenheit
- Show / Hide Indoor Climate
- Show / Hide Date
- Show / Hide Scene Buttons
อะไรอยู่ใน Flash และอะไรอยู่ใน RAM?
| ข้อมูล | พฤติกรรม |
|---|---|
| Dashboard Settings | เก็บใน ESP32 Flash และยังอยู่หลัง Power Cycle |
| Relay Session Runtime | อยู่ใน RAM และ Reset เมื่อ ESP32 Restart |
| History | แสดง 8 Confirmed Relay Events ล่าสุดตามระบบต้นฉบับ |
อย่าเหมารวมว่าข้อมูลทุกอย่าง Persist: Settings อยู่ Flash แต่ Session Runtime อยู่ RAM
Code จากต้นฉบับที่ใช้เตรียม ESP-NOW
Source มี Code สำหรับอ่าน MAC Address และตัวอย่าง Secret Header จึงสามารถใส่ Code Snippet ได้โดยไม่สร้าง Logic ใหม่ขึ้นเอง
อ่าน STA MAC Address
#include <WiFi.h>
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
delay(1000);
Serial.print("ESP32 MAC Address: ");
Serial.println(WiFi.macAddress());
}
void loop() {
}
ตัวอย่าง MAC Array
{0xC0, 0x5D, 0x89, 0xF5, 0xAD, 0xFC}
นี่เป็นเพียง MAC ตัวอย่างจาก Source: ต้องใช้ MAC ของ Board ตัวเอง ใน Firmware จริง
secrets.h Template
#define WIFI_SSID "YOUR_WIFI_NAME"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
#define OPENWEATHER_KEY "YOUR_OPENWEATHER_API_KEY"
#define WEATHER_LATITUDE "YOUR_LATITUDE"
#define WEATHER_LONGITUDE "YOUR_LONGITUDE"
#define TIMEZONE_INFO "YOUR_POSIX_TIMEZONE"
สรุปลำดับทำโปรเจกต์แบบ Step-by-Step
เตรียม Hardware
เตรียม ESP32-S3 Display, Relay ESP32, DHT22, Jumper Wire และ USB Cable
ต่อ Relay และ DHT22
ใช้ GPIO ตาม Schematic ของต้นฉบับ และตรวจ Relay VCC จาก Datasheet ของ Module
เตรียม Enclosure
พิมพ์ Front / Back แล้วประกอบ Display Board เป็น Wall-mounted Panel
ตั้งค่า Wi-Fi และ Weather API
สร้าง Secret Header แล้วใส่ Credential และ Location ของตัวเอง
หา MAC Address
อ่าน STA MAC ของ ESP32 ทั้งสองตัว ผ่าน Serial Monitor
ใส่ MAC ลง Firmware
Update Peer MAC ทั้งฝั่ง Display และ Relay
Upload Relay Firmware
ตรวจ Relay, DHT22, Wi-Fi และ ESP-NOW ผ่าน Serial Monitor
Upload Display Firmware
ตรวจ Display, LVGL, Touch และ Dashboard
Test โดยยังไม่ต่อ Load
ตรวจ Relay LED, Scene และ Confirmed State ก่อนนำไปเชื่อมระบบอื่น
สำหรับ Maker โปรเจกต์นี้น่าเอาไปเรียนต่อหลายเรื่อง
- ESP32-S3 + Large Touch Display
- LVGL UI
- ESP-NOW
- Relay Control
- DHT22
- Weather API
- NTP
- Flash Persistence
- PCB Workflow
- 3D Printed Enclosure
กำลังเริ่มโปรเจกต์ ESP32 หรือ Smart Home? สามารถสอบถามทีม Globalbyte เรื่อง Development Board, ESP32, Sensor, Module และอุปกรณ์ Maker รวมถึงบริการพิมพ์ 3D สำหรับทำ Enclosure ได้
โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน
โดยเฉพาะก่อนทำ:
- Firmware Upload
- ESP-NOW MAC Configuration
- Weather API
- Schematic / Gerber
- 3D Printed Enclosure
- Relay Hardware
FAQ: ESP32 Touchscreen Smart Home Dashboard
โปรเจกต์นี้ใช้ ESP32 กี่ตัว?
สองตัว: ESP32-S3 สำหรับ Dashboard และ ESP32 อีกตัวสำหรับ Relay 4 ช่องกับ DHT22
หน้าจอมีขนาดเท่าไร?
7 นิ้ว ความละเอียด 800×480 แบบ Capacitive Multi-touch ตาม Source
ESP-NOW ใช้ทำอะไร?
ใช้ส่ง Relay Command, Scene Command, Status Request และ Relay/Sensor Status ระหว่าง ESP32 สองบอร์ด
ESP-NOW ต้องใช้อินเทอร์เน็ตไหม?
Message ระหว่าง ESP32 ไม่ต้องใช้ Internet แต่ Project นี้ยังใช้ Wi-Fi สำหรับ Weather API และ NTP
DHT22 ต่อ GPIO ไหน?
OUT ต่อ GPIO 13, VCC ต่อ 3.3V และ GND ต่อ GND ตามต้นฉบับ
Relay ใช้ GPIO ไหน?
GPIO 26, 25, 33 และ 32 สำหรับ IN1–IN4 ตาม Schematic
Weather มาจาก API ไหน?
OpenWeather ใช้ Current Weather และ Forecast ส่วน Open-Meteo ใช้ UV Index
Weather Update ทุกกี่นาที?
ทุก 10 นาที และ Retry หลัง 60 วินาที หาก Request Fail
Relay Offline เมื่อไร?
หากไม่มี Status กลับมานาน 15 วินาที ตาม Logic ใน Source
Dashboard มีหน้าอะไรบ้าง?
Home, Weather, History และ Settings
Settings หายหลัง Restart ไหม?
Settings เก็บใน ESP32 Flash ตามต้นฉบับ
Relay Runtime เก็บถาวรไหม?
ไม่ Session Runtime อยู่ใน RAM และ Reset เมื่อ ESP32 Restart
มี STL สำหรับเคสไหม?
มี Source มี Front Frame และ Back Cover Variants สำหรับ 3D Printing
ต้นฉบับใช้วัสดุอะไรพิมพ์เคส?
ตัวอย่างของผู้สร้างใช้ Black PLA แต่ไม่ได้ให้ Print Setting ครบทุกค่า
นี่คือ ESPHome Project ไหม?
ชื่อ Source มีคำว่า ESPHome แต่ขั้นตอนที่เผยแพร่ ใช้ Arduino-style Code, ESP-NOW, WiFi และ LVGL โดยไม่ได้แสดง ESPHome YAML จึงไม่ควรฟันธงว่าใช้ ESPHome Framework
สรุป: จาก ESP32 Project บนโต๊ะ สู่ Smart Home Panel แบบใช้งานจริง
สิ่งที่ทำให้โปรเจกต์นี้น่าสนใจ ไม่ใช่แค่จอ 7 นิ้ว หรือปุ่มเปิด Relay
แต่เป็นการรวม:
↓
ESP32-S3 + LVGL
↓
ESP-NOW
↓
Relay ESP32 + DHT22
Wi-Fi
↓
Weather API + NTP
แล้วต่อยอดด้วย Confirmed Relay State, Scene, Offline Detection, History, Persistent Settings, PCB และ 3D Printed Enclosure
สำหรับสาย Maker นี่จึงเป็น Reference ที่ดีในการดูว่า Prototype ESP32 จะค่อย ๆ ถูกพัฒนา ให้เข้าใกล้ Product-like Device ได้อย่างไร
References / แหล่งข้อมูลต้นฉบับ
อยากทำ ESP32 Dashboard หรือเคส 3D Print ของตัวเอง?
ถ้ากำลังเริ่ม Project แนว Smart Home, ESP32, Sensor, Relay หรือ Touchscreen Dashboard สามารถสอบถามทีม Globalbyte เรื่อง Development Board, Sensor, Module และอุปกรณ์ Maker ที่เหมาะกับงานได้
ถ้ามีไฟล์ STL สำหรับทำ Enclosure แต่ไม่มีเครื่องพิมพ์ 3D สามารถส่งไฟล์ เพื่อสอบถามบริการรับพิมพ์ 3D ของ Globalbyte และประเมิน Material, Support, Orientation และงาน Finish ก่อนผลิตได้