Sta что это в роутере

From Wikipedia, the free encyclopedia

In IEEE 802.11 (Wi-Fi) terminology, a station (abbreviated as STA) is a device that has the capability to use the 802.11 protocol. For example, a station may be a laptop, a desktop PC, PDA, access point or Wi-Fi phone. An STA may be fixed, mobile or portable. Generally, in wireless networking terminology, a station, a wireless client and a node are often used interchangeably, with no strict distinction existing between these terms. A station may also be referred to as a transmitter or receiver based on its transmission characteristics. IEEE 802.11-2007 formally defines station as: Any device that contains an IEEE 802.11-conformant media access control (MAC) and physical layer (PHY) interface to the wireless medium (WM).

See also[edit]

  • Basic Service Set
  • Service set identifier

External links[edit]

  • Standards document IEEE 802.11-2020

Подробное объяснение режима работы 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

Ну вот, наконец-то, дошли мы до той темы, к которой стремились и ради чего начинался цикл уроков по контроллерам ESP8266 — это приём и передача данных при помощи возможностей ESP8266 по беспроводной сети Wi-Fi.

Я думаю, что все знают, что это за тип сети и для чего она применяется.

Напомню лишь, что Wi-Fi — это протокол передачи данных, осуществляемой без применения проводов, физического уровня.

Как именно передаются данные по сети и как они подготавливаются, как заворачиваются в протоколы различного уровня, мы также очень хорошо знаем. Кто не помнит, напомню — смотрите уроки 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52 по программированию контроллеров AVR, а также аналогичные уроки по контроллерам STM32. В данных уроках мы очень подробно рассмотрели многие протоколы всех уровней модели OSI. Те же самые протоколы будут использоваться и здесь, причём нам особо не придётся их программировать вручную, но знать, как они устроены, для чего нужны, мы обязаны, чтобы избежать ошибок при передаче данных, а также, если они и возникнут, то оперативно их устранить. И рассмотренных нами протоколов нам не потребуется протокол физического уровня Ethernet, его заменит протокол Wi-Fi.

Мы пока подробно не будем изучать протокол Wi-Fi, так как с ним работает наш контроллер аппаратно, но режимы работы мы должны знать. И знакомится с их разновидностями мы будем постепенно.

А пока мы должны знать, что наш контроллер ESP8266 поддерживает три основных режима работы — станция (Station mode или кратко STA), программная точка доступа (SoftAP), а также смешанный — Station + SoftAP.

Самым простым из этих режимов является первый — режим станции.

Режим станции (STA) — это такой режим, в котором контроллер не создает собственную сеть, а подключается к любой существующей сети Wi-Fi, например, к существующей локальной сети или к другому устройству, работающему в режиме точки доступа (AP).

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

Пока воспользуемся возможностями SDK, то есть не будем лезть глубоко в дебри аппаратной части. Всему своё время.

Схема у нас будет простейшая — отладочная плата, подключенная к USB компьютера

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

Проект наш выполнен из проекта прошлого урока с именем OS_TIMER и назван WIFI_STA.

Откроем наш проект в Eclipse и в файле main.c подключим библиотеку для работы с UART

#include «gpio.h»

#include «driver/uart.h»

В функции user_init сконфигурируем UART

void ICACHE_FLASH_ATTR user_init()

{

  // Configure the UART

  uart_init(BIT_RATE_115200, BIT_RATE_115200);

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

  gpio_output_set(0, 0, (1 << LED), 0);

  ets_delay_us(100000);

  os_printf(«\r\n»);

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

  os_printf(«\r\n»);

  wifi_set_opmode_current(STATION_MODE);

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

static uint8_t led_state=0;

//——————————————————

static void ICACHE_FLASH_ATTR wifi_check_ip(void *arg)

{

}

//——————————————————

А подобную функцию для обработки событий от программного таймера с именем timer_func_user удалим вместе с телом.

В функции user_init() в функции инициализации программного таймера, соответственно, изменим имя функции в параметре

os_timer_setfn(&os_timer01, (os_timer_func_t *)wifi_check_ip, NULL);

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

os_timer_arm(&os_timer01, 1000, 0);

Добавим локальную переменную структуры для настроек Wi-Fi соединения

void ICACHE_FLASH_ATTR user_init()

{

  struct station_config stationConf;

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

  wifi_set_opmode_current(STATION_MODE);

  os_memset(&stationConf, 0, sizeof(struct station_config));

В файле user_config.h добавим логин и пароль для соединения с точкой доступа

#define __USER_CONFIG_H__

//———————————————————-

#define WIFI_CLIENTSSID   «ASUS444»

#define WIFI_CLIENTPASSWORD «12345678»

//———————————————————-

У вас, соответственно, данные будут свои, я также ввожу временные данные, затем я их из соображений безопасности опять изменю.

В функции user_init() файла main.c занесём наши настройки в поля структуры

  os_memset(&stationConf, 0, sizeof(struct station_config));

  os_sprintf(stationConf.ssid, «%s», WIFI_CLIENTSSID);

  os_sprintf(stationConf.password, «%s», WIFI_CLIENTPASSWORD);

Применим данные настройки с помощью функции SDK

  os_sprintf(stationConf.password, «%s», WIFI_CLIENTPASSWORD);

  wifi_station_set_config_current(&stationConf);

Мы должны помнить, что данные настройки применятся только на время действия нашей программы, в память FLASH они не пропишутся, для этого есть уже другая функция.

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

  os_timer_arm(&os_timer01, 1000, 0);

  wifi_station_connect();

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

static uint8_t led_state=0;

static uint8_t wifiStatus = STATION_IDLE;

static uint8_t connectStatus = 0;

В функции wifi_check_ip добавим переменную структуры соединения сетевого уровня

static void ICACHE_FLASH_ATTR wifi_check_ip(void *arg)

{

  struct ip_info ipConfig;

Произведём деинициализацию таймера

  struct ip_info ipConfig;

  os_timer_disarm(&os_timer01);

Узнаем состояние соединения с точкой доступа

  os_timer_disarm(&os_timer01);

  wifiStatus = wifi_station_get_connect_status();

Если состояние будет указывать на то, что IP-адрес получен, а также сетевой адрес ненулевой, то проинициализируем и запустим таймер, только с интервалом в 2 секунды и вывеем соответствующее сообщение в терминальную программу. Также у наше условие будет иметь и противный случай

  wifiStatus = wifi_station_get_connect_status();

  if (wifiStatus == 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);

    os_printf(«STATION WIFI CONNECTED\r\n»);

  }

  else

  {

  }

Начнём обрабатывать противный случай. В нем будет несколько условных конструкций.

Если пароль не совпал, то выведем соответствующее сообщение в терминальную программу и попытаемся соединиться повторно

  else

  {

    if(wifi_station_get_connect_status() == STATION_WRONG_PASSWORD)

    {

      os_printf(«STATION_WRONG_PASSWORD\r\n»);

      wifi_station_connect();

    }

Подобным образом поступим, если не будет найдена точка доступа

      wifi_station_connect();

    }

    else if(wifi_station_get_connect_status() == STATION_NO_AP_FOUND)

    {

      os_printf(«STATION_NO_AP_FOUND\r\n»);

      wifi_station_connect();

    }

То же самое проделаем при неудачном соединении

      wifi_station_connect();

    }

    else if(wifi_station_get_connect_status() == STATION_CONNECT_FAIL)

    {

      os_printf(«STATION_CONNECT_FAIL\r\n»);

      wifi_station_connect();

    }

В другом случае, не относящемся к вышеперечисленным установим переменной величину, соответствующую состоянию покоя

      wifi_station_connect();

    }

    else

    {

      os_printf(«STATION_IDLE\r\n»);

    }

Не выходя из тела противного состояния верхнего уровня, проинициализируем наш таймер и запустим его, установив период в полсекунды

      os_printf(«STATION_IDLE\r\n»);

    }

    os_timer_setfn(&os_timer01, (os_timer_func_t *)wifi_check_ip, NULL);

    os_timer_arm(&os_timer01, 500, 0);

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

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

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

    os_timer_arm(&os_timer01, 2000, 0);

    if(connectStatus == 0)

    {

      os_printf(«STATION WIFI CONNECTED\r\n»);

      connectStatus = 1;

    }

А в противном случае мы изменим состояние ножки, к которой подключен светодиод

      connectStatus = 1;

    }

    else

    {

      led_state = (led_state==0) ? 1 : 0;

      GPIO_OUTPUT_SET(LED, led_state);

    }

Также в противном случае верхнего уровня мы обнулим пользовательский статус

      GPIO_OUTPUT_SET(LED, led_state);

    }

  }

  else

  {

    connectStatus = 0;

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

Проверим это

Так и есть — сообщение теперь выводится только один раз, также, думаю, если произойдут какие-то проблемы с соединением, то потом после удачного соединения, у нас также сообщение выведется только один раз. А после вывода сообщения у нас только медленно мигает светодиод, что будет свидетельствовать о наличии соединения в данный момент нашей станции с точкой доступа.

Давайте проверим соединение с помощью пинга

Как видим, всё пингуется и пакеты проходят отлично. Только вот период великоват. Это всё потому, что наш контроллер находится в одном из режимов пониженного энергопотребления.

Давайте исправим данную ситуацию. Для этого в функции user_init() включим режим полноправной работы модуля

  wifi_station_set_config_current(&stationConf);

  wifi_set_sleep_type(NONE_SLEEP_T);

Теперь мы видим, что отклик происходит гораздо быстрее

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

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

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

Исходный код

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

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

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

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

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

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

ESP8266 Wi-Fi. Режим STA (Станция)


Post Views:
19 633

Содержание

Общее описание

Изменение режима работы WiFi

Режим точки доступа «AP» (Access Point)

Режим точки доступа и режим клиента «AP+STA»

Режим клиента «STA» (Station)

Общее описание

Перед настройкой WiFi-сети необходимо выполнить настройку сетевого соединения с модулем (см. «Первое включение»).

ESP-модуль, под управлением программы «Smacont-ESP», может работать в следующих режимах:

«AP» — режим точки доступа (Access Point);

«STA» — режим клиента (Station);

«AP+STA» — одновременно в режиме точки доступа и в режиме клиента.

Примечание

Для обеспечения безопасности и для исключения подключения к устройству, никому не сообщайте пароли администратора, оператора и пароли для доступа к локальной WiFi-сети.

Изменение режима работы WiFi

Изменение режима работы WiFi производится при помощи «Программы Конфигурирования» на вкладке «WiFi».

Smacont. Изменение режима работы WiFi
   
Smacont. Изменение режима работы WiFi

Изменение режима работы WiFi

При нажатии на кнопку «Изменить» в поле «РЕЖИМ РАБОТЫ», будет открыто окно «Изменение режима работы».

В данном окне можно установить следующие параметры:

«Режим» — работы WiFi-сети модуля («AP», «STA», «AP+STA»);

«Номер порта» — номер порта указывается после IP-адреса устройства, например: 192.168.1.250:8080.

   При значении «Номер порта» равном «80», номер порта можно не указывать, например: 192.168.1.250.;

«Режим беспроводной сети»

   802.11b — Tx Power: +20 dBm; Rx Sensitivity: -91 dbm (11 Mbps);

   802.11g — Tx Power: +17 dBm; Rx Sensitivity: -75 dbm (54 Mbps);

   802.11n — Tx Power: +14 dBm; Rx Sensitivity: -72 dbm (MCS7);

«Мощность передачи» — определяет радиус «видимости» устройства.

   Диапазон: max +20.5dBm; min 0dBm.

После изменения необходимых параметров, необходимо нажать на кнопку «Применить», после чего будет выполнена перезагрузка устройства.
Во время применения параметров, устройство временно (1…5 сек.) будет недоступно для подключения.

Изменение режима работы WiFi также доступно при выполнении сценариев.

Smacont. Изменение режима работы WiFi при выполнении сценариев
   
Smacont. Изменение режима работы WiFi при выполнении сценариев
   
Smacont. Изменение режима работы WiFi при выполнении сценариев

Изменение режима работы WiFi при выполнении сценариев

Изменение режима работы WiFi при выполнении сценариев может использоваться, например, для включении режима точки доступа «AP» в случае пропадании связи с роутером при работе устройства в режиме клиента «STA».

Режим точки доступа «AP» (Access Point)

Схема подключения к устройству в режиме точки доступа «AP» (Access Point) показана на рисунке ниже.

Smacont. Подключение к устройству в режиме точки доступа «AP» (Access Point)

Подключение к устройству в режиме точки доступа «AP» (Access Point)

В данном режиме подключение с компьютера (ноутбука, смартфона или планшета) возможно ТОЛЬКО К МОДУЛЮ в качестве клиента.
Устройство СОЗДАСТ ТОЛЬКО СВОЮ ТОЧКУ ДОСТУПА.

Прошивка «Smacont-ESP» позволяет организовать работу автономной сети, где одно устройство сконфигурировано для работы в качестве точки доступа «AP» (роутера), а остальные устройства подключаются к нему в качестве клиентов.
Количество клиентов может находится в диапазоне от 1 до 8-ми.

Smacont. Подключение до 8-ми устройств к модулю в режиме точки доступа

Подключение до 8-ми устройств к модулю в режиме точки доступа

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

Имя, пароль точки доступа модуля, а так же разрешенное количество подключенных клиентов можно изменить при помощи «Программы Конфигурирования».

Smacont. Изменение параметров режима точки доступа
   
Smacont. Изменение параметров режима точки доступа
   
Smacont. Изменение параметров режима точки доступа

Изменение параметров режима точки доступа

Достоинства данного варианта (режим точки доступа «AP»):

• нет необходимости в дополнительном оборудовании (WiFi-роутер);

• повышенная защита от несанкционированного доступа. Реализуется два уровня доступа:

   1 уровень – логин и пароль для точки доступа;

   2 уровень – пароль «Администратора» или «Оператора».

Недостатки данного варианта (режим точки доступа «AP»):

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

При первом включении модуля, устанавливается режим точки доступа «AP» (Access Point).
Модуль создаст точку доступа с именем «SmaCont-XXXX», где «Х» — символы «0-9,a,b,c,d,e,f», сгенерированные случайным образом.
Для работы с модулем, необходимо подключиться к точке доступа «SmaCont-XXXX», используя устройства с поддержкой работы через WiFi-сеть (ноутбук, смартфон, планшет).

После изменения необходимых параметров, необходимо нажать на кнопку «Применить», после чего будет выполнена перезагрузка устройства.
Во время применения параметров, устройство временно (1…5 сек.) будет недоступно для подключения.

Режим точки доступа и режим клиента «AP+STA»

Схема подключения к устройству в режиме «AP+STA» показана на рисунке ниже.

Smacont. Подключение к устройству в режиме точки доступа и режиме клиента «AP+STA»

Подключение к устройству в режиме точки доступа и режиме клиента «AP+STA»

Устройство будет подключаться к заданной точке доступа (к роутеру и т.д.), а также СОЗДАСТ свою точку доступа.

Перевод устройства в режим «AP+STA» осуществляется при помощи «Программы Конфигурирования».

Smacont. Перевод устройства в режим «AP+STA»
   
Smacont. Перевод устройства в режим «AP+STA»
   
Smacont. Перевод устройства в режим «AP+STA»

Smacont. Перевод устройства в режим «AP+STA»
   
Smacont. Перевод устройства в режим «AP+STA»

Перевод устройства в режим «AP+STA»

Назначение параметров в окне «Параметры для подключения к точке доступа (роутеру, другому устройству)»:

«Имя/Логин (SSID)» и «Пароль» — пароль и логин вашего роутера;

«IP-адрес назначается» — режим назначения IP-адрес (ручной или автоматический);

«IP-адрес» — назначаемый IP-адрес устройства в сети. Следует обратить внимание, чтобы данный IP-адрес был свободен в вашей локальной сети;

«IP-адрес шлюза» — IP-адрес точки доступа (роутера), к которому подключается устройство;

«Маска подсети» — маска подсети.

Возможность работы устройства в режиме «AP+STA» позволяет организовать сложные конфигурации WiFi-сетей, например, как показано на рисунке ниже.

Smacont. Вариант создания сложной конфигурации WiFi-сетей

Вариант создания сложной конфигурации WiFi-сетей

Сложные конфигурации WiFi-сетей могут, например, увеличить расстояние между устройствами.

Достоинства варианта работы в режиме «AP+STA»:

• возможность подключения нескольких модулей к одной локальной сети;

• доступ к модулю возможен с любого устройства, подключенного к той же локальной сети, что и модуль;

• возможность синхронизации часов реального времени через интернет.

Недостатки:

• один уровень доступа: пароль «Администратора» или «Оператора». При этом логин и пароль для локальной сети, также можно считать за уровень доступа, но эти параметры могут быть доступны через другие устройства (персональные компьютеры, ноутбуки, планшеты, смартфоны), подключенные к данной локальной сети;

• при сканировании списка доступных WiFi-сетей, данное устройства БУДЕТ показано в списке (актуально при большом количестве устройств в WiFi-сети).

Примечания

1. После изменения необходимых параметров, необходимо нажать на кнопку «Применить», после чего будет выполнена перезагрузка устройства.

2. Во время применения параметров, устройство временно (1…5 сек.) будет недоступно для подключения.

Режим клиента «STA» (Station)

Схема подключения к устройству в режиме клиента «STA» (Station) показана на рисунке ниже.

Smacont. Подключение к устройству в режиме клиента «STA» (Station)

Подключение к устройству в режиме клиента «STA» (Station)

В данном режиме, устройство НЕ БУДЕТ СОЗДАВАТЬ свою точку доступа.
Доступ к устройству возможен только как к клиенту, через точку доступа.

В качестве точки доступа может выступать компьютер (ноутбук, смартфон или планшет).

Smacont. Компьютер (ноутбук, смартфон или планшет) в качестве точки доступа

Компьютер (ноутбук, смартфон или планшет) в качестве точки доступа

Перевод устройства в режим клиента «STA» (Station) осуществляется при помощи «Программы Конфигурирования».

Примечание

Установка режим клиента «STA» (Station) НЕОБХОДИМО осуществлять, предварительно установив режим «AP+STA».
ТОЛЬКО ПОСЛЕ настройки сетевого соединения с точкой доступа (роутером), можно выбрать режим клиента «STA» (Station).

Smacont. Изменение параметров режима клиента
   
Smacont. Изменение параметров режима клиента
   
Smacont. Изменение параметров режима клиента

Изменение параметров режима клиента

Достоинства варианта работы в режиме «STA»:

• возможность подключения нескольких модулей к одной локальной сети;

• доступ к модулю возможен с любого устройства, подключенного к той же локальной сети, что и модуль;

• возможность синхронизации часов реального времени через интернет;

• при сканировании списка доступных WiFi-сетей, не будет данное устройства не будет показано (актуально при большом количестве устройств в WiFi-сети).

Недостатки:

• один уровень доступа: пароль «Администратора» или «Оператора». При этом логин и пароль для локальной сети, также можно считать за уровень доступа, но эти параметры могут быть доступны через другие устройства (персональные компьютеры, ноутбуки, планшеты, смартфоны), подключенные к данной локальной сети.

Примечания

1. Конфигурировать устройство для работы в режиме клиента «STA» следует только после того, как работа устройства отлажена полностью, чтобы исключить возможность, когда к устройству будет невозможно подключиться.

2. При пропадании соединения устройства с роутером в режиме клиента «STA», рекомендуется предусмотреть формирование режима STA+AP с помощью сценариев, чтобы имелась возможность подключения к устройству через его точку доступа.

3. После изменения необходимых параметров, необходимо нажать на кнопку «Применить», после чего будет выполнена перезагрузка устройства.

4. Во время применения параметров, устройство временно (1…5 сек.) будет недоступно для подключения.

With the Arduino ESP8266 library it is possible to get your device to function in both access point (AP) and station (STA) modes simultaneously.

In this article you will learn how to build a simple Arduino project that will get the ESP8266 to function in both AP and STA modes.

If you are primarily interested in access point (AP) mode, you can find a detailed tutorial here that covers AP mode along with handling clients using a simple web server example.

In this tutorial we will expand on the previous tutorial describing how to connect an ESP8266 device to a WiFi network.

As before I will be using a Wemos D1 Mini for the example, however you can use any ESP8266 device that supports the Arduino ESP8266 core.

Table Of Contents

  1. Prerequisite
  2. What is ESP STA and AP mode?
    • What is STA mode in ESP8266?
    • What is AP mode in ESP8266?
    • Combining STA and AP Modes
  3. How To Configure ESP8266 for STA Mode
  4. How To Combine AP Mode and STA Mode on ESP8266
    • Add AP credentials
    • Begin the Access Point
    • Print to the serial console
  5. Completed Code for AP and STA Mode
  6. Additional ESP8266 AP Configuration
    • Network parameters
    • Network interface
    • Managing the network
  7. Conclusion
    • Article Updates

Prerequisite

You will need to have the Arduino IDE installed and configured to flash ESP8266 devices. You will also need an ESP8266-based board, as this will not work with a standard Arduino board.

I would recommend the Wemos D1 Mini due to its compact size and simplicity. It also costs surprisingly little on Amazon, check the latest prices here.

If you are new to the ESP8266 and have not yet programmed it with Arduino, I would recommend that you first read my tutorial on how to configure the Arduino IDE for ESP8266.

What is ESP STA and AP mode?

ESP devices, such as the ESP8266 or ESP32, can operate in different modes depending on their role in a network.

What is STA mode in ESP8266?

In STA mode, the ESP device connects to an existing Wi-Fi network as a client. It behaves similarly to other devices like smartphones or laptops, allowing it to join an established network and communicate with other devices on that network. In this mode, the ESP device can access the internet or interact with other devices connected to the same network.

What is AP mode in ESP8266?

In AP mode, the ESP device functions as a Wi-Fi access point, creating its own network. Other devices, such as smartphones or computers, can connect to this network and communicate directly with the ESP device. This mode is useful when you want the ESP device to act as a central hub, allowing other devices to connect to it and exchange data.

Combining STA and AP Modes

By combining both STA and AP modes, you can create versatile projects where the ESP device connects to an existing network as a client (STA) while simultaneously hosting its own network for other devices to connect to (AP).

This allows for scenarios where the ESP device can act as an intermediary between different networks or facilitate direct communication between devices.

How To Configure ESP8266 for STA Mode

In the previous tutorial we covered how to connect an ESP8266 device to WiFi in station (STA) mode. In this mode the ESP8266 connects to the router as a client.

I won’t cover STA mode in full as I already covered it in the aforementioned tutorial. Therefore we will just take the code from the previous tutorial and begin by adding it to a new project. We will then add AP mode so that the ESP8266 functions in both AP and STA modes.

Ideally you should at least read through the WiFi section of the previous tutorial. However if you wish to skip over it, you can just start by creating a new project in the Arduino IDE and add the following code:

#include <ESP8266WiFi.h>
 
// Set WiFi credentials
#define WIFI_SSID "YOUR WIFI NETWORK SSID"
#define WIFI_PASS "YOUR WIFI PASSWORD"
 
void setup() {
  // Setup serial port
  Serial.begin(115200);
  Serial.println();
 
  // Begin WiFi
  WiFi.begin(WIFI_SSID, WIFI_PASS);
 
  // Connecting to WiFi...
  Serial.print("Connecting to ");
  Serial.print(WIFI_SSID);
  // Loop continuously while WiFi is not connected
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(100);
    Serial.print(".");
  }
 
  // Connected to WiFi
  Serial.println();
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

How To Combine AP Mode and STA Mode on ESP8266

This project will connect your ESP8266 device to a WiFi network called WIFI_SSID using the password WIFI_PASS.

We can expand on the existing code in order to make our ESP8266 device also appear as an access point.

Add AP credentials

First we will define an SSID and password for our access point (AP). These credentials are separate from the credentials we use to connect to the router with STA mode, therefore we will define two new constants:

// Set AP credentials
#define AP_SSID "ESP8266"
#define AP_PASS "magicword"

Add the lines to your project and change the values to any values that you wish to use as the network name (SSID) and password for the AP.

Begin the Access Point

After the code that starts the serial port, found in the setup function, add the following line to start the access point:

  // Begin Access Point
  WiFi.softAP(AP_SSID, AP_PASS);

The function call WiFi.softAP(AP_SSID, AP_PASS) initiates Access Point (AP) mode on an ESP device:

  1. WiFi: This refers to the Wi-Fi library that provides functions and methods to interact with Wi-Fi networks on the ESP device.
  2. softAP: It’s a function from the WiFi library used to set up an Access Point.
  3. AP_SSID: This is a variable representing the name (SSID) of the Wi-Fi network that will be created by the ESP device. You can replace it with a desired name, such as “MyESPAPNetwork.”
  4. AP_PASS: This variable represents the password required to connect to the Wi-Fi network created by the ESP device. You can replace it with a password of your choice, such as “MyPassword123.”

When this line of code is executed, the ESP device will start operating in Access Point (AP) mode. It will create its own Wi-Fi network with the specified SSID and password.

Print to the serial console

Next, we will add some additional commands that print additional information about the access point to the serial terminal. These are the details that you can use to connect to the access point.

  // Connected to WiFi
  Serial.println();
  Serial.println("Connected!");
  Serial.print("IP address for network ");
  Serial.print(WIFI_SSID);
  Serial.print(" : ");
  Serial.println(WiFi.localIP());
  Serial.print("IP address for network ");
  Serial.print(AP_SSID);
  Serial.print(" : ");
  Serial.print(WiFi.softAPIP());

That’s it! Now you can upload the sketch to the ESP8266 open the serial terminal. You should see confirmation that you have successfully connected. Your STA and AP IP addresses will also be displayed.

Completed Code for AP and STA Mode

The following code is the complete code for the AP and STA mode project:

#include <ESP8266WiFi.h>


// Set WiFi credentials
#define WIFI_SSID "YOUR WIFI NETWORK SSID"
#define WIFI_PASS "YOUR WIFI PASSWORD"

// Set AP credentials
#define AP_SSID "ESP8266"
#define AP_PASS "magicword"

void setup()
{
  // Setup serial port
  Serial.begin(115200);
  Serial.println();

  // Begin Access Point
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(AP_SSID, AP_PASS);

  // Begin WiFi
  WiFi.begin(WIFI_SSID, WIFI_PASS);

  // Connecting to WiFi...
  Serial.print("Connecting to ");
  Serial.print(WIFI_SSID);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(100);
    Serial.print(".");
  }

  // Connected to WiFi
  Serial.println();
  Serial.println("Connected!");
  Serial.print("IP address for network ");
  Serial.print(WIFI_SSID);
  Serial.print(" : ");
  Serial.println(WiFi.localIP());
  Serial.print("IP address for network ");
  Serial.print(AP_SSID);
  Serial.print(" : ");
  Serial.print(WiFi.softAPIP());

}

void loop() {
  // put your main code here, to run repeatedly:
 
}

Additional ESP8266 AP Configuration

There are some additional configuration options which we can use if necessary, which may be useful for you depending on your project. These definitions should be included after the definitions for the AP SSID and password.

Network parameters

Firstly we can specify the desired WiFi channel for the access point between 1 and 13.

See line 11:

// Set WiFi channel
#define AP_CHANNEL 1

We can also specify whether or not our network should be hidden. If our network is hidden them we must know the name as well as the password in order to join it.

See line 12:

// Set AP to hidden
#define AP_HIDDEN true

We can also specify the maximum number of clients that can connect. This defaults to 4 and has a maximum of 8.

See line 13:

// Set AP max clients
#define AP_MAX_CON 8

In order to use the additional attributes, we can change our WiFi.softAP command to incorporate all of the parameters. Note that the only required parameter is AP_SSID and everything else is optional.

// Begin Access Point
WiFi.softAP(AP_SSID, AP_PASS, AP_CHANNEL, AP_HIDDEN, AP_MAX_CON);

Network interface

It is also possible to specify the local IP address, gateway and subnet mask. These must be specified using the IPAddress type.

// Set IP addresses
IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);

In order to use the specified IP addresses we must add an additional configuration line before we begin the access point:

// Begin Access Point
WiFi.softAPConfig(local_IP, gateway, subnet);
WiFi.softAP(AP_SSID, AP_PASS, AP_CHANNEL, AP_HIDDEN, AP_MAX_CON);

Managing the network

There are also some additional useful tools within the WiFi library that may be useful in your application.

For example, we can return the number of stations that are connected to the access point with the following.

WiFi.softAPgetStationNum()

In the following code example, WiFi.softAPgetStationNum() is used to fetch the number of clients connected and display it in the serial terminal.

The process is repeated every 5 seconds, each time showing the number of connected clients at the given time.

void loop() {
  // Get the number of devices connected to the AP
  int numDevices = WiFi.softAPgetStationNum();

  // Print the number of connected devices
  Serial.print("Number of connected devices: ");
  Serial.println(numDevices);

  // Delay for a few seconds before checking again
  delay(5000);
}

We can also disconnect the ESP device from its Access Point (AP) network using the following command:

WiFi.softAPdisconnect(wifioff)

It is also possible to fetch the MAC address from memory. This is done by creating a 6 element uint8_t and using the function to save the value of the MAC address into this variable.

uint8_t macAddr[6];
WiFi.softAPmacAddress(macAddr);
Serial.printf("MAC address = %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);

Conclusion

This tutorial builds upon the fundamentals of ESP8266 station configuration and introduces the capability to create an access point. With the ESP8266 Arduino library, incorporating both station (STA) and access point (AP) modes into your project becomes effortless.

This powerful tool is invaluable for makers, offering a seamless integration of these functionalities. By following the topics covered in this tutorial, you will gain the necessary knowledge to incorporate STA and/or AP modes into your project successfully!

Why not go ahead and check out some more of my ESP8266 device tutorials!

Article Updates

July 6th 2023 : Frequently asked questions added. Codeblocks edited for clarity. Additional explanation of code lines added. Featured image updated.

Article first published March 23rd 2020.

Thanks so much for visiting my site! If this article helped you achieve your goal and you want to say thanks, you can now support my work by buying me a coffee. I promise I won’t spend it on beer instead… 😏

  • Status yota ru настройка устройства wi fi роутера
  • Snr nag ru настройка роутера
  • Status yota ru личный кабинет настройка роутера
  • Sstp vpn сервер на роутере
  • Speed на роутере горит красным