- ESP32 Урок 19. Wi-Fi. Режим STA (Станция)
- Русские Блоги
- Подробное объяснение режима работы AP и STA беспроводного модуля Wifi
- Подробное объяснение режима работы AP и STA беспроводного модуля Wifi
- 1. Основные понятия AP и STA
- 2. Описание режимов работы AP и STA
- ESP32 Урок 22. Wi-Fi. Режим STA (Станция). Smart
- ESP8266 Урок 21. FreeRTOS. Wi-Fi. Режим STA
ESP32 Урок 19. Wi-Fi. Режим STA (Станция)
Ну вот, наконец-то, дошли мы до той темы, которую, я думаю, многие ждали — это приём и передача данных при помощи возможностей ESP32 по беспроводной сети Wi-Fi.
С данной темой мы уже работали с применением контроллера ESP8266, причём используя различные протоколы передачи данных модели OSI, поэтому нам будет намного легче.
Мы также подробно не будем изучать протокол Wi-Fi, так как с ним работает наш контроллер аппаратно. Также помогает в этом комплект IDF. Режимы работы WiFi контроллера — это станция (или кратко STA) и точка доступа (AP). Также мы можем одновременно использовать четыре виртуальных интерфейса WiFi.
Самым простым из этих режимов является первый — режим станции.
Режим станции (STA) — это такой режим, в котором контроллер не создает собственную сеть, а подключается к любой существующей сети Wi-Fi, например, к существующей локальной сети или к другому устройству, работающему в режиме точки доступа (AP).
На данном уроке мы настроим режим станции и попробуем подключиться к существующей точке доступа, например к роутеру, который раздаёт Wi-Fi по дому. Роутер от просто точки доступа отличается тем, что трафик, идущий от станций, подключенных к нему, он транслирует во внешнюю сеть и наоборот.
Схема у нас будет простейшая — отладочная плата, подключенная к USB компьютера
А проект мы на этот раз создадим новый. Как создавать новый проект, мы знаем из урока 3.
Но тем не менее я этот процесс покажу.
Где-нибудь в районе дерева проекта вызовем контекстное меню (правый щелчок мыши) и выберем пункт New->Espressif IDF Project
Придумаем имя и жмём Finish
Как обычно, мы получим готовый проект с неким кодом в файле main.c.
Также если мы откроем файл Kconfig.projbuild, то мы также там увидим два пункта для конфигурирования имени точки доступа, к которой мы подключаемся, а также для пароля (или ключа) подключения к точке доступа. Выше пункта ESP_WIFI_SSID добавим пункт по настройке светодиода, так как он нам пригодится для сигнализации подключения к точке доступа
Русские Блоги
Подробное объяснение режима работы AP и STA беспроводного модуля Wifi
Подробное объяснение режима работы AP и STA беспроводного модуля Wifi
Модуль Wi-Fi включает в себя два режима работы AP и STA. Благодаря поддержке этих двух режимов продукт беспроводной передачи изображения может реализовать функцию отправки одного и получения большего количества. Давайте начнем с основных концепций AP и STA.
1. Основные понятия AP и STA
AP: точка беспроводного доступа является создателем беспроводной сети и центральным узлом сети. Беспроводной маршрутизатор, используемый в обычных домах или офисах, является точкой доступа.
STA: каждый терминал, подключенный к беспроводной сети (например, ноутбуки, КПК и другое пользовательское оборудование, подключенное к сети), можно назвать сайтом.
2. Описание режимов работы AP и STA
1. Работа в режиме AP
Работая в режиме AP, мобильные телефоны, PAD, компьютеры и другие устройства могут быть напрямую подключены к модулю, который может легко управлять пользовательским оборудованием (Рисунок 2-1).
Рисунок 2-1 Работа в режиме AP
2. Работа в режиме STA
Это основной сетевой метод, состоящий из AP и множества STA, как показано на следующем рисунке. Характеристика состоит в том, что AP находится в центральном положении, и взаимная связь между STA завершается посредством пересылки AP. В этом режиме модуль WIFI работает в режиме STA (CLIENT). При правильных настройках данные COM и данные сети WIFI конвертируются друг в друга. (Рисунок 2-2)
Рисунок 2-2 Работа в режиме STA
ESP32 Урок 22. Wi-Fi. Режим STA (Станция). Smart
В уроке 19 мы написали проект, который обеспечивает соединение с точкой доступа. То есть мы настроили наш модуль для работы по беспроводной сети в режиме станции. Только при условии исчезновения соединения с точкой доступа вследствие временного отключения последней или из-за каких-то других причин нам пришлось столкнуться с рядом трудностей, хотя с помощью неких костылей они всё же были преодолены, но это не совсем так, как хотелось бы. Поэтому на данном уроке мы постараемся немного усовершенствовать наш проект, так сказать, заставить нашу станцию быть немного умнее .
Схема остаётся такая же — отладочная плата, подключенная к USB компьютера
И проект мы также сделаем из проекта того же урока с именем WIFI_STA и назовём его WIFI_STA_SMART .
Откроем наш проект в Espressif IDE и в функции app_main файла main.c удалим бесконечный цикл совсем вместе с телом.
Вот эта переменная нам также не потребуется
Создадим цикл событий по умолчанию
Перейдём в файл wifi.c и в объявлении функции инициализации wifi_init_sta добавим возвращаемый параметр
esp_err_t wifi_init_sta(void)
Поправим также и прототип в заголовочном файле.
В теле данной функции объявим переменную такого же типа
Дальнейший код в теле удалим совсем, так как изменений будет очень много и легче его заново написать.
Функцию event_handler удалим вместе с телом.
Вот эти глобальные вещи также удалим
static int s_retry_num = 0; static EventGroupHandle_t s_wifi_event_group; #define WIFI_CONNECTED_BIT BIT0 #define WIFI_FAIL_BIT BIT1
Сегодня мы будем работать с семафором, а не с событиями.
Объявим глобальный семафор, назначение которого мы узнаем позже
В функции wifi_init_sta проверим существование нашего семафора
А если мы не выйдем из-за какой-нибудь ошибки, то вернём успешный статус
Выше добавим функцию, которая будет запускать нашу сеть
Вызовем её в функции wifi_init_sta
Объявим глобальную переменную, которая будет считать количество сетевых интерфейсов
Выше добавим функцию, останавливающую соединение, в которой пока только уменьшим на 1 количество сетевых интерфейсов
В функции wifi_init_sta зарегистрируем данную функцию в качестве обработчика событий
Выше функции net_start добавим функцию в форме указателя, которая будет запускать беспроводной модуль
Объявим и проинициализируем переменную типа структуры управления настройками WiFi, такими так буфер RX/TX, структура WiFi NVS и т. д, после чего инициализируем WiFi данными настройками
Объявим глобальный указатель на контейнер с информацией об интерфейсе
В функции net_start вызовем функцию wifi_start присвоив указатель на контейнер нашему указателю
В функции wifi_start объявим указатель на символьный массив для хранения текстового описания сетевого интерфейса
Объявим переменную типа структуры для хранения свойств интерфейса и проинициализируем её параметрами по умолчанию с помощью специального макроса, а затем текстовое описание дескриптора дополним именем нашего модуля, взятого из массива TAG и присвоим полю обратно
Назначим интерфейсу приоритет
Инициализируем интерфейс WiFi
Освободим память, зарезервированную под символьный массив
Установим обработчики по умолчанию
У нас будет отдельный обработчик для завершения соединения.
Поэтому выше добавим функцию для данного обработчика, а также функцию для обработчика событий получения адреса
Вернемся в функцию wifi_start и зарегистрируем наши обработчики
В качестве хранилища установим память
В файле Kconfig.projbuild внизу добавим пункт для выбора способа сканирования сети
Также добавим пункты для выбора методов сортировки имён точек доступа, установки порога мощности, режима порога и выбора метода шифрования
В конфигураторе выберем тип шифрования
Пункт ESP_MAXIMUM_RETRY можно удалить.
Сохраним конфигурацию и пересоберём проект.
Теперь в файле wifi.c добавим макросы, которые будут зависеть от настроек в конфигураторе
В функции wifi_start объявим и проинициализируем переменную типа структуры для свойств станции
Отобразим попытку подключения в терминале, взяв имя точки доступа из поля структуры
Установим режим станции, нормальный режим работы WiFI без энергосбережения и применим конфигурационные установки для нашей станции
Запустим станцию, попытаемся соединиться с точкой доступа и возвратим интерфейс
В функции-обработчике on_got_ip получим указатель на структуру события
Выше добавим функцию, которая будет узнавать тип интерфейса
Вернемся в функцию on_got_ip и отобразим в терминале имя интерфейса, и, если это интерфейс типа IPV4, то отобразим и адрес
Объявим глобальный указатель на сетевой адрес
Вернемся в функцию on_got_ip , скопируем информацию в нашу переменную из поля структуры, зажжем светодиод и отдадим семафор
В функции-обработчике on_wifi_disconnect погасим светодиод и выведем о попытке разрыва соединения соответствующее сообщение в терминал
Попытаемся заново соединиться с точкой доступа, если невозможно, то выйдем из функции, в другом случае отобразим код ошибки, вдруг у нас какая-то другая ошибка
В функции net_start увеличим количество интерфейсов на 1
И здесь же мы создаём счётный семафор с количеством элементов, равным количеству интерфейсов
Теперь займёмся остановкой интерфейса, для чего выше добавим ещё одну функцию
Также ещё выше добавим функцию, которая будет вычислять интерфейс по имени
Здесь всё просто и объяснений, я думаю, никаких не требуется.
Вернёмся в функцию wifi_stop и получим наш интерфейс
Разрегистрируем обработчики событий
Попытаемся остановить WiFi
ESP8266 Урок 21. FreeRTOS. Wi-Fi. Режим STA
Продолжаем учиться писать код для микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS.
На данном уроке мы попробуем создать соединение по Wi-Fi в режиме STA (станции), то есть соединиться с готовой точкой доступа для передачи данных по беспроводной сети.
С таким режимом мы уже работали в уроке 14, но только без использования операционной системы, в автономном режиме.
А с использованием операционной системы работа с таким режимом несколько отличается, так как нам нужно учитывать определённые требования FREERTOS, а также работу мы ведём с использованием другого комплекта SDK.
Схема у нас остаётся прежней — отладочная плата, подключенная к USB компьютера
А проект мы за основу возьмём из урока 19 с именем UART_TX_RTOS и дадим ему имя WIFI_STA_RTOS.
Откроем наш проект в Eclipse и первым делом в файле main.c исправим в функции user_rf_cal_sector_set вот эту циферку
rf_cal_sec = 128 — 5;
Удалим объявление структуры с переменными
В функции user_init удалим инициализацию переменных и создание двух задач
dt1. del = 1000; dt1. num_task = 1;
dt2. del = 900; dt2. num_task = 2;
xTaskCreate(task1, «task1» , 256, ( void *) &dt1, 1, NULL);
xTaskCreate(task1, «task2» , 256, ( void *) &dt2, 1, NULL);
Вместо этого произведём инициализацию ножки, к которой подключен синий светодиод, и создадим задачу без параметров