这两天在 ESPHome 里学着折腾 SSD1306 OLED 显示屏,碰到了这个非常难以理解的致命问题,经过一通乱搜、乱试,所幸歪打正着,找到了一个很完美的解决方案。
事情是这个样子滴。。。
开始时只显示文字内容,一切完美。
然后添加了两个图片,很简单的,64x64像素的黑白 png,才454字节的大小。OTA后发现虽然ESP8266模块已经启动、显示屏也正常显示,但就是无法连接WiFi!
特意留出串口查看日志,发现如下内容:
[I][wifi:235]: WiFi Connecting to 'xxxxxx'...
[W][wifi_esp8266:444]: Event: Disconnected ssid='xxxxxx' bssid=xx:xx:xx:xx:xx:xx reason='Auth Expired'
[W][wifi:532]: Error while connecting to network.
[W][wifi:570]: Restarting WiFi adapter... 无限反复,也可以扫描出周围的所有WiFi信号,但就是连不上指定网络,原因也一直不变:鉴权超时。
同样的代码,在ESP32上跑毫无问题。难道ESP8266就用不成SSD1306模块?
hassbian里搜了搜,有同学反馈过同样问题,但没有答案。搜了搜 HA 官方的esphome 论坛,有一个人说的好像是这个问题,又好像不是——标题说 no wifi,内容说无法与0x3c通信;几条回复也都没有有效的解决办法。
阴差阳错,看到有帖子说想在启动时关闭显示屏,里面提到可以设置自动化的启动优先级 boot_priority,达到在WiFi连接之前执行的目的。试了试在启动时关闭显示屏,无效(仍然无法连接wifi),于是我本着死马当活马医的想法,在 i2c 下面加入 boot_priority 选项,ESPHome提示错误,不支持,不过非常给力的问我是不是想要 setup_priority?!!!!!嗯???这不就是我想要的吗?!
于是改为 setup_priority,在 display 下面也加上这一条、编译、下载、烧写、成功启动并成功连接!
喏,就是这个样子:
i2c:
sda: 0
scl: 2
scan: false
setup_priority: -100
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
id: ssd1306
setup_priority: -100
这样,ESP-01S就又可以愉快地玩耍了!
|