我一直在从事一个项目,该项目涉及在 esp8266 nodeMCU 板上使用 micropython 控制 4 通道继电器。我一直在使用 esptool 将最新的 micropython 固件 bin 文件刷到板上。一开始一切都很顺利,我继续将我的代码文件上传到板上。在那一点上,事情开始对我不利。我的问题与 com3 端口繁忙有关。所以,我再次使用 esptool 擦除原始闪存,然后重新刷新板。但是这次我在 esptool 开始写入板子几秒钟后收到了串行超时异常。我再次尝试使用另外两个相同(和全新)的板,但每次我仍然得到相同的错误。下面是从命令行参数开始的 esptool 输出。
(base) PS C:\development\python> esptool --port com3 --baud 9600 write_flash --flash_size detect --flash_mode dio -z 0x0000 esp8266-20210902-v1.17.bin
esptool.py v3.2
Serial port com3
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.
.
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.
.
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 44:17:93:0d:50:04
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00000000 to 0x0009afff...
Flash params set to 0x0240
Compressed 633688 bytes to 416263...
Writing at 0x00000000... (3 %)Traceback (most recent call last):
File "c:\users\billa\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\users\billa\anaconda3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\billa\Anaconda3\Scripts\esptool.exe\__main__.py", line 7, in <module>
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 5136, in _main
main()
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 4602, in main
operation_func(esp, args)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 3873, in write_flash
esp.flash_defl_block(block, seq, timeout=timeout)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 154, in inner
return func(*args, **kwargs)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 919, in flash_defl_block
self.ESP_FLASH_DEFL_DATA, struct.pack('<IIII', len(data), seq, 0, 0) + data, self.checksum(data), timeout=timeout)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 495, in check_command
val, data = self.command(op, data, chk, timeout=timeout)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 458, in command
self.write(pkt)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 421, in write
self._port.write(buf)
File "c:\users\billa\anaconda3\lib\site-packages\serial\serialwin32.py", line 323, in write
raise writeTimeoutError
serial.serialutil.SerialTimeoutException: Write timeout
(base) PS C:\development\python> esptool --port com3 --baud 9600 erase_flash
esptool.py v3.2
Serial port com3
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.
.
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.
.
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 44:17:93:0e:3f:ce
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 4.7s
Hard resetting via RTS pin...
(base) PS C:\development\python> esptool --port com3 --baud 9600 write_flash --flash_size detect --flash_mode dio -z 0x0000 esp8266-20210902-v1.17.bin
esptool.py v3.2
Serial port com3
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.
.
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.
.
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 44:17:93:0e:3f:ce
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00000000 to 0x0009afff...
Flash params set to 0x0240
Compressed 633688 bytes to 416263...
Writing at 0x00000000... (3 %)Traceback (most recent call last):
File "c:\users\billa\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\users\billa\anaconda3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\billa\Anaconda3\Scripts\esptool.exe\__main__.py", line 7, in <module>
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 5136, in _main
main()
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 4602, in main
operation_func(esp, args)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 3873, in write_flash
esp.flash_defl_block(block, seq, timeout=timeout)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 154, in inner
return func(*args, **kwargs)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 919, in flash_defl_block
self.ESP_FLASH_DEFL_DATA, struct.pack('<IIII', len(data), seq, 0, 0) + data, self.checksum(data), timeout=timeout)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 495, in check_command
val, data = self.command(op, data, chk, timeout=timeout)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 458, in command
self.write(pkt)
File "c:\users\billa\anaconda3\lib\site-packages\esptool.py", line 421, in write
self._port.write(buf)
File "c:\users\billa\anaconda3\lib\site-packages\serial\serialwin32.py", line 323, in write
raise writeTimeoutError
serial.serialutil.SerialTimeoutException: Write timeout
(base) PS C:\development\python>
我已经重新下载了固件 bin 文件,以防它以某种方式损坏。我还在三个不同的板上尝试了相同的过程。
-----------------更新 21 年 3 月 12 日--------------- ---- 我尝试使用 Arduino IDE 上传运行 4 通道继电器的测试草图。我使用相同的 com 端口 (com3) 连接,一切正常!这并不能解释为什么 Thonny IDE 和 esptool 都无法连接到 com3。
所以,这里有一些结论。问题不在于 esp8266 或我 PC 中的 com 端口。esptool 和 Thonny IDE 在开始时都可以正常工作,并且两者都未能大致同时将数据上传到板上,这些工具中的任何一个都不太可能出现问题。
那还有什么要调查的??
谢谢比尔