บทความนี้นำเสนอการสำรวจอุปกรณ์ฮาร์ดแวร์ของบริษัท M5Stack ที่ใช้ Espressif ESP32 SoC เป็นตัวประมวลผลหลัก และเปรียบเทียบข้อมูลเชิงเทคนิค เพื่อเอาไว้เป็นกรณีศึกษา หรือเป็นแนวทางการออกแบบพัฒนาอุปกรณ์อิเล็กทรอนิกส์สำหรับการเรียนรู้
คำชี้แจง: ผู้เขียนไม่ได้มีส่วนเกี่ยวข้องใด ๆ หรือได้รับประโยชน์ในเชิงการค้าจากบริษัทที่เป็นเจ้าของสินค้าดังกล่าว
M5Stack M5 Core
M5Stack เป็นบริษัทในเมือง Shenzhen ประเทศจีน ก่อตั้งโดย Jimmy Lai และเปิดตัวเป็นบริษัท Startup ในราวปีค.ศ. 2016 ได้นำจุดเด่น ESP32 ของบริษัท Espressif (จากประเทศจีนเช่นเดียวกัน) มาพัฒนาเป็นอุปกรณ์สมองกลฝังตัว และพยายามสร้างสิ่งที่เรียกว่า M5 Ecosystem ซึ่งประกอบด้วยอุปกรณ์ หรือโมดูลอิเล็กทรอนิกส์ในรูปแบบต่าง ๆ
อุปกรณ์ตัวควบคุมหลัก เรียกว่า M5 Core (เริ่มจำหน่ายตั้งแต่ปีค.ศ. 2017) มีขนาดประมาณ 5cm x 5cm เช่น M5 BASIC, M5 GRAY และ M5 FIRE ตามลำดับ สามารถนำไปต่อแบบซ้อนกัน (Modular, Stackable) กับโมดูลอื่นได้ ผ่านทางคอนเนกเตอร์ที่เรียกว่า M-Bus ตัวอย่างของโมดูล เช่น โมดูลแบตเตอรี LiPo โมดูลตัวรับสัญญาณ GPS และโมดูลสื่อสารไร้สาย LoRa / NB-IoT / LTE-4G เป็นต้น และทางบริษัทก็ได้เปิดเผยผังวงจรด้วย (M5 Stack Schematics) เช่น M5 Core Basic
ข้อมูลเชิงเทคนิคเกี่ยวกับ M5 BASIC
- ESP32 with WiFi / Bluetooth capability (2.4 GHz)
- 4MB of SPI Flash
- Micro-SD Card Slot (up to 16GB Storage)
- Type-C USB Port / USB-to-Serial Converter
- 320x240 2.0" TFT Color Display (ILI9342C driver)
- 3 User Buttons (A, B, C) + 1 Reset Button
- Small 1W speaker
- 150 mAh LiPo Battery
- Grove Port / I2C Connector
ข้อมูลเชิงเทคนิคเกี่ยวกับ M5 GRAY
- An upgrade version of M5 BASIC
- I2C IMU Sensor: MPU9250 or MPU6886 + BMM150
- Analog MEMS Microphone BSE3729
โมดูล M5 Basic และ M5 Gray จะมีบอร์ดฐานปิดด้านล่าง เรียกว่า Base CORE Bottom ซึ่งมีแบตเตอรี LiPo (110 mAh @ 3.7V) อยู่ภายใน และมีคอนเนกเตอร์ที่เรียกว่า M-Bus และทั้งสี่ด้านมี Pin Headers เอาไว้สำหรับต่อสายเชื่อมต่อกับอุปกรณ์หรือวงจรภายนอกได้
บอร์ดฐานยังมีอีกหลายแบบ จำแนกตามกลุ่มได้แก่ โมดูลสื่อสาร (Communication Modules) เช่น LoRa/LoRaWAN, SIM800L, GPS Receiver, W5500 (Ethernet) เป็นต้น โมดูลแบตเตอรีที่มีความจุมากกว่า 100 mAh หรือโมดูลขยายพอร์ตสำหรับต่อวงจร (Expansion Modules) และโมดูลสำหรับขับมอเตอร์ไฟฟ้ากระแสตรง (Drive Modules) เป็นต้น
ข้อมูลเชิงเทคนิคเกี่ยวกับ M5 FIRE
- An upgrade version of M5 GRAY
(with 16MB SPI Flash + 4MB PSRAM) - Type-C USB port / USB-to-Serial converter
- Grove Ports (I2C + I/O + UART)
- 2-inch, 320x240 TFT LCD (ILI9342C driver)
- Speaker 1W-0928
- MEMS Analog BSE3729 Microphone
- 3 Custom Buttons
- SK6812 3535 RGB LED x 10
- IMU Sensor: MPU9250 or BMM150 + MPU6886
- 550 mAh @ 3.7V LiPo Battery + IP5306 (I2C)
ข้อสังเกต: M5 FIRE มีราคาสูงกว่ารุ่นก่อนหน้า และมีหน่วยความจำ SPI Flash เพิ่มจาก 4MB เป็น 16MB และที่สำคัญคือ มีการเพิ่มไอซีหน่วยความจำ SPI RAM / PSRAM ที่มีความจุ 4MB ดังนั้นเหมาะกับการเขียนโค้ดด้วย MicroPython
นอกจากนั้นยังมีการเพิ่มโมดูลชั้นกลาง (Middle Part) ที่เรียกว่า M5GO Base ซึ่งภายในมีแบตเตอรี LiPo แถบหลอดไฟ RGB LEDs ที่อยู่ด้างข้างของอุปกรณ์ และพอร์ต GROVE (จำนวน 3 ชุด) และมีโมดูลฐานล่าง (Bottom Part) ทำหน้าที่เป็น Docking Station สำหรับเสียบสาย USB-C (ต่อกับวงจรภายในโมดูลผ่านทางคอนเนอเตอร์แบบสัมผัสที่เรียกว่า POGO Pins) และดึงออกได้ง่าย
พอร์ต GROVE ของ M5 FIRE มีดังนี้ แบ่งเป็น 3 รูปแบบ
- GROVE A (I2C): GPIO22/SCL, GPIO21/SDA, 5V, GND
- GROVE B (I/O): GPIO36, GPIO26, 5V, GND)
- GROVE C (UART): GPIO16/RXD, GPIO17/TXD, 5V, GND
บอร์ดฐานที่นำมาต่อเพิ่มได้สำหรับ M5 Core มีหลายแบบในปัจจุบัน ตามรูปประกอบข้างล่างนี้
M5Stick Series
ต่อมาทางบริษัทได้พัฒนาโมดูลที่มีขนาดเล็กลง อาจจะเหมาะสำหรับการใช้งานในรูปแบบ Wearable Computing เช่น เริ่มต้นด้วย M5Stick และมีรุ่นอัปเกรดเป็น M5Stick-C (เริ่มจำหน่ายในปีค.ศ. 2019) ที่เริ่มใช้ ESP32-PICO-D4 และอีกรุ่นหนึ่งคือ ATOM Lite (เริ่มจำหน่ายในปีค.ศ. 2020) ตามลำดับ ซึ่งทั้งหมดยังคงใช้ตัวประมวลผล ESP32 เหมือนเดิม
แต่ก็มีอีกรุ่นหนึ่งคือ M5Stick-V (เปิดตัวในปีค.ศ. 2019) ที่เปลี่ยนไปใช้ตัวประมวผล Kendryte K210 (64bit RISC-V, Dual-Core) แทน ESP32 แต่มีความสามารถในการประมวลผลสูงกว่า และมีโมดูลกล้อง OV7740 CMOS Image Sensor
ข้อมูลเชิงเทคนิคโดยสรุปเกี่ยวกับ M5Stick-C
- ESP32 PICO-based (ESP32-PICO-D4, System-in-Package)
- 4 MB SPI Flash
- USB Type-C port / USB-to-Serial Converter
- IMU Sensor MPU9250 or MPU6886 (I2C)
- Red LED
- IR Transmitter
- Digital Microphone SPM1423 (I2S / PDM interface)
- RTC (Real-Time Clock) BM8563 (I2C)
- 2 User Buttons, 1 Reset Button
- 0.96-inch Color TFT (ST7735S Driver)
- PMU (Power Management Unit) AXP192 (I2C)
- 80 mAh @ 3.7V Lipo Battery
- Extendable Socket and Grove Port
นอกจากนั้นยังมีโมดูลที่นำมาต่อเข้ากับ M5Stick-C ได้อีกด้วย เรียกว่า “Stick-Hat” เช่น
- StickHat-ENV: โมดูลเซนเซอร์วัดอุหณภูมิและความชื้นสัมพัทธ์ (DHT12) ความดันบรรยากาศ (BMP280) และความเข้มของสนามแม่เหล็ก (BMM150)
- StickHat-SPK: โมดูลวงจรขยายเสียง (PAM8303 Amplifier IC) สำหรับต่อกับลำโพงเสียงภายนอก
- StickHat-ADC: โมดูลแปลงสัญญาณ Analog-to-Digital โดยใช้ไอซี ADC1100 (I2C)
- StickHat-DAC: โมดูลแปลงสัญญาณ Digital-to-Analog โดยใช้ไอซี MCP4725 (I2C) + วงจร Voltage Buffer (LM321MX OpAmp)
- StickHat-PIR: โมดูลเซนเซอร์ตรวจจับการเคลื่อนไหวด้วยรังสีอินฟราเรด
- StickHat-RS485: โมดูลสำหรับเชื่อมต่อกับบัส RS485
แนวโน้มการทำโมดูลให้มีขนาดเล็ก และมีหลายส่วนมาประกอบเข้าด้วยกันได้ ดูเหมือนจะเป็นความตั้งใจของบริษัท M5Stack ที่จะพัฒนาฮาร์ดแวร์ในลักษณะนี้
ถัดจาก M5StickC ก็มี M5Stack ATOM Series ออกมา ซึ่งมีขนาดเล็กลงไปอีก (มีขนาดเพียง 2.4 x 2.4 cm.) เช่น
- ATOM Lite เป็นโมดูลเริ่มแรกใน ATOM Series
- ATOM Matrix ที่มีการเพิ่มแผง 5x5 RGB LED (WS2812C 2020) Matrix และไอซีเซนเซอร์ประเภท IMU (MPU6886)
- ATOM Echo ที่มีไมโครโฟนแบบดิจิทัลและวงจรขยายเสียงสำหรับลำโพง (นำมาใช้เป็น Bluetooth Speaker ได้)
ข้อมูลเชิงเทคนิคเกี่ยวกับ ATOM Lite
- ESP32 PICO-based
- 4 MB SPI Flash
- USB Type-C port
- GROVE Ports (I2C + I/O + UART)
- 1x RGB LED SK6812 3535
- IR Transmitter (Infra-red LED)
- 1 User Button
ด้วยข้อกำจัดในเรื่องขนาดของโมดูล ATOM Lite จึงมีอุปกรณ์ต่อพ่วงมาเสริม เช่น
- ATOMIC Proto Kit เพื่อช่วยในการต่อวงจรง่ายขึ้น
- ATOM Hub Proto เพื่อช่วยเพิ่มคอนเนกเตอร์ในการเชื่อมต่อวงจร เช่น Terminal Blocks
- ATOM TailBat เพื่อใช้แบตเตอรี่ (190mAh LiPo) นำมาต่อเพิ่ม เป็นแหล่งพลังงาน และมีไอซี IP5303 เป็นตัวควบคุมการชาร์จประจุ
- ATOM Tail485 ใช้ชิป SP485 Transceiver เพื่อเชื่อมต่อกับระบบบัส RS485
- โมดูล ATOM QR-CODE มีกล้อง CMOS Sensor สำหรับการสแกน Barcode/QR-code
- Atomic GPS ที่มีตัวรับสัญญาณจากดาวเทียม เช่น GPS/GLONASS/Galileo
อุปกรณ์เสริมที่เชื่อมต่อด้วย Grove Connectors
จากที่ได้นำเสนอตัวอย่างอุปกรณ์ของ M5Stack เราจะเห็นว่า ในขณะที่ M5 Core จะใช้ M-Bus Connector เพื่อเชื่อมต่อระหว่างโมดูล แต่ไม่มีสำหรับ M5Stick Series เนื่องด้วยข้อจำกัดของขนาดอุปกรณ์ แต่ทุกรุ่นจะมีคอนเนกเตอร์ตามรูปแบบของ Grove (JST-PH 2.0 Spacing) สำหรับเชื่อมต่อกับอุปกรณ์เสริมซึ่งมีหลายรูปแบบ ขอยกตัวอย่างเช่น I/O Hub 1-to-6 Expansion Unit (MEGA328) ซึ่งเป็นโมดูลขยายพอร์ต ซึ่งมีทั้งหมด 6 พอร์ต และใช้บัส I2C ในการเชื่อมต่อ และมีไมโครคอนโทรลเลอร์ ATmega328 เป็นตัวควบคุม และก็มีอีกรุ่นที่ใช้ไอซี TCA9548A (I2C) เป็นตัวควบคุม (สามารถดูรายการอุปกรณ์ต่างเพิ่มเติมซึ่งอยู่จำนวนมาก ได้บนหน้าเว็บ https://docs.m5stack.com/)
ตัวเลือกในการเขียนโปรแกรมสำหรับ ESP32-based M5Stack Hardware
ในด้านการเขียนโปรแกรม เราก็มีหลายตัวเลือกดังนี้
- C/C++ with Espressif ESP-IDF & Xtensa Toolchain — อาจจะไม่ง่ายสำหรับผู้เริ่มต้น (Beginner)
- Arduino IDE + Arduino ESP32 Core + M5Stack Library — น่าจะเหมาะสำหรับผู้ที่มีประสบการณ์การใช้งาน Arduino มาบ้างแล้ว
- MicroPython + M5Stack UIFlow (Block-based Programming) — เหมาะสำหรับผู้ที่เริ่มต้น หรือมีพื้นฐานภาษา Python 3 มาบ้างแล้ว
ซอฟต์แวร์ที่น่าสนใจก็คือ UIFlow/M5Flow ซึ่งเป็นซอฟต์แวร์ประเภท Web-based IDE ที่ทางบริษัท M5Stack ได้พัฒนาและให้บริการฟรี ผู้ใช้สามารถเขียนโค้ดด้วยภาษา MicroPython หรือใช้วิธีการต่อบล็อก (Google Blockly) ในส่วนของการใช้งาน จะต้องมีการติดตั้งเฟิร์มแวร์ในอุปกรณ์ M5Stack ก่อน (วิธีการติดตั้งเฟิร์มแวร์ M5Stack-MicroPython) ตัวอย่างโค้ดสาธิต สามารถดูได้จาก https://github.com/m5stack/UIFlow-Code
โดยสรุป เราได้เห็นฮาร์ดแวร์ของบริษัท M5Stack ที่ได้มีการพัฒนาและจำหน่าย เกือบจะทุกรุ่นได้ใช้ตัวประมวลผลเป็น ESP32 และมีแนวโน้มในการพัฒนาให้มีขนาดเล็กลง เน้นการเชื่อมต่อกับอุปกรณ์เสริม เพื่อเพิ่มหรือขยายฟังก์ชันและความสามารถของระบบ ในส่วนของซอฟต์แวร์ ก็มี UIFlow มาเป็นตัวเลือกหรือเครื่องมือในการเขียนโปรแกรมที่แปลงให้เป็นโค้ด MicroPython ได้ ทั้งหมดที่ได้กล่าวถึงไป ก็เป็นส่วนหนึ่งของ M5Stack Ecosystem ที่กำลังเติบโตขึ้นในชั่วเวลาเพียงไม่กี่ปี