文章目录[隐藏]
0. 引言
最近入了一块ESP32来学习嵌入式开发,就着能不用C/C++就不用的原则,在此尝试学习MicroPython的固件刷入并尝试对RGB灯点亮。
1.MicroPython固件下载
确定自己的开发板型号,本文使用的是微雪的 ESP32-C6-LCD-1.47。
随后前往 MicroPython - Download 查找对应的固件,点击以下标签选择自己的型号
如上图所示,我筛选了自己开发板的型号,Espressif就是 乐鑫。其实挺多板都是直接拿乐鑫的改的,如果不确定应该选哪个就直接下载乐鑫固件。
点入链接后直接翻到最底下 Firmware 的 Releases(稳定版) v1.xx.x.bin (最新就行),Preview Builds 为预览版,您可以根据自身能力与情况下载对应版本。
下载完成后,连接你的开发板,按下Win键后搜索“设备管理器”,接下来在端口中找到你的USB串行设备。此处显示我们开发板的端口为 COM5,请记住这个端口,接下来会使用。
2. MicroPython 固件刷入
在刚刚的下载界面你看到官方已经列出了刷入方式。
首先需要安装Python3.4+,其次通过pip安装esptool
pip install esptool
安装完成后请打开一个新的终端,在终端内输入以下命令以擦除原先固件
esptool --port <替换成你的端口> erase_flash
带入我的参数就是 esptool --port COM5 erase_flash
如果终端是以 Hard resetting via RTS pin... 停止,则证明命令执行成功
随后通过以下命令,从地址0x0的位置刷入固件
esptool --chip <替换成你板子型号> --port <替换成你的端口> write_flash -z 0x0 <替换成固件包名>
带入我的参数就是 esptool --chip esp32-c6 --port COM5 write_flash -z 0x0 C:\Users\Administrator\Downloads\esp32c6-20241025-v1.24.0.bin
若终端依然以上述提示停止,那一切就绪
3.安装环境
本文采用 vsCode 作为开发编辑器,请自行下载安装.
安装完成后在插件搜索 MicroPython 进行下载与安装,你也可以点击链接查看插件的操作文档.
安装完成后,你可以在左下角看到如图示按钮,点击 + 号即可创建或打开MicroPython项目
完成项目的创建后,你可以点击连接设备,在顶部弹出的窗口中选择一开始查看的端口(例如我的COM5)
等待连接后就会唤起终端尝试进入REPL模式,就是跟平常在终端中使用Python一样.
如果连接成功,你就能看到终端会输出 ">>>" 接下来可以开始跟在PC上使用Python时一样去测试了
注意事项
- 不要删除工程目录下的
.mpyproject.json
文件,该文件是 MicroPython 工程的配置文件,删除后将无法正常运行 MicroPython 代码程序。 - 如果连接设备后无法进入REPL模式,请检查线缆连接是否正常,设备是否开机,是否开启下载模式实在不行重新尝试清除并刷入固件.
4. 开发
RT-Thread MicroPython 插件提供的示例项目若不是其使用的测试开发板,一般都不能直接运行.
编写代码后,点击左下角的播放键就会执行当前你打开窗口里的代码
开发完成后你可以在右上角文件管理中右键选择“下载到设备”,这样代码会写入设备中。
在REPL中使用 os.listdir() 函数查看设备内的文件你会发现存在一个 “boot.py”,这个是用于初始化设备的文件。在执行完boot.py后,设备会继续查找目录下是否存在“main.py”,如果存在就会自动执行,如果不存在或执行后就会进入到Shell中
另外:
- 不建议在main.py中写入死循环,这样无法进入到shell中,只能通过重新刷固件的方式恢复。
以下是操作RGB灯珠的示例代码,来源于 MicroPython 文档
import time
def demo(np):
n = np.n
# 示例文件使用的是有8颗灯珠的圆盘灯
# 循环显示
for i in range(4 * n):
for j in range(n):
np[j] = (0, 0, 0)
np[i % n] = (255, 255, 255)
np.write()
time.sleep_ms(25)
# bounce
for i in range(4 * n):
for j in range(n):
np[j] = (0, 0, 128)
if (i // n) % 2 == 0:
np[i % n] = (0, 0, 0)
else:
np[n - 1 - (i % n)] = (0, 0, 0)
np.write()
time.sleep_ms(60)
# 渐变
for i in range(0, 4 * 256, 8):
for j in range(n):
if (i // 256) % 2 == 0:
val = i & 0xff
else:
val = 255 - (i & 0xff)
np[j] = (val, 0, 0)
np.write()
# clear
for i in range(n):
np[i] = (0, 0, 0)
np.write()
np = NeoPixel(Pin(8),1) # 8代表调用指定针脚,1代表灯珠数量
demo(np) # 执行函数
数组展示顺序并不一定是 RGB, 我的开发板展示顺序是 GRB
当然你也可以通过以下代码测试自己的灯珠颜色顺序
from machine import Pin
from neopixel import NeoPixel
import time
np = NeoPixel(Pin(8),1)
np[0] = (255,0,0)
np.write()
time.sleep(1)
np[0] = (0,255,0)
np.write()
time.sleep(1)
np[0] = (0,0,255)
np.write()
time.sleep(1)
np[0] = (0,0,0) # 重置灯珠颜色
np.write()
以下是我开发板内嵌硬件的参考针脚,例如灯珠使用的就是针脚8
实际端口请你自行查阅
发表回复