一、介绍
立创·实战派是嘉立创推出的一款带有屏幕、外壳的开发板,主控芯片是
ESP32-C3,外置 8MB FLASH,详见立创·实战派。
二、编译
此处使用 Ubuntu22.04 (WSL)
进行编译操作,需保证有良好的国际网络互联条件。
(一)设置开发环境
- 安装必要工具和库
确保你安装了 Python、Git
以及其他必需的工具(相关的编译器和工具链),当然后面操作中提示缺什么再装也来得及,这一步可以跳过。
- 配置 ESP-IDF 环境
克隆 ESP-IDF 仓库,初始化和安装所需的子模块和依赖,设置环境变量:
1 2 3 4 5 6 7
| mkdir esp cd esp git clone --branch v5.1.2 https://github.com/espressif/esp-idf.git cd esp-idf git submodule update --init --recursive ./install.sh source export.sh
|
(二)获取 MicroPython 源代码
从 GitHub 上克隆 MicroPython 的源代码仓库:
1 2
| cd ~/esp git clone https://github.com/micropython/micropython.git
|
(三)编译 MicroPython
- 编译
mpy-cross
:
这是 MicroPython 的字节码编译器,用于将 Python 代码编译成字节码。
1 2
| cd micropython make -C mpy-cross
|
- 编译 MicroPython 固件:
进入对应的端口目录(即 ports/esp32),编译 MicroPython 固件。
1 2 3
| cd ports/esp32 make submodules make
|
此时如果在
~/esp/micropython/ports/esp32/build-ESP32_GENERIC
目录下可以看到一个名为 firmware.bin
的固件,继续下面的操作。
(四)定制和添加功能
- 添加显示驱动
此块屏幕应使用 ST7789 驱动。
1 2
| cd ~/esp git clone https://github.com/russhughes/st7789_mpy.git
|
- 修改源代码
实战派外置 8MB FLASH、支持麦克风和扬声器,因此要对 MicroPython
源码做以下修改:
- 修改
~/esp/micropython/ports/esp32/boards/
下的
sdkconfig.base
的 94~97 行:
修改前:
1 2 3 4
| # For cmake build CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-4MiB.csv"
|
修改后:
1 2 3 4
| # For cmake build CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv"
|
- 修改
./ESP32_GENERIC_C3/
下的
mpconfigboard.h
的
MICROPY_PY_MACHINE_I2S
:
修改前:
1
| #define MICROPY_PY_MACHINE_I2S (0)
|
修改后:
1
| #define MICROPY_PY_MACHINE_I2S (1)
|
(五)生成固件
1 2
| cd ports/esp32 make USER_C_MODULES=~/esp/st7789_mpy/st7789/micropython.cmake BOARD=ESP32_GENERIC_C3
|
最后得到如下结果:
一共生成了三个固件:bootloader.bin
、partition-table.bin
、micropython.bin
。
0x0
、0x8000
、0x10000
是三个固件对应的起始地址。
将这三个固件下载到 Windows,以备后续烧录。
三、烧录
使用乐鑫的 Flash
下载工具 将固件烧录到设备。
下载 flash_download_tool 后运行其中的可执行文件;
选择 ChipType 为 esp32-C3,点击 OK;
进入烧录页面,选择之前的三个固件,并填写对应的地址:
先点击 ERASE 擦除旧固件,成功后点击 START 刷入新固件。
四、亮屏测试
使用 Thonny 连接到开发板。
准备一张 240x320 大小的 bmp
格式的图片(即上图:Je.bmp)存到开发板的根目录,新建一个文件输入下面的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| from machine import Pin, SPI import st7789 import time import framebuf
spi = SPI(1, baudrate=26666666, polarity=1, sck=Pin(3), mosi=Pin(5))
tft = st7789.ST7789(spi, 240, 320, dc=Pin(6, Pin.OUT), cs=Pin(4, Pin.OUT), inversion=True, rotation=90, options=0) backlight = Pin(2, Pin.OUT)
tft.init() backlight.value(0) tft.fill(st7789.WHITE)
def display_bmp(filename): with open(filename, 'rb') as f: if f.read(2) == b'BM': f.read(8) offset = int.from_bytes(f.read(4), 'little') f.read(4) width = int.from_bytes(f.read(4), 'little') height = int.from_bytes(f.read(4), 'little') if width > tft.width() or height > tft.height(): raise ValueError("Image too large for display")
f.read(offset - 26)
for row in range(height): for col in range(width): b, g, r = f.read(3) color = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3) tft.pixel(col, height - 1 - row, color)
display_bmp('/Je.bmp')
while True: time.sleep(1)
|
保存为 main.py
后运行:
成功点亮!