我不得不承认,我已经到了这一行的末尾。我唯一能想到的下一个阶段就是真正开始观察字节级别的连接协议,因为没有什么能吸引人。
在过去的几年里,我一直在为许多项目使用一堆 WEMOS/LOLIN D1 迷你板。一般来说,他们工作得很好,我对这个平台非常满意。我用一个人做的最后一个项目是在 2021 年夏天开始的时候,一切都很好。本周我决定将一个用于一个新项目,但我无法再使用我的任何设置对任何
电路板进行编程。我会尽力在这里总结一下:
操作系统:Linux Mint 19.3 和 Linux mint 20(两台不同的物理计算机)
USB 电缆:在两台计算机的多个 USB 端口上尝试了多种已知的工作电缆
设备:Wemos/LOLIN D1 Mini boards,两个都标有“D1 Mini”和“D1 m1 n1 / v3.0.0”
- 我已经尝试了三个在我的测试操作系统设置中输入
:用户在拨出组中,对 /dev/ttyUSB0 开发文件具有读写权限
——所有 ESP8266 设备都显示为 /dev/ttyUSB0
我能够使用串行调制解调器包连接到设备:
屏幕/dev/ttyUSB0 115200
minicom
在这两个包中,串行输出都是我所期望的。有一些启动垃圾,然后设备上的旧程序开始适当地输出文本,因此它们的串行设置可以正常工作。
我通常使用 ArduinoIDE 进行开发工作,它只是调用 esptool.py。我安装了官方的 esp8266 库。我试过各种版本的esp8266驱动包:
* 3.0.2
* 3.0.0
* 2.7.4
* 2.5.0
* 2.5.1
* 2.6.x(其中一些)
我试过“LOLIN( WEMOS) D1 R2 & mini" 设备以及:D1 mini(克隆)和 D1 mini pro。行为上没有区别。
构建闪烁草图后,我尝试在命令行上运行 esptool.py 程序,它的输出正是我在 AruinoIDE 终端/状态窗口中看到的(无论如何它只是从命令行工具打印 STDOUT)。
我在其中一台 Linux 机器上安装了 Python 2.7.17。这就是 esptool.py 调用的内容。
到目前为止,我从旧版本的 esptool.py(版本 2.5.1)获得的最佳输出是:
代码:
全选
/home/acrandal/.arduino15/packages/esp8266/tools/python/3.7.2-post1/python /home/acrandal/.arduino15/packages/esp8266/hardware/esp8266/2.5.1/tools/upload.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 --trace version --end --chip esp8266 --port /dev/ttyUSB0 --baud 115200 --trace write_flash 0x0 /tmp/arduino_build_182769/Blink.ino.bin --end
TRACE +0.102
timed out waiting for packet header
.TRACE +0.050 command op=0x08 data len=36 wait_response=1 timeout=0.100 data=
0707122055555555 5555555555555555 | ... UUUUUUUUUUUU
5555555555555555 5555555555555555 | UUUUUUUUUUUUUUUU
55555555 | UUUU
最新的 esptool.py 输出如下所示:
代码:
全选Traceback (most recent call last):
File "/home/acrandal/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/upload.py", line 66, in
esptool.main(cmdline)
File "/home/acrandal/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool/esptool.py", line 3552, in main
esp.connect(args.before, args.connect_attempts)
File "/home/acrandal/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool/esptool.py", line 529, in connect
raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 154, in apport_excepthook
os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'wb') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/var/crash/_usr_bin_python3.6.1000.crash'
Original exception was:
Traceback (most recent call last):
File "/home/acrandal/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/upload.py", line 66, in
esptool.main(cmdline)
File "/home/acrandal/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool/esptool.py", line 3552, in main
esp.connect(args.before, args.connect_attempts)
File "/home/acrandal/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool/esptool.py", line 529, in connect
raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
我使用 115200 是为了使波特率更安全,尽管我已经尝试过 57600、9600、921600(无论如何在 esptool.py 脚本中将其静默更改为 460800)。过去,我一直使用 ArduinoIDE 中编程选项的默认设置,没有问题。
ArduinoIDE 设置为使用正确的串行端口 (/dev/ttyUSB0)。
在编程尝试之前和期间,我已经尝试过重置按钮的各种组合。我已经按住它,我已经脉冲它,我已经在编程开始时点击它(Adafruit Feathers 让我对重置时间感到非常紧张)。我还在开机期间将 D3 接地,并尝试使用重置按钮对其进行一些变体,但我还没有在串行会话中看到有关闪存编程模式的文本。在使用这些设备之前,我*从未*必须这样做,但如果这可能是继续的方向,我可以继续挖掘。
我已经从我的系统中执行了 apt purge modemmanager,因为它有时会干扰串行
通信。
Linux Mint 20 机器是一个非常新的操作系统安装。我必须干净地安装工具才能开始这个项目,而 Mint 19 机器之前已用于对 ESP8266 板进行编程并且(我认为)处于已知的工作状态。
*没有*似乎在这种情况下有所作为。没有权限、库版本、工具重新安装、重置按钮时间。
请任何人给我接下来要尝试的任何东西。这是几个小时的头发撕裂和头部撞击。我过去很喜欢这些板子,我的计划中有很多项目会用到它们(我在一个盒子里准备了大约 20 个,随时可以使用),但我现在完全停滞不前了。羞于开始更深入地拆开 esptool.py 来调试编程的握手,我不知道该怎么做。
0