ESP8266/ESP32 + MicroPython (一) 初识

更多内容,请访问我的网站:https://jiangge12.github.io/

Arduino 大概来说是基于 c、c++、java 的,程序需要编译再上传,单一用途还算顺溜,但是如果有一些比较灵活的场合,就没有解释型环境来的方便。

Python 也是基于 c、c++,但是默认是交互式的命令行输入输出,勉强有解释型环境的体验。

ESP8266 ESP32 这样的单片机开发板,便宜还集成了较大的eeprom, 算是一个麻雀虽小五脏俱全的小计算机,虽然跑不了 PC 版的 Python,但是有人开发出 MicroPython,而且它比 PC版 Python还容易控制单片机的接口(传感器,通讯,小显示器等)

更高性能的树莓此处不讨论。

不废话,点击下面网址 立即 体验一下什么是 MicroPython 。

https://wokwi.com/projects/new/micropython-esp32

Wokwi 是一个 Arduino 的在线模拟网站,什么硬件都不需要就可以开始 Arduino 的编程和硬件的测试,尤其是 ESP8266/ESP32 上传一次程序比较慢,微调一下显示格式什么的在模拟器上完成看起来很节约功夫,也容易分享。

Wokwi 提供了一个基于 ESP32 的 MicroPython 模拟,点击绿色运行按钮,就立即开始了 Hello 程序, 真是 So Easy!(真的只需要几秒钟!)

MicroPython.org 官网也有在线模拟,哪个快用哪个吧。

第一个自己的实验: 闪灯。Arduino的各种开发板默认都有一个灯,方便上传程序时看到闪烁,例程里有Blink程序,即使没有其他模块都能开始第一个程序。把如下代码贴在左面的程序区,点击绿色运行按钮,右面模拟区 蓝色 的灯会闪哦。

from machine import Pin
import utime
led = Pin(2, Pin.OUT)
while(True):
  led.on()
  utime.sleep_ms(500)
  led.off()
  utime.sleep_ms(500)

当然,实体 ESP32 想把 MicroPython 跑起来还是需要搭建环境的,也需要会一些单片机的基本操作,串口操作基础,C语言 Python PIP的基础,不会也没关系,就是脚踏实地(一步一坑),排除万难(搜索结果中找到适合的文章)慢慢探索罢了。

----------------------------------------------------------------------------------------------------------------------------

文章真的太多了,简单列个步骤,慢慢搜吧

1 下载固件​​​​​​ (我刚刚在ESP8266测试,下载的是 esp8266-20220117-v1.18.bin 很小的,别下错了)

2 安装esptool  命令行执行  ( 前提是 Windows11 已经安装好 Python3.10 ) 

pip install esptool  -i https://pypi.tuna.tsinghua.edu.cn/simple 

3 擦除闪存  命令行执行  ( 刚才执行的 pip 安装好了 esptool,可以在 python 目录下找到esptool.py,执行失败就加上文件的全路径,如这个理解不了真的不适合独自玩,去报个班吧 )

python esptool.py --port COM4 erase_flash

 执行结果这样的:

4 写入固件  命令行执行  

python esptool.py --port COM4 --baud 115200 write_flash --flash_size=detect 0 esp8266-20220117-v1.18.bin

执行结果这样的:

上面这两步骤很快的,一分钟内。

另外有一个基于浏览器的ESP固件上传   Adafruit ESPTool 工具同样可以实现上面步骤 3、4 的功能,不过初试没成功,看了看 安信可 的烧录说明,估计使用的固件不是同一个,有机会再研究吧。

----------------------------------------------------------------------------------------------------------------------------

5 串口调试

固件写好之后,基本上就可以开始表演了,这时需要一个串口调试工具,Putty 什么的都可以,注意,需要次输入后面需要加上回车符号 <CR> \r 或 16进制 0x0D,大多数串口软件都支持自动添加的。有人推荐 MicroPython File Uploader  ,因为不仅可以串口调试,还可以上传 .py 文件。

串口调试界面里可以手敲如下命令(python 语句),看到当前板子里有那些程序文件

import os 
os.listdir()

大概是下图这样子的:后5行看得懂的就是实际的操作结果,前面问号这些是ESP初始化的乱码,多年来一直这样的,习惯就好。

6. 上传文件

虽然手敲 python 语句也是蛮好玩的,但是能以文件方式保存,上传到ESP里也是极好的:

把之前闪灯的代码保存 Blink.py ,用 uploader 上传,用 os.listdir() 命令查看

看起来上传成功了,掉电再看也在,可是灯不闪呢?

搜一下。。。原来micropython上电加载 boot.py ,然后自动运行 main.py (注意大小写)。

这下简单了,把 Blink.py 改个名字为 main.py 。。。几秒钟后,蓝灯开始闪了✌

至于不需要的文件,删除就好了

os.remove("Blink.py")

 7. 驱动 I2C SSD1306 OLED

这应该是比较常见显示模组,把下面的代码保存为 main.py ,用 uploader 上传,就有画面了。乱搜的各有各的说法,各种库,现在都不需要了,估计固件里自带了。

from machine import I2C,Pin
from ssd1306 import SSD1306_I2C
i2c = I2C(scl = Pin(4),sda = Pin(5),freq = 10000) #软件I2C
oled = SSD1306_I2C(128, 64, i2c) #创建oled对象
oled.rect(0,0,127,63,1)
oled.show()
oled.text("Hello World!",5,5)
oled.show()

8. WebREPL

uploader 是串口连接,需要插数据线的。有人提到,万一做成了壳子里的成品,再想更新下程序咋办呢?于是还有洋气的玩法,通过 wifi 上传下载文件和命令行交互。

1. Windows下载 webrepl 客户端

2. MicroPython/ESP8266 上面启用 Wifi 和 WebREPL (下面代码保存为 main.py 并上传)

import utime
import network
import webrepl
sta_if = network.WLAN(network.STA_IF);
SSID = "xxx"
PASSWORD = "xxxxxxxxx"
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()
sta_if.ifconfig()

3. 浏览器登陆 WebREPL 页面, 按如下格式登陆,IP 在串口上可以看到的

然后页面下方是可以上传下载文件的

9. OLED 显示 当前 IP ,方便 WebREPL 连接

之前实现了驱动oled,也实现了wifi连接,也实现了WebREPL, 胶水一下就同时实现了。不过有个小问题,怎么获得本机的IP? 

sta_if.ifconfig()  是可以获得IP,但是信息有些多,OLED太小。。。

其实 sta_if.ifconfig()  输出是个“一维数组” ,取第一个元素即可:
这个oled 库有 横 纵 坐标和 arduino 反的,多用几次也就熟悉了

s = sta_if.ifconfig()
oled.text(s[0],5,35)  # 横 纵

10. 最后,来点和单片机沾边的 ADC,不然还以为就是纯键盘操作呢

和 arduino 略有不同,还是那句话,习惯就好。

from machine import I2C,Pin,ADC
adc = ADC(0)
oled.text(str(adc.read()),5,45)   # int to str
oled.show()

11. 几个终端工具的比较

 WebREPL 支持网络,支持文件上传下载。不支持复制粘贴,这个就不能接受了(也不知道是不是我的打开方式不对)

Uploader 挺简洁方便,支持文件上传。窗口大小不可调。不支持多行复制粘贴,有些麻烦。

PuTTY 支持多行复制粘贴,窗口大小可调,但是没找到文件上传下载。支持保存配置文件,方便不同串口号的板子连接。

刚才试了下 PuTTY 里多行粘贴 文首的 闪灯程序,回车4次开始执行,Ctrl-C停止, 看起来简单实验也不用上传文件了。

更新:用了几天后发现, uPyCraft 比较顺手。也支持回车4次开始执行。

-------------------------------------------------------------------------------------------------------------

 至于后面怎么玩。。。So(搜)easy!(提示一下,点上图软件右下角就有一些搭建实例)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值