1、前言
上一节我们介绍了ESP8266的开发环境搭建,然后也可以使用secureCRT来在串口交互界面下完成程序开发,但是当我们对模块重新上下电后,我们运行的代码就失效了,比如我们这次配置连上网了。断电重启后又恢复到了最初下载固件的状态,我们需要每次重启时,都可以运行我们自己编写的代码。如果你也有这个困惑,那么这篇博文将能帮你解决该问题。
我们有两种方式来同步我们的代码到ESP8266上。1、使用micopython官方提供的WebREPL上传文件,这种方式是基于WiFi的,同时我们可以使用webrepl来在线调试代码。;2、使用uPyLoader,这种方式使用串口直接上传代码,比较方便。接下来,我们分别介绍这两种方式来上传我们自己的代码。
2、使用WebREPL上传文件
webrepl是MicoPython官方提供的文件管理工具,并且还有一个webrepl客户端工具,使用他我们可以通过浏览器来访问ESP8266,和我们在终端的访问方式一样。
2.1、ESP8266端需要做的事情
首先,我们在ESP8266的会话窗口输入:import webrepl_setup
来配置webrepl,然后按照提示设置密码:
>>> import webrepl_setup
WebREPL daemon auto-start status: enabled
Would you like to (E)nable or (D)isable it running on boot?
(Empty line to quit)
> e
Would you like to change WebREPL password? (y/n) y
New password (4-9 chars): root
Confirm password: root
No further action required
>>>
>>>
>>>
最后,启动webrepl。
>>> import webrepl
>>> webrepl.s
start start_foreground setup_conn
stop socket
>>> webrepl.start()
WebREPL daemon started on ws://192.168.4.1:8266
WebREPL daemon started on ws://0.0.0.0:8266
Started webrepl in normal mode
>>>
使用ESP8266连接网络,我们在终端help()
按照如下打印信息连接到网络。
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.scan() # Scan for available access points
sta_if.connect("<AP_name>", "<password>") # Connect to an AP
sta_if.isconnected() # Check for successful connection
ESP8266连接好WiFi后,输入sta_if.ifconfig()
查看连接信息,返回的元组第一个IP就是无线路由器分配给ESP8266的IP。
('192.168.0.182', '255.255.255.0', '192.168.0.1', '202.96.128.86')
2.2、浏览器端需要做的事情
我们可以从GitHub上获取webrepl客户端,或者使用官方提供的在线客户端。
我们以在线客户端为例,首先需要将我们模块的IP填入,然后点击connect,然后输入密码。
如上图所示,出现交互环境,说明我们成功连接了。然后我们像客户端发送如下main.py代码。
# main.py
import network
import webrepl
import time
SSID = "TOTOLINK_68AD96"
PASSWORD = "11223344"
def do_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PASSWORD)
start = time.time()
while not wlan.isconnected():
time.sleep(1)
if time.time()-start > 5:
print("connect timeout!")
break
if wlan.isconnected():
print('network config:', wlan.ifconfig())
print("\nHello World!\nThis is a auto run code.\n")
do_connect()
发送完成之后记得检查一下,如下图所示,读取main.py出来和我们写入的文件对比一下,一般情况下,只要文件大小一样,肯定就是写入成功了。
最后,我们重启一下模块,观察打印信息,如果有以下两句我们要求print的语句,说明写入成功。
3、使用使用uPyLoader上传文件
首先我们需要下载uPyLoader,在GitHub上git clone就OK了。同时我们要保证电脑端安装了Python3.5级以上版本。然后要保证安装了PyQt5和pyserial,因为yPyloader依赖这两个包运行。
pip install PyQt5
pip install pyserial>=3.1.1
所有的这些准备工作做完以后,我们就可以进入uPyLoader文件夹,打开cmd窗口管理,然后运行python main.py
启动uPyLoader。
然后连接,注意:保证串口没有在打开状态,其他终端不能操作此串口。
连接成功后,我们初始化一下uPyloader:菜单栏->「File」->「Init transfer files」。初始化传输文件,初始化成功后在MCU端会新增__upload.py和__download.py两个文件。另外,在菜单栏->「View」下面可以打开终端(Terminal)和编辑器(Code Editor),方便调试和代码编写。
因为uPyloader无法切换工作目录,所以我们可以在当前目录下创建一个proj目录用来存放我们的工程代码,方便以后管理。
需要传输文件的话,我们双击对应的py文件,然后点击「MCU name」后面的「Transfer」,等待弹窗结束后,文件就下载过去了。如下图所示:
你也可以在main.py中print几句来测试是否传输成功。
4、总结
至此,我们可以使用两种方式来同步我们的代码到模块端,使用哪种方式都可以,看个人习惯吧。我觉得uPyloader更方便一点。
后续还会带来更多的基于Micopython的ESP8266的分享。