ESP-WROOM-32在Arduino IDE中WiFi扫描输出乱码如何解决?
解决ESP-WROOM-32串口监视器乱码问题
我使用ESP-WROOM-32扫描所有可用WiFi并在Arduino IDE串口监视器显示结果,代码可正常上传至开发板,但串口监视器输出乱码,请求解决方法。代码如下:
#include "WiFi.h" void setup() { Serial.begin(115200); // Set WiFi to station mode and disconnect from an AP if it was previously connected. WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("Setup done"); } void loop() { Serial.println("Scan start"); // WiFi.scanNetworks will return the number of networks found. int n = WiFi.scanNetworks(); Serial.println("Scan done"); if (n == 0) { Serial.println("no networks found"); } else { Serial.print(n); Serial.println(" networks found"); Serial.println("Nr | SSID | RSSI | CH | Encryption"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Serial.printf("%2d",i + 1); Serial.print(" | "); Serial.printf("%-32.32s", WiFi.SSID(i).c_str()); Serial.print(" | "); Serial.printf("%4d", WiFi.RSSI(i)); Serial.print(" | "); Serial.printf("%2d", WiFi.channel(i)); Serial.print(" | "); switch (WiFi.encryptionType(i)) { case WIFI_AUTH_OPEN: Serial.print("open"); break; case WIFI_AUTH_WEP: Serial.print("WEP"); break; case WIFI_AUTH_WPA_PSK: Serial.print("WPA"); break; case WIFI_AUTH_WPA2_PSK: Serial.print("WPA2"); break; case WIFI_AUTH_WPA_WPA2_PSK: Serial.print("WPA+WPA2"); break; case WIFI_AUTH_WPA2_ENTERPRISE: Serial.print("WPA2-EAP"); break; case WIFI_AUTH_WPA3_PSK: Serial.print("WPA3"); break; case WIFI_AUTH_WPA2_WPA3_PSK: Serial.print("WPA2+WPA3"); break; case WIFI_AUTH_WAPI_PSK: Serial.print("WAPI"); break; default: Serial.print("unknown"); } Serial.println(); delay(10); } } Serial.println(""); // Delete the scan result to free memory for code below. WiFi.scanDelete(); // Wait a bit before scanning again. delay(5000); }
解决方法
- 波特率匹配检查:代码中
Serial.begin(115200)设置的波特率为115200,必须确保Arduino IDE串口监视器右下角的波特率选项同样设置为115200,波特率不匹配是串口乱码最常见的原因。 - 串口监视器参数设置:将串口监视器的换行模式设置为
Both NL & CR,确保输出内容能正确换行;同时确认编码为UTF-8(Arduino IDE默认编码,若手动修改过需恢复)。 - 硬件排查:
- 使用带数据传输功能的USB线,避免使用仅充电的USB线;
- 若使用外接USB转串口模块,需交叉连接引脚:ESP32的TX接模块RX,RX接模块TX;开发板自带USB转串口则检查USB接口是否接触良好。
- 代码输出统一测试:代码同时使用了
Serial.print()和Serial.printf(),虽ESP32支持两种方式,但可尝试统一使用Serial.printf()输出,排除兼容性问题。 - 重启时机调整:上传代码后等待1-2秒,待开发板完全重启后再打开串口监视器,避免捕捉重启过程中的混乱数据。
内容的提问来源于stack exchange,提问作者Jordy Cyrille Mbarga
相关产品推荐
相关产品推荐

