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

บอร์ด Chili เราสามารถพัฒนาซอฟต์แวร์ฝังตัวโดยใช้ภาษา C บน Arduino และ Python บน 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 ใช้งาน

GravitechThai ออก developer board ตัวใหม่ชื่อ Chili ตัวบอร์ดมีสีแดงสด มีขนาดเล็กคล้ายกับ Arduino Nano มาพร้อมกับ MCU Atmel SAMD21 ใช้สถาปัตยกรรม 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 รุ่น Basic

  • Chili ใช้้ MCU AT SAMD21G18 หรือ 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
  • มีขนาดเล็กเท่ากับ Arduino Nano

สำหรับรุ่น 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 เท่านี้ก็ใช้งานได้แล้ว

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

Deeplearning4j (DL4J) เป็น deep learning framework ในภาษา Java ทำให้นักพัฒนาสามารถเพิ่มความสามารถด้าน deep learning ให้กับซอฟต์แวร์ได้ง่ายมากขึ้นและ DL4J ยังเป็นซอฟต์แวร์โอเพนซอร์สสามารถนำมาใช้งานได้ฟรีไม่มีค่าใช้จ่าย DL4J อยู่ภายใต้การดูแลของ Eclipse Foundation มีบริการ support แบบ commercial โดยบริษัท Skymind

DL4J แบ่งออกเป็น 2 ส่วน

  1. ETL (Extract Transform Load) ใช้ DataVec และ ND4J เป็นเครื่องมือช่วยจัดการข้อมูล
  2. Learning system ใช้ feature กระจายโหลด โดยใช้ MapReduce บน Hadoop หรือ Spark cluster

โดยทั่วไป Deep Learning ใช้ vectors หรือ tensors ในการจัดการข้อมูลเพื่อใช้ในการประมวลผล DL4J มี tensor library ชื่อ ND4J ที่ทำหน้าที่จัดการข้อมูลในอาเรย์แบบหลายมิติ (n-dimension) ซึ่ง DL4J สามารถประมวลผลได้ทั้งบน CPU และ GPU

สรุปเกี่ยวกับ DL4J

  • ทำงานบน JVM ของภาษา Java, Scala และ Clojure ได้
  • สามารถใช้ IDE อย่าง InteliJ ในการเขียนโปรแกรมได้
  • สามารถใช้เครื่องมือออนไลน์ SKIL (Skymind Inteligence Layer)
  • มี Zeppelin Notebook (Web base IDE ชื่อดังตัวหนึ่ง) เพิ่มเข้ามา เพื่ออำนวยความสะดวกในการ train AI โมเดล
  • รองรับภาษาในการเขียน deep learning ได้หลากหลายมากขึ้น ปัจจุบันรองรับภาษา Java, Scala, Clojure และ Python
  • SKIL มีรุ่น Community ที่เป็นโอเพนซอร์สให้งานได้ฟรี และรุ่น Commercial แบบมีค่าใช้จ่ายสำหรับลูกค้าองค์กร

ความแตกต่างระหว่างรุ่น Community และ Commercial เพียงแต่ Commercial จะดีกว่าดังนี้

  • รองรับการทำ Multi-Node สำหรับใช้ train model บน cluster
  • รองรับการทำ Fault tolerance, load balancing, และ leader election
  • รองรับการทำ Integration กับ application ต่างๆ เช่น Robotic Process Automation เป็นต้น

DL4J ใช้ภาษา Java และติดตั้งบน JVM ทำให้ Enterprise Software ที่พัฒนาด้วย Java สามารถเรียกใช้ ความสามารถของ Deep Learning ได้ง่ายขึ้น ไม่จำเป็นต้องเรียนรู้ภาษาใหม่ นอกจากการพัฒนาโดยใช้ภาษา Java ที่สามารถทำได้ง่ายแล้ว DL4J ยังสามารถเรียกใช้งาน model จาก Deep Learning Framework ที่มีอยู่แล้ว เช่น Keras และ Tensorflow ได้ สำหรับการติดตั้งสามารถติดตั้งบน JVM แบบ on-premise หรือการ Scale Out บน Container Service บน Cloud ได้เช่นกัน

Deep Learning ยังต้องใช้ GPU เพื่อช่วยเร่งการประมวลผลให้เร็วขึ้น แต่ DL4J สามารถทำงานได้บน CPU ที่มีชุดคำสั่ง AVX และ AVX2 (Advanced Vector Extensions) นอกจากการประมวลผลโดยใช้ CPU, GPU แล้ว DL4J ยังสามารถใช้ Hadoop และ Spark เป็นคลัสเตอร์ช่วยในการประมวลผล Deep Learning แบบกระจายได้ (Distributed Deep Learning) DL4J เหมาะสำหรับงานด้าน Image recognition, fraud detection, text mining, speech tagging, machine vision และ natural language processing

ตัวอย่าง Usecase และ Industry ที่เกี่ยวข้อง

Usecase Industry
Sound
Voice recognition UX/UI, Automotive, Security, IoT
Voice search Telecom, a Handset maker
Sentiment analysis CRM
Flaw detection (engine noise) Automotive, Aviation
Fraud detection Financial, Credit Cards
Time Series
Log analysis, Risk detection Data centers, Security, Finance
Enterprise resource planning Manufacturing, Auto, Supply chain
Predictive analytics, sensor data IoT, Smart home, Hardware manufacturer
Business and Economic analytics Finance, Accounting, Government
Recommendation engine E-commerce, Media, Social Networks
Text
Sentiment Analysis CRM, Social media, Reputation management
Augmented search, Theme detection Finance
Threat detection Social media, Govt
Fraud detection Insurance, Finance
Image
Face recognition
Image search Social media
Machine vision Automotive, aviation
Photo clustering Telecom, Handset makers
Video
Motion detection Gaming, UX, UI
Real-time threat detection Security, Airports

ข้อดี

  • ประมวลผลได้ทั้งบน CPU ที่มี AVX, AVX2 และ GPU ผ่าน CUDA
  • ติดตั้งและ scale ได้ง่ายผ่าน container service บน Cloud
  • ประมวลผลแบบ parallel อัตโนมัติ ไม่จำเป็นต้องเขียน parallel programming
  • เชื่อมต่อกับ ecosystem ของ Java ได้ train model บน Hadoop, Spark Cluster ได้
  • มี commercial support และ AI platform ให้บริการโดย Skymind จ่ายค่า subscription plan ตามต้องการ

ข้อเสีย

  • DL4J มีเครื่องมือยังไม่แพร่หลาย เน้น B2B เป็นหลัก