概述

本文是ESP8266运行MicroPython入门笔记,记录自己在探索MicroPython所见所思的同时,也顺便简单评估该开发方式的优缺点。

开发环境

  • ESP8266开发板: ESP-LAUNCHER(4 MB Flash)
  • 操作系统:Win10 64位

关于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等的支持。

在ESP8266上运行MicroPython

下载固件

首先到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时记得关闭之前的串口。
PuTTY工具
PuTTY上电打印
PyTTY上电打印

搭建完成

自此,基本的ESP8266的MicroPython环境搭建完成。

连接WiFi

在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(“< AP_name>”, “< password>”) # Connect to an AP
sta_if.isconnected() # Check for successful connection

使用WebREPL上传文件

webrepl客户端

webrepl是MicroPython官方提供的文件管理工具。 并且有一个webrepl客户端工具, 使用它可以通过浏览器来访ESP8266。
首先我们在ESP8266的会话窗口输入import webrepl_setup以配置webrepl:
>>>import webrepl_setup
接下来按照返回的提示信息输入即可,密码至少要3位。之后输入下面命令,启动WebREPL。
>>>import webrepl
>>>webrepl.start()
从Github下载WebREPL客户端打开或者访问MicroPython官网提供的在线客户端,以准备上传和下载文件。
ESP8266连接好WiFi后,输入sta_if.ifconfig()查看连接信息,返回的元组第一个IP就是无线路由器分配给ESP8266的IP。
如果你的电脑和ESP8266在同一个局域网,修改WebREPL要连接的地址为ESP8266的IP,点击「Connect」,返回「Welcome to MicroPython!」说明连接成功,根据提示输入密码(密码默认不显示)。回车后显示「WebREPL connected」表示登录成功。
WebREPL登录
之后就可以用这个客户端上传下载文件了。
WebREPL上传下载文件

设置上电自动连接WiFi

MicroPython初始化后都会自动执行main.py文件,所以我们只需要设置该文件即可上电自动连接WiFi。打开自己常用的编辑器,输入下面代码,并保存为main.py文件:
# main.py
import network
import webrepl

def main():
    sta_if = network.WLAN(network.STA_IF)
    sta_if.active(True)
    sta_if.connect("<你的WiFi名>", "<你的WiFi密码>")

    webrepl.start()

    print("user init!")

main()
之后通过WebREPL客户端上传该文件,完成之后,尝试给ESP8266重启一下,看看ESP8266的会话窗口是不是打印了user init!,如果成功打印,说明上电后确实执行上面的代码了。另外ESP8266重启后,WebREPL客户端需要重新连接才可以操作。

结语

基于ESP8266的MicroPython入门笔记就记录到这里了,本文简单介绍了固件的下载和烧写,以及使用的方法,最后还介绍了如何上传代码到ESP8266,并且配置上电自动连接WiFi。
后面有时间我会再写一篇基于ESP8266的MicroPython的MQTT客户端教程。实际上在Python用MQTT比在C语言的方便多了,比较困难的是如何配置一个可用的环境。

小技巧

查看内存资源

由于单片机开发要时时刻刻留意内存资源,下面是查看内存资源的示例:
>>> 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
无觅关联推荐,快速提升流量