本文是ESP8266运行MicroPython入门笔记,记录自己在探索MicroPython所见所思的同时,也顺便简单评估该开发方式的优缺点。
MicroPython是一个基于Python 3的、精简和高效的编程语言,其包括Python标准库的一个小子集,并针对微控制器及受限的环境优化以可以运行。
根据官方的快速参考的描述,MicroPython已经实现了ESP8266基本硬件资源接口,包括GPIO、PWM、ADC、软SPI和硬SPI、IIC、睡眠模式(Deep-sleep mode)、OneWire等,带有APA102、DHT和DS18B20库。所以使用MicroPython可以快速实现产品原型,比如智能插座,温湿度检测、智能RGB调光器等。
另外可以通过上传py文件运行程序,调试和修改代码不需要像SDK开发一样重新烧录,当然计算速度肯定是比原生SDK 开发慢一点的,对开发者来说只要够用就行。比较遗憾的是暂时未看到对SmartConfig(快速连接)、硬件IR(红外)、Sniffer等的支持。
首先到MicroPython的官网下载基于ESP8266的MicroPython固件。目前最新的稳定版本是「esp8266-20161110-v1.8.6.bin」。
该固件大小大约是553KB,对4MB Flash ESP8266来说绰绰有余,并且剩余96KB内存可用(一部分用于系统)。
把该固件烧写到0x0位置即可。
打开常用的串口工具,设置波特率为115200,打开串口并给ESP8266重启上电,打印如下字符说明烧写固件成功:
MicroPython v1.8.6-7-gefd0927 on 2016-11-10; ESP module with ESP8266
Type "help()" for more information.
>>>
当然,使用这个串口工具不太方便调试,我们可以使用PuTTY工具。切换到PuTTY时记得关闭之前的串口。
自此,基本的ESP8266的MicroPython环境搭建完成。
在PuTTY会话窗口中输入
>>>help()
打印的信息会告诉你如何连接WiFi:
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.scan() # Scan for available access points
sta_if.connect("", "") # Connect to an AP
sta_if.isconnected() # Check for successful connection
webrepl是MicroPython官方提供的文件管理工具。 并且有一个webrepl客户端工具, 使用它可以通过浏览器来访ESP8266。
首先我们在ESP8266的会话窗口输入import webrepl_setup
以配置webrepl:
>>>import webrepl_setup
接下来按照返回的提示信息输入即可,密码至少要3位。之后输入下面命令,启动WebREPL。
>>>import webrepl
>>>webrepl.start()
从Github下载WebREPL客户端打开或者访问MicroPython官网提供的在线客户端(http://micropython.org/webrepl/),以准备上传和下载文件。
ESP8266连接好WiFi后,输入sta_if.ifconfig()
查看连接信息,返回的元组第一个IP就是无线路由器分配给ESP8266的IP。
如果你的电脑和ESP8266在同一个局域网,修改WebREPL要连接的地址为ESP8266的IP,点击「Connect」,返回「Welcome to MicroPython!」说明连接成功,根据提示输入密码(密码默认不显示)。回车后显示「WebREPL connected」表示登录成功。
之后就可以用这个客户端上传下载文件了。
MicroPython初始化后都会自动执行main.py
文件,所以我们只需要设置该文件即可上电自动连接WiFi。打开自己常用的编辑器,输入下面代码,并保存为main.py
文件:
# main.py
import network
import webrepl
SSID = "SSID"
PASSWORD = "password"
def do_connect():
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PASSWORD)
start = utime.time()
while not wlan.isconnected():
utime.sleep(1)
if utime.time()-start > 5:
print("connect timeout!")
break
if wlan.isconnected():
print('network config:', wlan.ifconfig())
do_connect()
之后通过WebREPL客户端上传该文件,完成之后,尝试给ESP8266重启一下,看看ESP8266的会话窗口是不是打印了user init!
,如果成功打印,说明上电后确实执行上面的代码了。另外ESP8266重启后,WebREPL客户端需要重新连接才可以操作。
基于ESP8266的MicroPython入门笔记就记录到这里了,本文简单介绍了固件的下载和烧写,以及使用的方法,最后还介绍了如何上传代码到ESP8266,并且配置上电自动连接WiFi。
后面有时间我会再写一篇基于ESP8266的MicroPython的MQTT客户端教程。实际上在Python用MQTT比在C语言的方便多了,比较困难的是如何配置一个可用的环境。
2017-05-11更新:基于ESP8266的MicroPython的MQTT客户端教程已经写完,链接:http://blog.csdn.net/yannanxiu/article/details/71641738
可以使用os.listdir()
命令查看主目录下的文件,然后可以在webrepl下下载。
>>> import os
>>> os.listdir()
['boot.py', 'webrepl_cfg.py', 'main.py']
由于单片机开发要时时刻刻留意内存资源,下面是查看内存资源的示例:
>>> import micropython
>>> micropython.mem_info()
stack: 2144 out of 8192
GC: total: 36288, used: 9488, free: 26800
No. of 1-blocks: 60, 2-blocks: 18, max blk sz: 263, max free sz: 1287
2018年1月22日更新:有关「启动webrepl不了的问题」,试下这个工具烧写,参见评论区8楼。