はじめに
ESP-IDFのサンプルscan.cでは、DHCPで自動的にローカルIPアドレスが割り当てられた。
これを、自分で指定したいIPアドレスに設定してみる。
scan.cでWi-Fiの初期化とスキャンを行う部分はこうなっている。
scan.c
/* Initialize Wi-Fi as sta and set scan method */
static void wifi_scan(void)
{
tcpip_adapter_init();
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
wifi_config_t wifi_config = {
.sta = {
.ssid = DEFAULT_SSID,
.password = DEFAULT_PWD,
.scan_method = DEFAULT_SCAN_METHOD,
.sort_method = DEFAULT_SORT_METHOD,
.threshold.rssi = DEFAULT_RSSI,
.threshold.authmode = DEFAULT_AUTHMODE,
},
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
}
結果
〜(略)〜
I (3662) event: sta ip: 192.168.0.14, mask: 255.255.255.0, gw: 192.168.0.1
I (3662) scan: SYSTEM_EVENT_STA_GOT_IP
I (3662) scan: Got IP: 192.168.0.14
設定する
tcpip_adapter_init()の後でIPアドレスを設定する。
scan.c
/* Initialize Wi-Fi as sta and set scan method */
static void wifi_scan(void)
{
tcpip_adapter_init();
tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
/* IPアドレスの設定 */
tcpip_adapter_ip_info_t ipInfo;
IP4_ADDR(&ipInfo.ip, 192,168,0,20);
IP4_ADDR(&ipInfo.gw, 192,168,0,1);
IP4_ADDR(&ipInfo.netmask, 255,255,255,0);
tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &ipInfo);
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
/* 〜略〜 */
}
結果
〜(略)〜
I (1981) event: sta ip: 192.168.0.20, mask: 255.255.255.0, gw: 192.168.0.1
I (1981) scan: SYSTEM_EVENT_STA_GOT_IP
I (1981) scan: Got IP: 192.168.0.20
指定したIPアドレスになった。