▌01 ESP8266-01S模块
虽然在小型的ESP8266-01s WiFi串口模块是否可以下载MicroPython?验证了对于ESP8266-01S能够下载MicroPython并进行编程,但将变成存储在本地的时候出现无法存储的现象,这就使得ESP8266-01s使用MicroPython变成开发出现了问题。
根据网络上相关的提示,通过修改下载固件的版本,寻找512M Flash版本,看是否能够解决这个问题。
1.基本介绍
esp8266-01s 是个比较常用的wifi模块 体积小 功能强大(说是可以用于工业)。常见到的ESP-01S是在原来的ESP-01的基础上优化了PCB天线设计,并对于内部集成了上拉电阻。
▲ ESP-01模块及其外部引脚定义
相应的ESP8266-01s的 8PINs管脚定义如下表所示:
【表1-1 ESP8266管脚配置】
▲ ESP8266-01S Pin Configuration
从上面表格来看,ESP8266中可以使用可的管脚只有四个:GPIO0,GPIO2,RXD,TXD。
2.存在问题
在 小型的ESP8266-01s WiFi串口模块是否可以下载MicroPython? 验证了给 ESP8266-01s下载MicroPython固件的过程。
▲ 利用串口通讯板对于ESP8266进行下载固件
但是存储MicroPython到本地时出现错误。这有可能时域下载的MicroPython版本有关系。
▲ 存储MicroPython到本地时出现错误
▌02 重新下载固件
1.改造下载插座
为了方便对于ESP8266下载固件,将GPIO0与GND短接。这样就无须手动对GPIO0与GND进行短接了。
▲ 将GPIO0与GND短接
在这个过程,需要两次上电:
- 第一次上电,Thonny软件完成对于ESP8266 的擦除;
- 第二次上电,Thonny完成对于ESP8266的编程过程;
2.下载512kFlashMicroPython固件
在 MicroPython Download 页面下载面向512kflash的固件版本: ESP8266-512k-20210202-V1.14.bin
【下载测试错误】
下载完之后,运行出现如下错误。
ERROR thonny.plugins.micropython.backend: Crash in backend
Traceback (most recent call last):
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\backend.py", line 135, in __init__
self._prepare_after_soft_reboot(clean)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\backend.py", line 154, in _prepare_after_soft_reboot
self._execute_without_output(script)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\backend.py", line 531, in _execute_without_output
out, err = self._execute(script, capture_output=True)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\backend.py", line 505, in _execute
self._execute_with_consumer(script, consume_output)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\bare_metal_backend.py", line 708, in _execute_with_consumer
self._submit_code(script)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\bare_metal_backend.py", line 567, in _submit_code
self._submit_code_via_raw_paste_mode(to_be_sent)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\plugins\micropython\bare_metal_backend.py", line 655, in _submit_code_via_raw_paste_mode
raise AssertionError("Got %r instead of raw-paste confirmation" % response)
AssertionError: Got bytearray(b'OK\r\nMPY: soft reboot\r\n') instead of raw-paste confirmation
Backend terminated or disconnected. Use 'Stop/Restart' to restart.
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
3.下载1M Flash版本
下载 ESP8266-1M-20210202-中.14bin 进行下载。
测试之后,仍然出现以下错误。
Traceback (most recent call last):
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\workbench.py", line 1708, in event_generate
handler(event)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\shell.py", line 433, in _handle_program_output
self._update_visible_io(None)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\shell.py", line 512, in _update_visible_io
self._apply_io_event(data, stream_name)
File "C:\Users\zhuoqing\AppData\Local\Programs\Thonny\lib\site-packages\thonny\shell.py", line 555, in _apply_io_event
self.active_extra_tags.pop()
IndexError: pop from empty list
下载 esp8266-20210412-unstable-v1.14-157-g2668337f3.bin 仍旧出错。
4.对于错误现象的解释
在前面【2-1 ~ 2-3】中下载测试的过程中,所出现的错误,都是源自于一个问题:也就是使用插座A进行下载,使用B进行测试。
即使将原来的最初ESP8266固件下载,在B座上进行测试依然出现错误。
将A插座的短路线去除,将下载后的ESP8266模块放在A进行测试,则一切正常。所以现在看来这个问题依然是由于所使用的插座对应的问题。
▲ 下载插座A,B
▌03 重新下载
1.在A座增加一个跳线子
使用一个跳线子连接在A座的PIN5(GPIO0)与PIN1(GND)之间。这样在下载的时候使用跳线子将PIN5与PIN1进行短接。在测试的时候将PIN5与PIN1断开。
2.下载不同版本进行测试
(1)下载最新版本
经过测试可以工作;但是仍然无法存储本地的文件。
(2)下载512M Flash版本
下载之后,不能够工作,进而也无法测试是否可以存储本地的文件。
(3)下载1M Flash版本
ESP8266模块可以运行MicroPython REPL了。
可以存储本地文件了!!!!!
▲ 本地文件系统存储文件
(4)下载2M版本
可以工作,但无法存储。
▌04 原因解释
1.最初存储问题解释
在所使用的ESP8266-1S模块上, Flash的型号为25080A,它是一个1M bytes的 Flash,所以,在下载版本的时候需要使用1M Flash版本。
2.测试程序
使用PIN2输出125Hz的PWM波形。
from machine import Pin,PWM
import time
pin = Pin(0)
pwmpin = Pin(2, Pin.OUT)
pwm = PWM(Pin(2), Pin.OUT)
pwm.freq(125)
pwm.duty(512)
count = 0
while True:
print('pin:%d'%pin.value())
if pin.value() == 0: break
count += 1
time.sleep_ms(150)
print('User stop.')
▓ 奇怪的是,在上述代煤种,需要明确将pwmpin声明为 Pin.OUT,这样才能够在GPIO2输出波形。
▲ Pin2 管脚输出PWM波形
3.将上述程序存储在boot.py
将上述程序存储在本地的Boot.py中,再上电之后,便可以运行该程序了。
但是此时使用Thonny已经无法在与模块联通了。
(1)使用GPIO0退出
在上述程序中设置了对于GPIO0置低之后,可以跳出循环,所以通过对于GPIO0置低,可以重新回到REPL状态。
(2)Boot.py不设置死循环
如果程序不进入死循环,仅仅进行初始化。那么该程序被烧制成Boot.py之后,便可以进入REPL状态。
from machine import Pin,PWM
import time
pin = Pin(0)
pwmpin = Pin(2, Pin.OUT)
pwm = PWM(Pin(2), Pin.OUT)
pwm.freq(125)
pwm.duty(512)
count = 0
print('User stop.')
4.GPIO2在上电的时候需要保持高电平
如果GPIO2外部连接负载,则需要能够保证GPIO2在上电的时候能够保持高电平。否则模块便不会进入工作状态。
▲ GPIO2需要在上电的时候保持高电平
▌实验结论
对于ESP8266-1s下载编程的时候,需要根据所使用的ESP8266-01S的板上的Flash的型号确定对应的容量,这样下载之后,才能够获得正确的运行以及本地的 Flash File System。
实验中,测试了将应用程序存储在ESP8266本地的Boot.py中,这样模块一上电便可以直接运行相应的程序了。
如果在Boot.py中存在着死循环,此时就无法与REPL相联系了。唯一的方法,就是重新在将MicroPython下载的本地。
解决这个问题的方法:
- 在本地的程序中设置调出死循环的条件。比如将某个管脚的电平状态坐在条件;
- 或者在程序运行过程中直接能够退出本地的程序。
■ 相关文献链接:
- 小型的ESP8266-01s WiFi串口模块是否可以下载MicroPython?
- MicroPython Download
- ESP8266-512k-20210202-V1.14.bin
- ESP8266-1M-20210202-中.14bin
- esp8266-20210412-unstable-v1.14-157-g2668337f3.bin
转载:https://blog.csdn.net/zhuoqingjoking97298/article/details/115653100