ESP8266 Урок 22. FreeRTOS. Wi-Fi. Режим AP (точка доступа)



Продолжаем программирование микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS.

На данном уроке мы также продолжим тему беспроводной передачи данных и попробуем настроить наш модуль в режиме программной точки доступа (SOFTAP). После этого мы можем создавать подключение с узлами, настроенными в режиме станции, пытающимися подключиться к нашему модулю. Также мы попытаемся с помощью настройки DHCP раздать нашим станциям IP-адреса.

Схема наша остаётся без изменений – отладочная плата, подключенная к USB компьютера

 

 

Проект за основу мы возьмём с прошлого занятия с именем WIFI_STA_RTOS и присвоим ему новое имя WIFI_AP_RTOS.

Откроем наш проект в среде Eclipse и в файле конфигурации user_config.h добавим имя нашей точки доступа, пароль подключения к ней, её сетевой адрес, шлюз, сетевую маску, а также начало и окончание пула адресов, выделяемых подключаемым станциям

 

 

Данные станции мы удалять не будем, так как наш проект будет универсальным и сможет работать как в режиме станции, так и точки доступа.

В файле wifi.c ниже функции set_on_station_disconnect добавим функции, получающие указатели на функции соединения станции с нашей точкой доступа, а также разрыва соединения

 

 

Ниже функции on_wifi_disconnect добавим функцию-обработчик соединения станции с нашей точкой доступа

 

 

В данной функции мы выведем соответствующее сообщение в терминальную программу, затем узнаем количество подключенных станций, впоследствии также выведя об этом соответствующее сообщение в терминальную программу и зажжём наш светодиод.

Ниже этой функции добавим функцию-обработчик разъединения станции с точкой доступа

 

 

Данная функция подобна предыдущей, только выводит она уже сообщение в терминальную программу об отсоединении станции, и если у нас подсоединённых станций не осталось, то есть их количество равно 0, то мы погасим светодиод.

Из тела функции инициализации init_esp_wifi удалим данные строки

set_on_station_connect(on_wifi_connect);

set_on_station_disconnect(on_wifi_disconnect);

А вместо них мы зарегистрируем наши 2 функции, которые мы только что добавили

 

 

В функции-обработчике событий wifi-соединения wifi_event_handler_cb исправим ошибку в кейсе EVENT_SOFTAPMODE_STACONNECTED, так как мы там вместо on_client_connect проверяли on_station_connect

Ниже функции старта станции start_wifi_station добавим функцию старта точки доступа, в теле которой для начала объявим переменную типа структуры ip_info, также целочисленную переменную для адреса и два символьных массива для IP-адреса и MAC-адреса

 

 

Добавим символьный массив для MAC-адреса

 

Попытаемся установить режим точки доступа, если не получится, то выйдем из функции со статусом false

 

 

Объявим переменную типа указателя на структуру и выделим для такой переменной память

 

 

 

Вернёмся в функцию start_wifi_ap и получим MAC-адрес модуля, а затем запишем его в переменную

 

 

Запросим данные о состоянии точки доступа и сохраним их в переменную структуры

 

 

Очистим память в данной переменной под имя точки доступа и запишем туда данное имя

 

 

Аналогично поступим и с паролем

 

 

Проверим, что у нас включился режим точки доступа, и если это так, то сначала выведем соответствующее сообщение в терминальную программу

 

 

Не выходя из тела данного условия, проинициализируем также номер канала, на котором будет работать наша точка доступа, режим шифрования, максимальное количество подключаемых станций, а также режим видимости, и затем запишем наши настройки в модуль с помощью специальной функции, передав ей нашу переменную типа структуры в качестве параметра

 

 

Выйдем из условия и ещё раз убедимся, что у нас режим точки доступа и, если это так, то заберём конфигурацию опять в нашу переменную config

 

 

Также в теле данного условия выведем наши настройки в терминальную программу

 

 

 

Выйдя из тела условия, освободим память, выделенную под переменную структуры

 

 

Включим полноправный режим без пониженного энергопотребления

 

 

Остановим DHCP-сервер

 

 

Занесём в переменную структуры ipinfo значения IP-адреса, шлюза и сетевой маски нашего DHCP-сервера

 

 

Сохраним всё это в модуль

 

 

Аналогичным образом настроим пул адресов для станций

 

 

Запустим DHCP-сервер, установим режим с максимальной скоростью передачи данных и вернём true

 

 

Ниже функции stop_wifi_ap добавим аналогичную функцию остановки станции

 

 

Тело функции подобно телу предыдущей функции, только отключаем мы режим станции.

В функции инициализации удалим следующую строку

 

stop_wifi_ap();

 

Вместо неё остановим станцию

 

 

В файле main.c в функции user_init удалим вот эту строку

 

start_wifi_station(WIFI_CLIENTSSID, WIFI_CLIENTPASSWORD);

 

Вместо неё запустим режим точки доступа, не забыв предварительно добавить на данную функцию прототип в заголовочном файле

 

 

Соберём код, прошьём контроллер и попытаемся соединиться с нашей точкой доступа со смартфона

 

 

Светодиод загорелся

 

 

Также в терминальной программе мы видим, что станция с точкой доступа соединилась и количество станций теперь 1

 

 

Попробуем соединиться с точкой доступа с другого смартфона

 

 

Почему-то, независимо от настройки пула, адреса назначились начальные — 2 и 3. Ну это не страшно и некритично.

 

Светодиод продолжает светиться и количество станций теперь 2

 

 

Отсоединимся в одном сматрфоне, количество станций теперь 1

 

 

Отключим второй, количество соединений — 0 и светодиод не светится

 

 

Итак, на данном занятии нам удалось настроить наш модуль в режиме точки доступа, используя при этом операционную систему FreeRTOS.

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование МК ESP8266 Следующий урок

 

Исходный код

 

 

Модуль ESP NodeMCU можно купить здесь: Модуль ESP NodeMCU

Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266

Переходник USB to TTL можно приобрести здесь ftdi ft232rl

Многофункциональный переходник CJMCU FT232H USB к JTAG UART FIFO SPI I2C можно приобрести здесь ftdi ft232rl

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

ESP8266 FreeRTOS. Wi-Fi. Режим AP (точка доступа)

3 комментария на “ESP8266 Урок 22. FreeRTOS. Wi-Fi. Режим AP (точка доступа)
  1. Сергей:

    Спасибо за уроки! Изучаю, грызу гранит науки.

  2. Dibrova:

    Здравствуйте, спасибо за уроки, очень хороший материал.
    Извините мемного за не в тему. Но у меня вопрос. У меня не получилось запустить точку доступа на nonOS. Вроде всё правильно. но вайфай сети просто нет. при использовании среды ардуино все создаётся.

    Позскажите где я чтото упустил. не хочу захламлять тут, скажите куда можно код скинуть

  3. Алексей:

    Что бы заработал диапазон адресов DHCP, надо еще сделать dhcp_lease.enable = TRUE

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*