乐鑫技术交流
直播中

康大争

7年用户 2223经验值
私信 关注
[问答]

将ESP8266连接到WiFi AP,连接失败的原因是什么?

尝试将ESP8266连接到 WiFi AP。源代码如下:

user_init:

void user_init(void)
{
    int i = 0;

    uart_div_modify(0,UART_CLK_FREQ/115200);

    for (i = 0; i < 5; i++) {
        os_printf("Wait %d...n", 5-i);
        sys_msleep(1000);
    }

    if (wifi_get_opmode() != STAtiON_MODE) {
        os_printf("Setting ESP to STATION moden");
        wifi_set_opmode(STATION_MODE);
    }
    if (wifi_get_opmode() == STATION_MODE) {
        os_printf("ESP 处于 STATION 模式n");
        wifi_station_get_config(&config);

        memset(config.ssid, 0, sizeof(config.ssid));
        memset(config.password, 0, sizeof(config.password));
        sprintf(config.ssid, "%s", DEMO_AP_SSID);
        sprintf(config.password, "%s", DEMO_AP_PASSWORD);
        wifi_station_set_config(&config);
        sys_msleep(100);

        wifi_station_get_config(&config);
        os_printf("OPMODE: %u, SSID: %s, PASS: %sn", wifi_get_opmode(), config.ssid, config.password);
    }

    os_printf("创建新线程以检查连接n");
    xTaskCreate(checkWiFiConnection, "myTask", 256, NULL, 2, NULL);
    os_printf("已创建任务n");

    while(1) {
        os_printf("在user_initn");
        sys_msleep(1000);
    }
}



checkwifi连接:

void checkWiFiConnection(void *pvParameters) {
    os_printf("输入了用于检查WIFI连接的新线程n");

    os_timer_disarm(&wifiConnectionFuncTimer);
    os_timer_setfn(&wifiConnectionFuncTimer, (os_timer_func_t *)checkwifi连接func, 0);
    os_timer_arm(&wifiConnectionFuncTimer, 1000, 0);

    while(endTaskWifiConnection != 100) {
        os_printf("In checking wifi connection %dn", endTaskWifiConnection);
        sys_msleep(1000);
    }

    os_printf("Delete thread for checking WIFI connectionn");

    vTaskDelete(NULL);
}



checkwifi连接func

无效 checkwifi连接func() {
    os_printf("Entered checking WiFi connection Function - %dn", endTaskWifiConnection);

    struct ip_info ipConfig;

    endTaskWifiConnection = endTaskWifiConnection + 1;

    os_timer_disarm(&wifiConnectionFuncTimer);

    wifi_get_ip_info(STATION_IF, &ipConfig);

    if (wifi_station_get_connect_status() == STATION_GOT_IP && ipConfig.ip.addr != 0)
    {
        os_printf("WiFi connectedrn");

        os_printf("Start TCP connecting...n");

        // Отправляем данные на ПК
        //senddata();


    }
    else
    {
        os_printf("WiFi 已断开连接n");

        wifi_station_get_config(&config);
        os_printf("OPMODE: %u, SSID: %s, PASS: %sn", wifi_get_opmode(), config.ssid, config.password);

        os_printf("尝试连接到 WiFi 网络n");
        uint8 state = wifi_station_connect();

        if (state) {
            os_printf("Connected OK. WiFi is now activen");
        }
        else
            os_printf("连接失败n");

        if(wifi_station_get_connect_status() == STATION_WRONG_PASSWORD)
        {
            os_printf("WiFi connecting error, wrong passwordrn");
        }

        else if(wifi_station_get_connect_status() == STATION_NO_AP_FOUND)
        {
            os_printf("WiFi connecting error, ap not foundrn");
        }
        else if(wifi_station_get_connect_status() == STATION_CONNECT_FAIL)
        {
            os_printf("WiFi connecting failrn");
        }
        else
        {
            os_printf("WiFi连接...rn");
        }
    }

    os_timer_setfn(&wifiConnectionFuncTimer, (os_timer_func_t *)checkwifi连接func, 0);
    os_timer_arm(&wifiConnectionFuncTimer, 1000, 0);
}

很遗憾,wifi没有连接。以下是日志:
"
等 4...
等待 3...
等待 2...
等待 1...
ESP 处于 STATION 模式
操作模式:1,SSID:ESPTEST,通过:12345678
创建新线程以检查连接
已创建任务
在user_init
输入了用于检查WIFI连接的新线程
在检查 wifi 连接时 0
在user_init
在检查 wifi 连接时 0
已输入检查WiFi连接功能 - 0
WiFi 已断开连接
操作模式:1,SSID:ESPTEST,通过:12345678
尝试连接到 WiFi 网络
连接失败
WiFi连接...
在user_init
检查 wifi 连接 1
输入检查WiFi连接功能 - 1
WiFi 已断开连接
操作模式:1,SSID:ESPTEST,通过:12345678
尝试连接到 WiFi 网络
连接失败
WiFi连接...
在user_init
"

请帮我知道连接失败的原因是什么?
谢谢。

回帖(1)

李秀兰

2024-7-10 17:47:47
在分析这个问题之前,我们先了解一下ESP8266和WiFi AP。ESP8266是一款低成本的WiFi模块,广泛应用于物联网项目。WiFi AP(Access Point)是一个无线接入点,用于连接无线设备。

根据您提供的源代码,我们可以逐步分析可能导致连接失败的原因:

1. **WiFi模块初始化问题**:在源代码中,我们没有看到对ESP8266模块进行初始化的代码。在连接WiFi之前,需要确保模块已经正确初始化。

2. **WiFi配置问题**:源代码中没有提供设置WiFi SSID(网络名称)和密码的代码。在连接WiFi之前,需要设置正确的SSID和密码。

3. **连接模式问题**:源代码中检查了当前模式是否为STATION_MODE,但没有提供切换到STATION_MODE的代码。如果ESP8266当前处于其他模式(如AP模式),则无法连接到WiFi AP。

4. **连接超时问题**:在尝试连接WiFi时,可能由于信号弱、密码错误或其他原因导致连接超时。需要检查连接过程中是否有超时重试机制。

5. **电源问题**:如果ESP8266模块供电不足,可能导致连接失败。请确保模块的电源供应稳定且符合规格要求。

6. **硬件故障**:如果ESP8266模块或WiFi AP存在硬件故障,可能导致连接失败。请检查硬件设备是否正常工作。

7. **固件问题**:如果ESP8266模块的固件存在问题,可能导致连接失败。尝试更新固件到最新版本。

8. **干扰问题**:在某些情况下,电磁干扰可能导致WiFi信号不稳定,从而影响连接。尝试更换连接位置或减少干扰源。

为了解决连接失败的问题,您可以尝试以下步骤:

1. 确保ESP8266模块已正确初始化。
2. 设置正确的WiFi SSID和密码。
3. 切换ESP8266模块到STATION_MODE。
4. 添加连接超时重试机制。
5. 检查电源供应是否稳定。
6. 检查硬件设备是否正常工作。
7. 更新ESP8266模块的固件。
8. 减少电磁干扰。

希望这些建议能帮助您解决ESP8266连接WiFi AP失败的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分