สร้างสถานีตรวจวัดอากาศด้วย Raspberry Pi Pico W และ DHT11

เรียนรู้วิธีสร้าง Weather Station แบบ DIY ด้วย Raspberry Pi Pico W และเซ็นเซอร์ DHT11 วัดอุณหภูมิและความชื้น ส่งข้อมูลไปยัง CynoIoT Platform พร้อมติดตามผ่านมือถือ

📅 9 มีนาคม 2026⏱️ 15 นาที🎯 ระดับเริ่มต้น💰 งบประมาณ ~฿450

🎯 ภาพรวมโปรเจกต์

ในบทความนี้ เราจะมาสร้างสถานีตรวจวัดอากาศ (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 PinPico 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

  1. ดาวน์โหลด MicroPython firmware สำหรับ Raspberry Pi Pico W จาก เว็บไซต์ Raspberry Pi
  2. กดปุ่ม BOOTSEL บน Pico W ค้างไว้ แล้วเสียบสาย USB
  3. Pico W จะปรากฏเป็นไดรฟ์ RPI-RP2
  4. ลากไฟล์ .uf2 ที่ดาวน์โหลดมาวางในไดรฟ์
  5. รอสักครู่ Pico W จะรีสตาร์ทและพร้อมใช้งาน

ขั้นตอนที่ 2: ติดตั้ง Thonny IDE

ดาวน์โหลดและติดตั้ง Thonny IDE จาก thonny.org แล้วเปิดโปรแกรมขึ้นมา

  1. เสียบ Pico W เข้ากับคอมพิวเตอร์ด้วยสาย Micro USB
  2. ใน Thonny ไปที่ Tools → Options → Interpreter
  3. เลือก "MicroPython (Raspberry Pi Pico)"
  4. กด OK เพื่อเชื่อมต่อ
  5. ดูที่ 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

  1. ไปที่ cynoiot.com และล็อกอิน (สมัครฟรี)
  2. ไปที่เมนู Devices → Add Device
  3. ตั้งชื่ออุปกรณ์ (เช่น "Pico W Weather Station")
  4. เลือกประเภทเป็น "Sensor"
  5. คัดลอก Device ID และ API Key
  6. วางในโค้ด 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 สำหรับความแม่นยำสูง

📚 บทความที่เกี่ยวข้อง