หน้าตา Dashboard ของเว็บไซต์ที่ถูกรันอยู่บนบอร์ด ESP32 ล้วnๆ
สวัสดีชาว Maker และสาย Web Dev ทุกคนครับ! ถ้าพูดถึงการเปิดโฮสต์ทำเว็บไซต์ (Web Hosting) ร้อยทั้งร้อยคงนึกถึงการเช่า Cloud Server หรือไม่ก็เอาคอมพิวเตอร์เก่าๆ มาเปิดทิ้งไว้ที่บ้านใช่ไหมครับ?
แต่วันนี้เราจะพาไปดูโปรเจกต์สุดตึงชื่อว่า HelloESP ของคุณ Tech1k ที่ท้าทายข้อจำกัดของเทคโนโลยี โดยการนำบอร์ดไมโครคอนโทรลเลอร์ราคาแค่หลักร้อยอย่าง ESP32 (แรมเพียง 520 KB!) มารับหน้าที่เป็น Web Server สาธารณะที่ให้คนทั่วโลกเข้าถึงได้จริงๆ ทุกหน้าเพจ ทุกค่าเซนเซอร์ และทุกคอมเมนต์ในสมุดเยี่ยม ล้วนถูกเสิร์ฟออกมาจากชิปจิ๋วตัวนี้โดยไม่มี Backend Server เข้ามาช่วยเลย!
ทำไมถึงทำ? และมันทำงานยังไง? (How it works)
จุดเริ่มต้นมาจากความสนุกล้วนๆ ครับ ในยุคที่เว็บไซต์มีแต่ไฟล์หนักๆ เขาแค่อยากรู้ว่าชิปตัวเล็กๆ จะรับมือไหวไหม (เว็บไซต์นี้ทั้งเว็บไฟล์เล็กกว่ารูปวอลเปเปอร์มือถือซะอีก) โดยบอร์ดเวอร์ชันแรกสุดรันอึดถึกทนมาได้ถึง 500 วันก่อนจะเสียไป และนี่คือการคัมแบ็กอย่างยิ่งใหญ่พร้อมการอัปเกรดระบบเครือข่ายสุดล้ำ
ทริคคือการใช้ Cloudflare Worker: ปกติถ้าจะตั้งเซิร์ฟเวอร์ที่บ้าน เราต้องทำ Port Forwarding ที่เร้าเตอร์ให้วุ่นวายและเสี่ยงโดนแฮก แต่โปรเจกต์นี้ฉลาดกว่านั้นครับ ESP32 จะสร้างการเชื่อมต่อ (Outbound WebSocket) วิ่งออกไปหา Cloudflare Worker เอาไว้ตลอดเวลา เมื่อมีคนเข้าเว็บเบราว์เซอร์ Cloudflare จะส่ง Request วิ่งสวนกลับมาทางท่อเดิม ทำให้ ESP32 ไม่ต้องเปิดรับการเชื่อมต่อจากคนแปลกหน้าโดยตรง (ปลอดภัยสุดๆ)
Browser ──HTTPS──▶ Cloudflare Worker ──WSS──▶ ESP32 (บนเน็ตเวิร์กบ้านคุณ) ▲ │ └────── response ───────┘
ฮาร์ดแวร์ที่อยู่เบื้องหลัง (Hardware Setup)
โปรเจกต์นี้ใช้ ESP32-WROOM-32D (DOIT DevKit V1) เป็นสมองหลัก และประกอบเข้ากับเซนเซอร์วัดสภาพแวดล้อมเพื่อนำข้อมูลมาโชว์บนหน้าเว็บแบบเรียลไทม์:
BME280: วัดอุณหภูมิ, ความชื้น, และความกดอากาศ
CCS811: วัดคุณภาพอากาศ (CO₂, VOC)
SSD1306 OLED: จอแสดงผลสถานะการทำงาน (มีระบบป้องกันจอเบิร์นอินด้วย)
Micro SD card: สำหรับเก็บไฟล์เว็บไซต์ (HTML, CSS, JS) และเก็บบันทึก Log ข้อมูล
💡 Maker's Tip: ในเวอร์ชันล่าสุด คุณ Tech1k ได้นำบอร์ด ESP32 และเซนเซอร์ทั้งหมดไปใส่กรอบรูปแขวนโชว์ไว้บนกำแพงบ้านแบบเท่ๆ ครับ! หากเพื่อนๆ ชาว Maker อยากทำเซิร์ฟเวอร์จิ๋วไว้รันเว็บของตัวเองบ้าง แนะนำให้ใช้ บริการ 3D Printing ออกแบบและปริ้นท์เคสสไตล์ "Mini Server Rack" หรือ "กล่องติดกำแพง (Wall Mount)" เพื่อจัดระเบียบสายไฟให้ดูเนี๊ยบระดับโปร! ใครกำลังมองหา บอร์ด ESP32, เซนเซอร์ต่างๆ หรืออยากใช้ บริการรับปริ้นท์ 3D Printing แวะมาใช้บริการได้ที่ Globalbyte เลยครับ เรามีอุปกรณ์และเส้นพลาสติกคุณภาพสูงพร้อมตอบโจทย์ทุกไอเดีย
ฟีเจอร์สุดเดือดในพื้นที่ 520 KB (Features)
เห็นบอร์ดเล็กๆ แบบนี้ แต่เฟิร์มแวร์ถูกเขียนมาให้ดุดันมากครับ เช่น:
Real-time Updates: ข้อมูลเซนเซอร์บนหน้าเว็บขยับได้เองทุกๆ 5 วินาทีโดยไม่ต้องกดรีเฟรชหน้าเว็บ (ใช้ระบบ Server-Sent Events ผ่าน WebSocket)
Guestbook: มีสมุดเยี่ยมให้คนเข้ามาฝากข้อความได้ (แถมมีระบบแจ้งเตือนเข้าอีเมลแอดมินด้วย)
Heap Safety Net: ถ้าแรมเหลือน้อยกว่า 20 KB บอร์ดจะสั่งรีบูตตัวเองทันทีเพื่อป้องกันอาการเครื่องค้าง (แถมบูตกลับมาไวปานกามนิต)
Cloudflare Edge Backup: ในกรณีที่เน็ตบ้านหลุด ตัว Cloudflare Worker ก็ยังมีหน้าเว็บสแตติก (Static) หรือหน้า Maintenance โชว์รอไว้ให้
ข้อจำกัดที่ต้องรู้ (Limitations)
แน่นอนว่ามันคือไมโครคอนโทรลเลอร์ราคาหลักร้อย มันเลยมีข้อจำกัดที่ต้องเข้าใจถ้านำไปใช้งานจริงครับ:
รับคนได้น้อย (Concurrency): รับคนเข้าใช้งานพร้อมๆ กันได้แค่ประมาณ 5 คน ถ้ามากกว่านั้นเว็บจะเริ่มอืด
SD Card อาจพังไวกว่าปกติ: เพราะต้องเขียน Log เซนเซอร์ลงเมมโมรีการ์ดทุกๆ 5 นาที (ควรเปลี่ยน SD Card ทุกปี)
No HTTPS ฝั่ง Local: ถ้าเราเข้าหลังบ้าน (Admin panel) ผ่านวงแลนที่บ้าน ข้อมูลจะวิ่งเป็น HTTP ธรรมดาครับ ไม่ได้เข้ารหัส SSL เหมือนบน Cloudflare
คลิกดูตารางต่อสายไฟ (Wiring) และขั้นตอนการ Setup ฉบับลึก (View more) ซ่อนข้อมูลการ Setup (View less)
หน้าตาบอร์ดและเซนเซอร์ที่ประกอบเสร็จแล้ว
การต่อสายวงจร (Wiring)
อุปกรณ์ / ขา (Signal)
ESP32 Pin
I²C SDA (BME280, CCS811, OLED)
GPIO 21
I²C SCL (BME280, CCS811, OLED)
GPIO 22
SD CS
GPIO 5
SD MOSI
GPIO 23
SD MISO
GPIO 19
SD SCK
GPIO 18
Status LED (ไฟสถานะคนเข้าเว็บ)
GPIO 33
Notification LED (ไฟแจ้งเตือน Guestbook)
GPIO 32
CCS811 WAKE
GND
สรุปขั้นตอนการ Setup (แบบคร่าวๆ)
Firmware: Clone โปรเจกต์จาก GitHub แล้วใช้ PlatformIO อัปโหลดโค้ดลงบอร์ด
SD Card: ฟอร์แมต Micro SD เป็น FAT32 แล้วก๊อปปี้โฟลเดอร์ data/ จากโปรเจกต์ไปใส่ใน Root ของ SD Card
ตั้งค่า Config: เปลี่ยนชื่อไฟล์ config.example.txt เป็น config.txt แล้วใส่รหัส Wi-Fi รวมถึงรหัสผ่านแอดมินลงไป
Cloudflare Worker (สำหรับต่อเน็ตสาธารณะ): ใช้คำสั่ง Wrangler เพื่อสร้าง Shared secret สำหรับคุยกันระหว่างบอร์ดกับคลาวด์
# Generate a shared secret
openssl rand -hex 32
cd worker
wrangler deploy
wrangler secret put WORKER_SECRET
ใครอยากเพิ่มความปลอดภัย ก็สามารถเปิดใช้งาน HMAC device auth หรือเชื่อมต่อ SMTP2GO เพื่อให้มันอีเมลมาบอกเราเวลามีคนพิมพ์สมุดเยี่ยม หรือแม้กระทั่งเซ็ตอัปการ Backup ไฟล์ใน SD Card อัตโนมัติขึ้น Cloudflare R2 ก็ได้นะ!
บทสรุป
โปรเจกต์ HelloESP พิสูจน์ให้เราเห็นว่า ด้วยความรู้ด้าน Web Engineering การจัดสรรหน่วยความจำที่ดี และการรีดประสิทธิภาพฮาร์ดแวร์ให้สุด เราสามารถเปลี่ยนไมโครคอนโทรลเลอร์บ้านๆ ให้กลายเป็นเซิร์ฟเวอร์สุดแกร่งได้ ใครอยากลองเอาไปรันเว็บไซต์พอร์ตโฟลิโอ (Portfolio) หรือเว็บโชว์สภาพอากาศที่บ้านตัวเอง ก็ไปลุยกันได้เลยครับ!
*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงแนวคิดจากโปรเจกต์ต้นฉบับภาษาอังกฤษ ข้อมูลด้านการตั้งค่าเครือข่ายและการใช้งาน Cloudflare อาจต้องใช้ความรู้ด้าน Web Development เพิ่มเติม ผู้สนใจสามารถศึกษารายละเอียดเชิงลึก ข้อควรระวังเรื่องการรับโหลดของเซิร์ฟเวอร์ (Concurrency limits) และการตั้งค่าความปลอดภัยแบบเต็มรูปแบบได้จาก
GitHub ต้นฉบับ