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
- UNIT Light - main.cpp
- Test I2C on GPIO18, 19
- UNIT ENV III - test_i2c_gpio1819.cpp
- UNIT ULTRASONIC - test_i2c_gpio1819.cpp
- Test UART on GPIO18, 19
- UNIT GPS - test_uart_gpio1819.cpp
- Test DIGITAL on GPIO18, 19
- UNIT IR - test_digit_gpio1819.cpp
- WebAssembly execution with Wasm3
- Analog clock using AssemblyScript - test_wasm3_clockenv.cpp
- GPS GSV viewer using AssemblyScript - test_wasm3_gpsgsv.cpp
- Support RGB LED (SK6812) - main.cpp
- 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++ Extention 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.
#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 | - |
get_idf or (Windows) ESP-IDF 4.4.2
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 8.4.0 (crosstool-NG esp-2021r2)
openocd (Optional)
$ openocd
Open On-Chip Debugger v0.10.0-esp32-20211111 (2021-11-10-21:40)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
git clone and build
git clone --recursive https://github.com/h1romas4/m5stamp-c3dev
cd m5stamp-c3dev
idf.py build flash
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 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
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 Partation file
python ${IDF_PATH}/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py generate nvs_partition.csv nvs_partition.bin 0x6000
- Write NVS Partation
esptool.py write_flash 0x9000 nvs_partition.bin
Restart M5Stamp C3 (NTP synchronization is performed by pressing the SW1 after the startup logo)
idf.py monitor
idf.py menuconfig
C3DEV Configuration → Select GPIO 18/19
- Set 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.
main/main.cpp
// If the color is inverted, set to 1.
tft.invertDisplay(0);
// tft.invertDisplay(1);
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
Component config → ESP System Settings → Channel for console output
idf.py menuconfig
cd wasm/clockenv # or cd wasm/gpsgsv
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
Thanks for all the open source.
Name | Version | License |
---|---|---|
esp-idf | v4.4.2 |
BSD License |
arduino-esp32 | 2.0.4 |
LGPL-2.1 License |
M5EPD | 0.1.4 |
FreeType Part(The FreeType License) |
UNIT_ENV | 0.0.5 |
MIT License |
M5Unit-Sonic | 0.0.2 |
MIT License |
Adafruit_GFX | 1.11.3 |
BSD License |
Adafruit_BusIO | 1.13.1 |
MIT License |
Adafruit-ST7735-Library | 1.9.3 |
MIT License |
Adafruit_NeoPixel | 1.10.5 |
LGPL-3.0 License |
tinyPNG | 0.11 |
MIT License |
lwgps | v2.1.0 |
MIT License |
IRremoteESP8266 | v2.8.2 |
LGPL-2.1 license |
Wasm3 | master(dc9fa49 ) |
MIT License |
AsselblyScript | 0.20.16 |
Apache-2.0 License |
源真ゴシック | - | SIL Open Font License 1.1 |
MIT License (includes PCB data and example source)