Blinky with Micropython on ESP32-C3

dev board ESP32-C3-DevKitM-1
chip ESP32-C3-MINI-1-N4
features blinky led esp32c3 micropython ampy

Before starting

Dependancies

Ensure the following dependancies are downloaded and available:

Buy the components

Code

Download code blink.py
from machine import Pin
import time
led_pin = 3  # Default on-board RGB LED GPIO08 does not work

led = Pin(led_pin, Pin.OUT)
for i in range(10):
  led.on()
  time.sleep_ms(500)
  led.off()
  time.sleep_ms(500)
  print("Blink ", i+1)

Makefile

PYTHON_FILE=blink.py
BIN_FILENAME=esp32c3-20220618-v1.19.1.bin
PORT?=/dev/cu.SLAB_USBtoUART*

.PHONY: help default upload log

default: upload

help: ## Show help message
	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m\033[0m\n"} /^[$$()% 0-9a-zA-Z_-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)

upload: ## Erase flash and then upload the micropython binary
	@echo "Ensure you plug in the board into the USB port"
	@ls /dev/cu.*
	esptool.py --chip esp32c3 --port $(PORT) erase_flash
	esptool.py --chip esp32c3 --port $(PORT) --baud 460800 write_flash -z 0x0 $(BIN_FILENAME)

log: ## Access the serial monitor with ampy
	@ls /dev/cu.*
	@echo "Ensure you plug in the board into the USB port"
	ampy --port $(PORT) run $(PYTHON_FILE)

rollback:
	@ls /dev/cu.*
	@echo "Ensure you plug in the board into the USB port"
	esptool.py --port $(PORT) erase_flash
	@echo "Flash in ESP-IDF blinky"

Prototype

A photo of the actual setup.

Blinky with Micropython on ESP32-C3 prototype

Schematic

Wire up the hardware accordingly

Blinky with Micropython on ESP32-C3 schematic

Serial console

Serial output from the firmware.

Blinky with Micropython on ESP32-C3 serial console

Description

LED

The default RGB LED on-board which is GPIO8 does on work. So, wire up a simple LED to GPIO3 with a 1k resistor to the ground.

Upload the Micropython binary

  1. Plug in the board via the USB port to know the port number
     $ ls /dev/cu.*
    
     /dev/cu.SLAB_USBtoUART  /dev/cu.usbserial-1410
    
  2. Download the *.bin file for the board esp32c3-*.bin
  3. Erase the entire flash
     esptool.py --chip esp32c3 --port /dev/cu.SLAB_USBtoUART erase_flash
    
  4. Flash the firmware starting at address 0
     esptool.py --chip esp32c3 --port /dev/cu.SLAB_USBtoUART write_flash -z 0 _tutorials/code/blinky-micropython-esp32c3/esp32c3-*.bin
    

Access the Serial monitor with the Python code

  1. Download ampy and ensure it is available
     ampy --help
    
  2. Plug in the board
  3. Check the port number of the board
     ls /dev/cu.*
     /dev/cu.SLAB_USBtoUART  /dev/cu.usbserial-1410
    
  4. Run the python script
     ampy --port /dev/cu.usbserial-1410 run blink.py
    

Rollback from Micropython to Arduino

  1. Follow the rollback steps to erase the flash.
  2. Flash in blinky with ESP-IDF.
  3. Flash in blinky with Arduino.

References