Версия ESP-12E (замена ESP-12) ESP8266 Удаленные серийные порты WIFI Беспроводной модуль высокое качество

ESP8266 — китайский микроконтроллер (далее МК) от производителя Espressif с поддержкой WiFi-интерфейса. Управлять всем этим можно не только с браузера, но и из приложений на Android/iOS/Desktop. Если МК будет применяться там, куда не достаёт WiFi-сеть, то ESP8266 может работать в режиме точки доступа.

Примечание В этой статье не будут рассмотрены практические примеры применения ESP8266. Речь пойдёт об основных преимуществах и возможностях этого МК.

Содержание:

Микроконтроллер ESP8266 работает с внешней flash-памятью по интерфейсу SPI. Её объём варьируется от 512 Кбайт до 4 Мбайт. При желании и умении микросхему памяти можно будет перепаять на версию до 32 Мбайт.

Существует около полутора десятка версий МК серии ESP и огромное количество плат с ними. Рассмотрим самые популярные из них.

Микроконтроллеры ESP8266

ESP-01

Микроконтроллер ESP-01. Источник

  •  Имеет 8 разведённых контактов (VCC, GND, UTXD, URXD, CH_PD, GPIO0, GPIO2, GPIO6) и PCB-антенну (печатный проводник на самой плате).
  • Из разведённых выводов тут присутствуют только 3 GPIO, но не стоит видеть в этом одни минусы. Если нужно будет управлять одним реле или получать данные с датчика температуры, вам не понадобятся все выводы МК, достаточно будет лишь пары. К тому же, существуют платы и шилды с возможностью простой коммутации именно к этой версии МК. Например такая:

Плата WiFi-реле. Источник

ESP-03

Плата ESP-03. Источник

  • Здесь появляется керамическая антенна. Она считается немного эффективней своего печатного собрата.
  • Также на плате разведены все доступные выводы GPIO. В этой статье описана разница между типами антенн для микроконтроллеров ESP8266.

ESP-07

Плата ESP-07. Источник

  • В этой версии в глаза сразу бросается металлический экран (который перед этим появляется на ESP-06).
  • На борту керамическая антенна и разъём для внешней антенны.

ESP-12

Разные варианты микроконтроллера ESP-12. Источник

В свою очередь, существует несколько вариантов этой версии: ESP-12S, ESP-12F, ESP-12E. Вторая и третья версии имеют на торце дополнительно 6 разведённых контактов.

Платы

WeMos D1 mini

Плата WeMos D1 mini. Источник

  • Имеет распайку девяти GPIO-контактов.
  • На плате имеется небезызвестный мост CH34x (такие часто ставят на клоны Arduino).
  • Установлен МК с 4 Мбайт flash-памяти.
  • Недостаток для некоторых — придётся самому паять контакты на плату (идут в комплекте).
  • Конструкционно совместима с различными выпускаемыми шилдами реле/датчиками.

NodeMCU v0.9/v1

Плата NodeMCU v0.9. Источник

Первое поколение плат серии NodeMCU. На ней распаяны все 11 GPIO-портов. Некоторые из них обладают дополнительными функциями (UART, I2C, SPI, PWM, ADC). Хотя на плате впаяны контакты, она занимает всю ширину беспаечной макетной платы, что затрудняет работу на ней. МК имеет 4 Мбайт flash-памяти. Также имеется мост CH340.

NodeMCU v3

Плата NodeMCU v3. Источник

Финальная версия платы этой серии. Существует и v2 «Amica», которая меньше по габаритам. v3 носит название «LoLin» и отличается от предыдущей версии только размерами и незначительными деталями (например дополнительной распайкой шины питания). Кроме традиционного моста CH340/CH341 на платы ставят чип CP2102, так что внимательней с выбором драйвера на них.

Все эти (и не только эти) платы выполнены на чипсете микроконтроллера ESP8266EX, а следовательно, характеристики у них одинаковые:

  • Протоколы: 802.11 b/g/n/e/i.
  • Диапазон частот: 2.4 ГГц – 2.5 ГГц.
  • Процессорное ядро: Tensilica L106 32 разряда.
  • Диапазон напряжений питания: 2.5 В – 3.6 В.
  • Среднее потребление тока: 80 мA.
  • Режимы WiFi: Station/SoftAP/SoftAP+Station.
  • Безопасность: WPA/WPA2.
  • Шифрование: WEP/TKIP/AES.
  • Обновление прошивки: через UART, по радиоканалу (OTA — Other The Air).
  • Сетевые протоколы: IPv4, TCP/UDP/HTTP/FTP.
  • Поддержка WiFi Direct (P2P), P2P Discovery, P2P GO (Group Owner) mode, GC (Group Client) mode, P2P Power Management.
  • Встроенные аппаратные ускорители: CCMP (CBC-MAC, режим счётчика), TKIP (MIC, RC4), WAPI (SMS4), WEP (RC4), CRC.
  • Поддержка LUA-скриптов.

Есть два способа работы с ним:

  • управление через AT-команды и автономная работа со своей прошивкой. В первом случае ESP8266 работает только в паре с другими МК, во втором — может работать независимо (хотя никто не запрещает присоединить её к другому МК).
  • «Из коробки» МК поставляется с прошивкой для работы через AT-команды. Для этого ESP8266 подключается к любому другому МК по UART-интерфейсу. Для демонстрации работы AT-команд ESP8266 можно подключить к компьютеру через USB-UART переходник и запустить монитор последовательного порта (например из Arduino IDE). Про то, как работать с этими командами, можно прочитать в этой статье.

В большинстве случаев намного удобней прошивать МК и работать с ним со своей прошивкой. Однако тут тоже есть свои нюансы. Вот 3 варианта событий:

  • У вас «голый» ESP8266, например ESP-01. Вам потребуется USB-UART переходник, который нужно подключить к МК. Этот переходник обязательно должен быть на 3-вольтовой логике, т. к. иначе можно легко отправить ваш МК в кибер-Вальхаллу. Про процесс подключения можно прочитать здесь.
  • Второй случай идентичен первому, кроме того, что вместо переходника можно использовать любую плату Arduino. Достаточно специальным образом подключить ESP8266 к UART-контактам Arduino, а её саму «отключить», замкнув контакт аппаратного сброса (RESET) на землю. Естественно, питать ESP8266 нужно будет от шины питания 3.3 В. В этом случае в качестве переходника USB-UART будет выступать мост (чаще всего CH340) на самой плате Arduino. Этот процесс также описан в статье выше.
  • Лучший вариант — это плата с USB-UART мостом на борту (как NodeMCU, WeMos и прочие). В этом случае ничего дополнительного делать не нужно — просто подключайте плату через USB.

Например NodeMCU Flasher (которая подходит не только для плат NodeMCU) или ESPTool (необходим Python).

Однако в этой статье работа с МК и процесс прошивки будут рассмотрены в Arduino IDE.

Изначально среда Arduino IDE не предназначена для работы с МК серии ESP. Чтобы это исправить, идём в Файл → Настройки и в поле Дополнительные ссылки для Менеджера плат вставляем эту ссылку:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Потом открываем Инструменты → Плата → Менеджер плат и в открывшемся списке в самом низу находим плату «esp8266 by ESP8266 Community» (если с этим возникли трудности — используем поиск вверху окна). Устанавливаем последнюю версию платы (около 150 Мбайт).

Вебинар «“Оцифровка” поддержки»

8 июля в 20:00, Онлайн, Беcплатно

tproger.ru События и курсы на tproger.ru

После установки в списке плат появится немалое количество плат. Если не нашли свою плату или не знаете её названия — выбирайте Generic ESP8266 Module. Теперь можно выбрать свой МК в списке COM-портов.

У ESP8266 две скорости передачи: основная — её вы указываете при инициализации последовательного порта, и скорость, на которой передаётся отладочная информация. Она передаётся сразу после подачи питания на МК. Обычно это скорости 115200 бод и 74800 бод 0 соответственно.

Если вы не владеете базовыми знаниями работы с платформой Arduino, наверстать упущенное можно в нашей статье про основы использования Arduino.

После скачивания платы ESP8266 с помощью менеджера, в примерах появится большое количество скетчей. Рассмотрим один из них (Файл → Примеры → ESP8266WebServer → HelloServer):

#include    #include     #include      const char* ssid = "........"; // Указываем имя существующей точки доступа  const char* password = "........"; // Указываем пароль существующей точки доступа    ESP8266WebServer server(80);    void handleRoot() { // Обработчик запроса клиента по корневому адресу    // Отправляем клиенту    server.send(200, "text/plain", "Привет от ESP8266!");  }    void handleNotFound() { // Обрабатываем небезызвестную ошибку 404    String message = "File Not Foundnn";    message += "URI: ";    message += server.uri();    message += "nMethod: ";    message += (server.method() == HTTP_GET) ? "GET" : "POST";    message += "nArguments: ";    message += server.args();    message += "n";    for (uint8_t i = 0; i < server.args(); i++) {      message += " " + server.argName(i) + ": " + server.arg(i) + "n";    }    server.send(404, "text/plain", message);  }    void setup(void) {    Serial.begin(115200);      WiFi.mode(WIFI_STA); // Устанавливаем Wi-Fi модуль в режим клиента (STA)    WiFi.begin(ssid, password); // Устанавливаем ssid и пароль от сети, подключаемся        while (WiFi.status() != WL_CONNECTED) { // Ожидаем подключения к Wi-Fi      delay(500);      Serial.print(".");    }        // Выводим информацию о подключении    Serial.println("");    Serial.print("Подключено к ");    Serial.println(ssid);    Serial.print("IP адрес: ");    Serial.println(WiFi.localIP());      // Устанавливаем обработчики. Можно сделать двумя способами:    server.on("/", handleRoot);      server.on("/inline", []() {      server.send(200, "text/plain", "Отличная работа!");    });      server.onNotFound(handleNotFound); // Вызывается, когда обработчик не назначен      // Запускаем сервер    server.begin();    Serial.println("HTTP-сервер запущен");  }    void loop(void) {    server.handleClient();  }  

Что делает этот скетч? МК подключается к вашей WiFi-сети и запускает сервер. В монитор последовательного порта выведется локальный IP-адрес (к примеру, 192.168.0.105). Вбиваем этот IP в адресную строку браузера, после чего в нём должна отобразиться строка «Привет от ESP8266!». Таким же образом можно проверить адрес /inline.

Ознакомиться с API МК можно в их официальном репозитории.

Внешняя память распределена на следующие разделы:

  • скетчи (память для прошивки);
  • файловая система SPIFFS;
  • OTA-Update (прошивка, переданная «по воздуху»);
  • EEPROM (да-да, её у МК тоже нет, поэтому она имитируется на flash-памяти);
  • конфигурация WiFi.

Файловая система SPIFFS

Один из плюсов внешней flash-памяти — файловая система. В неё можно с лёгкостью записать файлы (веб-странички, медиа-файлы и прочее) на микроконтроллеры ESP8266. На аппаратном уровне это можно было бы реализовать подключив к МК модуль SD-карт. Однако это решение требует свободных портов.

Размер файловой системы (от 32 Кбайт до 15 Мбайт) зависит от самого объема flash-памяти и от конфигурации, выставленной в Инстурменты → Flash size. Например, конфигурация 4M (2M SPIFFS) предназначена для МК с общим объёмом flash-памяти 4 Мбайт, 2 Мбайт из которых будут выделены под файловую систему.

SPIFFS не работает с папками — она содержит только список файлов. Соответственно, если загрузить в неё папку style, в которой будет файл header.css, то в файловую систему систему запишется файл с именем /style/header.css. Об этом стоит помнить, потому что длина файлового имени не должна превышать 31 символ (читается 32, но символ с кодом 0 отведён под завершение строки).

Для загрузки файлов потребуется инструмент ESP8266FS, интегрирующийся в Arduino IDE. Инструкция по установке:

  1. Качаем инструмент по ссылке выше.
  2. В папке Arduino IDE создайте папку tools (если её там ещё нет).
  3. В папку tools распакуйте скачанный архив. Должно быть так: …/Arduino/tools/ESP8266FS/tool/esp8266fs.jar.
  4. После запуска среды в папке скетча (Скетч → Показать папку скетча) нужно создать папку data. Её содержимое будет загружаться в файловую систему.
  5. После кликаем в Инструменты → ESP8266 Sketch Data Upload, чтобы загрузить данные в файловую систему. После загрузки в панели статуса высветится «SPIFFS Image Uploaded». Перед процессом загрузки в файловую систему обратите внимание: если открыт монитор последовательного порта — закрываем его.

Как работать с SPIFFS и файлами в ней, можно узнать в этой статье.

Энергонезависимая память EEPROM

Работа с внешней памятью немного отличается от стандартной.

  • Перед считыванием или записью данных нужно инициализировать EEPROM, указав при этом выделяемую под неё память (от 4 до 4096 байт) функцией EEPROM.begin(size).
  • Привычная функция EEPROM.write(addr, value) записывает данные не на саму энергонезависимую память, а в оперативную.
  • Чтобы внесённые данные записались в память, нужна функция EEPROM.commit() (или же EEPROM.end(), чтобы заодно очистить данные из оперативной памяти).
  • Метод EEPROM.read(addr) возвращает байт из памяти по адресу.

Прошивка «по воздуху» OTA-Update

Для этого вам потребуется установленный Python.

В скетч нужно добавить файл: #include . Инициализируем и настраиваем OTA следующими строками:

ArduinoOTA.setHostname("Host-ESP");// Имя хоста  ArduinoOTA.setPassword((const char *)"password");// Пароль для подключения к хосту. Если не нужен — комментируем эту строку  ArduinoOTA.begin();// Инициализация

После этого достаточно в метод loop() добавить строку: ArduinoOTA.handle().

Прошиваем МК по проводу. В случае успешной загрузки в списке портов появится новый хост с именем «esp8266-xxxxxx», где esp8266 — указанное выше имя хоста, а xxxxxx — локальный IP-адрес МК. Выбираем его.

Теперь микроконтроллер ESP8266 можно прошивать «по воздуху».

Как сделать умный дом своими руками на Arduino и Яндекс.Алиса — пошаговая инструкция tproger.ru cthutq Aliexpress / Электронные компонентыВсем доброго времени суток! В сегодняшней статье, я бы вам хотел показать очень интересную и полезную штучку из знаменитой китайской площадки, а именно с сайта Aliexpress. Данная штучка является довольно миниатюрным wi-fi модулем для микроконтроллеров Ардуино, как вы понимаете с помощью этого небольшого модуля можно сделать связку из телефона и Ардуино и к примеру передавать видео на смартфон в режиме реального времени. Я сам хотел заказать такой модуль для того, чтобы сделать робота который бы смог передавать видео с камеры робота на телефон или чтобы хотя бы можно было управлять роботом с телефона с помощью уже созданных мобильных приложений. В общем применений для данного модуля найдется много. Пишите в комментарии как бы вы использовали данную вещь в своих проектах. Цена не очень большая, доставка тоже всего лишь 13 рублей. Размер внутренней памяти составляет 4 мг, что может показаться очень маленьким для вас, но поверьте, этого вполне достаточно. Отзывы в основном положительные, полная цоколёвка и схема модуля есть в описании к товару от продавца, так что если кому-то нужно, то ссылка на данный товар находиться под этой статьей. Думаю многие оценят данный модуль и возможно даже закажут себе, ведь сами понимаете, что управлять роботом с помощью телефона очень интересно и для некоторых даже эффектно. Ну и всем спасибо за внимание и удачи в будущих проектах самодельщики!

Система на кристалле SoC (System on crystal) ESP8266 от китайского производителя Espressif предоставляет возможность простой разработки программируемых модулей с доступом к беспроводной сети WLAN. ESP8266 не имеет встроенной Flash — памяти программ, а вместо нее использует внешнюю микросхему QSPI Flash .

Основные характеристики ESP8266 :

  • RISC процессор Tensilica L106 с тактовой частотой 160 МГц
  • Максимальный объем внешней Flash — памяти программ до 16 Мбайт
  • Частота внешнего тактового резонатора от 24МГц до 52 МГц
  • Встроенный высокочастотный 2,4 ГГц приемо-передатчик с поддержкой стандартов IEEE802.11b/g/n
  • Встроенный стек протоколов TCP/IP и полная поддержка протокола 802.11b/g/n WLAN MAC
  • Доступные для программирования периферийные интерфейсы GPIO, SDIO, SPI, HSPI, I2C, I2S, UART, PWM, IRDA, ADC

На основе ESP8266 китайская промышленность выпускает большое количество недорогих WiFi модулей. Для своих экспериментов я приобрел в разное время два таких модуля: ESP-12F и ESP-14. Оба модуля изображены на следующей картинке.

image

Подключение к компьютеру осуществляется адаптером USB-UART на основе микросхемы CP2102.

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

Программирование ESP8266 в Arduino-IDE

Загрузить Arduino-IDE можно с официального сайта Arduino. Среда разработки Arduino-IDE очень простая и к тому же кросс-платформенная . Исходный файл с текстом программы на языке С++ называется в Arduino-IDE скетчем. Это основной и единственный модуль программы, из которого могут быть вызваны многочисленные библиотечные функции (или созданы объекты на основе библиотечных классов).

Добавить поддержку ESP8266 в Arduino-IDE можно добавлением в меню File->Preferences ссылки http://arduino.esp8266.com/stable/package_esp8266com_index.json для стабильных версий или http://arduino.esp8266.com/staging/package_esp8266com_index.json для тестируемых версий в поле Additional Boards Managet URLs.

Я рекомендую воспользоваться именно этим способом :

cd <каталог установки Arduino>/hardware mkdir esp8266com cd esp8266com git clone https://github.com/esp8266/Arduino.git esp8266

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

cd esp8266/tools python get.py

Далее необходимо выбрать Generic ESP8266 Module в меню Tools->Board.

Настройки модуля ESP-12F у меня выглядят следующим образом :

В разделе Examples for Generic ESP8266 Module меню File->Examples можно выбрать интересующий пример для программирования ESP8266.

$sudo usermod -a -G dialout $sudo systemctl reboot

Из Arduino-IDE можно вызывать функции ESP API . Для проверки такой возможности откройте пример File->Examples->ESP8266->TestEspApi. В этом примере я изменил скорость работы UART c 74880 на 9600, иначе на экран выводился мусор.

Описание функций ESP API находиться в документации ESP8266 Non-OS SDK API Reference. Документация для программирования ESP8266 из Arduino-IDE находиться по этой ссылке Welcome to ESP8266 Arduino Core’s documentation!

В примерах также есть обновление прошивки модуля по воздуху OTA (Over the air). Для проверки данной возможности откройте пример File->Examples->ArduinoOTA->BasicOTA. В примере необходимо подставить название своей беспроводной сети и код доступа к ней :

Программирование ESP8266 в Eclipse с помощью PlatformIO

Фреймворк PlatformIO для разработки приложений IoT (Internet of things) написан на языке программирования Python и позволяет работать с фреймворками Arduino, ARM mbed , средствами разработки для STM32, ESP8266, ESP32 и многими другими с использованием различных редакторов кода и IDE. На данный момент PlatformIO поддерживает 566 различных отладочных плат. PlatfornIO можно установить сразу с IDE на основе редактора кода Atom или Visual Studio Code, а можно воспользоваться интерфейсом командной строки CLI(command line interface). CLI позволяет создавать новые проекты и экспортировать их в различные IDE.

pip install -U platformio

Далее необходимо создать каталог проекта и произвести его начальную инициализацию :

mkdir project_example cd project_example platformio init --ide eclipse --board esp12e

Список всех поддерживаемых PlatformIO отладочных плат можно просмотреть с помощью команды :

platformio boards

После генерации нового проекта его можно открыть в Eclipse CDT.

В файле platformio.ini находятся настройки проекта :

[env:esp12e] platform = espressif8266 board = esp12e framework = arduino

Для сборки проекта используется фреймворк Arduino. Теперь необходимо создать внутри каталога src/ файл main.cpp и наполнить его следующим содержимым :

Далее запускаем цель “PlatformIO:Build” и наблюдаем за сборкой проекта:

Теперь необходимо закоротить контакт GPIO0 на землю, подать питание на нашу плату ESP12F и запустить цель PlatformIO: Upload, после чего начнется загрузка созданной прошивки в модуль :

Последовательный порт для обновления прошивки модуля должен быть определен автоматически, но если он определиться неправильно, то можно назначить правильный номер порта в файле platformio.ini :

[env:esp12e] platform = espressif8266 board = esp12e framework = arduino upload_port = /dev/ttyUSB0

framework = esp8266-rtos-sdk

В составе фреймворка есть примеры, которые расположены в каталоге $(HOME)/.platformio/packages/framework-esp8266-rtos-sdk/examples.

Наконец то мы вплотную подобрались к программированию на языке С модулей на основе ESP8266 без использования высокоуровневых фреймворков.

Установка гостевой ОС Linux в VirtualBox.

Для начала необходимо загрузить и установить последнюю версию Oracle VM VirtualBox. Этот процесс достаточно тривиален, чтобы детально на нем останавливаться. Установка должна производиться с правами администратора.

После установки запускаем VirtualBox и жмем на зеленую кнопку «New» , потом выбираем тип операционной системы и нажимаем «Create».

Теперь необходимо выбрать ISO – образ для установки гостевой операционной системы, но сначала нужно этот образ загрузить . В своем примере я использую образ Fedora 29 LXDE Desktop.

После загрузки Live – дистрибутива его необходимо установить на жесткий диск, для этого запускаем на рабочем столе Linux иконку «Install to Hard Drive».

Во время установки вам будет предложено выбрать жесткий диск, его можно создать в виртуальной машине с помощью опции Settings->Storage->Controller:SATA->Adds hard disk->Create new disk->VHD(Virtual Hard Disk)->Dynamicall allocated->Create.

Все последующие манипуляции выполняются абсолютно одинаково что в виртуальной, что в реальной машине c Fedora Linux.

Программирование ESP8266 в ESP-Open-SDK

$sudo dnf install -y make unar autoconf automake libtool gcc gcc-g++ gperf flex >bison texinfo gawk ncurses-devel expat-devel python-devel python pyserial >sed git unzip bash help2man wget bzip2 patch

Разрешить команду sudo можно так :

$su {Password} #visudo i {Username}ALL=(ALL) ALL :w :q #exit

Проверяем работу sudo :

$sudo dnf install -y vim mc

Установку пакета esp-open-sdk будем производить в каталог /opt.

$cd /opt $sudo git clone --recursive https://github.com/pfalcon/esp-open-sdk.git

Далее необходимо поменять владельца каталога esp-open-sdk c root на вашего пользователя :

$sudo chown -R {username}:{username} /opt/esp-open-sdk $ls -l

Входим в каталог esp-open-sdk и запускаем процесс сборки :

$cd esp-open-sdk $make toolchain esptool libhal STANDALONE=n

Процесс сборки достаточно длительный как в родной, так и в гостевой ОС Linux.

После сборки esp-open-sdk необходимо прописать путь к инструментарию xtensa-lx106-elf в системной переменной PATH:

$cd $sudo vim .bashrc export PATH=/opt/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

Проверим в окне терминала версию установленного компилятора :

$xtensa-lx106-elf-gcc --version

Установим утилиту esptool для программирования Flash — памяти модуля ESP8266 :

$sudo pip install esptool

Теперь настало время добавить поддержку FreeRTOS в нашу инструментальную среду, для этого выполняем команды :

$cd /opt $sudo git clone --recursive https://github.com/Superhouse/esp-open-rtos.git $sudo chown -R {username}:{username} /opt/esp-open-rtos

Для доступа модуля ESP8266 к сети WIFI необходимо указать ее название (SSID) и пароль доступа к беспроводной сети , для этого создадим заголовочный файл private_ssid_config.h и пропишем в нем указанные параметры:

$cd /opt/esp-open-rtos/include $vim private_ssid_config.h

Если вы используете гостевую ОС, то необходимо активировать свой USB-UART преобразователь в VirtualBox. Для этого нужно просто выбрать свой преобразователь в меню Devices->USB->Your USB to UART Bridge Controller, а также разрешить доступ к этому порту, добавив пользователя {Username} в группу dialout :

$sudo usermod -a -G dialout {Username} $sudo systemctl reboot

Компилируем пример HTTP – сервера и загружаем прошивку в модуль ESP-12F , не забывая установить GPIO0=0 :

make flash -j4 -C examples/http_server ESPPORT=/dev/ttyUSB0

Программирование ESP8266 в SDK от Espressif

Документацию для быстрого начала работы с SDK можно скачать с сайта производителя ESP8266 SDK Getting Started Guide.

Установим RTOS SDK и non-OS SDK от Espressif в свою ОС Linux (или LXDE_Fedora_HDD):

$cd /opt $sudo git clone https://github.com/espressif/ESP8266_RTOS_SDK.git $sudo git clone https://github.com/espressif/ESP8266_NONOS_SDK.git $sudo chown -R {username}:{username} /opt/ESP8266_RTOS_SDK $sudo chown -R {username}:{username} /opt/ESP8266_NONOS_SDK

$cd $vim .bashrc export IDF_PATH=/opt/ESP8266_RTOS_SDK $sudo reboot

Соберем пример https- клиента, построенного на основе библиотеки mbed TLS для ESP8266 :

$cd /opt/ESP8266_RTOS_SDK/examples/protocols/https_mbedtls $make

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

Загружаем прошивку примера в модуль ESP-12F (не забываем про GPIO0=0) с помощью команды:

$make flash

Для повторной настройки примера необходимо ввести в командной строке :

$make menuconfig

Настало время испытать пример для non-OS SDK. Работа с non-OS SDK имеет свои особенности. Для того, чтобы собрать какой-либо пример из каталога /opt/ESP8266_NONOS_SDK/examples необходимо скопировать интересующий пример в каталог на уровень выше (в /opt/ESP8266_NONOS_SDK).

Сборка может производиться двумя способами : вызовом скрипта gen_mics.sh с последующим вводом необходимых параметров в интерактивном режиме или передачей параметров в командной строке вместе с make (на самом деле gen_misc.sh делает тоже-самое).

Попробуем запустить пример MQTT – клиента на модуле ESP-12F. MQTT (Message Queue Telemetry Transport) – сетевой протокол , работающий поверх TCP/IP, который имеет архитектуру издатель-подписчик. Для работы протокола необходим постоянно работающий сервер , так называемый MQTT брокер. MQTT клиенты обмениваются друг с другом сообщениями через MQTT брокера. Для этого одни клиенты (подписчики) подписываются на прием сообщений от других клиентов (издателей), когда кто-либо из издателей отправляет сообщение, то все подписанные на него клиенты немедленно получают отправленное сообщение.

Для того, чтобы испытать пример из ESP8266_NONOS_SDK/examples/esp_mqtt_proj необходимо установить MQTT брокер. Самый распространенный MQTT брокер под ОС Linux называется Eclipse Mosquitto.

Перед установкой Mosquitto необходимо сделать обновления :

$sudo apt-get update $sudo apt-get upgrade

Добавляем репозиторий для загрузки Mosquitto :

$sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key $sudo apt-key add mosquitto-repo.gpg.key $rm -f mosquitto-repo.gpg.key $cd /etc/apt/sources.list.d/ $sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list $sudo apt-get update

Выполняем установку :

$sudo apt-get install -y mosquitto mosquitto-clients

Запускаем Mosquitto :

$sudo service mosquitto restart

$mosquitto_sub -d -t /mqtt/topic/0

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

$mosquitto_pub -d -t /mqtt/topic/0 -m “Hello world!”

$hostname -I Пример MQTT клиента из ESP8266 non-OS SDK

Сначала копируем пример esp_mqtt_proj в корневой каталог ESP8266_NONOS_SDK :

$cp -R /opt/ESP8266_NONOS_SDK/examples/esp_mqtt_proj /opt/ESP8266_NONOS_SDK $cd /opt/ESP8266_NONOS_SDK/esp_mqtt_proj

IP адрес запущенного на Raspberry Pi 3 MQTT брокера и еще несколько параметров необходимо добавить в заголовочный файл mqtt_config.h:

$vim include/mqtt_config.h

Запускаем скрипт gen_mics.sh для сборки проекта , в процессе работы скрипта необходимо ввести несколько параметров, как показано на следующей картинке :

Второй способ сборки :

$make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=4

Для прошивки модуля ESP-12F как обычно закорачиваем GPIO0 на землю и вводим следующие команды :

$cd ../bin $esptool.py erase_flash $esptool.py - -port /dev/ttyUSB0 write_flash - -flash_mode qio - -flash_size 32m - -flash_freq 40m 0x0000 boot_v1.7.bin 0x1000 upgrade/user1.4096.new.4.bin 0x3FB000 blank.bin 0x3FC000 esp_init_data_default_v08.bin 0x3FE000 blank.bin

Карта памяти для размещения кода и настроек в SPI Flash описана в документации ESP8266 SDK Getting Started Guide.

Проверим работу примера, для этого открываем на Rpi3 три терминала и подписываемся в каждом из них на прием сообщений от MQTT клиента на ESP8266 :

$mosquitto_sub -d -t /mqtt/topic/0 $mosquitto_sub -d -t /mqtt/topic/1 $mosquitto_sub -d -t /mqtt/topic/2

$mosquitto_pub -d -t /mqtt/topic/0 -m “Hello ESP8266 /0” $mosquitto_pub -d -t /mqtt/topic/1 -m “Hello ESP8266 /1” $mosquitto_pub -d -t /mqtt/topic/2 -m “Hello ESP8266 /2”

Viewed 293697 times by 37907 viewers

Рано или поздно все мы приходить к тому что нам не хватает подключения к Сети в наших проектах на платформе Ардуино. Действительно как же в 21 веке без статуса Онлайн )) И тут нам на выручку приходит  WiFI чип ESP8266 и готовые  модули на его основе. У меня в руках самый простой модуль (для новичков) ESP-01 :

Модуль устроен достаточно просто и имеет минимальный набор выводов :

  • ESP8266EX — сердце всего модуля.
  • P25Q80H (или другой чип) — Flash Memory на 1 Мбайт.
  • Кварц и обвязка со свето диодиками.

ESP8266EX

Китайский производитель Espressif сделал дешевый чип  с интерфейсом Wi-Fi и возможностью исполнять программы из внешней флеш-памяти с интерфейсом SPI. По сути это микроконтроллер и радио модуль для Wi-Fi в одном корпусе :

  • 80 MHz 32-bit процессор Tensilica.
  • IEEE 802.11 b/g/n Wi-Fi. Поддерживается WEP и WPA/WPA2.
  • 14 портов ввода-вывода(из них возможно использовать 11), SPI, I²C, I²S, UART, 10-bit АЦП. В нашем случае мы можем использовать только ограниченные выводы чипа.
  • Питание 2,2…3,6 В. Логика и питание чипа 3.3 В, будьте внимательны !  
  • Интегрированный стек TCP/IP. HTML

Выводы, подключение :

Возможности чипа очень большие, будем разбираться по степенно.

Выводы модуля :

  • VCC — плюс питания 3.3 В
  • GND — минус питания 3.3 В
  • TX — аппаратный UART.
  • RX — аппаратный UART.
  • RST — кратковременно подав на неё низкий логический уровень, модуль перезагрузиться. Лучше прижать ее через резистор 10 кОм к плюсу питания.
  • CH_PD(или по-другому EN) — служит для перевода модуля в энергосберегающий режим, в котором он потребляет очень маленький ток. Ну и снова — не будет лишним «прижать» эту ногу резистором на 10 кОм к плюсу питания.

По умолчанию во флешь-память ужа записана заводская прошивка с поддержкойАТ команд для управления чипом. Конечно можно залить и другие прошивки, но в этой статье мы будем работать именно в таком режиме с модулем. Суть проста по UART передаем команду, получаем ответ от модуля. Для этого нам потребуется  USB-to-Serial TTL конвертор что бы подключить модуль к компу. Так как у меня под рукой его нету то я буду использовать Arduino Nano в его качестве. 

Питание модуля отдельный вопрос. Пиковое потребление чипа может достигать 250 мА ( в datasheet указано 170 мА при использование Tx802.11b). Внимание! Этот модуль основан на 3.3 В логике, так что придется его питать от своего источника питания. Или через резисторный делитель(1 кОм и 2 кОм) с вывода +5 Ардуино. Выводы RX и TX надо тоже подключить через делитель  или через logic converter (например CD4050B).

Что бы Ардуино превратить в USB-to-Serial TTL конвертор зальем в контролер пустой скетч :

void setup() { } void loop() { }

Далее Arduino нужно замкнуть RESET на GND.  Это изолирует процессор от I/O пинов. Альтернатива этому удаление микросхемы из «кроватки».  При этом выводы TX, RX устройства нужно подключить без перекрещивания. т.е. :

esp TX → ard TX esp RX → ard RX

Подключаем все , открываем монитор портов в Arduino IDE и поехали.

Для простоты вы можете купить USB адаптер у наших Китайских партнеров.

AT-Команды.

Для на чало мы проверим  что все работает и  отправим в терминале:

AT  OK

Проверим  прошивку :

AT+GMR  AT version:1.2.0.0(Jul 1 2016 20:04:45) SDK version:1.5.4.1(39cb9a32) Ai-Thinker Technology Co. Ltd. Dec 2 2016 14:21:16 OK

Для подключения Wi-Fi выберем режим модуля: доступны следующие режимы: 1 — STA, 2 — AP, 3 — Station+AP

AT+CWMODE=1  OK

Смотрим список точек доступа командой:

AT+CWLAP  +CWLAP:(3,"MTSRouter-047188",-77,"00:1f:ce:ac:e4:de",2,-21,0) +CWLAP:(3,"RT-WiFi_2958",-93,"78:96:82:44:29:58",4,10,0) +CWLAP:(3,"Test",-63,"ac:f1:df:c9:a5:82",6,0,0) +CWLAP:(3,"TP-LINK_4E54E0",-85,"f8:1a:67:4e:54:e0",6,103,0) +CWLAP:(3,"GARNIER",-89,"60:a4:4c:df:83:38",6,-31,0) +CWLAP:(2,"Oslik",-73,"bc:f6:85:cb:d7:53",7,-9,0) +CWLAP:(3,"Keenetic-6619",-80,"e8:37:7a:9a:93:46",8,8,0) +CWLAP:(2,"beeline-router_78",-90,"fc:75:16:4a:39:42",9,-26,0) +CWLAP:(3,"ASUS",-91,"f4:6d:04:df:d3:e8",11,-14,0) +CWLAP:(4,"Beeline_2G_F14986",-83,"78:94:b4:a3:8c:cc",11,-14,0)  OK

В скобках указывается: SECURITY, SSID, RSSI, BSSID, CHANNEL SECURITY может принимать значения: 0 — OPEN, 1 — WEP, 2 — WPA-PSK, 3 — WPA2-PSK, 4 — MIXED (WPA-WPA2-PSK)

Подключаемся к нашей точке:

Посмотреть какой ip получил наш модуль:

AT+CIFSR +CIFSR:STAIP,"192.168.0.55" +CIFSR:STAMAC,"b4:e6:2d:22:f6:61"  OK

Все настройки запоминаются во флешь память, сбросить настройки на заводские можно командой:

AT+RESTORE

Задать скорость UART :

AT+CIOBAUD=9600  OK

Перезагрузить модуль :

AT+RST  OK ?)⸮⸮⸮@H  <⸮⸮⸮⸮@H⸮⸮!`̌⸮ ⸮K⸮ZHRh|$ ⸮⸮ؤ⸮ Ai-Thinker Technology Co. Ltd.  ready</pre> Команды делятся условно на три части : системные, Wi-Fi,TCP. Полный список команд можно посмотреть в datasheep. Ну а мы перейдем к командам режима TCP-сервера. На плате ESP-01 можно запустить TCP-сервер для приема-отправки данных или она может выступать TCP-клиентом для приема-отправки данных на сервер. Для запуска TCP-сервера выполним следующие команды: AT+CIPMODE=0  OK

Устанавливаем возможность множественных соединений:

AT+CIPMUX=1  OK

Запускаем сервер на порту 80:

AT+CIPSERVER=1,80 (mode,port)  OK

Теперь можно подключиться к ESP-01 и отправить-принять какие-нибудь данные. На потребуется telnet клиент, я использую PuTTY. При подключение модуль нам сообщает что подключился клиент и показывает нам id клиента.

0,CONNECT  +IPD,0,21:⸮⸮⸮⸮ ⸮⸮⸮⸮'⸮⸮⸮⸮⸮⸮
AT+CIPSTATUS  +CIPSTATUS:0,"TCP","192.168.0.19",57907,80,1 OK

Закрыть активное соединение можно командой

AT+CIPCLOSE=id или все соединения AT+CIPCLOSE без параметров.

AT+CIPCLOSE=0  0,CLOSED  OK

Отправляем данные с ESP-01 на ПК. Для режима Single connection отправка идет так :AT+CIPSEND=length, для режима Multiple connection отправка идет так: AT+CIPSEND=id,length.

AT+CIPSEND=0,6  (6 байт)  OK >  Hellow  busy s... Recv 6 bytes SEND OK

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Интерес к интернету вещей растет с каждым днем, свои курсы по технологии IoT запустили и Cisco, и Samsung. Но большинство этих курсов базируются на собственном железе компаний, довольно дорогом, в то время как практически все то же самое можно сделать на гораздо более дешевом железе самостоятельно, получив при этом массу удовольствия и полезных навыков.

Какую плату выбрать?

Когда неофит от IoT полезет в интернет, одним из первых модулей, которые он найдет, будет ESP8266. И действительно, он обладает массой достоинств: дешевый, много различных плат на его основе, позволяющих использовать его как самостоятельное устройство и подключать к сложным Arduino-based проектам. Но ESP8266, выпущенный в 2014 году, довольно быстро перестал удовлетворять запросы пользователей, и в 2015 году компания-разработчик Espressif выпускает новый микроконтроллер — ESP32.

image

Точно так же, как и в случае с ESP8266, разработчики создали довольно много плат, базирующихся на новом микроконтроллере. В данной статье все примеры тестировались и проверялись на плате MH-ET LIVE ESP32 DevKit. Плата для обзора была любезно предоставлена интернет-магазином Amperkot.

image

 Загрузка …

Начинаем программирование

Как и у любой платы, основанной на ESP32, у MH-ET LIVE ESP32 DevKit есть достаточно большой набор языков программирования. Во-первых, это Arduino C, во-вторых, Lua, а в-третьих и в-четвертых — MicroPython и Espruino. Про Espruino — сборку JS для программирования микроконтроллеров — уже рассказывалось в ][, но в той статье разбиралась работа только на плате Espruino Pico, заточенной под Espruino.

image

INFO

К сожалению, портирование Espruino на ESP32 еще не до конца завершено. Часть возможностей, например обновление по воздуху и Bluetooth, недоступна. Но так как Espruino — open source проект, любой может добавить свою функциональность.

Установка

  1. Скачиваем на официальном сайте свежую сборку Espruino. А если не доверяешь готовым сборкам, то можно собрать прошивку самостоятельно:

    # Get the Espruino source code git clone https://github.com/espruino/Espruino.git cd Espruino # Download and set up the toolchain ('source' is important here) source scripts/provision.sh ESP32 # Clean and rebuild make clean && BOARD=ESP32 make 
  2. Несмотря на то что мы будем программировать на JS, для установки все равно нужен Python, а конкретно esptool.py. Повторяя свою предыдущую статью, скажу, что для его установки, при условии, что Python уже установлен, достаточно набрать в консоли/терминале: pip install esptool.

  3. В терминале перейти в папку с прошивкой. Кроме самого файла Espruino, здесь лежат файлы bootloader.bin и partitions_espruino.bin. Это необходимые компоненты, но в некоторых сборках их может не быть, тогда их придется скачать отсюда.
  4. Запускаем процесс прошивки, не забыв изменить порт, указанный в данном примере, на свой, а также при необходимости указать другое имя прошивки. Здесь она называется espruino_esp32.bin.

    esptool.py    --chip esp32                        --port /dev/ttyUSB0                 --baud 921600                       --after hard_reset write_flash      -z                                  --flash_mode dio                    --flash_freq 40m                    --flash_size detect                 0x1000 bootloader.bin               0x8000 partitions_espruino.bin      0x10000 espruino_esp32.bin 
image

IDE

Разработчики Espruino создали свою IDE, Espruino Web IDE. Эта программа распространяется через Chrome Web Store, также существуют нативные приложения для Windows (32 и 64).

image

Перед первым запуском нужно залезть в настройки, вкладка COMMUNICATIONS, и убедиться, что скорость общения выставлена на 115200, а также изменить поле Save on Send с No на Yes, иначе все программы после перезапуска слетят.

Теперь достаточно запустить IDE, подключиться к плате и набрать в консоли 1+2: если ты получил 3, значит, все настроено правильно и можно начинать полноценную работу.

 Загрузка …

Hello world

Во всех языках программирования, предназначенных или модифицированных для программирования микроконтроллеров, самая простая программа — так называемый Blink, мигание встроенным светодиодом. Но это как-то скучно. Поэтому нашей первой программой станет программа для управления светодиодом с помощью веб-страницы. И действительно, JS — это же язык веба.

var wifi = require("Wifi");  wifi.startAP('EspruinoAP', { password: '0123456789', authMode: 'wpa2' },function() {   console.log(`AP started`); });  function onPageRequest(req, res) {   var a = url.parse(req.url, true);   if (a.pathname=="/") {     res.writeHead(200, {'Content-Type': 'text/html'});     res.end("Hello, ][aker!

“); } else if (a.pathname==”/on”) { res.writeHead(200, {‘Content-Type’: ‘text/plain’}); res.end(“Enable”); digitalWrite(D2, false); } else if (a.pathname==”/off”) { res.writeHead(200, {‘Content-Type’: ‘text/plain’}); res.end(“Disable”); D2.write(true); } else { res.writeHead(404, {‘Content-Type’: ‘text/plain’}); res.end(“404: Page “+a.pathname+” not found”); } } require(“http”).createServer(onPageRequest).listen(80);

Можно заметить, что синтаксис практически ничем не отличается от обычного JS. Давай разбираться, что же происходит в этой программе.

  • var wifi = require("Wifi") — для начала мы подгрузили необходимый нам модуль для работы с Wi-Fi. Логично будет задаться вопросом: а откуда мы его взяли? Допустим, есть встроенные в прошивку модули. А если нам нужно загрузить с какого-нибудь внешнего сайта? Функция require поддерживает синтаксис вида require("https://github.com/espruino/EspruinoDocs/blob/master/devices/PCD8544.js");, а WebIDE для поиска модулей онлайн, по умолчанию используется https://www.espruino.com/modules.
  • Следующий блок кода отвечает за поднятие точки доступа с именем EspruinoAP и паролем 0123456789. В случае успешного запуска в консоль выводится соответствующее сообщение.
  • Функция onPageRequest — собственно сам веб-сервер. В этой функции разбирается адрес и проверяется, что нужно сделать, в зависимости от запроса:
    • если загружается первая страница — /, то вернуть 200-й заголовок и сообщение типа text/html «Hello, ][aker!», в обрамлении HTML-тегов;
    • если загружается страница включения — /on, то вернуть 200-й заголовок и сообщение Enable, а также включить светодиод. Заметим, что используется привычная Arduin’щикам функция digitalWrite(pin, value);
    • небольшое отличие в случае страницы выключения — /off, для выключения светодиода используется не функция digitalWrite(pin, value), а метод write(value);
    • во всех остальных случаях возвращаем ошибку «404 — Page Not Found».
  • А последняя строка собственно поднимает сервер, с внутренней функцией onPageRequest, на 80-м порте.

Важно заметить, что мы можем возвращать различный контент: обычный текст, HTML, XML и так далее.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru» ← Ранее Конкурс по конкурентной разведке перед PHDays 2018 стартует сегодня Далее → Команда упасть. Эксплуатируем критическую уязвимость в почтовике Exim 4

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий