feature: add support for esp32c3 supermini board
Hey, I recently got into Go and loved the idea of using it for microcontrollers in a new project. I have a bunch of ESP32-C3 superminis but I can't get tinygo to build for them. I'm on a MacBook Pro M3 Pro on Sonoma with Tinygo and Esptool installed via Homebrew. I've tried following the blinking LED example adjusted to work with the esp32c3
main.go
package main
import (
"machine"
"time"
)
func main() {
led := machine.GPIO8
led.Configure(machine.PinConfig{Mode: machine.PinOutput})
for {
led.Low()
time.Sleep(time.Millisecond * 500)
led.High()
time.Sleep(time.Millisecond * 500)
}
}
But building fails with the following output:
❯ tinygo build -target=esp32c3
# machine
/opt/homebrew/Cellar/tinygo/0.31.2/src/machine/machine_esp32c3_i2c.go:38:16: undefined: SCL_PIN
/opt/homebrew/Cellar/tinygo/0.31.2/src/machine/machine_esp32c3_i2c.go:41:16: undefined: SDA_PIN
I guess it's something with the i2c implementation, but I'm not familiar enough with Go or this project to pinpoint the exact issue yet.
Since building with -target=esp32 works fine, I've tried flashing with that but it won't work either.
❯ tinygo flash -target=esp32
esptool.py v4.7.0
Serial port /dev/cu.usbmodem1101
Connecting...
A fatal error occurred: This chip is ESP32-C3 not ESP32. Wrong --chip argument?
error: failed to flash /var/folders/93/m682qq_n5klc2btq3q_cb_0c0000gq/T/tinygo1642084370/main.bin: exit status 2
Thanks a lot for making all this in the first place, I can't wait to use Go for microcontrollers!
As a workaround, commenting out these lines makes it work as expected. My LED is blinking.
https://github.com/tinygo-org/tinygo/blob/6384ecace093df2d0b93915886954abfc4ecfe01/src/machine/machine_esp32c3_i2c.go#L37-L42
@vaaski the issue here is that you need to use a target with an actual board file in order to have the correct mapping. An example is the Seeed XIAO ESP32C3 board.
For example, see target https://github.com/tinygo-org/tinygo/blob/release/targets/xiao-esp32c3.json with board file https://github.com/tinygo-org/tinygo/blob/release/src/machine/board_xiao-esp32c3.go
Note that the target "inherits" from the target esp32c3. That target is really meant to be used in this way, not as a target of its own.
Hope that helps!
@vaaski if you wanted to create a PR that added the board definitions for the esp32c3 supermini we'd be happy to accept it. :smile:
See https://forum.arduino.cc/t/esp32-c3-supermini-pinout/1189850/6 for the pin definitions.
See https://github.com/tinygo-org/tinygo/wiki/Adding-a-new-board#adding-a-new-board for instructions on how to go about doing this.