ในบทสอนนี้ พี่จะพาน้องๆ ไปต่อเซนเซอร์ BME280 กับ ESP32 เพื่ออ่านค่าอุณหภูมิ ความชื้น และความกดอากาศ แล้วอัพโหลดข้อมูลขึ้น ThingSpeak แบบเรียลไทม์ โปรเจคแบบนี้แหละที่ใช่สำหรับงาน IoT อย่างสถานีตรวจอากาศในบ้านหรือระบบตรวจสภาพแวดล้อม งานเข้าจัดไปวัยรุ่น!
BME280 คืออะไร?

BME280 เป็นเซนเซอร์ขั้นสูงจาก Bosch ที่สามารถวัดค่าสิ่งแวดล้อมได้สามอย่าง: อุณหภูมิ, ความชื้นสัมพัทธ์ และความกดอากาศ ด้วยการกินไฟน้อยและขนาดกะทัดรัด เลยฮิตใช้ในโปรเจค IoT ต่างๆ
คุณสมบัติหลัก:
ช่วงอุณหภูมิ: -40 ถึง 85 °C
ช่วงความชื้น: 0% ถึง 100%
ช่วงความดัน: 300 ถึง 1100 hPa
การสื่อสาร: I2C (ที่ใช้ในบทสอนนี้) และ SPI
อุปกรณ์ที่ต้องเตรียม
ก่อนเริ่ม ตรวจสอบให้แน่ใจว่าน้องมีอุปกรณ์เหล่านี้ครบ:
ESP32
เซนเซอร์ BME280 (เวอร์ชัน I2C)
สายจัมเปอร์
บัญชีบน ThingSpeak
บอร์ด Esp32

พินหัวเมีย

สายจัมเปอร์ หัวเมีย-หัวผู้

PCB


ไฟล์ Gerber สำหรับผลิต PCB สามารถดาวน์โหลดได้จากแหล่งข้อมูลที่เกี่ยวข้อง
วงจร

การต่อเซนเซอร์ BME280 เข้ากับ ESP32
เราจะใช้อินเตอร์เฟซ I2C ในการเชื่อมต่อ ตามนี้เลยน้อง ห้ามช็อตนะตัวนี้:
การต่อสาย I2C:
VCC (BME280) → 3.3V (ESP32)
GND (BME280) → GND (ESP32)
SDA (BME280) → GPIO 21 (ESP32)
SCL (BME280) → GPIO 22 (ESP32)
ทิปเล็กน้อย: ถ้าเซนเซอร์ BME280 ของน้องไม่มีตัวต้านทานดึงขึ้น (Pull-up Resistor) ในตัวบนเส้น SDA และ SCL ให้เพิ่มตัวต้านทานภายนอก 4.7kΩ ระหว่างแต่ละเส้นกับไฟ 3.3V ด้วยล่ะ
ทิปเล็กน้อย: ถ้าเซนเซอร์ BME280 ของน้องไม่มีตัวต้านทานดึงขึ้น (Pull-up Resistor) ในตัวบนเส้น SDA และ SCL ให้เพิ่มตัวต้านทานภายนอก 4.7kΩ ระหว่างแต่ละเส้นกับไฟ 3.3V ด้วยล่ะ
ตั้งค่า ThingSpeak
ก่อนอัพโหลดข้อมูล ต้องตั้งค่า ThingSpeak ก่อน:
สร้างบัญชี ThingSpeak ถ้ายังไม่มี
สร้างช่องใหม่ (Channel) พร้อมฟิลด์ที่ต้องการ (เช่น "Temperature", "Humidity" และ "Pressure")
เมื่อสร้างเสร็จ ให้คัดลอกคีย์ API สำหรับเขียนข้อมูล (Write API Key) มาไว้ใช้ในโค้ดเพื่อส่งข้อมูลขึ้นไป สู้งานนะน้อง!
Cloud Graphing API (ThingSpeak)
ThingSpeak (สร้างโดย MathWorks) เป็นแพลตฟอร์ม IoT analytics ที่รับข้อมูลตัวเลขดิบจากไมโครคอนโทรลเลอร์แล้วแปลงเป็นกราฟสดสวยๆ ให้อัตโนมัติเลย
- ขั้นตอนตั้งค่า: สร้าง "Channel" ฟรีบน ThingSpeak แล้วจะได้ Write API Key มาเป็นชุดตัวอักษร-ตัวเลขยาวๆ หนึ่งก้อน
- ขั้นตอนเก็บข้อมูลผ่าน I2C: ในฟังก์ชัน
loop()ของ ESP32 จะไปถามข้อมูลจากโมดูล BME280 ผ่านพินSDA/SCLเพื่อดึงค่าทศนิยมสามค่ามา คือTemp, Humidity, Pressure - ขั้นตอนสร้างคำขอเว็บ: ต้องสร้าง URL string ที่มีรูปแบบเฉพาะเจาะจงมากๆ ขึ้นมา
String url = "http://api.thingspeak.com/update?api_key=" + MY_API_KEY + "&field1=" + String(Temp) + "&field2=" + String(Humidity);
การ Execute HTTP POST
- โค้ดจะใช้ไลบรารี่
<WiFi.h>และ<HTTPClient.h>ในการทำงาน - ESP32 จะเชื่อมต่อกับเราเตอร์ Wi-Fi ที่บ้านเราอย่างรวดเร็ว
- จากนั้นก็
http.begin(url); int httpCode = http.GET(); - มันจะ "เข้าไปเยี่ยมชม" URL ยาวๆ นั้นแบบเงียบๆ โดยที่เราไม่เห็นนั่นเอง เซิร์ฟเวอร์ของ ThingSpeak เห็นการเข้าเว็บนั้น ก็จะดึงค่าตัวเลข
TempและHumidityที่ซ่อนอยู่ในที่อยู่เว็บออกมา แล้วนำไปเพิ่มลงในกราฟได้อย่างแม่นยำ! - กระบวนการทั้งหมดใช้เวลาประมาณ 2 วินาทีเท่านั้น หลังจากนั้นโค้ดจะสั่ง
delay(60000)(หรือให้เข้าสู่โหมด deep sleep) เพื่อให้มันส่งข้อมูลแค่ทุกๆ 1 นาที
อุปกรณ์ฮาร์ดแวร์สำหรับเครือข่าย
- ESP32 Dev Module: มีเสาอากาศ Wi-Fi 2.4GHz ในตัวและ RAM ขนาดใหญ่ที่รองรับ SSL
- Bosch BME280 Breakout Board (วัดอุณหภูมิ/ความชื้น/ความกดอากาศ)
- แหล่งจ่ายไฟ USB ที่เสถียร (ห้ามช็อตนะตัวนี้ ไม่งั้นงานพังแน่!)