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

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

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

 

 

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

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

 

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

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

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

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

  2. Dibrova:

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

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

  3. Алексей:

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

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

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

*