Программирование esp8266 в arduino ide «по воздуху» (ota, over the air)

Library — ESP8266WiFi (SSL/TLS)

  • Update to latest BearSSL w/EC25519 fix ()
  • fix compilation error — can’t find axTLS::WiFiServerSecure ()
  • Don’t clear authentication options on a ::stop ()
  • Remove obsolete BSSL debug print routines ()
  • Deprecate axTLS, update examples ()
  • Move BearSSLHelpers into BearSSL namespace ()
  • Patch axTLS CVEs and fix CA verification ()
  • Add warning when no authenticator, drop verify() ()
  • Add BearSSL::setFingerprint(char* fp) ()
  • Really free stack after last BearSSL obj destroyed ()
  • Move BearSSL _cipher* init to _clear() for consistency ()
  • Clear cipher list on server creation, fix crash ()
  • Move BearSSL from STACK_PROXY to a real, thunked 2nd stack ()
  • Add SSL Session capability to speed reconnections ()
  • Allow cipher specification for BearSSL ()
  • Move SSLContext to its own header ()
  • Update axTLS to e634adf ()
  • Fix connection options and update github pubkey ()
  • Add WiFiClient parameter to HTTPClient ()

Установка ядра ESP8266 на ОС Windows

Давайте приступим к установке ядра ESP8266 Arduino.

Во-первых, на вашем компьютере должна быть установлена последняя версия Arduino IDE (Arduino 1.6.4 или выше). Если у вас ее нет, рекомендуем сейчас обновиться.

Для начала нам нужно обновить менеджер плат с помощью пользовательского URL. Откройте Arduino IDE и выберите Файл → Настройки. Затем скопируйте приведенный ниже URL в текстовое поле Дополнительные ссылки для менеджера плат, расположенное в нижней части окна:

Рисунок 7 – Установка платы ESP8266 в Arduino IDE с помощью json URL

Отлично. Затем перейдите к Менеджеру плат, выбрав Инструменты → Платы → Менеджер плат. Там, в дополнение к стандартным платам Arduino, должна быть пара новых записей. Отфильтруйте результаты поиска, введя esp8266. Нажмите на эту запись и выберите Установить.

Рисунок 8 – Установка ядра ESP8266 в менеджере плат Arduino IDE

Определения и инструменты для платы ESP8266 включают в себя полностью новый набор gcc, g++ и других достаточно больших скомпилированных двоичных файлов, поэтому загрузка и установка могут занять несколько минут (заархивированный файл весит ~110 МБ). После завершения установки рядом с записью появится надпись INSTALLED. Теперь можно закрыть менеджер плат.

Network (Core, Library/ESP8266WiFi)

  • lwip2: no more git sub-sub-module deps, faster checksum, backlog limitation and other fixes ()
  • Fix/enable UDP packet reassembly (, )
  • SNTP: backport espressif sntp api for lwip2 ()
  • TCP: fixes backlog limit handling, and allows ephemeral TCP connections ()
  • lwip2 update: stop dhcp when interface goes down ()
  • Fix UDP send to IPv6 link local addresses ()
  • Fix TCP send to IPv6 link local addresses ()
  • Updating _port to really used port and made _port accessible ()
  • Make DNS resolution order selectable during runtime or compile time ()
  • WiFi: ARP gratuitous API for wifi station mode (, )
  • fix null pointer call from WiFiClient::localIP() to IPAddress ()

Шаг 7. Подключитесь с мобильного приложения.

Установите мобильное приложение на ваш смартфон/планшет.

Примечание: В приложении для iOS перед подключением необходимо вручную подключить смартфон к точке доступа, используя системные настройки операционной системы. Приложение для Android умеет самостоятельно переключить систему на точку доступа устройства и вернуть предыдущую точку доступа после отключения.

В приложении нажмите кнопку нового подключения «+» в верхней панели. В открывшемся окне выберите подключение «WiFi точка доступа».

В приложении для iOS предварительно зайдите в системные настройки и подключитесь к точке доступа «RemoteXY» с паролем «12345678». Подключенная точка доступа должна отображаться в открывшемся окне. Нажмите кнопку «Connect».

В приложении для Android включите WiFi и нажмите кнопку обновления списка доступных точек доступа. Выберите точку доступа RemoteXY. В открывшемся окне введите пароль точки доступа «12345678», нажмите кнопку «Подключиться».

Подключение

Переключение ESP8266 в режим станции выполняется при помощи функции begin(). Параметрами для этой функции служат SSID и пароль к ней, чтобы чип можно было подключить к определенной точке доступа.

WiFi.begin(ssid, password)

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

begin()

В библиотеке ESP8266WiFi представлено несколько вариантов функции begin(). Процесс совмещения нескольких функций в одной называют «перегрузкой функции». Один вариант был показан выше – это WiFi.begin(ssid, password). Перегрузка дает гибкость в количестве и типе параметров, задаваемых в функции.

Самый простой вариант функции begin() – это…

WiFi.begin()

Вызов этой функции скомандует ESP8266 переключиться в режим станции и подключиться к последней использованной точке доступа на основе данных, сохраненных во flash-памяти.

Ниже – синтаксис еще одного варианта функции begin() со всеми возможными параметрами:

WiFi.begin(ssid, password, channel, bssid, connect)

Параметр ssid – символьная строка, содержащая SSID точки доступа, к которой мы хотим подключиться (может содержать не более 32 символов). Параметр password – это пароль к точке доступа в виде символьной строки, которая может содержать от 8 до 64 символов. Параметр channel – канал точки доступа; на тот случай, если вы хотите работать через специальный канал (в противном случае этот параметр нужно проигнорировать). Параметр bssid – MAC-адрес точки доступа (тоже опционально). Параметр connect – это параметр с булевым значением; если задать в нем false, это скомандует модулю сохранить другие параметры, не подключаясь к точке доступа.

config()

Отключает DHCP-клиент (от «dynamic host configuration protocol», что значит «протокол динамической настройки узла») и выставляет IP-настройки станции на пользовательские значения. Эти IP-настройки, в отличие от настроек DHCP, будут статическими.

WiFi.config(local_ip, gateway, subnet, dns1, dns2)

При успешном изменении настроек функция вернет true. Если настройки задать нельзя (например, если чип не переключен в режим станции или станции + точки доступа), функция вернет false.

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

  • local_ip – IP-адрес для стационарного интерфейса ESP8266
  • gateway – IP-адрес шлюза (роутера) для доступа к внешним сетям
  • subnet – маска подсети, диапазон IP-адресов в локальной сети
  • dns1, dns2 – опциональные параметры для IP-адресов DNS-серверов, которые хранят директории доменных имен (вроде www.google.co.uk) и преобразовывают их в IP-адреса

Пример:

 1 #include <ESP8266WiFi.h>
 2 
 3 const char* ssid = "********";
 4 const char* password = "********";
 5 
 6 IPAddress staticIP(192,168,1,22);
 7 IPAddress gateway(192,168,1,9);
 8 IPAddress subnet(255,255,255,);
 9 
10 void setup(void)
11 {
12   Serial.begin(115200);
13   Serial.println();
14 
15   Serial.printf("Connecting to %s\n", ssid);     //  "Подключение к "
16   WiFi.begin(ssid, password);
17   WiFi.config(staticIP, gateway, subnet);
18   while (WiFi.status() != WL_CONNECTED)
19   {
20     delay(500);
21     Serial.print(".");
22   }
23   Serial.println();
24   Serial.print("Connected, IP address: ");       //  "Подключено, IP-адрес: "
25   Serial.println(WiFi.localIP());
26 }
27 
28 void loop() {}

Пример данных, которые могут быть показаны в мониторе порта:

Connecting to sensor-net
.
Connected, IP address: 192.168.1.22

Станции с статическими IP-адресами, как правило, быстрее подключаются к сети. У кода выше подключение занимает примерно 500 мс (в мониторе порта показана только одна точка). Дело в том, что получение IP-настроек при помощи DHCP-клиента отнимает время, а в нашем случае этот шаг попросту пропущен. Если во всех трех параметрах (local_ip, gateway и subnet) указать «0.0.0.0», это снова активирует DHCP. Снова подключитесь к устройству, чтобы получить новые IP-адреса.

Что такое язык Lua?

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

Есть некоторые особенности при работе с Lua на NodeMCU. В основном это связано с конечным объемом памяти микроконтроллера ESP8266. Нужно придерживаться простых правил и выдерживать стиль работы с Lua. Об этих правилах расскажу чуть позже. Если же сохранять такой же стиль, как и при написании программ на С, то у Вас не получиться ощутить всей мощи Lua и прошивки NodeMCU. Когда Вы начинаете писать на Lua, это увлекает, и Вы начинаете воплощать в жизнь все более объемные задачи. Вы теряете ощущение того, что вы работаете с микроконтроллером и невольно нагружаете задачами, которые не по плечу микроконтроллеру. Нужно помнить, что у ESP8266 ограниченные ресурсы и не следует его грузить задачами, которые под силу выполнить микрокомпьютерам или полноценным компьютерам.

Документация по LUA на русском языке: http://www.lua.ru/doc/

Изучаем LUA за 15 минут: http://tylerneylon.com/a/learn-lua/

Library — TLS/SSL

  • Fix a warning ()
  • Adding comment to ignore SSL certificate in sample code. ()
  • Update Root Certificate in example ()
  • Adds the method setSSLVersions() also to WiFiClientSecure in order to use that new feature. ()
  • Add setSSLVersion call to SSL object ()
  • Allow users to inherit and override CertStore ()
  • Reduce BearSSL code size by not -O2 FSMs ()
  • WiFiServerSecure: Cache SSL sessions ()
  • WiFiClientSecure: use context ()
  • Update to latest BearSSL as of Nov 2020 ()
  • Add Stream loaders for BearSSL ()
  • Catch and display SSL errors for fatal alerts ()
  • Fix error when debug enabled but no port chosen ()
  • Remove stray axtls refs, deprecated compat funcs ()
  • Fix error message typo ()
  • Update DigestAuthorization.ino (Simple example update) ()
  • Update certs-from-mozilla.py (, )
  • Use root cert, not fingerprint for api.github.com ()
  • Update FP for tls.mbed.org ()
  • Change BSSL_CertStore test URL ()
  • Update to BearSSL version lost in GCC10 update ()

Что внутри?

Doxygen пробегает по всем заголовочным и исходным файлам, собирая информацию из размеченных блоков, оснащенных комментариями. Если разработчик какого-то класса оставил комментарий к своей работе, то он будет выглядеть примерно так:

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

У нескольких классов ESP8266WiFi комментариев нет.

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

Что такое NodeMCU?

NodeMCU — открытый бесплатный проект на основе скриптового языка Lua. Прошивка достаточно мощная и позволяет очень быстро реализовывать различные типовые проекты. Например, сегодня, в качестве знакомства, мы сделаем WiFi розетку с управлением с мобильного телефона и с  Web-интерфейсом. Прошивка умеет исполнять Lua-скрипты как из последовательного UART порта (аналогично AT-командам) так и из внутренней flash памяти (выполняя скрипты). Lua скрипты сохраняются во Flash во внутренней файловой системе. Файловая система плоская, упрощенная. Т.е. без подкаталогов. Тем не менее — это круто. Не стоит забывать, что ESP8266 — это всего лишь микроконтроллер. Из скриптов так же можно получить доступ к файлам, читать и сохранять различную информацию. NodeMCU модульная. Что с одной стороны позволяет наращивать функционал, а с другой собрать прошивку только из требуемых модулей, не расходуя понапрасну память.

NodeMCU работает с протоколами обмена данными — HTTP, MQTT, JSON, CoAP.

Поддерживаются различные датчики —
акселерометры ADXL345,
магнитометры  HMC5883L,
гироскопы L3G4200D,
датчики температуры и влажности AM2320, DHT11, DHT21, DHT22, DHT33, DHT44
датчики температуры, влажности, атмосферного давления BME280,
датчики температуры, атмосферного давления BMP085,
множество дисплеев работающих по шинам I2C, SPI. С возможностью работы с разными шрифтами.
TFT дисплеи ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735,
умные светодиоды и LED контроллеры — WS2812, tm1829, WS2801, WS2812,
поддерживаются интерфейсы — 1-Wire, I2C, SPI, UART,
Также можно задействовать модуль шифрования, планировщик задач, часы реального времени, протокол синхронизации часов через интернет SNTP, таймеры, АЦП канал (один), проигрывать аудио файлы, формировать на выходах ШИМ-сигнал (до 6), использовать сокеты, есть поддержка FatFS, т.е можно подключать SD-карточки и так далее.

Подробная документация NodeMCU здесь: https://nodemcu.readthedocs.io/en/master/

Если не подключается…

Вы можете проверить наличие связи между Arduino и ESP8266 используя Serial Monitor, который можно открыть во вкладке Tools в Arduino IDE.

Откройте Serial Monitor и установите скорость 115200. Нажмите кнопку сброса на плате Arduino.

Проверьте наличие правильно загруженной программы

Если после сброса Arduino в Serial Monitor нет никаких сообщений, это скорее всего означает, что Arduino не выполнят вашу программу. Возможно:

  • нужный скетч не был загружен;
  • ваша Arduino не включена;
  • Serial Monitor не подключился к Arduino;
  • с вашей Arduino что то не так.
  • внесены недопустимые изменения в код, например откорректирована структура RemoteXY или массив RemoteXY_CONF, удалены вызовы функций RemoteXY_Init() или RemoteXY_Handler().

Если вы уже добавили в проект какой либо код вашей задачи, попробуйте протестировать RemoteXY без этого кода, используя только тот код который генерирует редактор.

Проверьте связь между Arduino и ESP8266

Если после сброса Arduino в Serial Monitor вы видите следующую последовательность команд, это означает, что инициализация ESP8266 проходит успешно и связь между Arduino и ESP8266 есть:

Если вы видите только повторяющиеся команды «AT», это означает что нет связи между Arduino и ESP8266.

Связь может отсутствовать по разным причинам. Ниже перечислены основные:

  • контакты RX и TX подключены не верно, перепутаны контакты, или подключены не к тем контактам, или не подключены совсем;
  • скорость передачи данных не совпадает, ESP8266 по умолчанию использует скорость 115200;
  • нет питания на ESP8266, при подаче питания на ESP8266 должен светиться красный светодиод;
  • не хватает мощности источника питания 3.3 В для ESP8266;
  • модуль ESP8266 неисправен.

Проверьте прошивку ESP8266

Если после сброса Arduino в Serial Monitor вы видите только начало последовательности команд, но нет завершающей команды AT+CIPSERVER=1,6377 это означает, что модуль ESP8266 имеет устаревшую прошивку. Требуется обновление прошивки.

Если инициализация проходит успешно и вы видите последнюю команду AT+CIPSERVER=1,6377, но при попытке подключения с мобильного приложения возникает ошибка, возможно, что модуль ESP8266 имеет устаревшую прошивку.

Проверьте объем памяти вашего ESP8266. Это можно сделать так же посмотрев маркировку чипа памяти, который находится на плате рядом с чипом ESP8266. Если размер памяти составляет 4 Mbit и меньше (установлен чип 25Q40), скорее всего этот модуль не будет работать как точка доступа для RemoteXY.

Проверьте питание ESP8266

Так же возможно, что вашей ESP8266 не хватает мощности источника питания. Некоторые платы Arduino имеют слабый стабилизатор напряжения 3.3 В, который не способен выдавать 200-300 мА в пиковых режимах. В этом случае в Serial Monitor вы так же увидите обрыв последовательности команд.

Проверьте особенности вашего смартфона

Некоторые модели смартфонов на Android имеют особенности подключения точек доступа WiFi, и возможно точка доступа не включается автоматически. Попробуйте подключиться к точке доступа предварительно в ручную, используя системные настройки. После этого попробуйте соединиться с устройством из приложения RemoteXY. Если в этом случае соединение устанавливается, значит ваш смартфон имеет такую особенность. Сообщите нам об этом.

Работа схемы

Схема устройства представлена на следующем рисунке.

Примечание: чтобы видеть ответы модуля ESP8266 на поступающие команды откройте монитор последовательного порта (Serial Monitor) в программной среде Arduino IDE.

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

1. Сначала нам необходимо произвести тест Wi-Fi модуля при помощи передачи ему AT команды, он должен ответить OK.

2. После этого мы должны выбрать необходимый режим работы с помощью команды AT+CWMODE=mode_id , мы будем использовать Mode id =3. Полный же список доступных режимов выглядит следующим образом:
1 = Station mode (client) (режим станции, клиента)
2 = AP mode (host) (режим базовой станции, хоста)
3 = AP + Station mode (Yes, ESP8266 has a dual mode!) (режим станции + хоста – модуль ESP8266 поддерживает этот двойной режим).

3. Затем мы должны отсоединить наш Wi-Fi модуль от прежней Wi-Fi сети с помощью команды AT+CWQAP поскольку модуль ESP8266 по умолчанию автоматически соединяется с предыдущей использованной сетью Wi-Fi.

4. После этого можно сбросить модуль командой AT+RST – это необязательный шаг.

5. После этого мы должны соединить модуль ESP8266 с Wi-Fi роутером с помощью команды:AT+CWJAP=”wifi_username”,”wifi_password”.

6. После этого мы должны получить IP адрес с помощью команды AT+CIFSR, которая вернет нам IP адрес.

7. После этого нам необходимо задействовать режим мультиплексирования с помощью команды AT+CIPMUX=1 (1 для соединения с мультиплексированием и 0 для одиночного соединения).

8. Теперь сконфигурируем ESP8266 как сервер с помощью команды AT+CIPSERVER=1,port_no (port может быть 80). Теперь наш Wi-Fi готов. В представленной команде ‘1’ используется для создания сервера и ‘0’ для удаления сервера.

9. Теперь с помощью соответствующих команд можно передавать данные на созданный локальный сервер:AT+CIPSEND =id, length of data
Id = ID no. of transmit connection (номер соединения)
Length = Max length of data is 2 kb (максимальная длина данный 2 Кбайта).

10. После передачи ID (номера, идентификатора) и Length (длины данных) на сервер мы можем передавать данные, к примеру: Serial.println(“circuitdigest@gmail.com”);

11. После передачи данных нам необходимо закрыть соединение с помощью команды:AT+CIPCLOSE=0
После этого данные будет переданы на локальный сервер.

12. Теперь вы можете набрать IP адрес в строке адреса вашего браузера и нажать Enter. После этого вы увидите переданные данные на веб-странице.

Все описанные шаги можно более наглядно посмотреть в видео в конце статьи.

Esp-link goals

The goal of the esp-link project is to create an advanced Wifi co-processor. Esp-link assumes that
there is a «main processor» (also referred to as «attached uController») and that esp-link’s role
is to facilitate communication over Wifi. This means that esp-link does not just connect TCP/UDP
sockets through to the attached uC, rather it implements mostly higher-level functionality to
offload the attached uC, which often has much less flash and memory than esp-link.

Where esp-link is a bit unusual is that it’s not really
just a Wifi interface or a slave co-processor. In some sense it’s the master, because the main
processor can be reset, controlled and reprogrammed through esp-link. The three main areas of
functionality in esp-link are:

  • reprogramming and debugging the attached uC
  • letting the attached uC make outbound communication and offloading the protocol processing
  • forwarding inbound communication and offloading the protocol processing

The goal of the project is also to remain focused on the above mission. In particular, esp-link
is not a platform for stand-alone applications and it does not support connecting sensors or
actuators directly to it. A few users have taken esp-link as a starting point for doing these
things and that’s great, but there’s also value in keeping the mainline esp-link project
focused on a clear mission.

Показ результатов

Функции, описанные ниже, предоставляют доступ к результатам сканирования

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

Доступ к результатам об отдельной сети осуществляется при помощи параметра networkItem, который означает индекс (с отсчетом от нуля) обнаруженной сети.

SSID()

Возвращает данные о SSID сети, обнаруженной во время сканирования.

WiFi.SSID(networkItem)

Возвращаемое значение имеет тип String. Параметр networkItem – это индекс сети (с отсчетом от нуля), найденной в процессе сканирования.

encryptionType()

Возвращает данные о типе шифрования, который используется для сети, найденной в процессе сканирования.

WiFi.encryptionType(networkItem)

Функция может вернуть следующие значения:

  • «5» (ENC_TYPE_WEP) – WEP
  • «2» (ENC_TYPE_TKIP) – WPA / PSK
  • «4» (ENC_TYPE_CCMP) – WPA2 / PSK
  • «7» (ENC_TYPE_NONE) – открытая сеть
  • «8» (ENC_TYPE_AUTO) – WPA / WPA2 / PSK

Параметр networkItem – это индекс сети networkItem, найденной в процессе сканирования.

RSSI()

Возвращает данные о RSSI (от «received signal strength indication», что значит «показатель уровня принимающего сигнала») сети, найденной в процессе сканирования.

WiFi.RSSI(networkItem)

Возвращаемое значение имеет тип int32_t. Параметр networkItem – это индекс сети networkItem, найденной в процессе сканирования.

BSSID()

Возвращает данные о BSSID (от «basic service set identifier», что значит «идентификатор базового служебного устройства»), т.е. о MAC-адресе сети, найденной в процессе сканирования.

WiFi.BSSID(networkItem)

Функция возвращает указатель на участок памяти (массив uint8_t из 6 элементов), в котором хранится BSSID.

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

WiFi.BSSIDstr(networkItem)

Параметр networkItem – это индекс (отсчет идет от нуля) сети, найденной во время сканирования.

channel()

Возвращает информацию о канале сети, найденной во время сканирования.

WiFi.channel(networkItem)

Возвращаемое значение имеет тип данных int32_t. Параметр networkItem – это индекс (отсчет идет от нуля) сети, найденной во время сканирования.

isHidden()

Возвращает информацию о том, является ли скрытой сеть, найденная во время сканирования.

WiFi.isHidden(networkItem)

Возвращаемое значение имеет тип boolean, и значение true будет значить, что сеть скрыта. Параметр networkItem – это индекс (отсчет идет от нуля) сети, найденной в процессе сканирования.

getNetworkInfo()

Возвращает за один раз всю информацию, о которой рассказывалось в этой главе.

WiFi.getNetworkInfo(networkItem, &ssid, &encryptionType, &RSSI, *&BSSID, &channel, &isHidden)

Параметр networkItem – это индекс (отсчет идет от нуля) сети, найденной при сканировании. Все остальные параметры передаются функции в виде указателей к памяти. В дальнейшем все они будут обновлены значениями, соответствующими сети, заданной параметром networkItem. Кроме того, функция вернет true или false – в зависимости от того, успешно ли была извлечена информация или нет.

Пример кода:

 1 int n = WiFi.scanNetworks(false, true);
 2 
 3 String ssid;
 4 uint8_t encryptionType;
 5 int32_t RSSI;
 6 uint8_t* BSSID;
 7 int32_t channel;
 8 bool isHidden;
 9 
10 for (int i = ; i < n; i++)
11 {
12   WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden);
13   Serial.printf("%d: %s, Ch:%d (%ddBm) %s %s\n", i + 1, ssid.c_str(), channel, RSSI, encryptionType == ENC_TYPE_NONE ? "open"  "", isHidden ? "hidden"  "");
14 }

Пример данных, которые будут показаны в мониторе порта:

6 network(s) found
1: Tech_D005107, Ch:6 (-72dBm)
2: HP-Print-A2-Photosmart 7520, Ch:6 (-79dBm)
3: ESP_0B09E3, Ch:9 (-89dBm) open
4: Hack-4-fun-net, Ch:9 (-91dBm)
5: , Ch:11 (-77dBm)  hidden
6: UPC Wi-Free, Ch:11 (-79dBm)

Другие примеры использования функций, входящих в класс сканирования, ищите по .

Installation

Requirements:

  • ESP8266 module (any board)
  • Micro-USB cable
  • Computer

I would recommend getting a USB breakout/developer board, mainly due to the 4Mb of flash and simplicity.

In order to upload the Wi-PWN firmware, you can use one of two methods. The first method is easier overall but using Arduino is better for debugging.
YOU ONLY NEED TO DO ONE OF THE INSTALLATION METHODS!

There are two variants of UART converters that ESP8266 boards use:

CP210x CH34x
Drivers Drivers

Method 1: Flashing with NodeMCU-Flasher

  1. Download the current release of Wi-PWN

  2. Upload the file using the nodemcu-flasher. Alternatively you can use the official esptool from espressif.

  3. Connect your ESP8266 (making sure the drivers are installed) and open up the NodeMCU Flasher

  4. Go to the tab and select the correct values for your board.

  5. Navigate to the tab and click the gear icon for the first entry.

  6. Browse for the file you just downloaded and click open.

  7. Switch back to the tab and click Flash(F).

Method 2: Compiling with Arduino

  1. Download the source code of this project.

  2. Go to >

  3. Add to the Additional Boards Manager URLs. (refer to https://github.com/esp8266/Arduino)

  4. Go to > >

  5. Type in

  6. Select version and click on (must be version 2.0.0!)

  7. Go to >

  8. Open the folder path under

  9. Go to > > > > > > >

  10. Open with a text editor

  11. Just before the last line , add the following:

  1. Go to the arduino/SDK_fix folder of this project

  2. Copy and to

  3. Open in Arduino

  4. Select your ESP8266 board at > and the right port at >
    If no port shows up you need to reinstall the drivers, search online for chip part number + ‘driver Windows’

  5. Depending on your board you may have to adjust the > > and the > > . I used the Flash Frequency, and the Flash Size

  6. Upload! CTRL-U

Note: If you use a 512kb version of the ESP8266, you need to comment out a part of the mac vendor list in

Websocket

Теперь сделаем сервер, который будет работать на указанном порту (пусть будет 333). Затем мы с помощью терминальной программы подключимся к нашему серверу, указав его IP и порт. И потом будем обмениваться данными.

Скрипт main.lua:

Теперь наш скрипт поднимает Wi-Fi точку, создает сервер, который на порту 333 ожидает подключения. В момент подключения сервер отправит клиенту строку «Hello!», а приняв от клиента данные, вернет ему строку «Recived: » и дальше все, что он принял.

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

Но нам еще нужна терминальная программа для подключения на IP адрес ESP8266 (192.168.4.1) и указанный порт (333). На обычном компьютере можно установить PuTTY. Для мобильных телефонов под Android я использую JuiceSSH.

Constructor

SerialESP8266wifi(Stream serialIn, Stream serialOut, byte resetPin)

  • serialIn this object is used to read from the ESP8266, you can use either hardware or software serial
  • serialOut this object is used to write to the ESP8266, you can use either hardware or software serial
  • Example:

SerialESP8266wifi(Stream serialIn, Stream serialOut, byte resetPin, Stream debugSerial)

  • serialIn this object is used to read from the ESP8266, you can use either hardware or software serial
  • serialOut this object is used to write to the ESP8266, you can use either hardware or software serial
  • debugSerial enables wifi debug and local echo to Serial (could be hw or sw)
  • Example:

Некоторые правила работы с языком Lua на NodeMCU

1. Не пишите длинные скрипты. Размер памяти ESP8266 не бесконечен. Разбивайте программу на функциональные модули и делайте их в виде отдельных скриптов, запуская их с помощью dofile(). Например, код подключения к Wifi:

можно вынести в отдельный скрипт «wifi.lua» и выполнить его из основного скрипта командой dofile(«wifi.lua»).

2. Переменные, которые используются только в текущем скрипте объявляйте как local. В конце скрипта, когда переменная уже не нужна, присваивайте ей значение nil и явно вызывайте сборщик мусора collectgarbage()

Желаю успехов.

Смотри также:

  • ESP8266 NodeMCU Первое знакомство. Делаем WiFi розетку
  • ESP8266 NodeMCU. PWM
  • ESP8266 NodeMCU. ADC
  • ESP8266 NodeMCU. timer, rtc, SNTP, cron
  • ESP8266 NodeMCU. Файловая система + SD карточка
  • ESP8266 NodeMCU. UART
  • GPS-трекер на базе ESP8266
  • GPS-трекер + Дисплей SSD1306
  • ESP8266 NodeMCU. SSD1306. U8G
  • ESP-01 (ESP8266) upgrade flash memory to 4MB
  • ESP8266 NodeMCU. I2C. BME280/
  • Метеостанция на ESP8266