5

別の ESP8266 がホストする WiFi ネットワークに ESP8266 を接続しようとしています。問題は、ESP8266 が WiFi スキャン中に WiFi ネットワークを表示するが、次のエラーで接続に失敗することですno espnetwork found, reconnect after 1s

ネットワークをホストする ESP8266 のコード:

#include <osapi.h>
#include <user_interface.h>

void ICACHE_FLASH_ATTR user_init(void) {
    // Delays 1 second for my serial monitor to catch up
    for (int i = 0; i < 200; i++) os_delay_us(5000);

    gpio_init();
    uart_init(115200, 115200);

    wifi_softap_dhcps_stop();

    wifi_set_opmode(SOFTAP_MODE);

    struct softap_config softAPConfig = {
        .ssid = {0},
        .password = {0},
        .ssid_len = sizeof("espnetwork"),
        .authmode = AUTH_OPEN,
        .max_connection = 4,
        .beacon_interval = 100,
    };

    os_memcpy(softAPConfig.ssid, "espnetwork", sizeof("espnetwork"));

    wifi_softap_set_config(&softAPConfig);

    wifi_softap_dhcps_start();
}

uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void) {
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            break;
        default:
            rf_cal_sec = 0;
            break;
    }
    return rf_cal_sec;
}

ESP8266 の検索とネットワークへの接続のコード:

#include <osapi.h>
#include <user_interface.h>

static os_timer_t INIT_TIMER;

void ICACHE_FLASH_ATTR commScanCb(void *arg, STATUS status) {
    if (status != OK) return (void)os_printf("Scan Callback Error : %d", status);

    struct bss_info *scanInfo = (struct bss_info *)arg;
    struct bss_info *network  = NULL;

    while (scanInfo != NULL) {
        if (!os_strcmp(scanInfo->ssid, "espnetwork")) network = scanInfo;

        scanInfo = STAILQ_NEXT(scanInfo, next);
    }

    if (network == NULL) return (void)os_printf("Network Not Found");
    else os_printf("Found Network : %s\n", network->ssid);

    struct station_config config = { .bssid_set = 0 };

    os_memset(config.ssid, 0, 32);
    os_memcpy(config.ssid, network->ssid, 32);

    wifi_station_set_config(&config);

    wifi_station_connect() ? os_printf("WiFi Connect Started\n") : os_printf("WiFi Connect Failed\n");
}

void ICACHE_FLASH_ATTR afterInit(void *arg) {
    os_timer_disarm(&INIT_TIMER);

    wifi_station_scan(NULL, commScanCb);
}

void ICACHE_FLASH_ATTR user_init(void) {
    // Delays 1 second for my serial monitor to catch up
    for (int i = 0; i < 200; i++) os_delay_us(5000);

    gpio_init();
    uart_init(115200, 115200);
    
    wifi_station_set_auto_connect(0);

    wifi_set_opmode(STATION_MODE);

    os_timer_disarm(&INIT_TIMER);
    os_timer_setfn(&INIT_TIMER, (os_timer_func_t *)afterInit, NULL);
    os_timer_arm(&INIT_TIMER, 1000, 1);
}

uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void) {
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            break;
        default:
            rf_cal_sec = 0;
            break;
    }
    return rf_cal_sec;
}

ネットワークに接続しようとしている ESP8266 からのログ:

mode : sta(5c:cf:7f:f6:54:cb)
add if0
scandone
Found Network : espnetwork
WiFi Connect Started
scandone
no espnetwork found, reconnect after 1s
reconnect
scandone
no espnetwork found, reconnect after 1s
reconnect
scandone
no espnetwork found, reconnect after 1s
reconnect

このログは、ESP8266 がネットワーク (4 行目) を見つけたが、接続に失敗し、無期限に再接続を試みたことを示しています。

WiFi ネットワークの認証モードを変更してパスワードを指定しようとしbssid_setましたが、1 に設定して WiFi ネットワークの bssid を渡そうとしましたが、どちらの場合も同じエラーが発生します。

4

1 に答える 1