Настроим соединение по UDP протоколу и произведем ping контроллера.
Контроллер поддерживает 3 режима работы:
- Аппаратный режим станции (он подключается к какой-то сети)
- Программный режим точки доступа (контроллер создает сеть)
- Совмещенный режим (1+2)
Посмотрим на примере как подключиться к существующей сети.
В файле main.c
Добавим глобальные переменные:
//------------------------------------------------------
//User_Variables
//------------------------------------------------------
static os_timer_t os_timer01;
static uint8_t led_state=0;
static uint8_t WiFi_status=STATION_IDLE;
static uint8_t Connect_status=0;
//Напишем Callback функцию для программного таймера
static void ICACHE_FLASH_ATTR wifi_check_ip(void *arg)
{
struct ip_info IpConfig; //структура, в которую "складируются" данные о текущем соединении
os_timer_disarm(&os_timer01); //деинициализировать (обнулить) структуру / отключаем таймер
WiFi_status=wifi_station_get_connect_status(); //проверяем статус соединения
if(WiFi_status==STATION_GOT_IP && IpConfig.ip.addr!=0)
{
os_timer_setfn(&os_timer01, (os_timer_func_t*)wifi_check_ip, NULL); //указываем структура и функцию обратного вызова
os_timer_arm(&os_timer01, 2000, 0); //инициализировать (обнулить) структуру
if(Connect_status==0){os_printf("WiFi connected\r\n"); Connect_status=1;}
else {led_state=(led_state==0) ? 1:0; GPIO_OUTPUT_SET(2,led_state); }
}
else
{
os_printf("WiFi NOT connected\r\n");
Connect_status=0;
switch (WiFi_status)
{
case STATION_WRONG_PASSWORD:
os_printf("STATION_WRONG_PASSWORD\r\n");
wifi_station_connect();
break;
case STATION_NO_AP_FOUND:
os_printf("STATION_NO_AP_FOUND\r\n");
wifi_station_connect();
break;
case STATION_CONNECT_FAIL:
os_printf("STATION_CONNECT_FAIL\r\n");
wifi_station_connect();
break;
default:
os_printf("STATION_IDLE\r\n");
break;
}
os_timer_setfn(&os_timer01, (os_timer_func_t*)wifi_check_ip, NULL); //указываем структура и функцию обратного вызова
os_timer_arm(&os_timer01, 500, 0); //инициализировать (обнулить) структуру
}
}
В файле user_config.h напишем дефайны для точки доступа
#define WiFi_Client_SSID "qwe1" //в SSID обязательно должны быть цифры!!!!
#define WiFi_Client_Password "12345678"
В функции main (ICACHE_FLASH_ATTR user_init()) создаем и инициализируем структуру:
struct station_config stationConf; //структура для настроек wifi
os_memset(&stationConf,0,sizeof(struct station_config)); //зануляем структуру
os_sprintf(stationConf.ssid, "%s", WiFi_Client_SSID);
os_sprintf(stationConf.password, "%s", WiFi_Client_Password);
Далее выбираем режим станции и инициализируем ее настройки
wifi_set_opmode(STATION_MODE); //режим станции (настройка м.б. изменена "на лету")
wifi_station_set_config_current(&stationConf); //инициализируем настройки wifi структурой (настройка м.б. изменена "на лету")
В самом конце настраиваем программный таймер и присоединяемся к wifi
//используем програмный таймер
os_timer_disarm(&os_timer01); //деинициализировать (обнулить) структуру
os_timer_setfn(&os_timer01, (os_timer_func_t*)wifi_check_ip, NULL); //указываем структура и функцию обратного вызова
os_timer_arm(&os_timer01, 1000, 0); //инициализируем структуру
//0-однократно, 1-циклический
wifi_station_connect(); //присоединяемся к wifi
На основе полученного IP можно «пропинговать» м/к
в windows 7 нажать ctrl+R ввести cmd и потом ввести ping «ip»
По умолчанию в микроконтроллере включен «режим пониженного потребления» и поэтому соединение с сетью происходит весьма долго, поэтому разумно дописать:
wifi_set_sleep_type(NONE_SLEEP_T); //отключаем пониженное энергопотребление
wifi_station_connect(); //присоединяемся к wifi
В дальнейшем можно использовать функцию wifi_get_sleep_type(); для получения текущего режима энергопотребления.