# CircuitPython with Piper Make

## Piper Make Editor

[**Piper Make**](https://make.playpiper.com/) เป็น **Online Code Editor / Drag-and-Drop Coding Platform** สำหรับการเขียนโค้ดด้วยวิธีการต่อบล็อก และใช้สำหรับบอร์ดไมโครคอนโทรลเลอร์ [**Raspberry Pi Pico**](https://www.raspberrypi.org/products/raspberry-pi-pico/) ที่ใช้ตัวประมวลผล [**RP2040 SoC**](https://datasheets.raspberrypi.org/rp2040/rp2040-datasheet.pdf)

![รูป: Piper Make Concept (Source: Piper)](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDQuxKEBAnx43dWSWR%2FPiper_Make_Concept.png?alt=media\&token=4c030a7b-9708-4a9e-a11e-df6bfbc26337)

ผู้พัฒนาและให้บริการ **Piper Make** คือ บริษัท [**Piper**](https://www.playpiper.com/pages/about) ซึ่งได้ก่อตั้งขึ้นเมื่อปีค.ศ. **2014** และเป็นบริษัท **Startup** ในประเภท **EdTech** ตั้งอยู่ในเมือง **San Francisco, CA** สหรัฐอเมริกา และในปีค.ศ. **2021** ได้จัดตั้งมูลนิธิชื่อว่า [**Piper Foundation**](https://www.playpiper.com/pages/foundation) เพื่อสนับสนุนกิจกรรมด้าน **STEM Education**

## เริ่มต้นใช้งาน Piper Make Editor

เริ่มต้นใช้งานโดยการเปิดเว็บเบราว์เซอร์ เช่น **Google Chrome** ไปยังเว็บ <https://make.playpiper.com/> ตามรูปตัวอย่างต่อไปนี้

![รูป: Piper Make - Main Page ](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDQliofSD2P8Q339M4%2FPiper_Make-1.png?alt=media\&token=3f1048fd-a658-44ed-94ee-e22906fc095b)

ถัดไปจะต้องเตรียมบอร์ด **Raspberry Pi Pico** และเลือกทำขั้นตอน  **Tools > Setup my Pico**

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDRg3eloU41RT8lDke%2FPiper_Make_Pico_Setup-1.png?alt=media\&token=40816a8a-acf1-4381-8173-5219cf47c4ef)

ถัดไปเป็นการอัปโหลดไฟล์เฟิร์มแวร์ (**Firmware**) ที่ได้มาจากเว็บไซต์ของ **Piper Make** เพื่อนำไปใส่ลงในหน่วยความจำแฟลซของบอร์ด **Pico**&#x20;

ในขั้นตอนนี้ บอร์ด **Pico** จะต้องเข้าสู่โหมด **UF Bootloader** ซึ่งทำได้โดยการกดปุ่ม **BOOTSEL** บนบอร์ด **Pico** ค้างไว้ แล้วเสียบสาย **USB** เข้าที่พอร์ต **microUSB** และอีกด้านหนึ่งของสาย ให้เสียบเข้ากับพอร์ต **USB** ของคอมพิวเตอร์ผู้ใช้ จากนั้นเมื่อปล่อยปุ่มแล้ว จะมองเห็น **USB Drive** ปรากฏขึ้น (`RPI-RP2`)&#x20;

**Piper Make** จะแสดงขั้นตอนที่ต้องดำเนินการไปตามลำดับดังนี้&#x20;

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDRxF1DvDpbLpsO00O%2FPiper_Make_Pico_Setup-2.png?alt=media\&token=d6358fab-2ea2-4a0c-9049-fae86e4d6816)

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDSk_O1nTIgoUHfDFR%2FPiper_Make_Pico_Setup-3.png?alt=media\&token=075e5732-0456-4ab2-92dd-32e92ac25f67)

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDSmvdCHcG7kThbUgp%2FPiper_Make_Pico_Setup-4.png?alt=media\&token=b3191f92-aa96-44c9-be10-5f31caa0b7b2)

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDSpH0E1BWxbT_nlxQ%2FPiper_Make_Pico_Setup-5.png?alt=media\&token=2c2d2da4-fb48-4917-9077-24b9a8c97058)

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDSwdJLlYa1qya_JhK%2FPiper_Make_Pico_Setup-6.png?alt=media\&token=f3149304-afa4-4f7e-9872-3ec92c07dc00)

![รูป: ลำดับขั้นตอนการติดตั้งไฟล์ UF2 Firmware](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDOwNZjhOkj8Klzqbu%2F-MWDT12hK44YTmOcmJfl%2FPiper_Make_Pico_Setup-7.png?alt=media\&token=24eefe12-87b3-4a60-9786-70511b03d076)

**ข้อสังเกต:** ในขั้นตอนการติดตั้งไฟล์เฟิร์มแวร์ จะมีการดาวน์โหลดไฟล์จาก [https://make.playpiper.com/assets/firmware/piper\_circuitpython.uf2 <br>](https://make.playpiper.com/assets/firmware/piper_circuitpython.uf2) มายังเครื่องคอมพิวเตอร์ของผู้ใช้&#x20;

ในขณะที่จัดทำเอกสารนี้ เวอร์ชันของไฟล์เฟิร์มแวร์ที่ได้ดาวน์โหลดและติดตั้งใช้งานคือ

`Adafruit CircuitPython 6.2.0-beta.3-74-gaa0288a21-dirty on 2021-03-17`&#x20;

เมื่อติดตั้งเฟิร์มแวร์ได้สำเร็จแล้ว ถัดไปเป็นการสร้างโปรเจกต์ใหม่ แล้วลองเขียนโค้ดด้วยวิธีการต่อบล็อก

## การสร้างโปรเจกต์ใหม่และเริ่มต้นต่อบล็อก

ในหน้าต่างหลัก จะเห็นว่า มีไอคอนให้เลือกคือ **New Project** สำหรับการสร้างโปรเจกต์ใหม่ หรือจะลองดูตัวอย่างโปรเจกต์ที่มีมาให้แล้ว เช่น **Blink** หรือ **Traffic Light** เป็นต้น

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDUFmmusXJABtJG8Ta%2F-MWDUjDO4MY_tnGdTgt1%2FPiper_Make_New_project.png?alt=media\&token=ac9ad15e-ddbd-4bfc-a28d-634052310bc2)

ให้ลองสร้างโปรเจกต์ใหม่ แล้วตั้งชื่อโปรเจกต์ใหม่&#x20;

![รูป: การสร้างโปรเจกต์ใหม่](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDUFmmusXJABtJG8Ta%2F-MWDVJEMrUZUfDu6JDt9%2FPiper_New_Project-2.png?alt=media\&token=d18a93c3-9afa-48b9-87f3-c23ff18feee7)

ถัดไปลองกดปุ่ม **Connect** บริเวณมุมซ้ายล่าง เพื่อลองดูว่า สามารถเชื่อมต่อกับบอร์ด **Pico** ที่ได้ติดตั้งเฟิร์มแวร์ไว้แล้วได้หรือไม่&#x20;

![รูป: ตัวอย่างการเลือกพอร์ต USB Serial ที่ตรงกับบอร์ด Pico](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDUFmmusXJABtJG8Ta%2F-MWDUGp4iocC6UqoY17W%2FPiper_Make_Pico_Setup-8.png?alt=media\&token=403ae961-3bad-4f4d-b69a-f1ce0c5f9c55)

เมื่อสามารถเชื่อมต่อกับบอร์ด **Pico** ได้แล้ว ข้อความ **Connect** (สีเขียว) จะเปลี่ยนเป็น **Disconnect** (สีแดง)

ลองดูบล็อกคำสั่งต่าง ๆ ซึ่งมีการจัดแบ่งเป็นกลุ่ม ตามรูปตัวอย่างดังนี้&#x20;

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDUFmmusXJABtJG8Ta%2F-MWDY1AildDJeI2DApkT%2FPiper_Make_Show_Block-1_2.png?alt=media\&token=3e9e793b-4c45-4c2d-8532-4a8f9fc29201)

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDUFmmusXJABtJG8Ta%2F-MWDY2x0QI3dmF9xzibp%2FPiper_Make_Show_Block-3-4.png?alt=media\&token=15ad848e-d933-41e3-a85f-25232c77eee9)

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDUFmmusXJABtJG8Ta%2F-MWDY4hr8b3m1X5hkeNm%2FPiper_Make_Show_Block-5-6.png?alt=media\&token=a687c5e2-936f-49b9-939a-14b910b3efd8)

ถัดไปให้ตั้งชื่อโปรเจกต์ใหม่ เช่น `Pico_Demo-1`  จากนั้นมาลองต่อบล็อกเพื่อทำให้ **LED** บนบอร์ด **Pico** กระพริบได้ (ตรงกับขา **GP25**) และลองส่งข้อความผ่านทาง **USB-to-Serial**&#x20;

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDYApnXvaOQqPDQmJn%2F-MWDYBvlfuChv4MDyVje%2FPiper_Make_Pico_blocks-1.png?alt=media\&token=68243b9a-24e1-4ca0-91af-7afdc1bb8984)

เมื่อต่อบล็อกตามตัวอย่างได้สำเร็จแล้ว ถ้ากดปุ่ม **DOWNLOAD** จะได้ไฟล์ **.PNG**&#x20;

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDYApnXvaOQqPDQmJn%2F-MWDYY2d_TRyMUIVkWaJ%2FPiper_Make_Pico_LED_Blink-1.png?alt=media\&token=00492193-692b-4fd2-b254-c5e0e52582db)

![รูป: โค้ดที่ประกอบด้วยบล็อกที่ได้นำมาต่อกัน (ดาวน์โหลดมาเป็นไฟล์ .PNG)](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDYApnXvaOQqPDQmJn%2F-MWDZ8hDncL9EQeD65tX%2FPico_Demo-1.png?alt=media\&token=d2c7f3b6-9580-49ad-8b8e-c7f4a8a38c8c)

ถ้าต้องการรันโค้ด โดยใช้บอร์ด **Pico** ให้กดปุ่ม **START** ตรงมุมซ้ายบน &#x20;

ให้ลองกดปุ่ม **DIGITAL VIEW** แล้วจะมองเห็นรูปกราฟิกของบอร์ด ซึ่งจะมีการเปลี่ยนแปลงที่บริเวณ **LED25** ติดและดับสลับกัน

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDYApnXvaOQqPDQmJn%2F-MWDZh5_2tPdKVzU_wR4%2FPiper_Make_Pico_LED_Blink-3.png?alt=media\&token=af4ca1a9-9dc7-4aad-9e19-dbf4c6dbef75)

หรือถ้าเปลี่ยนไปหน้า **CONSOLE** ก็จะเห็นข้อความที่ได้รับมาจากบอร์ด **Pico**

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDYApnXvaOQqPDQmJn%2F-MWDZeMscguf0YWlSrGk%2FPiper_Make_Pico_LED_Blink-2.png?alt=media\&token=73914a94-ff3f-4cda-8be3-94dda70e476d)

ถ้าเปลี่ยนไปหน้า **PYTHON** ก็จะเห็นโค้ด **CircuitPython** ที่ได้มีการแปลงโดยอัตโนมัติมาจากบล็อกคำสั่งที่ได้นำมาต่อเข้าด้วยกัน

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MWDYApnXvaOQqPDQmJn%2F-MWD_ntGQCqym4Apmv6V%2FPiper_Make_Pico_LED_Blink-4.png?alt=media\&token=66749b64-0fb7-40a8-a63d-af5b4a85cbd7)

ตัวอย่างโค้ด **CircuitPython** จากตัวอย่างในรูป มีดังนี้

```python
## ---- Imports ---- ##
from piper_blockly import *
import time
import board

## ---- Definitions ---- ##
GP25 = piperPin(board.GP25, "GP25")

## ---- Code ---- ##
consoleClear()
print('Hello Raspberry Pi Pico!')
while True:
  GP25.setPin(1)
  time.sleep(1)
  GP25.setPin(0)
  time.sleep(1)
```

แม้ว่า **Piper Make**r จะมีบล็อกคำสั่งให้เลือกใช้สำหรับเขียนโค้ดได้โดยทั่วไป แต่ยังขาดบล็อกสำหรับโมดูลฮาร์ดแวร์ประเภทต่าง ๆ จากที่เห็นได้ในส่วนของ **LIBRARY** มีรายการให้เลือกค่อนข้างจำกัด เช่น&#x20;

* อุปกรณ์พื้นฐาน เช่น ปุ่มกด สวิตช์เลื่อน หลอด LED
* โมดูล **Temperature Sensor**
* โมดูล **Color Sensor**
* โมดูล **Ultrasonic Range Finder Sensor**
* โมดูล **R/C Servo**

![รูป: ตัวอย่างโมดูลที่สามารถนำมาใช้งานได้](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MZJXlK8kKDEYoY2K_8w%2F-MZJYLo_v9qPjlXWD4LO%2Fimage.png?alt=media\&token=b7e6b17f-8837-4a44-b603-2223fabcb024)

## กล่าวสรุป

**Piper Make Editor** ก็ถือว่าเป็นบริการฟรีที่ทำให้ผู้ใช้สามารถฝึกเขียนโค้ดแบบต่อบล็อกบนหน้าเว็บเบราว์เซอร์ สำหรับบอร์ดไมโครคอนโทรลเลอร์ **Raspberry Pi Pico** ซึ่งมีราคาไม่แพง การทำงานของ **Piper Make** ในส่วนที่เป็นเฟิร์มแวร์นั้นได้ใช้ **CircuitPython** ของบริษัท **Adafruit** เป็นพื้นฐานในการทำงาน&#x20;
