乐鑫技术交流
直播中

北冥有熊

8年用户 894经验值
擅长:131594
私信 关注
[问答]

ESP8266设置为station+ap模式,手机可以连接AP,但是PC连接AP时连接不上,为什么?

ESP8266设置为station+ap模式,手机可以连接AP,但是PC连接AP时连接不上,通过串口输出的信息看应该是PC反复连接,断开AP(ESP8266),请问是哪里出现问题?
我的代码如下:

#include "esp_common.h"
#include "uart.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

extern void  vTask_ap( void * pvParameters );
extern void  vTask_station( void * pvParameters );

void user_init(void)
{
        xTaskHandle xHandle = NULL;
        uart_init_new();
        printf("SDK version:%sn", system_get_sdk_version());
        if(wifi_set_opmode_current(0x03) == 0)
        {
                printf("wifi set mode 0x03 failed!rn");
                while(1);
        }
        printf("wifi set mode 0x03 success!rn");
        xTaskCreate(
                    vTask_ap,       /* Function that implements the task. */
                    "ap_task",          /* Text name for the task. */
                    512,      /* Stack size in words, not bytes. */
                    NULL,    /* Parameter passed into the task. */
                    1,/* Priority at which the task is created. */
                    &xHandle );      /* Used to pass out the created task's handle. */
        xTaskCreate(
                    vTask_station,       /* Function that implements the task. */
                    "station_task",          /* Text name for the task. */
                    512,      /* Stack size in words, not bytes. */
                    NULL,    /* Parameter passed into the task. */
                    1,/* Priority at which the task is created. */
                    &xHandle );      /* Used to pass out the created task's handle. */
}


void  vTask_station( void * pvParameters )
{
        while(1)
        {
                //printf("task_stationrn");
                vTaskDelay(2);
        }

}

void wifi_handle_event_cb(System_Event_t *evt)
{
        printf("event %xn", evt->event_id);
        switch (evt->event_id) {
                case EVENT_STAMODE_CONNECTED:
                        printf("connect to ssid %s, channel %dn",
                        evt->event_info.connected.ssid,
                        evt->event_info.connected.channel);
                break;
                case EVENT_STAMODE_DISCONNECTED:
                        printf("disconnect from ssid %s, reason %dn",
                        evt->event_info.disconnected.ssid,
                        evt->event_info.disconnected.reason);
                break;
                case EVENT_STAMODE_AUTHMODE_CHANGE:
                        printf("mode: %d -> %dn",
                        evt->event_info.auth_change.old_mode,
                        evt->event_info.auth_change.new_mode);
                break;
                case EVENT_STAMODE_GOT_IP:
                        printf("ip:" IPSTR ",mask:" IPSTR ",gw:" IPSTR,
                        IP2STR(&evt->event_info.got_ip.ip),
                        IP2STR(&evt->event_info.got_ip.mask),
                        IP2STR(&evt->event_info.got_ip.gw));
                        printf("n");
                break;
                case EVENT_SOFTAPMODE_STACONNECTED:
                        printf("station: " MACSTR "join, AID = %dn",
                        MAC2STR(evt->event_info.sta_connected.mac),
                        evt->event_info.sta_connected.aid);
                break;
                case EVENT_SOFTAPMODE_STADISCONNECTED:
                        printf("station: " MACSTR "leave, AID = %dn",
                        MAC2STR(evt->event_info.sta_disconnected.mac),
                        evt->event_info.sta_disconnected.aid);
                break;
                default:
                break;
        }
}
void  vTask_ap( void * pvParameters )
{
        struct station_info * station;
        struct softap_config *config = (struct softap_config *)zalloc(sizeof(struct        softap_config)); // initialization
        wifi_set_event_handler_cb(wifi_handle_event_cb);
        wifi_softap_get_config(config); // Get soft-AP config first.
        sprintf(config->ssid, "test");
        sprintf(config->password, "11111111");
        config->authmode = AUTH_WPA_WPA2_PSK;
        config->ssid_len = 0; // or its actual SSID length
        config->max_connection = 2;
        wifi_softap_set_config(config); // Set ESP8266 soft-AP config
        free(config);
        while(1)
        {
                //station = wifi_softap_get_station_info();
                //while(station)
                //{
                        //printf("bssid:%srnip:%srn",MAC2STR(station->bssid), IP2STR(&station->ip));
                        //station = STAILQ_NEXT(station, next);
                //}
                //wifi_softap_free_station_info(); // Free it by calling functions               
                //printf("task_aprn");
                vTaskDelay(2);
        }

}

输出调试信息如下:
SDK version:1.4.0(c599790)
wifi set mode 0x03 success!
mode : sta(5c:cf:7f:12:67:b1) + softAP(5e:cf:7f:12:67:b1)
add if0
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
add if1
bcn 100
event 8
event 8
event 8
event 8
event 8
event 8
event 8
add 1
aid 1
station: 3c:46:d8:3a:6d:16 join, AID = 1
event 6
station: 3c:46:d8:3a:6d:16join, AID = 1
station: 3c:46:d8:3a:6d:16 leave, AID = 1
rm 1
event 7
station: 3c:46:d8:3a:6d:16leave, AID = 1
add 1
aid 1
station: 3c:46:d8:3a:6d:16 join, AID = 1
event 6
station: 3c:46:d8:3a:6d:16join, AID = 1
event 8
event 8
station: 3c:46:d8:3a:6d:16 leave, AID = 1
rm 1
event 7
station: 3c:46:d8:3a:6d:16leave, AID = 1
add 1
aid 1
station: 3c:46:d8:3a:6d:16 join, AID = 1
event 6
station: 3c:46:d8:3a:6d:16join, AID = 1
event 8
station: 3c:46:d8:3a:6d:16 leave, AID = 1
rm 1
event 7
station: 3c:46:d8:3a:6d:16leave, AID = 1
add 1
aid 1
station: 3c:46:d8:3a:6d:16 join, AID = 1
event 6
station: 3c:46:d8:3a:6d:16join, AID = 1
                                                                                                                                                     

回帖(1)

尚文清

2024-7-20 16:21:39
从你提供的信息来看,你的ESP8266已经成功设置为station+ap模式,并且手机可以正常连接AP。但是PC连接AP时出现问题。这可能是由以下几个原因导致的:

1. **信道问题**:ESP8266使用的信道可能与PC不兼容。你可以尝试更改ESP8266的信道设置,使其与PC的信道设置相匹配。

2. **加密方式**:ESP8266的加密方式可能与PC不兼容。你可以尝试更改ESP8266的加密方式,例如使用WPA2加密。

3. **功率问题**:ESP8266的发射功率可能不足以覆盖PC所在的区域。你可以尝试增加ESP8266的发射功率。

4. **固件问题**:ESP8266的固件可能存在问题。你可以尝试重新刷写固件。

5. **PC设置问题**:PC的无线网卡可能存在问题。你可以尝试更新PC的无线网卡驱动,或者在PC上手动设置无线连接参数。

6. **代码问题**:你的代码可能存在问题。你可以尝试检查代码,确保ESP8266的AP模式和station模式都能正常工作。

由于你没有提供完整的代码,我无法确定具体的问题所在。但是,你可以尝试以下步骤来解决问题:

1. **检查信道设置**:确保ESP8266的信道设置与PC的信道设置相匹配。

2. **检查加密方式**:确保ESP8266的加密方式与PC的加密方式相匹配。

3. **增加发射功率**:尝试增加ESP8266的发射功率,以提高信号覆盖范围。

4. **重新刷写固件**:尝试重新刷写ESP8266的固件,以排除固件问题。

5. **更新PC驱动**:尝试更新PC的无线网卡驱动,以排除驱动问题。

6. **检查代码**:仔细检查你的代码,确保ESP8266的AP模式和station模式都能正常工作。

希望这些建议能帮助你解决问题。如果你需要更详细的帮助,请提供完整的代码和更多的错误信息。
举报

更多回帖

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