m5stamp-c3dev
This is a development board for the M5Stamp C3 (RISC-V/FreeRTOS).
Hardware
- External USB-C port for JTAG debugging
- Support for LCD panel and SD card
- Selecting a power supply
- Switch(GPIO9) to enter loader mode
- Pin headers to expose usable GPIOs to the outside
- The size is just Japanese business card
Sample Sources Included
- TrueType font with Japanese output to LCD - test_freetype.cpp
- Output PNG images in SD card to LCD - test_tinypng.cpp
- NTP synchronization via WiFi connection - test_nvs_wifi.cpp
- Test ADC on GPIO0
- Test I2C on GPIO18, 19
- Test UART on GPIO18, 19
- WebAssembly execution with Wasm3
- Usage of SPIFFS, which stores TrueType fonts and .wasm binaries (parttool.py and spiffsgen.py tools)
- Use of NVS (cryptographically enabled key value store) that stores WiFi passwords (nvs_partition_gen.py tool)
- Building libraries and managing dependencies using the esp-idf build system
- Visual Studio Code C/C++ Extension configuration and JTAG debugging configuration in conjunction with openocd
- AssembyScript sharing method between web browser and microcontroller - wasm
This repository contains MIT Licensed PCB data and example programs.
Demo
Video
Web Simulation
Schematic
|#Unit|Name|Note|Where to get it|
|----|----|----|----|
|U1|AE-USB2.0-TYPE-C|USB 2.0 Type-C Break out board|akizukidenshi.com (JP)|
|U2|M5STAMP-C3|M5Stamp C3|+ M5Stack
+ SWITCH SCIENCE (JP)|
|U3|KMR-1.8SPI|KMR-1.8 SPI marked LCD and SD card interface|+ amazon.co.jp (1)
+ ja.aliexpress.com|
|R1 - R2|5.2K Resistor|Pull-down for USB Power supply|-|
|R3 - R7|10K Resistor|SPI pull-up|-|
|JP1|Jumper pin|Select external power supply|akizukidenshi.com (JP)|
|SW1|Tact switch|for loader mode and utility|akizukidenshi.com (JP)|
|J1|12 Pin header|You can use the one that comes with the M5Stamp C3 Mate|-|
PCB and Gerber data
Example Source
Require
get_idf or (Windows) ESP-IDF command prompt
# Linux or macOS ->
$ alias get_idf='. $HOME/esp/esp-idf/export.sh'
$ get_idf
# <-
Detecting the Python interpreter
... snip ...
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:
idf.py build
$ echo ${IDF_PATH}
/home/hiromasa/devel/toolchain/esp/esp-idf
$ riscv32-esp-elf-gcc -v
Using built-in specs.
COLLECT_GCC=riscv32-esp-elf-gcc
... snip ...
gcc version 12.2.0 (crosstool-NG esp-12.2.0_20230208)
openocd (Optional)
$ openocd -v
Open On-Chip Debugger v0.12.0-esp32-20240318 (2024-03-18-18:25)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Build and Execute
- git clone and build (Please add
--recursive)
git clone --recursive https://github.com/h1romas4/m5stamp-c3dev
cd m5stamp-c3dev
idf.py build
Note: If you get a compile error, change the sdkconfig back to the Git one. In some cases, the target of sdkconfig is changed to esp32 instead of eps32c3.
- Write Partition table
idf.py partition-table-flash
- Write TypeType font to SPIFFS
parttool.py write_partition --partition-name=font --partition-subtype=spiffs --input resources/spiffs_font.bin
- Write WebAssembly(.wasm) to SPIFFS
parttool.py write_partition --partition-name=wasm --partition-subtype=spiffs --input resources/spiffs_wasm.bin
- Write main program to go!
idf.py flash monitor
Setup WiFi (Optional)
- Change WiFi Setting
nvs_partition.csv: Set own [ssid], [password]
key,type,encoding,value
wifi,namespace,,
ssid,data,string,[ssid]
passwd,data,string,[password]
- Create NVS Partition file
python ${IDF_PATH}/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py generate nvs_partition.csv nvs_partition.bin 0x6000
- Write NVS Partition
esptool.py write_flash 0x9000 nvs_partition.bin
- Run
NTP synchronization is performed by pressing the SW1 after the startup logo.
idf.py monitor
Select connected GPIO18 and GPIO19 device (Optional)
idf.py menuconfig
C3DEV Configuration → Select GPIO 18/19
3D Cube Demo
JTAG debug with Visual Studio Code
Require setup ESP32_TOOLCHAIN_HOME
$ echo ${ESP32_TOOLCHAIN_HOME}
/home/hiromasa/.espressif/tools/riscv32-esp-elf
- Connect the PC to the USB Type-C of the U1
- Open the source file in Visual Studio Code.
- Run Task "openocd (debug)" @see .vscode/tasks.json
- Set a breakpoint in the source code.
- Debug Launch (GDB) @see .vscode/launch.json
The first time you start the program, it will often fail, so if you get an error, retry.
Note
If the LCD color is inverted.
main/main.cpp
// If the color is inverted, set to 1.
tft.invertDisplay(0);
// tft.invertDisplay(1);
Create SPIFFS partition file from file system
python ${IDF_PATH}/components/spiffs/spiffsgen.py 0x100000 resources/font resources/spiffs_font.bin
python ${IDF_PATH}/components/spiffs/spiffsgen.py 0x10000 resources/wasm resources/spiffs_wasm.bin
Change the output destination of the log to U1 Serial/JTAG.(Don't forget to put it back)
Component config → ESP System Settings → Channel for console output
idf.py menuconfig
AssemblyScript and Wasm3
Build AssemblyScript
cd wasm/clockenv # or wasm/gpsgsv or wasm/imu6886
npm install
Web Browser Development
npm run asbuild:web
npm run start
# http://localhost:1234/
SPIFFS Build and Flash
npm run asbuild
cd ../../
python ${IDF_PATH}/components/spiffs/spiffsgen.py 0x10000 resources/wasm resources/spiffs_wasm.bin
parttool.py write_partition --partition-name=wasm --partition-subtype=spiffs --input resources/spiffs_wasm.bin
Dependencies
Thanks for all the open source.
|Name|Version|License|
|-|-|--|
|esp-idf|release/v5.1|BSD License|
|arduino-esp32|3.0.2|LGPL-2.1 License|
|M5EPD|0.1.5|MIT License|
|UNIT_ENV|0.0.7|MIT License|
|M5Unit-Sonic|0.0.2|MIT License|
|Adafruit_GFX|1.11.9|BSD License|
|Adafruit_BusIO|1.16.1|MIT License|
|Adafruit-ST7735-Library|1.10.4|MIT License|
|tinyPNG|0.11|MIT License|
|lwgps|v2.1.0|MIT License|
|Wasm3|master(045040a9)|MIT License|
|AssemblyScript|0.27.29|Apache-2.0 License|
|源真ゴシック|-|SIL Open Font License 1.1|
License
MIT License (includes PCB data and example source)