Esp8266 сканирование доступных wi fi сетей

Обновлено: 03.07.2024

Чтобы подключить мобильный телефон к точке доступа, вы, как правило, открываете меню WiFi, находите список доступных точек и затем выбираете ту, что вам нужна. Данная статья рассказывает, как проделать то же самое при помощи ESP8266.

Простое сканирование

Этот пример показывает минимум кода, необходимый для поиска доступных сетей.

Отключение

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

Функция disconnect() разорвет соединение с точкой доступа, которое модуль автоматически установил, используя данные, сохраненные в прошлый раз.

Сканирование сетей

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

Теперь просто проверяем значение в переменной n. Если оно больше нуля, выводим список доступных сетей:

В общем, ничего сложного.

Пример целиком

В верхней части этого скетча обязательно должна быть строчка

Целиком это выглядит следующим образом:

Пример в действии

Загрузите этот скетч на ESP8266 и откройте монитор порта. Если вокруг ESP8266 есть какие-то точки доступа, в мониторе порта начнет появляться повторяющаяся запись вроде этой:

Но решение есть. Можно воспользоваться асинхронным режимом сканирования, о котором рассказывается в разделе ниже. В нем также рассказывается, как печатать не только SSID, но и другие параметры доступных сетей.

Асинхронное сканирование

В этом скетче мы запустим процесс сканирования, а затем вернемся к выполнению кода в блоке loop(). Когда сканирование завершится, мы выверим время и проверим, удалось ли найти какие-нибудь WiFi-сети. «Критически важный процесс» будет симулирован миганием светодиода 4 раза в секунду. Необходимо, чтобы процесс сканирования не нарушал паттерн мигания светодиода.

Без delay()

Чтобы реализовать такой функционал, мы должны отказаться от функции delay() внутри блока loop(). Вместо этого мы зададим период, запускающий определенное действие. Затем внутри блока loop() поставим функцию millis(), при помощи которой будет проверяться, истек ли заданный период, и если истек, то запустим нужное действие. Аналогичную технику можно применить для периодического сканирования WiFi-сетей.

Исходные настройки

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

Когда начать

Внутри блока loop() проверяем, истек ли период SCAN_PERIOD, чтобы знать, нужно ли запустить следующее сканирование:

Обратите внимание, что функция WiFi.scanNetworks(true) имеет дополнительный параметр true, которого не было в примере выше. Этот параметр активирует сканирование в асинхронном режиме, т.е. запускает процесс сканирования, не дожидаясь результата (обработка будет выполняться в фоновом режиме) и сразу переходя к следующей строчке кода. Асинхронный режим необходим, иначе 250-миллисекундный паттерн будет нарушен, т.к. сканирование занимает больше 250 мс.

Проверяем, выполнено ли сканирование

Наконец, нам нужно периодически проверять, завершился ли процесс сканирования, чтобы знать, пора ли печатать результаты. Для этого нам понадобится функция WiFi.scanComplete(), которая после завершения сканирования возвращает количество найденных сетей. Если сканирование по-прежнему в процессе, она вернет «-1», а если сканирование еще даже не было запущено, то «-2».

Обратите внимание, что функция WiFi.scanDelete() удаляет результаты сканирования из памяти, поэтому результаты не будут печататься в мониторе порта с каждым проходом через цикл loop().

Пример целиком

Ниже – полая версия скетча. Код внутри блока setup() описан в предыдущем примере, за исключением дополнительной функции pinMode(), которая настраивает контакт светодиода на вывод данных.

Пример в действии

Загрузите этот скетч на ESP8266 и откройте монитор порта. В мониторе порта должна появиться примерно такая запись:

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

Итого

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

О функциях для сканирования WiFi-сетей модулем ESP8266 читайте в [ссылка этой статье].


Сканер WiFi каналов очень полезен в некоторых ситуациях:

Шаг 2: Подготовка











Прозрачный корпус

Упаковка от Тик Така хорошо подойдёт для наших нужд. Но помните, что она может быть разных размеров, особенно если вы покупаете её в разное время и в разных странах. Какие-то подойдут для экранов 2.2 дюйма, а некоторые могут вместить экраны на 2.4 дюйма.

Экран LCD

Любой ili9341 LCD, который влезет в коробку Тик Така, должен работать без проблем, в этом проекте я использую TM022HDH26

Батарейка

Любая LiPo батарейка, размером меньше экрана должна подойти. По моим измерениям, схема иногда потребляет более 200mA. Для того, чтобы схема не потребляла ток более 1C, я рекомендую использовать батарею объемом более 200mAh.

Плата зарядки

Подойдёт любая зарядная плата, совместимая с вашей батарейкой.

Плата ESP

Любая плата ESP8266 с пином SPI должна хорошо подойти. В этом проекте используется ESP-12.

Регулятор 3V3

Я использую HT7333-A. (AMS1117 не рекомендуется, так как потребляет слишком много тока).

Транзистор PNP

Любой стандартный транзистор PNP, например SS8550.

Разная мелочь

3 резистора на 10K, конденсатор на 470uf и на 100nf, кнопка для перезарузки платы ESP, немного проводов для соединения модулей и колечко для того, чтобы сделать из прибора белок.

Шаг 3: Программируем плату ESP8266


Рекомендую программировать плату ESP8266 до того, как припаяете её к другим компонентам. Код можно скачать здесь: ссылка

Скомпилируйте и прошейте ESP2866 при помощи софта Ардуино.

Шаг 4: Доработка футляра



Доработайте футляр так, чтобы дисплей поместился в него.

Просверлите пару отверстий для кольца брелока.

Шаг 5: Забота о батарейке



ESP-12 и HT7333-A могут быть собраны в хорошую энергосберегающую схему. После нажатия кнопки включения, анализатор сканирует пространство 5 раз, а затем переходит в режим глубокой спячки. Просто нажмите ресет и он включится заново. Предположим, что однократное сканирование потребляет 1,1 mAh, ежедневное пятикратное сканирование и режим глубокого сна в течение часа потребляет 0,31 мАч, тогда батарейки на 400 mAh хватит на месяц:
400 mAh / (5 x 1.1 mAh + 24 x 0.31 mAh)

Шаг 6: Спаиваем компоненты










Дважды проверьте ваш LCD на соответствие пинов. Вот сводка по соединению:

Шаг 7: Поместите всё в корпус




Шаг 8: Прикрепите кольцо брелока


Шаг 9: Сканируйте!


Пришло время показать вашу работу друзьям!

Шаг 10: Тестирование



После нескольких недель использования я могу подытожить:

  1. Батарейка на 500mAh может работать больше 3 недель
  2. Корпуса от Тик Така достаточно, чтобы защитить девайс от тряски, падения с высоты 70 см и нагрузки примерно в 10 кг.
  3. Также корпус может защитить электронику от небольшого количества влаги.

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.


Модуль ESP-01 с чипом ESP8266 предназначен для связи устройства с беспроводными сетями по WiFi.

Видеообзор

Общие сведения

ESP-01 — плата-модуль WiFi на базе популярного чипсета ESP8266EX . На борту платы находится микросхема Flash-памяти объёмом 2 МБ, чип ESP8266EX, кварцевый резонатор, два индикаторных светодиода и миниатюрная антенна из дорожки на верхнем слое печатной платы в виде змейки. Flash-память необходима для хранения программного обеспечения. При каждом включении питания, ПО автоматически загружается в чип ESP8266EX.

По умолчанию модуль настроен на работу через «AT-команды». Управляющая плата посылает команды — Wi-Fi модуль выполняет соответствующую операцию.

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

Работа с AT командами

Подключение и настройка

В стандартной прошивке Wi-Fi модуль общается с управляющей платой через «AT-команды» по протоколу UART.

На всех платах Iskra и Arduino присутствует хотя бы один аппаратный UART — HardwareSerial. Если же по каким то причинам он занят другим устройством, можно воспользоваться программным UART — SoftwareSerial.

HardwareSerial

На управляющей плате Iskra JS и платах Arduino с микроконтроллером ATmega32U4 / ATSAMD21G18 данные по USB и общение через пины 0 и 1 осуществляется через два раздельных UART . Это даёт возможность подключить Wi-Fi модуль к аппаратному UART на пинах 0 и 1 .

Список поддерживаемых плат:


Для примера подключим модуль Wi-Fi к платформе Iskra Neo.

Прошейте управляющую платформу кодом ниже.

Код прошивки

SoftwareSerial

Некоторые платы Arduino, например Uno, прошиваются через пины 0 и 1 . Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с Wi-Fi модулем. Решение проблемы — программный UART . Подключите пины TX и RX ESP-модуля к другим контактам управляющей платы и используйте библиотеку SoftwareSerial.


Для примера подключим управляющие пины Wi-Fi модуля TX и RX — на 8 и 9 контакты управляющей платы. Прошейте управляющую платформу кодом ниже.

Код прошивки

HardwareSerial Mega

На платах форм-фактора Arduino Mega 2560 аппаратный UART, который отвечает за передачу данных через пины 1 и 0 , отвечает также за передачу по USB. Это означает невозможность использовать одновременно UART для коммуникации с Wi-Fi модулем и отладки по USB.

Но на платах такого форм-фактора есть ещё дополнительно три аппаратных UART:

Список поддерживаемых плат:


Подключите Wi-Fi модуль к объекту Serial1 на пины 18 и 19 на примере платы Mega 2560 Прошейте управляющую платформу кодом ниже.

Код прошивки

Примеры работы

Рассмотрим несколько примеров по работе с «AT-командами»

Тестовая команда «AT»

Настройка режима работы

Wi-Fi модуль умеет работать в трёх режимах:

Переведём чип в смешанный режим командой:

После установки модуль должен ответить «OK»:


В отличии от аппаратного UART (HardwareSerial), за работу программного UART (SoftwareSerial) отвечает микроконтроллер, который назначает другие пины в режим работы RX и TX , соответственно и данные которые приходят от Wi-Fi модуля обрабатывает сам микроконтроллер во время программы. По умолчанию скорость общения Troyka Wi-Fi равна 115200 , что значительно выше чем позволяет библиотека SoftwareSerial. В итоге часть информации которая приходит с Wi-Fi модуля будет утеряна. Если вы используете плату с HardwareSerial подключением модуля можете пропустить пункт настройки скорости и сразу перейти к дальнейшей работе с модулем.

AT установка скорости общения

Для корректной работы с большими объемами необходимо понизить скорость соединения модуля и микроконтроллера. Для этого используйте «AT-команду»:

После проделанной операции, измените скорость программного UART в скетче программы и прошейте плату.

По итогу программный UART успеет обработать каждый пришедший байт с Wi-Fi модуля.

AT сканирование WI-FI сетей

Откройте Serial-порт и отправьте на модуль «AT-команду» для сканирования всех доступных Wi-Fi сетей:


Для продолжение работы используйте перечень «AT-команд»

Wi-Fi модуль как самостоятельный контроллер

ESP-01 (ESP8266) — очень умный модуль. Внутри чипа прячется целый микроконтроллер, который можно программировать на языке C++ через Arduino IDE и JavaScript через Espruino Web IDE .

Настройка железа

Ввиду отсутствия у платформы ESP-01 собственного USB-порта, понижающего преобразователя и отсутствия толерантности к 5 вольтам, подключите её к компьютеру, используя один из перечисленных способов:

Схема через Arduino Uno

Для сборки программатора понадобится:


Соберите схему, представленную ниже.

Необходимо каждый раз выполнять перед прошивкой модуля.

Притяните пин 0 к 3.3V — фиолетовый провод через резистор к питанию.

Схема через USB-Serial адаптер

Для сборки программатора понадобится:


Соберите схему, представленную ниже.

Необходимо каждый раз выполнять перед прошивкой модуля.

Притяните пин 0 к 3.3V — фиолетовый провод через резистор к питанию.

Программирование на C++


Для начала работы с платформой ESP на языке C++ скачайте и установите на компьютер интегрированную среду разработки Arduino IDE. По умолчанию среда программирования настроена только на AVR-платы. Для платформы ESP-01 добавьте в менеджере плат поддержку платформ на модуле ESP8266.


В пункте меню Инструменты Плата выбирайте Generic ESP8266 Module .

После выполненных действий модуль ESP-01 готов к программированию через Arduino IDE.

Подробности о функциях и методах работы ESP-01 (ESP8266) на языке C++ читайте на ESP8266 Arduino Cores.

Программирование на JavaScript


Для старта с платформой ESP-01 на языке JavaScript скачайте и установите интегрированную среду разработки Espruino Web IDE.

После выполненных действий модуль ESP-01 готов к программированию через Espruino Web IDE.

Подробнее о функциях и методах работы ESP8266 на языке JavaScript читайте на Espruino.

Восстановление стандартной АТ-прошивки

После программирования платформы в режиме самостоятельного контроллера может понадобиться восстановить на модуле стандартную AT-прошивку. Для этого необходимо воспользоваться утилитой Flash Download Tool.

Элементы платы


Чип ESP8266EX

Чип ESP8266 — выполнен по технологии SoC (англ. System-on-a-Chip — система на кристалле). В основе кристалла входит процессор семейства Xtensa — 32-х битный Tensilica L106 с частой 80 МГц с ультранизким энергопотреблением, радиочастотный трансивер с физическим уровнем WiFi IEEE 802.11 b/g/ и блоки памяти SRAM. Мощности процессорного ядра хватает для работы сложных пользовательских приложений и цифровой сигнальной обработки.

Программное приложение пользователя должно храниться на внешней микросхеме Flash-памяти и загружаться в ESP8266EX через один из доступных интерфейсов (SPI, UART, SDIO и др.) каждый раз в момент включения питания системы.

Чип ESP8266 не содержит в себе Flash-память и многих других компонентов для пользовательского старта. Микросхема является основой на базе которой выпускаются модули с необходимой периферией, например ESP-01.

Светодиодная индикация

Имя светодиода Назначение
LED Индикаторный светодиод подключённый к цифровому пину 1
POWER Индикатор питание на модуле

Распиновка


Пины питания

3.3V: Вывод питания модуля. Потребляемый ток не менее 250 мА.

Пины ввода/вывода

В отличии от большинства плат Arduino, родным напряжением платформы ESP-01 является 3,3 В, а не 5 В. Выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Большее напряжение может повредить модуль!

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

Начиная свое знакомство с микроконтроллером ESP8266, первым делом захочется подключиться к Wi-Fi и попробовать сетевые возможности данного микроконтроллера. Для работы с Wi-Fi в NodeMCU существует специальный модуль, который так и называется WiFi module. Данный модуль позволяет устанавливать различные режимы работы и настраивать подключения к Wi-Fi сети.

Существует три режима работы Wi-Fi в ESP8266

  1. Клиент. (STA)
  2. Точка доступа. (AP)
  3. Совмещенный режим. (STA + AP)
  4. Wi-Fi выключен.

Клиент

1

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

Точка доступа

2

В режиме точки доступа, ESP8266 создает свою собственную сеть, к которой могут присоединиться другие устройства (телефон, ПК и т.д). Максимальное количество устройств, которые могут быть одновременно подключены - пять. Данный режим часто используется как промежуточный этап перед подключением ESP8266 к WiFi в режиме клиента. Например, для первоначальной настройки.

Если пароль не указывать, то будет создана открытая точка. При подключении, ESP8266 по умолчании выдается ip адрес 192.168.4.1, а клиенту 192.168.4.2

Совмещенный режим

12121

Совмешенный режим Station + AP, когда ESP8266 создает свою собственную сеть и одновременно подключается к другой сети.

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

События

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

Например, если ваш скрипт передает данные на сервер, то пока подключение с сетью не будет установлено, нет смысла запускать ваш скрипт раньше.

Событие вызывается каждый раз при подключении или отключении от сети (в зависимости на какое событие вы подписались), это нужно учитывать в вашем коде.

Поиск сетей

Чтобы иметь возможность сканировать доступные сети, в модули существует функция wifi.sta.getap(), но доступ к этой функция есть только в режиме клиента или совмещенный. При попытки запустить ее из режима точки доступа, выдаст ошибку с предупреждением.

Сегодня я постарался написать об основных функциях которые потребуются для работы ESP8266 с Wi-Fi сетями, о других возможностях Wi-Fi модуля можно узнать если внимательно изучить документацию.

Читайте также: