Introduction
เจ้า Raspberry Pi Pico กับ Pico W (ที่ใช้ไมโครคอนโทรลเลอร์ RP2040) นี่แหละน้อง เป็นบอร์ดพัฒนาเทพๆ ราคาเบาๆ ที่รองรับภาษาโปรแกรมหลายตัว ทั้ง MicroPython, CircuitPython และ C/C++ เลยทีเดียว
ในบทเรียนนี้ พี่จะพาน้องไปเซ็ตอัพเจ้า Raspberry Pi Pico/Pico W ให้ใช้กับ Arduino IDE ได้ โดยใช้ไลบรารีจากบุคคลที่สาม (third-party library) รับรองว่าเขียนโค้ดสไตล์ Arduino ลงบอร์ดพวกนี้ได้ชิลๆ
แล้วเราจะเอาไลบรารีนี้มาทดสอบด้วยตัวอย่างง่ายๆ คือให้ไฟ LED บนบอร์ดกระพริบ (Blink) ให้ดูเป็นตัวอย่าง
การเซ็ตอัพนี้ใช้ได้กับ Raspberry Pi Pico 2 และ Pico 2 W (RP2350) ด้วยนะ ตัวใหม่ล่าสุด!
Project Overview
"Pico-Core" นี่มันคือการเปลี่ยนเกมเลยนะเว้ยในวงการ Arduino Raspberry Pi RP2040 นำเสนอฟีเจอร์ทางสถาปัตยกรรมที่แต่ก่อนมีแต่ในไมโครโพรเซสเซอร์ระดับสูง โปรเจกต์นี้จะพาเราไปรู้จักกับการย้ายมาสู่แพลตฟอร์ม Pico โดยเจาะลึกไปที่ Symmetric Multiprocessing (SMP) และเครื่องยนต์สุดล้ำ Programmable I/O (PIO) ด้วยการใช้ Earle Philhower core ที่ถูกปรับแต่งมาแล้ว พวกเราชาวนักพัฒนาก็จะได้ใช้ประสิทธิภาพของ C++ แบบเต็มที่ ในขณะที่ยังใช้ Arduino API แบบที่คุ้นเคยกันอยู่
Steps
Step 1: เตรียม Arduino IDE ให้พร้อม:
ก่อนอื่น ตรวจสอบให้แน่ใจว่าน้องติดตั้ง Arduino IDE เวอร์ชันล่าสุดไว้แล้วนะ
เปิด Arduino IDE ขึ้นมา แล้วไปที่ File > Preferences
ในช่อง "Additional Boards Manager URLs" ให้ใส่ URL นี้ลงไป:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json




Step 2: ติดตั้ง Board Support สำหรับ Raspberry Pi Pico:
ไปที่ Tools > Board > Boards Manager ในหน้าต่าง Boards Manager ให้ค้นหาคำว่า "Raspberry Pi Pico" แล้วติดตั้งแพ็กเกจ "Raspberry Pi Pico/RP2040/RP2350" โดย Earle Philhower
แพ็กเกจนี้รองรับบอร์ดหลายรุ่นเลย ทั้ง Raspberry Pi Pico, Pico W, Pico 2 และ Pico 2 W ทำให้โปรแกรมมันใน Arduino IDE ง่ายมากๆ



ลงลึกกันแบบช่างๆ
- RP2040 Dual-Core Forensics (สืบสวนกันในระดับแกน):
- Symmetric Multiprocessing (SMP): ต่างจาก Arduino ทั่วไปที่เราคุ้นเคย Pico ของเรามี ARM Cortex-M0+ อยู่สองแกนแยกกันเลย! โปรเจคนี้จะโชว์ให้เห็นว่าเราจะรันโค้ดบน
setup1()กับloop1()พร้อมๆ กับลูปหลักได้ยังไง เรื่องนี้สำคัญมากถ้าจะเอาไว้ปลดงานหนักๆ ที่กินเวลา (เช่น ส่งข้อมูลผ่าน WiFi หรือเขียนข้อมูลลง SD Card) ไปให้ Core 1 รับผิดชอบ ในขณะที่ Core 0 ยังคงดึงข้อมูลจากเซนเซอร์แบบเรียลไทม์ได้อยู่ - Inter-Core Communication (FIFO): การส่งข้อมูลระหว่างแกนจะจัดการผ่านฮาร์ดแวร์ FIFO โดยตรง เฟิร์มแวร์ของเราใช้บัฟเฟอร์แบบ "Push/Pull" นี้เพื่อส่งตัวแปรระหว่างสองแกนได้แบบชัวร์ๆ ไม่มีปัญหาเรื่อง race-condition แน่นอน
- Symmetric Multiprocessing (SMP): ต่างจาก Arduino ทั่วไปที่เราคุ้นเคย Pico ของเรามี ARM Cortex-M0+ อยู่สองแกนแยกกันเลย! โปรเจคนี้จะโชว์ให้เห็นว่าเราจะรันโค้ดบน
- PIO (Programmable I/O) State Machines:
- Hardware-Accelerated Bit-Banging: Pico ของเรามี PIO state machine อยู่ 8 ตัว เป็นเหมือนโปรเซสเซอร์ย่อยๆ ที่รันโค้ดคล้ายแอสเซมบลีเพื่อจัดการกับโปรโตคอลที่ต้องการความแม่นยำระดับไซเคิล (เช่น ควบคุม LED strip เป็นพันดวง หรือสร้างสัญญาณ VGA) โดยที่ CPU หลักไม่ต้องทำงานเลยสักนิด!
- Forensic Protocol Offloading: โปรเจคนี้ชี้ให้เห็นว่า PIO คือกุญแจสำคัญในการสร้าง "Deterministic IO" หรือการทำงานของ I/O ที่เวลาถูกควบคุมโดยนาฬิกาฮาร์ดแวร์โดยเฉพาะ แทนที่จะเป็นลูปซอฟต์แวร์
- UF2 Bootloader & Mass-Storage Logic:
- The Drag-and-Drop Forensics: RP2040 มีบูตโหลดเดอร์ที่ฝังอยู่ใน ROM ซึ่งรองรับ UF2 (USB Flashing Format) เมื่อกดปุ่ม BOOTSEL ค้างไว้แล้วเสียบ USB Pico จะปรากฏเป็นอุปกรณ์เก็บข้อมูล USB ให้ลากไฟล์ลงไปได้เลย เทคนิคนี้ทำให้เราไม่ต้องพึ่งโปรแกรมเมอร์แบบ JTAG/SWD อีกต่อไป ช่วยให้อัปเดตเฟิร์มแวร์
.uf2ในสนามได้เร็วปรี๊ด
- The Drag-and-Drop Forensics: RP2040 มีบูตโหลดเดอร์ที่ฝังอยู่ใน ROM ซึ่งรองรับ UF2 (USB Flashing Format) เมื่อกดปุ่ม BOOTSEL ค้างไว้แล้วเสียบ USB Pico จะปรากฏเป็นอุปกรณ์เก็บข้อมูล USB ให้ลากไฟล์ลงไปได้เลย เทคนิคนี้ทำให้เราไม่ต้องพึ่งโปรแกรมเมอร์แบบ JTAG/SWD อีกต่อไป ช่วยให้อัปเดตเฟิร์มแวร์
ขั้นตอนที่ 3: เชื่อมต่อ Pico/Pico W เข้ากับคอมพิวเตอร์
Raspberry Pi Pico/Pico W รองรับการอัปโหลดโค้ดสองวิธี: Serial และ UF2
วิธี Serial โดยทั่วไปจะง่ายและสะดวกกว่า เพราะไม่ต้องกดปุ่ม "BOOTSEL" ทุกครั้ง
เชื่อมต่อผ่าน Serial (วิธีง่ายๆ)
แค่เสียบ Pico/Pico W ของคุณเข้ากับคอมด้วยสาย USB ใน Arduino IDE ให้ไปที่ Tools > Port แล้วเลือกพอร์ต COM ที่ถูกต้อง

เชื่อมต่อผ่าน UF2
ถ้าจำเป็น คุณสามารถเข้าสู่โหมด USB mass storage ได้โดยกดปุ่ม "BOOTSEL" ค้างไว้ขณะเสียบสาย USB การทำนี้จะเปิดตัวเลือกการอัปโหลดแบบ UF2 ใน Arduino IDE บอร์ดจะปรากฏเป็น "UF2 Board" ภายใต้ Tools > Port > UF2conv เลือกตัวเลือกนี้เพื่อเชื่อมต่อกับ Pico/Pico W ในโหมด UF2
ขั้นตอนที่ 4: อัปโหลดโค้ดลง Pico/Pico W
ในการอัปโหลดโค้ดของคุณ สามารถใช้วิธีไหนก็ได้:
วิธี Serial: ตรวจสอบให้แน่ใจว่าเลือกพอร์ต COM ถูกต้องแล้วคลิก Upload ใน Arduino IDE โค้ดจะถูกอัปโหลดโดยตรงโดยไม่ต้องเข้าสู่โหมด USB mass storage ทำให้เป็นตัวเลือกที่เร็วกว่า
วิธี UF2: ถ้าใช้โหมด UF2 ให้เลือก "UF2 Board" เป็นพอร์ตแล้วอัปโหลด หลังอัปโหลดเสร็จ บอร์ดจะตัดการเชื่อมต่อและเชื่อมต่อใหม่บนพอร์ต COM อัตโนมัติ ทำให้สามารถสื่อสารผ่าน Serial Monitor ด้วยอัตราบอดเรตที่กำหนดได้
ไม่ว่าจะใช้วิธีไหน Pico/Pico W จะทำงานเหมือน Arduino ทั่วไปและอนุญาตให้สื่อสารแบบ Serial หลังอัปโหลดโค้ดเสร็จ
วิศวกรรมและการลงมือทำ
เลือก Core Driver ยังไงดี:
- เราใช้ Earle Philhower Arduino Core ซึ่งสร้างบน Raspberry Pi C++ SDK ตัวนี้จัดว่าดีกว่าตัวทางการ (Mbed) เพราะมันซัพพอร์ต PIO ได้ล้ำกว่า โอเวอร์คล็อกแรงได้สูงสุด 250MHz+ และยังมีระบบไฟล์ (LittleFS) ให้ใช้ครบเครื่อง
WiFi Telemetry (สำหรับ Pico W):
- สำหรับรุ่น Pico W เนี่ย ตัว core นี้จะช่วยเชื่อม CYW43439 ไวร์เลสชิปเข้ากับ Arduino WiFi library ให้เรา มันจะโชว์ให้เห็นวิธีรัน TCP/IP stack บน Core 1 แบบไม่หยุด ขณะที่ลอจิกควบคุมหุ่นยนต์ของเรายังคงทำงานต่อบน Core 0 ได้ปกติ ไม่มีสะดุด
เตรียมตัวสู่ RP2350 (Pico 2):
- โปรเจคนี้ยังมีไกด์ล่วงหน้าให้เล่นกับ Hazard3 RISC-V cores ที่จะมาใน RP2350 ด้วย รับรองว่าตั้งค่าและลอจิกจะยังคงสม่ำเสมอ เวลาเราเปลี่ยนไปใช้ซิลิคอนรุ่นใหม่ของ Raspberry Pi จะได้ไม่ต้องมานั่งงงใหม่
ตัวอย่างโปรเจค: กระพริบ LED บนบอร์ด
ตอนนี้บอร์ดเราพร้อมแล้ว มาเขียนโปรแกรมกระพริบ LED ง่ายๆ บนบอร์ดกันดีกว่า
เปิด File > Examples > 01.Basics > Blink มันจะเปิดสเก็ตช์ใหม่สำหรับโปรแกรมกระพริบ LED ให้
อัปโหลดโค้ดลงบอร์ดโดยคลิกปุ่ม "Upload" ไฟ LED บนบอร์ดควรจะเริ่มกระพริบแล้วล่ะ

ข้อดีของ Arduino IDE เมื่อเทียบกับ MicroPython/CircuitPython:
**คุ้นเคยสำหรับชาว Arduino:** ถ้าน้องเคยเล่น Arduino มาก่อน การใช้ Arduino IDE จะรู้สึกเหมือนบ้านตัวเอง เพราะใช้ไลบรารีและฟังก์ชันมาตรฐานเดียวกัน
**มีไลบรารีให้เลือกใช้เยอะกว่า:** Arduino มีไลบรารีให้เลือกใช้เพียบ สามารถนำมาประกอบในโปรเจคได้ง่าย ทำให้มีความยืดหยุ่นและขยายได้มากกว่าเมื่อเทียบกับระบบของ Python
**ความเร็วและประสิทธิภาพ:** C/C++ (ที่ใช้ใน Arduino) มักจะทำงานได้เร็วกว่าภาษาที่ต้อง interpreter อย่าง MicroPython อยู่แล้ว จัดไปวัยรุ่น!
สรุป
Pico-Core คือรากฐานของ การออกแบบระบบสมองกลฝังตัว ในทศวรรษหน้า ด้วยการเชี่ยวชาญ การประมวลผลแบบ Dual-Core และ การเจาะลึก PIO State Machine นักพัฒนาสามารถสร้างแอปพลิเคชันสมรรถนะสูงที่ไม่ยึดติดโปรโตคอลได้ ซึ่งล้ำหน้ากว่าความสามารถของไมโครคอนโทรลเลอร์ 8-bit แบบดั้งเดิมมาก
สรุปสั้นๆ:
น้องตั้งค่า Raspberry Pi Pico/Pico W ด้วย Arduino IDE สำเร็จแล้ว และก็ทำโปรแกรมกระพริบไฟง่ายๆ ผ่านไปได้ด้วยดี สู้งานนะน้อง!
Arduino IDE ให้สภาพแวดล้อมที่ใช้ง่ายสำหรับคนที่คุ้นเคยกับ Arduino อยู่แล้ว พร้อมทั้งมีไลบรารีให้เลือกใช้มากมายและชุมชนที่ใหญ่โต
ถ้าอยากลองทำอะไรลึกๆ ขึ้นอีก ลองไปดูโปรเจคอื่นๆ ที่เกี่ยวข้องได้เลย และอย่าลืมกดติดตามเพื่ออัปเดตบทสอนและโปรเจคขั้นสูงใหม่ๆ ด้วยล่ะ!