飞道的博客

修改ESP8266-01S MicroPython下载固件,看是否能够烧录程序

248人阅读  评论(0)

 

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下载的本地。

解决这个问题的方法:

  • 在本地的程序中设置调出死循环的条件。比如将某个管脚的电平状态坐在条件;
  • 或者在程序运行过程中直接能够退出本地的程序。

 


■ 相关文献链接:


转载:https://blog.csdn.net/zhuoqingjoking97298/article/details/115653100
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场