M5Stack: ESP32-based Ecosystem

<rawat.s>
6 min readJun 12, 2020

--

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

บทความนี้นำเสนอการสำรวจอุปกรณ์ฮาร์ดแวร์ของบริษัท 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 Core / Kit Products (Source: M5Stack)

ข้อมูลเชิงเทคนิคเกี่ยวกับ 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 (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

โมดูล M5 Basic และ M5 Gray จะมีบอร์ดฐานปิดด้านล่าง เรียกว่า Base CORE Bottom ซึ่งมีแบตเตอรี LiPo (110 mAh @ 3.7V) อยู่ภายใน และมีคอนเนกเตอร์ที่เรียกว่า M-Bus และทั้งสี่ด้านมี Pin Headers เอาไว้สำหรับต่อสายเชื่อมต่อกับอุปกรณ์หรือวงจรภายนอกได้

ฺBase CORE Bottom (Source: M5Stack)
M-Bus Pinmap (Source: M5Stack)

บอร์ดฐานยังมีอีกหลายแบบ จำแนกตามกลุ่มได้แก่ โมดูลสื่อสาร (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 (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ข้อสังเกต: 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
M5Stack FIRE + Docking Part (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

บอร์ดฐานที่นำมาต่อเพิ่มได้สำหรับ M5 Core มีหลายแบบในปัจจุบัน ตามรูปประกอบข้างล่างนี้

Communication Modules for M5 Core (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

Expansion Modules for M5 Core (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

Motor Drive Module for M5 Core (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

M5 Base or Bottom Boards (Source: M5Stack)

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 Series
M5Stick with 1.3 inch, 64 x 128 OLED (Source: M5Stack)
M5Stick-C with 0.96-inch Color TFT (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ข้อมูลเชิงเทคนิคโดยสรุปเกี่ยวกับ 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
M5Stick-C (Source: M5Stack)
StickC-Hat ENV (Source: M5Stack)

‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

แนวโน้มการทำโมดูลให้มีขนาดเล็ก และมีหลายส่วนมาประกอบเข้าด้วยกันได้ ดูเหมือนจะเป็นความตั้งใจของบริษัท 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 Series (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ข้อมูลเชิงเทคนิคเกี่ยวกับ 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

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ATOM Lite (Source: M5Stack)
ATOM Lite + Atomic Proto Kit (Source: M5Stack)
ATOM Hub Proto (Source: M5Stack)
ATOM Lite + ATOM Hub Proto with DIN Rail Mount (Source: M5Stack)
ATOM Lite + ATOM TailBat (Source: M5Stack)
ATOM Matrix (Source: M5Stack)

อุปกรณ์เสริมที่เชื่อมต่อด้วย 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/)

MEGA328-based I/O Hub 1-to-6 Expansion Unit (Source: M5Stack)
Sensor Modules
Communication Modules

ตัวเลือกในการเขียนโปรแกรมสำหรับ 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 UIFlow
M5-UIFlow + UI Simulator IDE (Source: http://m5edu.com/)

โดยสรุป เราได้เห็นฮาร์ดแวร์ของบริษัท M5Stack ที่ได้มีการพัฒนาและจำหน่าย เกือบจะทุกรุ่นได้ใช้ตัวประมวลผลเป็น ESP32 และมีแนวโน้มในการพัฒนาให้มีขนาดเล็กลง เน้นการเชื่อมต่อกับอุปกรณ์เสริม เพื่อเพิ่มหรือขยายฟังก์ชันและความสามารถของระบบ ในส่วนของซอฟต์แวร์ ก็มี UIFlow มาเป็นตัวเลือกหรือเครื่องมือในการเขียนโปรแกรมที่แปลงให้เป็นโค้ด MicroPython ได้ ทั้งหมดที่ได้กล่าวถึงไป ก็เป็นส่วนหนึ่งของ M5Stack Ecosystem ที่กำลังเติบโตขึ้นในชั่วเวลาเพียงไม่กี่ปี

--

--