在完成烧录MicroPython固件后,我们就可以使用它了。
我们直接在解释器中输入python语句即可执行。
NyBoard WiFi模块使用了ESP8266的IO2与一个红色LED连接,用来指示连接状态。这个LED是可编程的。 写一个简单的python blink
程序:
按下工具栏上绿色的开始运行
按钮,程序会通过串口发送到WiFi模块上, 由ESP8266内置的MicroPython解释器解释后运行。 因为案例程序是死循环,需要停止时,按下红色的停止
键即可完成程序中断和复位。
我们点击View -> File
打开文件工具栏, Thonny左侧显示了文件。上部为本机的目录,下部为MicroPython设备中存储的文件。 默认情况下只有一个boot.py
文件,这个文件请不要删除,是MicroPython设备的启动文件。
我们将刚刚的点灯程序保存为blink.py
保存在本机后,右键点击文件,选择Upload to /
:
在弹出窗口选择MicroPython device
:
在设备上就有了一个blink.py
的文件。这样文件就保存在设备上。
WiFi模块通过串口向NyBoard发送指令进行控制。我们只需要写一个简单的串口发送程序,向NyBoard发送一系列串口指令, 就可以让机器狗执行序列动作。
当我们执行actSeq()
函数时,就可以通过串口输出一系列指令。使用串口监视器我们可以进行调试。 使用串口监视器监控输出如下(为了方便阅读我使用了串口调试器的自动断帧,实际上是没有自动换行的)
当我们调试完序列动作后,将WiFi模块拔下,插上NyBoard后,机器狗没有任何反应,因为actSeq()
函数并没有运行。 我们希望上电自动运行程序,有以下2种方法:
请将文件名更改成“main.py”并存到设备(这个是最简单的)
修改boot.py
启动文件
Petoi 群控方案
ESP-NOW 是由乐鑫开发的另一款无线通信协议,可以使多个设备在没有或不使用 Wi-Fi 的情况下进行通信。这种协议类似常见于无线鼠标中的低功耗 2.4GHz 无线连接——设备在进行通信之前要进行配对。配对之后,设备之间的连接是持续的、点对点的,并且不需要握手协议。它是一种短数据传输、无连接的快速通信技术,可以让低功耗控制器直接控制所有智能设备而无需连接路由器,适用于智能灯、遥控控制、传感器数据回传等场景。
使用了 ESP-NOW 通信之后,如果某一个设备突然断电之后,只要它一旦重启,就是自动连接到对应的节点中重新进行通信。
ESP-NOW 的通信模式支持如下:
一对一通信
一对多通信
多对一通信
多对多通信
ESP-NOW 支持如下特性:
单播包加密或单播包不加密通信;
加密配对设备和非加密配对设备混合使用;
可携带最长为 250 字节的有效 payload 数据;
支持设置发送回调函数以通知应用层帧发送失败或成功。
同时,ESP-NOW 也存在一些限制:
暂时不支持广播包;
加密配对设备有以下限制:
Station 模式下最多支持10 个加密配对设备;
SoftAP 或 SoftAP + Station 混合模式下最多支持 6 个加密配对设备;
非加密配对设备支持若干,与加密设备总数和不超过 20 个;
有效 payload 限制为 250 字节。
Petoi群控完全可以采用ESP8266模块的ESP-NOW通信功能。
本案例准备2只Bittle(配备WiFi模块),一台连接有ESP模块的计算机。
图中模块的程序烧录和MAC地址的获取见下文。
电脑安装Thonny,方便进行8266模块的MicroPython的调试。 使用ESP-NOW协议时,需要特殊的MicroPython固件(见Github)。因为普通版本的8266-MicroPython固件会提示找不到库。
打开Thonny并使用USB上载器连接ESP8266模块,在shelll界面中输入:
如果出现错误提示如“找不到espnow”模块
,表示固件烧录有问题;若没有任何提示,表示固件烧录正常。
群控代码分为3部分:
查询模块的MAC地址
发射端程序
接收端程序
MAC地址是一个用来确认网络设备位置的位址,由OSI网络模型第二层(数据链路层)负责。 MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡的非易失存储器(如EEPROM)中。
MAC地址的长度为48位(6个字节),通常表示为12个16进制数。 其中前3个字节代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配, 而后3个字节代表该制造商所制造的某个网络产品(如网卡)的系列号。 只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性。
ESPNOW最简单的使用方式是通过MAC地址发送。我们使用一个小的程序来查询模块的MAC地址。
在Thonny中运行后,在终端打印出MAC地址。此时可以用一个不干胶贴写上模块的MAC地址并贴在模块上。
发射端程序由以下几个部分组成:
启用模块的WiFi功能
配置ESP-NOW协议并启用
添加需要通信的节点(peer)
发送消息
具体程序代码如下:
接收端程序主要由以下几个部分组成
启用模块的WiFi功能
配置ESP-NOW协议并启用
添加需要通信的节点(peer)
接收消息并解码,通过串口给NyBoard发送指令
具体程序代码如下:
此代码封装于一个名为espnow_rx()
的函数中是为了方便上电后自动启动程序。
实现上电自动启动的方法有以下两种:
将代码文件改名为main.py
;
修改boot.py
文件;
对于新手而言,我们更推荐第一种方法。
将串口命令转换写在接收端会使程序过于复杂且不易维护。我们可以新建一个函数在其中进行指令转换并输出命令。
实现远程调试与上传程序
之前的教程通过离线编辑Python代码实现了NyBoard执行序列动作的功能。 但是这样很不方便,每当需要修改代码, 我们需要拔下WiFi模块进行修改,也不能在执行过程中灵活的暂停、修改参数。 究其原因,ESP8266只有一个串口,我们需要使用它与NyBoard进行通信。 好在MicroPython利用ESP提供的WiFi功能实现远程无线Python调试-WebREPL。
我们在官方文档的基础上,结合模块的特点,撰写了以下教程:
连接设备后,在shell界面输入import webrepl_setup
,根据指南输入
启动时启用webREPL: E
设置密码:你自己的密码(演示为:1234)
重复密码
重启8266模块:y
我们使用下面的demo程序,注意将SSID和密码换成您身边使用的网络信息。
启动程序后,会不停连接WiFi网络,一旦连接上,会自动启动设备的WebREPL服务。
记住这个IP地址(路由器DHCP自动分配的),配置WebREPL时有用。
我们通过WebREPL来调试Python,原先的串口用来和NyBoard通讯。 所以在选项
中,将原先的USB-COMx
接口修改成WebREPL
。
然后我们填入WebREPL的IP地址、端口及密码,点击OK
。
完成后会连接,当显示WebREPL Connected
表示连接成功了。
我们可以试着运行一些简单的程序,如blink
。
WebREPL节约了串口,并支持无线调试。缺点是速度较慢(因为存在网络延迟),软件复位等待时间比较久。
现在我们可以使用webREPL来调式程序了,但是我们打开串口监视器会发现,每当我们运行程序,串口会发出一系列的调试内容: 这些海量的字符串会导致我们的NyBoard来不及处理而宕机,如下图所示:
我们希望在调试程序的时候,串口只输出我们希望输出的指令,而不是这些Debug信息。 打开设备上的boot.py
文件,将uos.dupterm(None, 1)
这行代码取消注释并保存,解除串口和REPL debug的绑定。 再次重启模块,串口调试助手就不再打印debug信息了。
作为补充,我们可以通过print()
指令输出debug信息,这些信息会通过WiFi显示在Shell上。
至此,大家可以方便的使用WiFi模块通过webREPL调试Bittle进行基于MicroPython的动作序列编辑。
使用NyBoard WiFi 模块作为 MicroPython 控制器教程
NyBoard USB上载模块(CH340C)
NyBoard WiFi模块
将WiFi模块插入USB上载器的模块配置接口上,在windows设备管理器找到对应的COM口。
下载最新版本的Thonny,Thonny是一个开箱即用的Python编辑器,原生提供了MicroPython的支持。
MicroPython官方网站上提供了已经编译好的ESP8266固件,因为我们的WiFi模块为4MB, 请选择ESP8266 with 2MiB+ flash
名称的最新固件,下载bin文件即可。
将MicroPython固件烧录至WiFi模块有两种方法:
使用ESPtool下载工具,可以更加精确控制Flash的分区和使用
使用Thonny自带工具,比较方便
为了方便我们使用Thonny自带的烧录工具。 具体步骤如下:
打开Thonny软件,主界面如下图。Thonny默认配置使用安装目录下的Python解释器。
打开Tools -> Options(选项)
,进入选项页面。在第一个General
界面,我们可以选择需要的语言 (需要重新启动Thonny)。
打开第二个选项卡Interpreter(解释器)
,我们将默认的Python3解释器更换为MicroPython(ESP8266)
后, 选择对应的端口。
此时我们的WiFi模块还未烧录MicroPython固件,点击上图右下角的Install or update firmware
使用内置的烧录程序更新固件。
选择WiFi模块所在的端口(COMx),选择下载的MicroPython固件(bin文件)所在的位置。 勾选下载模式(flash mode)为:from image file(keep)
(速度会比较慢,但是只需要烧录一次且不容易出错), 勾选全片擦除(Erase flash before installing)
。按下安装(install)
键。
界面的左下角会显示进度,先擦除Flash,再写入固件。当出现完成(Done)
字样的时候,表示已经烧录完成了。
软件准备工作到此结束,关闭下载界面会出现如下显示。红字乱码是因为ESP8266启动时会打印一串非115200波特率的代码,这段代码无法被MicroPython Shell识别。 当出现Python标志性的>>>
符号时,表示固件烧录成功。
如果烧录完ESP-NOW固件后,在shelll界面未出现Python标志性的>>>
符号,表示固件烧录失败。可以尝试使用Flash烧录工具 NodeMCU-PyFlasher.exe,烧录配置如下图所示: