CircuitPython vs MicroPython : ความเหมือนที่แตกต่าง

หลายท่านสอบถามเข้ามาว่า CircuitPython และ MicroPython เหมือนหรือแตกต่างกันอย่างไร เพราะ CircuitPython ก็เป็นภาษา Python เหมือนกันกับ MicroPython ใช้เครื่องมือ IDE ก็เหมือนกัน และยังทำงานบน Embedded System เหมือนกันด้วย วันนี้เลยถือโอกาสมาอธิบายเพิ่มเติมสักหน่อย CircuitPython พัฒนามาจาก MicroPython ที่เน้นให้การใช้งาน Python สำหรับงาน Embedded System ทำได้ง่ายขึ้น เนื่องจากมีชุดคำสั่งที่กระชับเข้าใจง่ายมากกว่า MicroPython CircuitPython เหมาะสำหรับคนที่เริ่มศึกษา Python เนื่องจาก CircuitPython พัฒนาโดย Adafruit ทำให้ฮาร์ดแวร์ที่รองรับส่วนใหญ่เป็นฮาร์ดแวร์ที่ผลิดโดย Adafruit เป็นหลัก

CircuitPython รองรับชิป Atmel SAMD21 หรือที่เราเรียกว่า M0 และยังมีรุ่นที่รองรับ ESP8266 ด้วย สำหรับ developer board ในประเทศไทย บอร์ด Chili สามารถพัฒนาโปรแกรมด้วย CircuitPython ได้เช่นกัน

สักษณะการทำงาน

  • CircuitPython มีลำดับการทำงานของไฟล์อย่างชัดเจน ที่ให้เราสามารถแยกไฟล์ออกมาเป็นไฟล์ต่างๆ ได้
  • ไฟล์ boot.py หรือ settings.py จะทำงานครั้งแรกครั้งเดียวเมื่อพอร์ด USB เริ่มทำงาน
  • code.py หรือ main.py จะทำงานทุกครั้งที่ reload จนกระทั่งจบการทำงาน จากนั้น vm และ hardware จะเริ่มต้นการทำงานใหม่ ทำให้คุณไม่สามารถตรวจสอบสถานะของ code.py ได้จาก REPL
  • หลังจาก code.py ทำงานเสร็จ จึงจะสามารถใช้งาน REPL ได้

API สำหรับเรียกใช้งาน

CircuitPython มี API สำหรับ hardware ทั่วๆ ไป เช่น audioio, analogio, busio, digitalio, pulseio, touchio, microcontroller, board, bitbangio ไม่มี machine API ใน Atmel SAMD21

ถ้าคุณเพิ่งเริ่มต้นสามารถเริ่มต้นศึกษาได้ทั้ง 2 ภาษา แต่ CircuitPython ออกแบบมาให้ง่ายสำหรับผู้เริ่มต้น ง่ายทั้งในการเรียนรู้เบื้องต้นและง่ายในการถ่ายทอดความรู้ด้วยเช่นกัน หากต้องเรียน CircuitPython เพิ่มเติมสามารถศึกษาได้ที่ CitcuitPython Overview หรือ CircuitPython Essentials สำหรับ MicroPython ศึกษาเพิ่มเติมได้ที่ MicroPython Document

มาเล่น CircuitPython บนบอร์ด Chili กัน

บอร์ด Chili เราสามารถพัฒนาซอฟต์แวร์ฝังตัวโดยใช้ภาษา C บน Arduino และ CircuitPython เพื่อใช้ในการพัฒนาได้ หลายท่านอาจจะไม่คุ้นกับ CircuitPython ว่าคืออะไร CircuitPython เป็น MicroPython ของ Adafruit พัฒนาต่อจาก MicroPython พัฒนาขึ้นมาเพื่อรองรับฮาร์ดแวร์ของ Adafruit โดยเฉพาะ และยังมี Python Module ที่ออกมารองรับฮาร์ดแวร์และเซนเซอร์ต่างๆ ของ Adafruit อีกด้วย

บอร์ด Chili มีความสามารถในการใช้ CircuitPython เหมือนกันและยังสามารถใช้ Module ของ CircuitPython ที่พัฒนาโดย Adafruit ได้ด้วย วิธีเขียน CircuitPython สามารถทำได้ 2 วิธี คือ เขียน code และ save ลงบนตัวบอร์ด หรือเขียนโค้ดผ่าน REPL มาลองกัน

ก่อนอื่นเราต้องมีไฟล์ UF2 เพื่อทำให้บอร์ด Chili เข้าโหมดการเขียนโค้ดด้วย CircuitPython ก่อน ให้ดาวน์โหลด ไฟล์ chili_circuitpython.uf2 ที่ git repository ของ Gravitech จากนั้น เสียบสาย USB เข้าไปที่บอร์ด Chili และเสียบเข้ากับเครื่องคอมพิวเตอร์ จากนั้นกดปุ่ม reset 2 ครั้ง ตัว Neopixel จะเปลี่ยนเป็นสีเขียว และมี Storage โผล่ขึ้นมา ชื่อ CHILLIBOOT

จากนั้นให้ Copy ไฟล์ chili_circuitpython.uf2 ไปยัง drive ที่ชื่อ CHILLIBOOT ตัวบอร์ดจะ reset และ boot ใหม่ โดยมี Storage ขื่อ CIRCUIPY ขึ้นมาแทน

IDE ที่เราจะใช้คือ MuEditor ให้ดาวน์โหลด IDE มาเตรียมไว้ เปิด IDE เปลี่ยนโหมดเป็น Adafruit CircuitPython

จากนั้นก็ลงมือเขียนโค้ดกันได้

อ้อเกือบลืม ใน Git Repository ของ Gravitech มี Bundle Library ของ CircuitPython มาด้วย ไม่ต้องกลัวว่าจะไม่มี Library ใช้งาน

มาเล่นบอร์ด Chili กัน

GravitechThai ออก dev board ตัวใหม่ชื่อ Chili ตัวบอร์ดมีสีแดงสด มีขนาดเล็กคล้ายกับ Arduino Nano มาพร้อมกับ ARM Cortex-M0+ แบบ 32 bits ความเร็ว 48 MHz มี Flash 256KB และ RAM 32KB ภายในชิปมี USB-to-Serial programe กับ debug ได้ มี GPIO 24 ขา เป็น PWM ได้ทุกขา มีไฟ NeoPixel ให้ใช้งาน ตัว บอร์ด Chilli มีรุ่น Basic และรุ่น Plus รองรับการเขียนโปรแกรมได้ทั้ง Arduino และ Circuit Python

ลองมาดู spec กันก่อน

  • Chili ใช้้ MCU ATSAMD21G18 ARM Cortex M0+ แบบ 32Bits ความเร็ว 48 MHz
  • มี Flash 256KB และ RAM 32KB
  • ภายในชิปมี USB-to-Serial programe กับ debug ได้
  • มี GPIO 24 ขา เป็น PWM ได้ทุกขา
  • มีขา I2C และ SPI
  • NeoPixel ต่ออยู่ที่ Pin 8
  • LED สีแดงต่ออยู่ที่ Pin 13

สำหรับรุ่น Plus จะมีเซนเซอร์พื้นฐานอยู่บนบอร์ดด้วย

  • Temperature Humidity Sensor
  • 3-Axis Accelerometer
  • 3-Axis Gyroscope
  • 3-Axis Magnetometer
  • Barometer

สำหรับ Arduino ต้องติดตั้งบอร์ดเพิ่มเติม โดยตั้งค่าที่ File > Preference เพิ่ม https://raw.githubusercontent.com/gravitech-engineer/package_gravitech_board/master/package_gravitech_index.json ลงไปที่ Additional Board Manager

จากนั้นติดตั้งบอร์ด ชื่อ Chili เพิ่มเติมได้

การใช้งานให้เชื่อมต่อบอร์ด Chili กับคอมพิวเตอร์โดยใช้สาย USB เลือกบอร์ด Arduino Nano Chili เท่านี้ก็ใช้งานได้แล้ว

หากเชื่อมต่อแล้วไม่เจอบอร์ด ให้กดปุ่ม reset 2 ครั้ง ไฟ NeoPixel จะเปลี่ยนเป็นสีเขียว ก็จะพบบอร์ดแล้ว ตัวอย่างการเรียกใช้งาน Sensor และรายชื่อ Library Sensor บนบอร์ดดูรายละเอียดเพิ่มเติมได้ที่ https://github.com/anoochit/chilli-board