เนื้อหาในบทความ
Pico 2 คืออะไร?
Raspberry Pi Pico 2 คือไมโครคอนโทรลเลอร์บอร์ดรุ่นที่สองจาก Raspberry Pi Foundation ที่มาพร้อมกับชิพ RP2350 ใหม่ล่าสุด ซึ่งเป็นการอัปเกรดครั้งใหญ่จากรุ่นแรก (RP2040) โดยมุ่งเน้นประสิทธิภาพที่ดีขึ้นและฟีเจอร์ใหม่ๆ ที่ตอบโจทย์การทำโปรเจกต์ IoT และ Embedded Systems ที่ซับซ้อนมากขึ้น
Pico 2 ยังคงรูปแบบฟอร์มแฟกเตอร์เดิมที่กะทัดรัด แต่มาพร้อมกับกำลังประมวลผลที่เร็วขึ้น หน่วยความจำมากขึ้น และความสามารถในการเชื่อมต่อที่หลากหลายกว่าเดิม ทำให้เหมาะสำหรับทั้งผู้เริ่มต้นและนักพัฒนาที่ต้องการพลังงานมากขึ้น
ความแตกต่างระหว่าง Pico 1 และ Pico 2
| ฟีเจอร์ | Pico 1 (RP2040) | Pico 2 (RP2350) |
|---|---|---|
| ชิพ | RP2040 | RP2350 |
| ความเร็ว CPU | 133 MHz (Dual-core) | 150 MHz (Dual-core) |
| SRAM | 264 KB | 520 KB |
| Flash บนบอร์ด | 2MB - 16MB | 4MB (Standard) |
| GPIO Pins | 26 พอร์ต (GP0-GP28) | 26 พอร์ต (GP0-GP28) |
| การรองรับ PIO | 2 State Machines | 4 State Machines |
| ราคาโดยประมาณ | ~฿150 | ~฿200-250 |
คุณสมบัติของ RP2350
1. ประสิทธิภาพดีขึ้น
- CPU เร็วขึ้น: 150 MHz เปรียบเทียบกับ 133 MHz ให้ประสิทธิภาพดีขึ้นประมาณ 13%
- หน่วยความจำมากขึ้น: 520 KB SRAM ให้พื้นที่มากขึ้นสำหรับตัวแปรและ buffer
- DMA channels: 12 channels เพิ่มขึ้นจาก 12 channels ใน RP2040
2. PIO ที่เหนือกว่า
PIO (Programmable I/O) บน RP2350 มาพร้อมกับ 4 State Machines เพิ่มขึ้นจาก 2 ใน RP2040 ทำให้สามารถจัดการ protocol ที่ซับซ้อนได้มากขึ้น เช่น:
- วิดีโอ output ที่ความละเอียดสูงขึ้น
- Motor control ที่ซับซ้อน
- Custom protocols หลายตัวพร้อมกัน
3. การเชื่อมต่อที่หลากหลาย
- 26 GPIO pins: รองรับ Digital I/O, ADC, PWM, I2C, SPI, UART
- 4 ADC channels: ความละเอียด 12-bit (0-3.3V)
- On-board LED: ใช้ GP25 เหมือนเดิม
4. รองรับภาษาโปรแกรมมิ่งหลากหลาย
- MicroPython
- CircuitPython
- C/C++ SDK
- Rust
- Arduino (พัฒนาอยู่)
อุปกรณ์ที่ต้องใช้
อุปกรณ์หลัก
- Raspberry Pi Pico 2 - ฿200-250
- Micro USB Cable - ฿50-100
- คอมพิวเตอร์/แล็ปท็อป - สำหรับเขียนโค้ด
อุปกรณ์เสริม (แนะนำ)
- Breadboard - ฿30-50
- Jumper wires - ฿40-60
- LED 5mm - ฿5-10/ชิ้น
- Resistors 330Ω - ฿5-10/ชิ้น
- Sensors (DHT11, DHT22, etc.) - ฿40-150
หมายเหตุ: หากคุณมี Pico รุ่นแรก (RP2040) อยู่แล้ว คุณสามารถใช้บทความ เริ่มต้นใช้งาน RP2040 แทนได้ ซึ่งยังคงใช้งานได้ดีและราคาถูกกว่า
การติดตั้ง MicroPython
ขั้นตอนที่ 1: ดาวน์โหลด MicroPython UF2
เข้าไปที่เว็บไซต์ Raspberry Pi Documentation และดาวน์โหลดไฟล์ UF2 สำหรับ Pico 2:
- ไฟล์ชื่อ:
micropython-rp2350.uf2 - เวอร์ชันล่าสุด: MicroPython v1.24.0 หรือใหม่กว่า
ขั้นตอนที่ 2: เชื่อมต่อ Pico 2 กับคอมพิวเตอร์
- กดปุ่ม BOOTSEL ค้างไว้บนบอร์ด Pico 2
- เสียบสาย Micro USB จาก Pico 2 เข้ากับคอมพิวเตอร์
- ปล่อยปุ่ม BOOTSEL เมื่อเห็นไดรฟ์ชื่อ
RPI-RP2ปรากฏบนคอมพิวเตอร์
ขั้นตอนที่ 3: ถอดถอย MicroPython UF2
- ลากไฟล์
micropython-rp2350.uf2ไปยังไดรฟ์RPI-RP2 - Pico 2 จะรีสตาร์ทและไดรฟ์จะหายไป
- MicroPython พร้อมใช้งานแล้ว!
เคล็ดลับ: ไดรฟ์ RPI-RP2 จะปรากฏเฉพาะเมื่อคุณกด BOOTSEL ขณะเสียบสาย USB เท่านั้น หลังจากถอดถอยไฟล์ UF2 แล้ว บอร์ดจะรีสตาร์ทเข้าสู่โหมดปกติ
โปรแกรมแรก: Blink LED
การเขียนโค้ดด้วย Thonny IDE
Thonny IDE เป็นโปรแกรมที่แนะนำสำหรับผู้เริ่มต้น เพราะใช้งานง่ายและมาพร้อมกับ MicroPython interpreter
ขั้นตอนการติดตั้ง Thonny:
- ดาวน์โหลดจาก thonny.org
- ติดตั้งตามระบบปฏิบัติการของคุณ
- เปิด Thonny และเชื่อมต่อ Pico 2 ผ่าน USB
- เลือก Tools > Options > Interpreter
- เลือก MicroPython (Raspberry Pi Pico)
- กด OK
โค้ดแรก: Blink On-board LED
นี่คือโค้ด MicroPython แรกของคุณ:
# โปรแกรม Blink LED บน Raspberry Pi Pico 2
# LED บนบอร์ดอยู่ที่ GPIO25
import machine # นำเข้าโมดูลสำหรับควบคุมฮาร์ดแวร์
import time # นำเข้าโมดูลสำหรับจัดการเวลา
# ตั้งค่า GPIO25 เป็น Output pin (สำหรับ LED บนบอร์ด)
led = machine.Pin("LED", machine.Pin.OUT)
# วนลูปไม่รู้จบ
while True:
led.value(1) # เปิด LED (High)
time.sleep(0.5) # รอ 0.5 วินาที
led.value(0) # ปิด LED (Low)
time.sleep(0.5) # รอ 0.5 วินาทีวิธีอัปโหลดโค้ด:
- คัดลอกโค้ดด้านบนวางใน Thonny IDE
- กดปุ่ม Run (▶) หรือ F5
- Thonny จะถามว่าต้องการบันทึกไฟล์ที่ไหน
- เลือก Raspberry Pi Pico
- ตั้งชื่อไฟล์เป็น
main.py - LED บนบอร์ดจะกระพริบ!
สำเร็จ! ไฟ LED บนบอร์ดควรกระพริบทุกๆ 0.5 วินาที หากไม่กระพริบ ให้ตรวจสอบการเชื่อมต่อ USB และลองกดปุ่ม Run อีกครั้ง
การใช้งาน GPIO
GPIO (General Purpose Input/Output) คือพอร์ตที่ใช้สำหรับเชื่อมต่อกับอุปกรณ์ภายนอก เช่น LED, sensors, motors, etc.
GPIO Pinout ของ Pico 2
- GP0-GP22: ใช้งานได้ทั้ง Input/Output
- GP23-GP28: เชื่อมต่อกับ Flash/ADC
- GP25: LED บนบอร์ด
- GP26-29: ADC channels 0-3
ตัวอย่าง: อ่านค่าจาก Digital Sensor
# ตัวอย่างการอ่านค่าจาก Motion Sensor (PIR)
# เชื่อมต่อ PIR OUT pin กับ GP16
import machine
import time
# ตั้งค่า GP16 เป็น Input (สำหรับรับสัญญาณจาก PIR)
pir = machine.Pin(16, machine.Pin.IN)
# ตั้งค่า LED บนบอร์ด
led = machine.Pin("LED", machine.Pin.OUT)
print("เริ่มต้นตรวจจับการเคลื่อนไหว...")
while True:
if pir.value() == 1: # ตรวจจับการเคลื่อนไหว
led.value(1) # เปิด LED
print("ตรวจพบการเคลื่อนไหว!")
else:
led.value(0) # ปิด LED
time.sleep(0.1) # ตรวจสอบทุกๆ 0.1 วินาทีตัวอย่าง: ใช้งาน PWM (Pulse Width Modulation)
PWM ใช้สำหรับควบคุมความสว่างของ LED หรือความเร็วมอเตอร์
# ตัวอย่างการควบคุมความสว่าง LED ด้วย PWM
# เชื่อมต่อ LED กับ GP15 ผ่านตัวต้านทาน 330Ω
import machine
import time
# ตั้งค่า PWM ที่ GP15
led_pwm = machine.PWM(machine.Pin(15))
led_pwm.freq(1000) # ความถี่ 1000 Hz
# เริ่มต้นด้วย LED ปิด
duty_cycle = 0
while True:
# เพิ่มความสว่างจนถึงสูงสุด
for duty_cycle in range(0, 65535, 100):
led_pwm.duty_u16(duty_cycle)
time.sleep(0.01)
# ลดความสว่างจนถึงต่ำสุด
for duty_cycle in range(65535, 0, -100):
led_pwm.duty_u16(duty_cycle)
time.sleep(0.01)ตัวอย่าง: อ่านค่า Analog Sensor
Pico 2 มี ADC 4 channels (GP26, GP27, GP28, GP29)
# ตัวอย่างการอ่านค่า Potentiometer (ตัวต้านทานปรับค่าได้)
# เชื่อมต่อ Potentiometer:
# - ขาด้านหนึ่ง -> 3V3 (3.3V)
# - ขาตรงกลาง -> GP26 (ADC0)
# - อีกขาหนึ่ง -> GND
import machine
import time
# ตั้งค่า ADC ที่ GP26 (ADC0)
adc = machine.ADC(26)
# อ่านค่าและแสดงผล
while True:
# อ่านค่า ADC (0-65535, 16-bit)
adc_value = adc.read_u16()
# แปลงเป็นแรงดันไฟฟ้า (0-3.3V)
voltage = (adc_value / 65535) * 3.3
# แสดงผล
print(f"ADC Value: {adc_value}, Voltage: {voltage:.2f}V")
time.sleep(0.5) # อ่านทุกๆ 0.5 วินาทีการเชื่อมต่อ CynoIoT
คุณสามารถเชื่อมต่อ Pico 2 กับ CynoIoT Platform เพื่อส่งข้อมูล sensor ไปยัง cloud และตรวจสอบผ่าน dashboard
หมายเหตุ: Pico 2 ไม่มี WiFi/Bluetooth ในตัว หากต้องการเชื่อมต่ออินเทอร์เน็ต คุณต้องใช้โมดูลเพิ่มเติม เช่น ESP8266, ESP32 หรือ Ethernet module
ตัวอย่าง: ส่งข้อมูลผ่าน UART ไปยัง ESP8266
# ตัวอย่างการส่งข้อมูล sensor ผ่าน UART
# เชื่อมต่อ Pico 2 UART0 (GP0=TX, GP1=RX) กับ ESP8266
import machine
import time
import json
# ตั้งค่า UART0 (สำหรับสื่อสารกับ ESP8266)
uart = machine.UART(0, baudrate=115200, tx=machine.Pin(0), rx=machine.Pin(1))
# ตั้งค่า ADC สำหรับอ่านค่า sensor
adc = machine.ADC(26)
while True:
# อ่านค่า sensor (เช่น อุณหภูมิ)
adc_value = adc.read_u16()
voltage = (adc_value / 65535) * 3.3
# สร้าง JSON payload
data = {
"sensor": "temperature",
"value": voltage,
"unit": "V",
"timestamp": time.ticks_ms()
}
# แปลงเป็น JSON string และส่งผ่าน UART
json_str = json.dumps(data)
uart.write(json_str + '\n')
print(f"ส่งข้อมูล: {json_str}")
time.sleep(5) # ส่งทุกๆ 5 วินาทีขั้นตอนการเชื่อมต่อ CynoIoT
- สมัครสมาชิกที่ cynoiot.com
- สร้าง Device ใหม่ใน Dashboard
- รับ MQTT credentials (broker, port, username, password)
- ใช้ ESP8266/ESP32 เชื่อมต่อกับ CynoIoT MQTT broker
- ส่งข้อมูลจาก Pico 2 ไปยัง ESP8266/ESP32 ผ่าน UART
- ดูข้อมูลใน Dashboard ได้เลย!
โปรเจกต์ตัวอย่าง
โปรเจกต์ 1: Weather Station วัดอุณหภูมิและความชื้น
ใช้ Pico 2 ต่อกับเซ็นเซอร์ DHT22 เพื่อวัดอุณหภูมิและความชื้น และแสดงผลบน Serial Monitor
# Weather Station ด้วย DHT22
# เชื่อมต่อ DHT22:
# - VCC -> 3V3
# - DATA -> GP16
# - GND -> GND
import machine
import time
# DHT22 sensor library (ติดตั้งด้วย Thonny: Tools > Manage Packages > dht)
from dht import DHT22
# ตั้งค่า DHT22 ที่ GP16
dht = DHT22(machine.Pin(16))
while True:
try:
dht.measure() # อ่านค่าจาก sensor
temp = dht.temperature() # อุณหภูมิ (°C)
hum = dht.humidity() # ความชื้น (%)
print(f"อุณหภูมิ: {temp:.1f}°C | ความชื้น: {hum:.1f}%")
except OSError as e:
print(f"Error: {e}")
time.sleep(2) # อ่านทุกๆ 2 วินาทีโปรเจกต์ 2: Smart Plant Monitoring
ตรวจสอบความชื้นในดินและแจ้งเตือนเมื่อแห้งเกินไป
# Smart Plant Monitoring
# เชื่อมต่อ Soil Moisture Sensor:
# - VCC -> 3V3
# - SIGNAL -> GP26 (ADC0)
# - GND -> GND
import machine
import time
# ตั้งค่า ADC สำหรับ soil moisture sensor
soil_sensor = machine.ADC(26)
led = machine.Pin("LED", machine.Pin.OUT)
# ตั้งค่า threshold (ปรับค่าได้ตาม sensor)
DRY_THRESHOLD = 40000 # ค่าที่ต่ำกว่านี้ถือว่าดินแห้ง
print("เริ่มต้นตรวจสอบความชื้นในดิน...")
while True:
# อ่านค่า soil moisture (0-65535)
# ค่าสูง = ชื้น, ค่าต่ำ = แห้ง
moisture = soil_sensor.read_u16()
# แสดงผล
print(f"ความชื้นในดิน: {moisture}")
# ตรวจสอบว่าดินแห้งหรือไม่
if moisture < DRY_THRESHOLD:
print("⚠️ ดินแห้ง! ต้องรดน้ำ")
led.value(1) # เปิด LED เตือน
else:
print("✅ ดินชื้นดี")
led.value(0) # ปิด LED
time.sleep(1)โปรเจกต์ 3: OLED Display
แสดงข้อมูลบนจอ OLED 1306 (128x64)
# OLED Display ด้วย SSD1306
# เชื่อมต่อ OLED I2C:
# - VCC -> 3V3
# - GND -> GND
# - SCL -> GP5
# - SDA -> GP4
import machine
import time
from machine import Pin, I2C
# ตั้งค่า I2C
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)
# สแกนหา address ของ OLED
devices = i2c.scan()
if devices:
print(f"พบ OLED ที่ address: {hex(devices[0])}")
else:
print("ไม่พบ OLED!")
# ใช้งาน SSD1306 (ติดตั้ง library ก่อน)
from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 64, i2c)
# แสดงข้อความ
oled.fill(0) # เคลียร์จอ
oled.text("Hello, Pico 2!", 0, 0)
oled.text("CynoIoT", 0, 16)
oled.show()ข้อควรระวังและการแก้ปัญหา
ปัญหาที่พบบ่อยและวิธีแก้ไข
1. Pico 2 ไม่ปรากฏใน Thonny
สาเหตุ: ไม่ได้กดปุ่ม BOOTSEL ขณะเสียบสาย USB
วิธีแก้: ถอดสาย USB แล้วเสียบใหม่โดยกด BOOTSEL ค้างไว้
2. MicroPython ไม่ทำงาน
สาเหตุ: ไม่ได้ถอดถอยไฟล์ UF2 หรือใช้ไฟล์ผิดเวอร์ชัน
วิธีแก้: ลองถอดถอยไฟล์ micropython-rp2350.uf2 ใหม่
3. โค้ดไม่รันหลังจากถอดปลั๊ก
สาเหตุ: ไม่ได้บันทึกเป็น main.py
วิธีแก้: บันทึกไฟล์เป็นชื่อ main.py เพื่อให้รันอัตโนมัติเมื่อบอร์ดเปิด
4. Sensor ให้ค่าผิดปกติ
สาเหตุ: เชื่อมต่อผิดพอร์ตหรือใช้แรงดันไฟผิด
วิธีแก้: ตรวจสอบ wiring diagram และแรงดันไฟ (3V3 หรือ 5V)
ข้อควรระวังในการใช้งาน
- แรงดันไฟฟ้า: GPIO รับได้เฉพาะ 0-3.3V ห้ามต่อ 5V โดยตรง (อาจทำให้บอร์ดเสียหาย)
- กระแสไฟ: แต่ละ GPIO รับได้สูงสุด 16mA รวมทั้งบอร์ดไม่เกิน 300mA
- อุณหภูมิ: หลีกเลี่ยงการทำงานในอุณหภูมิสูงเกิน 60°C
- Static electricity: ระวังไฟฟ้าสถิต หลีกเลี่ยงการแตะขา GPIO โดยตรง
สรุป
ในบทความนี้ เราได้เรียนรู้:
- ✅ ความแตกต่างระหว่าง Pico 1 และ Pico 2
- ✅ คุณสมบัติใหม่ๆ ของชิพ RP2350
- ✅ การติดตั้ง MicroPython บน Pico 2
- ✅ การเขียนโค้ดพื้นฐาน (Blink LED, GPIO, PWM, ADC)
- ✅ การเชื่อมต่อกับ CynoIoT Platform
- ✅ โปรเจกต์ตัวอย่าง (Weather Station, Plant Monitoring, OLED)
Raspberry Pi Pico 2 เป็นการอัปเกรดที่น่าประทับใจจากรุ่นแรก ด้วยหน่วยความจำที่มากขึ้นและ PIO ที่เหนือกว่า ทำให้เหมาะสำหรับโปรเจกต์ IoT และ Embedded Systems ที่ซับซ้อนขึ้น
ถัดไปคืออะไร?
- เริ่มต้นใช้งาน RP2040 (Pico รุ่นแรก) - หากต้องการบอร์ดราคาถูกกว่า
- ดูโปรเจกต์เพิ่มเติม - โปรเจกต์ IoT ที่น่าสนใจ
- สมัคร CynoIoT - เริ่มต้นเชื่อมต่ออุปกรณ์ของคุณกับ Cloud