เนื้อหาในบทความ
🎯 ภาพรวมโปรเจกต์
ในบทความนี้ เราจะมาสร้างสถานีตรวจวัดอากาศ (Weather Station) แบบง่ายด้วย Raspberry Pi Pico W ไมโครคอนโทรลเลอร์ราคาประหยัดที่มาพร้อม WiFi ในตัว และเซ็นเซอร์ DHT11 สำหรับวัดอุณหภูมิและความชื้น
โปรเจกต์นี้เหมาะสำหรับ:
- ผู้เริ่มต้นที่ต้องการเรียนรู้ IoT
- โปรเจกต์ STEM สำหรับนักเรียน
- การติดตามสภาพอากาศในบ้าน
- พื้นฐานสำหรับโปรเจกต์ IoT ขั้นสูง
🎁 สิ่งที่คุณจะได้เรียนรู้
- ✅ การใช้งาน Raspberry Pi Pico W กับ MicroPython
- ✅ การอ่านค่าจากเซ็นเซอร์ DHT11
- ✅ การเชื่อมต่อ WiFi และส่งข้อมูลไปยัง CynoIoT Platform
- ✅ การสร้าง Dashboard ติดตามข้อมูลแบบ Real-time
🔧 อุปกรณ์ที่ต้องใช้
Hardware
- •Raspberry Pi Pico W
ราคา ~฿350
- •เซ็นเซอร์ DHT11
ราคา ~฿40
- •ตัวต้านทาน 10kΩ
(มีมากับ DHT11 บางรุ่น)
- •สาย Jumper & Breadboard
สำหรับต่อวงจร
- •สาย Micro USB
สำหรับจ่ายไฟและโปรแกรม
Software & Tools
- •Thonny IDE
สำหรับเขียน MicroPython
- •MicroPython Firmware
ติดตั้งบน Pico W
- •บัญชี CynoIoT
สมัครฟรีที่ cynoiot.com
💡 เกร็ดความรู้: Raspberry Pi Pico W คือรุ่นที่มาพร้อม WiFi (INFINEW CYW43439) ทำให้สามารถเชื่อมต่ออินเทอร์เน็ตและส่งข้อมูล IoT ได้ทันที
🔌 การต่อวงจร
ต่อวงจรดังนี้:
| DHT11 Pin | Pico W Pin | หมายเหตุ |
|---|---|---|
| VCC (ยี่ห้อ DHT11 สีแดง) | 3V3 (Pin 36) | 3.3V |
| DATA (สีเหลือง) | GP0 (Pin 1) | สายสัญญาณ |
| GND (สีดำ) | GND (Pin 38) | กราวด์ |
⚠️ ข้อควรระวัง: ต้องต่อตัวต้านทาน 10kΩ ระหว่าง VCC และ DATA (Pull-up resistor) เพื่อให้สัญญาณทำงานถูกต้อง DHT11 บางรุ่นมีมาในตัว
💻 การติดตั้งซอฟต์แวร์
ขั้นตอนที่ 1: ติดตั้ง MicroPython บน Pico W
- ดาวน์โหลด MicroPython firmware สำหรับ Raspberry Pi Pico W จาก เว็บไซต์ Raspberry Pi
- กดปุ่ม BOOTSEL บน Pico W ค้างไว้ แล้วเสียบสาย USB
- Pico W จะปรากฏเป็นไดรฟ์ RPI-RP2
- ลากไฟล์ .uf2 ที่ดาวน์โหลดมาวางในไดรฟ์
- รอสักครู่ Pico W จะรีสตาร์ทและพร้อมใช้งาน
ขั้นตอนที่ 2: ติดตั้ง Thonny IDE
ดาวน์โหลดและติดตั้ง Thonny IDE จาก thonny.org แล้วเปิดโปรแกรมขึ้นมา
- เสียบ Pico W เข้ากับคอมพิวเตอร์ด้วยสาย Micro USB
- ใน Thonny ไปที่ Tools → Options → Interpreter
- เลือก "MicroPython (Raspberry Pi Pico)"
- กด OK เพื่อเชื่อมต่อ
- ดูที่ Shell ด้านล่าง จะเห็น prompt >>> แสดงว่าเชื่อมต่อสำเร็จ
🐍 โค้ด MicroPython
สร้างไฟล์ใหม่ชื่อ main.py แล้ววางโค้ดนี้:
# Raspberry Pi Pico W Weather Station
# วัดอุณหภูมิและความชื้นด้วย DHT11 ส่งข้อมูลไป CynoIoT
import machine
import network
import time
import urequests as requests
from machine import Pin
import dht
# ========== การตั้งค่า ==========
# แก้ไข WiFi และ CynoIoT credentials ของคุณที่นี่
WIFI_SSID = "your_wifi_ssid"
WIFI_PASSWORD = "your_wifi_password"
CYNOIOT_API_KEY = "your_cynoiot_api_key" # ได้จาก cynoiot.com
DEVICE_ID = "your_device_id"
# DHT11 sensor settings
DHT_PIN = 0 # GP0
# เวลาในการส่งข้อมูล (วินาที)
SEND_INTERVAL = 60 # ส่งทุก 1 นาที
# ========== เริ่มต้นใช้งานเซ็นเซอร์ ==========
print("เริ่มต้นสถานีตรวจวัดอากาศ...")
# เริ่มต้น DHT11 sensor
dht_sensor = dht.DHT11(machine.Pin(DHT_PIN))
# ========== เชื่อมต่อ WiFi ==========
def connect_wifi():
"""เชื่อมต่อ WiFi"""
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('กำลังเชื่อมต่อ WiFi...')
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
# รอให้เชื่อมต่อสำเร็จ
timeout = 20
while not wlan.isconnected() and timeout > 0:
print('.', end='')
time.sleep(1)
timeout -= 1
if wlan.isconnected():
print('\n✅ เชื่อมต่อ WiFi สำเร็จ!')
print('IP Address:', wlan.ifconfig()[0])
else:
print('\n❌ ไม่สามารถเชื่อมต่อ WiFi ได้')
return None
return wlan
# ========== อ่านค่าจาก DHT11 ==========
def read_dht11():
"""อ่านค่าอุณหภูมิและความชื้นจาก DHT11"""
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
print(f'🌡️ อุณหภูมิ: {temperature}°C')
print(f'💧 ความชื้น: {humidity}%')
return {
'temperature': temperature,
'humidity': humidity
}
except OSError as e:
print('❌ ไม่สามารถอ่านค่าจาก DHT11 ได้:', e)
return None
# ========== ส่งข้อมูลไป CynoIoT ==========
def send_to_cynoiot(data):
"""ส่งข้อมูลไปยัง CynoIoT Platform"""
url = f"https://www.cynoiot.com/api/devices/{DEVICE_ID}/data"
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {CYNOIOT_API_KEY}'
}
payload = {
'temperature': data['temperature'],
'humidity': data['humidity'],
'timestamp': time.time()
}
try:
response = requests.post(url, json=payload, headers=headers, timeout=10)
if response.status_code == 200:
print('✅ ส่งข้อมูลไป CynoIoT สำเร็จ')
else:
print(f'⚠️ ส่งข้อมูลไม่สำเร็จ: {response.status_code}')
except Exception as e:
print(f'❌ ข้อผิดพลาดในการส่งข้อมูล: {e}')
# ========== Main Loop ==========
def main():
"""ฟังก์ชันหลัก"""
# เชื่อมต่อ WiFi
wlan = connect_wifi()
if wlan is None:
print('ไม่สามารถดำเนินการต่อได้ หยุดโปรแกรม')
return
print('--- เริ่มต้นการทำงาน ---')
while True:
# อ่านค่าจากเซ็นเซอร์
sensor_data = read_dht11()
if sensor_data:
# ส่งข้อมูลไป CynoIoT
send_to_cynoiot(sensor_data)
# รอจนถึงเวลาส่งครั้งถัดไป
print(f'รอ {SEND_INTERVAL} วินาที...\n')
time.sleep(SEND_INTERVAL)
# ========== รันโปรแกรม ==========
if __name__ == '__main__':
main()💡 เคล็ดลับ: อย่าลืมแก้ไข WIFI_SSID, WIFI_PASSWORD, CYNOIOT_API_KEY และ DEVICE_ID ก่อนอัปโหลดโค้ด
🌐 การเชื่อมต่อ CynoIoT Platform
CynoIoT Platform เป็นแพลตฟอร์ม IoT ที่ช่วยให้คุณเก็บข้อมูลและติดตามสถานะอุปกรณ์ได้ง่าย
ขั้นตอนการรับ API Key
- ไปที่ cynoiot.com และล็อกอิน (สมัครฟรี)
- ไปที่เมนู Devices → Add Device
- ตั้งชื่ออุปกรณ์ (เช่น "Pico W Weather Station")
- เลือกประเภทเป็น "Sensor"
- คัดลอก Device ID และ API Key
- วางในโค้ด MicroPython ที่เตรียมไว้
✅ เสร็จแล้ว! ตอนนี้ข้อมูลอุณหภูมิและความชื้นจะถูกส่งไปยัง CynoIoT ทุกๆ 1 นาที คุณสามารถดูข้อมูลได้ที่ Dashboard บนเว็บไซต์
🧪 การทดสอบระบบ
หลังจากอัปโหลดโค้ดแล้ว ให้ตรวจสอบ Shell ใน Thonny:
เริ่มต้นสถานีตรวจวัดอากาศ...
กำลังเชื่อมต่อ WiFi...
......
✅ เชื่อมต่อ WiFi สำเร็จ!
IP Address: 192.168.1.100
--- เริ่มต้นการทำงาน ---
🌡️ อุณหภูมิ: 28.5°C
💧 ความชื้น: 65%
✅ ส่งข้อมูลไป CynoIoT สำเร็จ
รอ 60 วินาที...หากเห็นข้อความดังกล่าว แสดงว่าระบบทำงานได้ถูกต้อง! ไปที่ CynoIoT Dashboard เพื่อดูข้อมูลแบบ Real-time
🔧 การแก้ปัญหาที่พบบ่อย
ปัญหา: DHT11 อ่านค่าไม่ได้
สาเหตุ: ต่อสายผิด หรือไม่มี pull-up resistor
วิธีแก้: ตรวจสอบการต่อสาย VCC, DATA, GND ให้ถูกต้อง และต่อตัวต้านทาน 10kΩ ระหว่าง VCC และ DATA
ปัญหา: เชื่อมต่อ WiFi ไม่ได้
สาเหตุ: ชื่อ WiFi หรือรหัสผ่านผิด
วิธีแก้: ตรวจสอบ WIFI_SSID และ WIFI_PASSWORD ในโค้ด ลองใช้ Hotspot จากมือถือทดสอบก่อน
ปัญหา: ส่งข้อมูลไป CynoIoT ไม่ได้
สาเหตุ: API Key หรือ Device ID ผิด
วิธีแก้: ตรวจสอบ CYNOIOT_API_KEY และ DEVICE_ID ลองส่งด้วย Postman หรือ curl ทดสอบ API ก่อน
ปัญหา: Pico W รีสตาร์ทเอง
สาเหตุ: ใช้กระแสไฟเกิน หรือ USB ไม่เสถียร
วิธีแก้: ใช้แหล่งจ่ายไฟที่เสถียร หรือใช้ USB Hub ที่มีแหล่งจ่ายไฟภายนอก
🎉 สรุป
ยินดีด้วย! ตอนนี้คุณได้สร้างสถานีตรวจวัดอากาศเบื้องต้นสำเร็จแล้ว
สิ่งที่คุณได้เรียนรู้:
- การใช้งาน Raspberry Pi Pico W กับ MicroPython
- การอ่านค่าจากเซ็นเซอร์ DHT11
- การเชื่อมต่อ WiFi
- การส่งข้อมูล IoT ไปยัง CynoIoT Platform
🚀 ถัดไป: ขั้นตอนต่อไป
- • ติดตั้งแผงโซลาร์เซลล์เพื่อให้ใช้งานได้ทุกที่
- • เพิ่มเซ็นเซอร์วัดความดัน (BMP280)
- • สร้างกราฟและแดชบอร์ดสวยๆ ด้วย CynoIoT
- • ตั้งแจ้งเตือนเมื่ออุณหภูมิสูงเกินไป
- • ปรับเปลี่ยนเป็น DHT22 สำหรับความแม่นยำสูง
📚 บทความที่เกี่ยวข้อง
เริ่มต้นใช้งาน RP2040 (Raspberry Pi Pico)
คู่มือฉบับสมบูรณ์สำหรับการเริ่มต้นใช้งาน Raspberry Pi Pico ด้วย MicroPython
สอนใช้งาน ESP32 กับ MQTT
เรียนรู้วิธีเชื่อมต่อ ESP32 กับ MQTT Broker เพื่อส่งข้อมูลแบบ Real-time
เปรียบเทียบ DHT11 vs DHT22 vs DS18B20
เลือกเซ็นเซอร์วัดอุณหภูมิที่เหมาะกับงานของคุณ
ดูบทความทั้งหมด
สำรวจบทความและคู่มือ IoT อื่นๆ อีกมากมาย