Introduction
ในโลกของ IoT (Internet of Things) นะน้อง เซนเซอร์วัดอุณหภูมิไร้สายเนี่ยมันสำคัญมากๆ เลยสำหรับการตรวจสอบสภาพแวดล้อมอย่างอุณหภูมิและความชื้น ไม่ว่าน้องจะสนใจเรื่องระบบบ้านอัตโนมัติ (Home Automation) การเกษตรอัจฉริยะ หรือแค่ลองเล่นเทคโนโลยีใหม่ๆ การสร้างเครือข่ายเซนเซอร์ไร้สายของตัวเองเนี่ยมันเป็นโปรเจคที่ทั้งตื่นเต้นและได้ความรู้สุดๆ ในบทความนี้ พี่จะพาน้องๆ ไปสร้างเซนเซอร์วัดอุณหภูมิและความชื้นไร้สายด้วยไมโครคอนโทรลเลอร์ ESP32 และโปรโตคอลการสื่อสาร ESP-NOW กัน
ESP-NOW คืออะไร?
ESP-NOW เป็นโปรโตคอลการสื่อสารไร้สายแบบ peer-to-peer ที่ใช้พลังงานต่ำ พัฒนาโดย Espressif ผู้สร้าง ESP32 นั่นแหละ ต่างจาก Wi-Fi หรือ Bluetooth นะ ESP-NOW เนี่ยมันให้อุปกรณ์คุยกันตรงๆ ได้เลยโดยไม่ต้องพึ่งเราเตอร์หรือจุดเชื่อมต่อ (Access Point) ทำให้มันเหมาะมากสำหรับงานที่ต้องการความหน่วงต่ำและกินไฟน้อย เช่น เซนเซอร์ที่ใช้แบตเตอรี่
Step 1: ออกแบบกันก่อน
Requirements (ข้อกำหนด)
- เซนเซอร์ต้องเป็นแบบไร้สาย
- ต้องใช้พลังงานจากแบตเตอรี่
- ต้องใช้งานได้นานถึง 6 เดือนต่อการชาร์จหนึ่งครั้ง
Components Required (อุปกรณ์ที่ต้องใช้)
มาเริ่มกันเลย น้องต้องเตรียมอุปกรณ์เหล่านี้ให้พร้อม:
- ไมโครคอนโทรลเลอร์ ESP32: หัวใจหลักของโปรเจค ขึ้นชื่อเรื่องความสามารถในการประมวลผลและคุณสมบัติไร้สายในตัว เราจะใช้โมดูล ESP8685-WROOM-03 ซึ่งอยู่ในตระกูลชิป ESP32-C3
- เซนเซอร์ DHT11 หรือ DHT22: เซนเซอร์วัดอุณหภูมิและความชื้นที่เชื่อถือได้
- แบตเตอรี่: เราจะใช้แบตเตอรี่ลิเธียม 3.7V 500mAh ในการจ่ายไฟให้ระบบ MCP1700: ตัวควบคุมแรงดันไฟ (Voltage Regulator) 3.3V ที่มีแรงดันตกคร่อม (Dropout Voltage) ต่ำมาก
AMS1117 3.3 vs MCP1700 3.3
AMS1117 เป็นไอซีควบคุมแรงดันราคาถูกและน่าเชื่อถือ แต่มันมีแรงดันตกคร่อม (Dropout Voltage) ถึง 1V เพราะแบตเตอรี่ของเราให้ไฟสูงสุดแค่ 4.2 โวลต์ตอนเต็ม เราจึงไม่สามารถดึงไฟ 3.3V ออกมาจาก AMS1117 ด้วยแรงดันนั้นได้ ดังนั้นเราจะใช้ MCP1700 แทน ซึ่งมีแรงดันตกคร่อมแค่ 150mV เท่านั้นเอง ตัวนี้แหละที่ใช่!
Step 2: ออกแบบและสั่งทำ PCB
- ออกแบบให้กะทัดรัด
- มีจุดต่อขั้วแบตเตอรี่ (Battery Input Pads)
- มีไฟ LED สำหรับแสดงสถานะ
- มีปุ่มกด
พอออกแบบเสร็จ พี่ก็อัพโหลดไฟล์ขึ้น Altium365 เพื่อแชร์ให้น้องๆ ดูกัน
หลังจากที่ออกแบบ PCB เสร็จเรียบร้อยแล้ว ก็ถึงเวลาสั่งทำ PCB จาก NextPCB ได้เลย
รอของมาส่งถึงบ้านได้เลยวัยรุ่น!
Step 3: ประกอบชิ้นส่วน (Assembly)
การประกอบ PCB เราทำเป็นสองเฟสนะ
1. การประกอบชิ้นส่วนแบบ SMD
2. การประกอบชิ้นส่วนแบบ THT

Step 4: เขียนโค้ดและทดสอบ
เมื่อเซ็ตฮาร์ดแวร์เสร็จแล้ว ก็ถึงเวลาเขียนโค้ดกัน เราจะใช้ Arduino IDE ในการโปรแกรม ESP32 ถ้าน้องยังไม่ได้ติดตั้งบอร์ด ESP32 ใน Arduino IDE ล่ะก็ ไปหาวิธีติดตั้งตามในอินเตอร์เน็ตได้เลย มีสอนเยอะแยะ
Low-Power Optimization: Wireless Temp Node
การรัน Arduino ด้วยแบตเตอรี่เนี่ย มันมักจะแบตหมดเกลี้ยงภายในสองวัน แต่เจ้า Wireless Battery-Powered Temp Sensor ตัวนี้เน้นไม่ใช่ที่ตัวเซนเซอร์ แต่เน้นที่ การจัดการพลังงานขั้นสุด (Power Profiling) จนสามารถใช้งานได้หลายเดือนหรือแม้กระทั่งหนึ่งปีด้วยแบตเตอรี่ถ่านกระดุมก้อนเดียว! งานนี้จัดไปเต็มๆ
Deep Sleep Operations
เคล็ดลับอยู่ที่ไลบรารี่ `LowPower` หรือ `avr/sleep.h` นี่แหละน้อง เราทำให้ ESP8685 ของเราหลับลึก (Deep Sleep) ได้เพื่อประหยัดพลังงานให้มากที่สุด
- The Wake Up (ตื่นนอน): Arduino ตื่นขึ้นมาทันทีทันใด
- The Job (ทำงาน): มันอ่านค่าจากเซนเซอร์อย่างรวดเร็ว เปิดโมดูลวิทยุ ส่งแพ็กเก็ตข้อมูลไปยังฮับกลางภายในเวลาไม่กี่มิลลิวินาที แล้วก็ปิดวิทยุลงทันที เร็วปึ๊งปั๊ง!
มาเริ่มคำนวณอายุแบตเตอรี่ด้วยการตั้งเวลาใหม่กันเถอะน้อง:
ขั้นตอนที่ 1: คำนวณการกินกระแสรวมต่อหนึ่งรอบการทำงาน (โหมดตื่น + โหมดหลับ)
โหมดตื่น (Active mode):
- กระแส: 80mA
- ระยะเวลา: 0.3 วินาที
- พลังงานที่ใช้: 80 mA x 0.3 วินาที = 24 mA-วินาที
โหมดหลับลึก (Deep sleep mode):
- กระแส (ประมาณ): ~0.01mA (10µA)
- ระยะเวลา: 60 วินาที (1 นาที)
- พลังงานที่ใช้: 0.01 mA x 60 วินาที = 0.6 mA-วินาที
พลังงานที่ใช้ทั้งหมดต่อรอบ:
- 24 mA-วินาที + 0.6 mA-วินาที = 24.6 mA-วินาที
ขั้นตอนที่ 2: คำนวณจำนวนรอบต่อชั่วโมง
- ระยะเวลาต่อรอบ: 0.3 วินาที + 60 วินาที = 60.3 วินาที
- จำนวนรอบต่อชั่วโมง: ประมาณ 59.7 รอบ/ชั่วโมง
ขั้นตอนที่ 3: คำนวณพลังงานที่ใช้ทั้งหมดต่อชั่วโมง
- 59.7 รอบ/ชั่วโมง x 24.6 mA-วินาที/รอบ = 1468.62 mA-วินาที/ชั่วโมง
- แปลง mA-วินาที เป็น mAh: 0.41mAh/ชั่วโมง
ขั้นตอนที่ 4: คำนวณอายุแบตเตอรี่
- ความจุแบตเตอรี่: 500mAh
- อายุแบตเตอรี่: 1219.5 ชั่วโมง
สรุป:
ESP32 จะทำงานได้ประมาณ 1219.5 ชั่วโมง ด้วยแบตเตอรี่ขนาด 500mAh ตามรูปแบบการกินไฟที่กำหนดไว้ นั่นก็คือประมาณ 50.8 วัน เลยทีเดียว งานนี้จัดไปวัยรุ่น!
การออปติไมซ์ฮาร์ดแวร์
- ESP32-C3 (ESP8685-WROOM-03): ห้ามใช้บอร์ดที่มีชิป USB กินไฟจัดและไฟ LED ติดตลอดเวลาเด็ดขาด เราใช้โมดูลเปล่าๆ ที่ถูกออกแบบมาสำหรับการทำงานแบบประหยัดไฟโดยเฉพาะ
- โปรโตคอล ESP-NOW: ช่วยให้สื่อสารได้โดยตรง แบบหน่วงต่ำ และกินไฟน้อย โดยไม่ต้องพึ่งเราเตอร์
- เรกูเลเตอร์แรงดัน MCP1700: ถูกเลือกเพราะมีแรงดันตกคร่อม (dropout voltage) ต่ำมาก ทำให้ใช้พลังงานจากแบตเตอรี่ได้เต็มประสิทธิภาพ
- แบตเตอรี่ 3.7V 500mAh
โปรเจคนี้พิสูจน์แล้วว่าน้องพร้อมจะออกแบบเซนเซอร์ IoT ระดับพาณิชย์ได้แล้ว สู้งานนะน้อง!
โค้ด
โค้ดสำหรับเซนเซอร์วัดอุณหภูมิ ESP-NOW มาพร้อมกับบทความนี้แล้ว แค่เอาไปอัปโหลดลงบอร์ดได้เลย
โค้ดสำหรับ ESP-NOW Slave (ตัวรับ) สำหรับบอร์ด Heltec ESP32 LoRa V2 ในการโปรแกรมบอร์ด Heltec ESP32 LoRa V2 น้องอาจต้องไปหาความรู้เพิ่มเติมจากแหล่งอื่นๆ นะ
หลังจากการทดสอบ เซนเซอร์ทำงานได้สมบูรณ์แบบ มันส่งค่าผ่านโปรโตคอล ESP-NOW ไปยังอุปกรณ์ Slave ได้สำเร็จ ห้ามช็อตนะตัวนี้!