ESP32 S2 使用CircuitPython的开发步骤
本帖最后由 topdog 于 2021-2-22 19:42 编辑以ESP32-S2-WROVER 为实例,ESP32-S2-WROVER-I 配置了 4 MB SPI flash 和 2 MB SPI PSRAM。
固件下载的地址:https://circuitpython.org/board/espressif_saola_1_wrover/页面有两个下载链接:.bin是从串口UART0烧录以后连接USB CDC就是USB串行设备模式,而.uf2需要先从串口UART0烧录adafruit的tinyuf2,再把.uf2文件复制到连接USB CDC的挂载盘中,重启后和前者一样。
第一:下载Flash Download Tools、tinyuf2、CircuitPython 库文件和安装esptool
1,到乐鑫官网下载烧录工具Flash Download Tools,下载地址:https://www.espressif.com/sites/default/files/tools/flash_download_tool_v3.8.5.zip
2,tinyuf2的下载地址:https://github.com/adafruit/tinyuf2/releases ,本例是针对WROVER的:https://github.com/adafruit/tinyuf2/releases/download/0.3.0/tinyuf2-espressif_saola_1_wrover-0.3.0.zip
3,CircuitPython 库文件 https://circuitpython.org/libraries ,mpy和py版本的都可以用,前者用于片上加载,后者方便阅读查看。
4,电脑已经安装了python 3.7和pip3,按WIN+R键,输入cmd
5,输入:pip3 install --upgrade esptool
第二:用esptool烧录.bin
1,esptool安装好后的路径是c:\users\xxx\appdata\roaming\python\python37\scripts\,把下载好的文件adafruit-circuitpython-espressif_saola_1_wrover-en_US-6.1.0.bin 复制黏贴到文件夹下。
2,把串口UART0接入电脑,查看一下串口编号,本例是COM6
3,全片擦除,输入:
cd c:\users\xxx\appdata\roaming\python\python37\scripts\
esptool.py --port COM6 erase_flash
4,烧录.bin固件:
esptool.py -p COM6 write_flash 0x0 adafruit-circuitpython-espressif_saola_1_wrover-en_US-6.1.0.bin等烧录结束,把USB CDC接入电脑就可以看到挂载的盘符了。
第三:Flash Download Tool烧录tinyuf2
1,按照步骤2.2和2.3操作。
2,把步骤1.2下载的tinyuf2解压到C盘下,然后按照下图配置Flash Download Tool并且烧录。
4 MB SPI flash版本的地址分配如下:
bootloader.bin 0x1000
partition-table.bin 0x8000
ota_data_initial.bin0xe000
tinyuf2.bin 0x2d0000
其他版本的查看https://github.com/adafruit/tinyuf2/tree/master/ports/esp32s2 里面对应的partitions.csv文件。
5,把.uf2文件复制到连接USB CDC的挂载盘中,重启。
第四:使用Thonny IDE编译程序点亮板载的w2812
1,解压adafruit-circuitpython-bundle-6.x-mpy-20210220和adafruit-circuitpython-bundle-py-20210220。
2,CircuitPython已经支持neopixel,把库文件里面的adafruit-circuitpython-bundle-6.x-mpy-20210220里面的neopixel.mpy,复制黏贴到挂载盘符的lib文件夹里面。
3,然后将盘符里面的code.py修改如下:
# -*- coding: utf-8 -*-
import time
import board
import neopixel
pixel_pin = board.NEOPIXEL
num_pixels = 1
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
def wheel(pos):
# Input a value 0 to 255 to get a color value.
# The colours are a transition r - g - b - back to r.
if pos < 0 or pos > 255:
return (0, 0, 0)
if pos < 85:
return (255 - pos * 3, pos * 3, 0)
if pos < 170:
pos -= 85
return (0, 255 - pos * 3, pos * 3)
pos -= 170
return (pos * 3, 0, 255 - pos * 3)
def color_chase(color, wait):
for i in range(num_pixels):
pixels = color
time.sleep(wait)
pixels.show()
time.sleep(0.5)
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
while True:
pixels.fill(RED)
pixels.show()
# Increase or decrease to change the speed of the solid color change.
time.sleep(1)
pixels.fill(GREEN)
pixels.show()
time.sleep(1)
pixels.fill(BLUE)
pixels.show()
time.sleep(1)
color_chase(RED, 0.1)# Increase the number to slow down the color chase
color_chase(YELLOW, 0.1)
color_chase(GREEN, 0.1)
color_chase(CYAN, 0.1)
color_chase(BLUE, 0.1)
color_chase(PURPLE, 0.1)
页:
[1]