AI摘要

避雷淘宝某款ESP32S3开发板,WiFi信号差,疑似未做阻抗匹配,且出厂固件有问题,上电会不断复位重启,需按住BOOT键烧录程序才能解决。

首先看看正常的表现,这是立创的ESP32S3开发板,905这个WiFi信号强度-54dBm。

接着来看看淘宝买的这款ESP32S3开发板,同样的位置905这个WiFi信号强度只有-77dBm,连不上WiFi。

就下面图片这款,淘宝上买了3家同样款式的这个开发板(为什么坚持买这款?因为这款的宽度可以插面包板,其他的都是更宽的插不了面包板,立创的开发板可以插面包板但原价35略贵,要发朋友圈集赞才能19.9优惠买,淘宝这款是25买的),都是这样的信号表现,应该是某个开源方案,没做阻抗匹配,都是ESP32S3R8芯片,都是陶瓷天线(应该不是天线问题,立创的板也是陶瓷天线,信号表现就没问题)

补充一下,淘宝这款开发板还有一个问题,就是出厂固件好像是有问题的,上电会一直复位重启,按住BOOT键后上电再烧录自己的程序就恢复正常了,我买了三家这款板都是有这个问题!

天线微距图

电子/单片机技术交流QQ群: 2169025065

eeClub-电子工程师社区: https://bbs.eeclub.top/

WiFi扫描与连接的测试代码(Arduino):

#include <Arduino.h>
#include <WiFi.h>

char* ssid = "905";       // 目标WiFi名称
char* password = "blog.zeruns.com"; // 目标WiFi密码

// 将加密类型数值转换为可读字符串
String getEncryptionTypeString(int encryptionType) {
  switch (encryptionType) {
    case WIFI_AUTH_OPEN:
      return "OPEN (无加密)";
    case WIFI_AUTH_WEP:
      return "WEP";
    case WIFI_AUTH_WPA_PSK:
      return "WPA-PSK";
    case WIFI_AUTH_WPA2_PSK:
      return "WPA2-PSK";
    case WIFI_AUTH_WPA_WPA2_PSK:
      return "WPA/WPA2-PSK (混合)";
    case WIFI_AUTH_WPA3_PSK:
      return "WPA3-PSK";
    case WIFI_AUTH_WPA2_WPA3_PSK:
      return "WPA2/WPA3-PSK (混合)";
    default:
      return "UNKNOWN (未知)";
  }
}

// 扫描WiFi并打印详细列表
void scanAndPrintWiFiNetworks() {
  Serial.println(F("\n==================== 开始扫描WiFi ===================="));
  
  // 停止当前WiFi连接(确保扫描不受影响)
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // 扫描周边WiFi网络(返回找到的网络数量)
  // 参数1:是否扫描隐藏网络;参数2:是否主动扫描(阻塞式,扫描完成再返回)
  int networkCount = WiFi.scanNetworks(false, true);
  
  Serial.print(F("扫描完成!共发现 "));
  Serial.print(networkCount);
  Serial.println(F(" 个可用WiFi网络\n"));

  // 打印列表表头
  Serial.println(F("序号 | SSID名称               | MAC地址(BSSID)       | 加密类型          | 信号强度(dBm)"));
  Serial.println(F("-----|------------------------|----------------------|-------------------|-------------"));

  // 遍历所有扫描到的网络,打印详细信息
  for (int i = 0; i < networkCount; i++) {
    // 格式化打印序号(占3位)
    Serial.printf("%3d | ", i + 1);
    
    // SSID(最多显示20个字符,超出截断)
    String ssid = WiFi.SSID(i);
    if (ssid.length() > 20) {
      ssid = ssid.substring(0, 17) + "...";
    }
    Serial.printf("%-20s | ", ssid.c_str());
    
    // MAC地址(BSSID)
    Serial.printf("%-18s | ", WiFi.BSSIDstr(i).c_str());
    
    // 加密类型(转换为可读字符串)
    String encType = getEncryptionTypeString(WiFi.encryptionType(i));
    Serial.printf("%-17s | ", encType.c_str());
    
    // 信号强度(RSSI,单位dBm,数值越大信号越强,通常-30~-100之间)
    int rssi = WiFi.RSSI(i);
    Serial.printf("%-11d\n", rssi);
  }

  Serial.println(F("\n==================== WiFi扫描结束 ====================\n"));
  
  // 释放扫描缓存(节省内存)
  WiFi.scanDelete();
}

void setup() {
  // 初始化串口波特率
  Serial.begin(9600);
  // 等待串口初始化完成(避免开机串口打印丢失)
  delay(1000); // 延长等待时间,确保串口稳定
  Serial.println(F("In Setup function"));

  // 初始化LED引脚
  pinMode(12, OUTPUT);
  pinMode(48, OUTPUT);

  // ========== 新增:先扫描并打印WiFi列表 ==========
  scanAndPrintWiFiNetworks();

  // ========== 原有WiFi连接逻辑 ==========
  Serial.print(F("Connecting to target WiFi: "));
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  // 轮询等待WiFi连接,超时10秒
  uint32_t wifiTimeout = millis();
  while (WiFi.status() != WL_CONNECTED && millis() - wifiTimeout < 10000) {
    delay(500);
    Serial.print(F("."));
  }

  // 打印WiFi连接结果
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println(F(""));
    Serial.println(F("WiFi connected successfully!"));
    Serial.print(F("IP Address: "));
    Serial.println(WiFi.localIP());
  } else {
    Serial.println(F(""));
    Serial.println(F("WiFi connect failed, continue running tasks..."));
  }

  // 创建FreeRTOS任务
  xTaskCreate(MyTask1, "Task1", 2048, NULL, 1, NULL);
  xTaskCreate(MyTask2, "Task2", 2048, NULL, 2, NULL);
}

void loop() {
}

// 任务1:控制48号引脚LED,0.5秒闪烁一次
static void MyTask1(void* pvParameters) {
  while (1) {
    Serial.println(F("Task1"));
    digitalWrite(48, !digitalRead(48));
    vTaskDelay(500 / portTICK_PERIOD_MS); // 延时0.5秒
  }
}

// 任务2:控制12号引脚LED,1秒闪烁一次
static void MyTask2(void* pvParameters) {
  while (1) {
    Serial.println(F("Task2"));
    digitalWrite(12, !digitalRead(12));
    vTaskDelay(1000 / portTICK_PERIOD_MS); // 延时1秒
  }
}

推荐阅读



最后修改:2026 年 01 月 21 日
如果您觉得我的文章有帮助,请随意赞赏,赞赏有助于激发博主的热情,感谢!