基于MicoPython的ESP8266开发笔记--2.如何下载我们的代码到ESP8266中

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的分享。

发布了44 篇原创文章 · 获赞 60 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/u014421520/article/details/79528780