近日MicroPython开源组织释出了 1.20.0 版本,并在近期合并了ESP-NOW功能到主线。
GitHub: MicroPython 1.20.0 Release
esp32: ESP-NOW support for ESP32 and ESP8266 by glenn20 · Pull Request #6515 · micropython/micropython (github.com)
另外我还找到了一个连接Windows平台的小问题的解决方案。
在Windows平台使用多个相同固件的ESP32S3开发板时,他们的内置USB-CDC连接不稳定。
在Windows中接入第一台ESP32S3开发板后,再接入第二台或更多台,将要等待3秒左右才能被Windows系统识别为可用串行设备,且使用mpremote devs 命令后,可以看到后续接入的USB设备序列号(Serial String)与第一块都不相同,且拔出所有开发板,单独连接每一块开发板时,它们的设备序列号又都是相同的。
这可以证实此问题仅存在于Windows平台,因为在Linux系统中,连接多个使用相同USB设备序列号的不会出现故障。
由于Windows的设备驱动给每个设备一个设备标识(Device ID)。设计的初衷是用来区分每个设备的。
USB设备的DeviceID命名规则很简单。举例来说,如果一个USB设备的VID是0x1234、PID是0x5678、序列号是00001,则它的DeviceID为:
USB\VID_1234&PID_5678\00001
由于VID是USB厂商的唯一标识、PID是厂商定义的产品的唯一标识、序列号理论上应该是同类产品的唯一标识。因此理论上说这样的DeviceID可以区分所有USB设备。
如果没有序列号,Windows则将Device ID的序列号部分用HUB及其端口相关的一串字符来代替,也可以基本保证DeviceID的唯一性。这种Device ID形如:
USB\VID_1234&PID_5678\X&YYYYYYYY&Z
其中X是设备的层次、Z表示设备插到HUB的哪个端口、YYYYYYYY是与HUB有关的某常数。
在较为久远的早期Windows驱动中如遇到接入相同DeviceID的情况只能崩溃。而现在则会在等待数秒后,判断新接入的设备没有序列号,再如上所述用新的字符代替。
乐鑫科技在可以使用tinyUSB和USB-CDC功能的开发板上,在ESP-IDF中提供了可以修改它的方法。
Espressif IoT Development Framework Configuration
(Top) → Component config → TinyUSB Stack → Use TinyUSB Stack → Descriptor configuration
我发现只要简单的将此处的默认值123456
删除,即可让USB-CDC失去序列号,但并不影响其功能使用。而在Windows平台中,将不必等待,会自动如上所述用新的字符代替。
新编译的BPI-Leaf-S3已将MicroPython版本更新,支持ESP-NOW,且取消了USB序列号,保证了在Windows平台使用的稳定性。
固件下载地址:https://github.com/BPI-STEAM/BPI-Leaf-S3-Doc/tree/main/micropython-firmware
BananaPi wiki:https://wiki.banana-pi.org/BPI-Leaf-S3_开发板
BPI-Steam 文档:https://bpi-steam.com/Leaf_S3_doc/zh
OEM&OEM 定制服务请邮件联系: [email protected]