文章目录
起因
前段时间准备把家里的空气质量检测节点更新一下,从原来的万用板升级为 PCB,并且将主控 MCU 从 ESP8266 升级为 ESP32,这样可以单个节点支持更多传感器,同时把固件从 ESPEasy 换成 ESPHome。
经过
在完成 PCB 打样测试后,就上淘宝采购了一批 ESP32 开发板,其中一批是 USB Type-C 接口的 NodeMCU-32S,最开始测试的时候只买了一块,使用下来并没有什么问题,但是在一次接错 VCC 和 GND 导致温度模式损坏之后,再次使用这块 ESP32 开发板时,发现它无法连接到之前已经配置好的 Wi-Fi 上。
这时还以为是由于之前温度模块损坏关联导致的,因此重新购买了几块同样型号的 ESP32 开发板,但是在完成固件烧录,完成固件配置之后,第二次运行时,同样发现了无法连接 Wi-Fi 的错误,日志中显示连接失败的原因为 Auth Expired:
[23:50:02][I][wifi:248]: WiFi Connecting to 'HOUSE_IOT'...
[23:50:03][W][wifi_esp32:495]: Event: Disconnected ssid='HOUSE_IOT' bssid=xx:xx:xx:xx:xx:xx reason='Auth Expired'
[23:50:03][W][wifi:536]: Error while connecting to network.
这就很奇怪了,毕竟是新买的模块,并且也没有再次经历接错线的问题,不应该碰到同样的问题,于是上网搜索了一下,发现 ESPHome 的 Issues 里面已经有人提到了:ESP32 cannot connect to WiFi reason="Auth Expired" #1371。
但是在 ESPHome 的 Issue 中,只是说可以修改 Unifi AP 的设置来解决,这就比较奇怪,毕竟另外买的使用 Micro-USB 接口的 ESP32 开发板并没有这个问题。在这个 Issue 的最后,有人提到了乐鑫官方 Arduino 框架仓库也有人提了同样的问题,并且很好地解决了。
在乐鑫仓库的这个 Issue 中(Wifi not connected to the esp32 module. #2144),我看到另外一个可能的原因导致 ESP32 无法连接 Wi-Fi,就是 ESP32 的 GPIO 可能使用了 5V 电平而不是官方要求的 3.3V。
结果
于是拿出万用表测试一看,果然,新买的这个开发板,USB 转串口芯片使用了 CH340C,然后 CH340C 的供电是直接连接到了 USB 的 5V 供电引脚,由于CH340C 本身是兼容 5V 以及 3.3V 供电的,所以直接使用 5V 给它供电并没有什么问题,但是由于 CH340C 会根据供电的电压决定输出 DTR、RTS 等信号的电平,所以会导致在启动完成后,连接到 GPIO 上高电平也是 5V,从而导致 ESP32 连接 Wi-Fi 失败。
知道原因就好办了,将 PCB 上连接 CH340C 和 USB 5V 的线切断,防止 CH340C 继续从 USB 5V 获得供电:
再从 LDO 3.3V 输出飞一根线到 CH340C 的 VCC:
重新上电测试,完美解决。
我的天,这种问题对于纯软件开发来说,简直就是:我的程序编译不通过,发现是java运行时的问题,我重新编译一个新的运行时,解决问题。一样,哈哈哈哈哈哈哈
博主你好,这个和wifi又没关联。我尝试用我电脑热点是正常,但连接路由器就不行。有没不用改硬件的解决办法
我后面没有测试了,感觉可能跟什么 Wi-Fi 设置的参数有关。