更多内容,请访问我的网站: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!(提示一下,点上图软件右下角就有一些搭建实例)