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

Когда я попытался поработать с данной платой, первым делом мне захотелось сделать небольшой сервер, который отображает html файл. Я отправился на официальный сайт и нашёл много информации, захотелось разобрать более детально вопрос подключения к wi-fi, режимы работы клиента и точки доступа.

image

Можно работать в разных средах разработки, но самое простое – добавить плату в Arduino IDE. Сделать это очень просто. Сначала идём в настройки

image

После добавления этой ссылки, можно будет скачать набор плат esp8266 – перейдём в “менеджер плат”

Достаточно, ввести в поиск “esp”, как вы увидите нужную библиотеки, которую нужно скачать (esp8266 by ESP8266 Community)

Код я компилировал со следующими параметрами. 80Мгц после 16Мгц AtMega, звучит весомо.

Я почистил код от включения светодиода и оставил только составляющую для подключения к сети wi-fi в режиме клиента. Обычно это необходимый минимум для IoT устройства.

 #include  #include   /* Put your SSID & Password */ const char* ssid = "tfsi";  // Enter SSID here const char* password = "1234567890";  //Enter Password here  ESP8266WebServer server(80);  void setup() {   Serial.begin(9600);   delay(100);    Serial.println("Connecting to ");   Serial.println(ssid);    //connect to your local wi-fi network   WiFi.begin(ssid, password);    //check wi-fi is connected to wi-fi network   while (WiFi.status() != WL_CONNECTED) {   delay(1000);   Serial.print(".");   }   Serial.println("");   Serial.println("WiFi connected..!");   Serial.print("Got IP: ");  Serial.println(WiFi.localIP());    server.begin();   Serial.println("HTTP server started"); } void loop() {   server.handleClient(); } 

Единственное – мне не понравилось получение адреса по DHCP. Очень быстро обнаружилась команда

 WiFi.config(ip, gateway, subnet); 

Где эти все параметры можно задать, например после объявления переменных

 IPAddress ip(192, 168, 2, 177); IPAddress gateway(192, 168, 2, 1); IPAddress subnet(255, 255, 255, 0); 

Теперь запускаем терминал и проверяем

Смотрите также:  MQTT на телефоне с IOS. Управляем умным домом в среде Arduino

Проверяем пинг – всё отлично.

Немного про режимы работы esp8266 – можно работать только как клиент, что мне и нужно

 WiFi.mode(WIFI_STA);     // Режим клиента 

Можно только как точка доступа (AP) или комбинированный режим

 WiFi.mode(WIFI_AP);      // Режим точки доступа WiFi.mode(WIFI_AP_STA);  // Включены оба режима 

Оба режима включать конечно есть смысл. Приведу пример из мира домашних камер видеонаблюдения – сначала устройство работает в режиме AP и вы можете к нему легко подключиться. Потом заходите на главную страницу, находите свою wi-fi сеть, подключаетесь – всё! Устройство в вашей сети, и режим точки доступа больше не нужен, до следующего сброса. Для старта esp8266 в режиме точки доступа (AP), можно использовать команду

 WiFi.softAP(ssid, password);  

Теперь, если поменять строчку

 WiFi.begin(ssid, password); 

на

 WiFi.softAP(ssid, password);  

То мы сможем найти с любого устройства нашу сеть

Если удалить password, то сеть, которую создаёт модуль будет открытая, без пароля.

 WiFi.softAP(ssid);  

Для устройства “из коробки”, это тоже хороший вариант, а например задание пароля сделать при первом подключении. Как видим, сеть стала открытой

Смотрите также:  Подключение дисплея ili9341 к ESP8266. Вывод JPG картинки

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

 server.on("/", handleRoot); 

А потом создать функцию handleRoot, там можно описать ответы сервера

 void handleRoot() {   server.send(200, "text/plain", "hello World!"); } 

200 код – это код успешного ответа на запрос пользователя. В данном случае мы отправляем обычный текст hello World. Также помимо этого мы можем выполнить другие действия в данной функции, если требуется. Проверяем:

Давайте заставим наш сервер отображать, что нибудь интересное – например html файл. Создадим рядом с файлом проекта файл index.h со следующим содержимым. Этот пример я взял на этом сайте

 const char MAIN_page[] PROGMEM = R"=====(   My first web page    Hello World....     )====="; 

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

 #import "index.h" 

Теперь нам нужно немного изменить функцию handleRoot, чтобы отобразить изменения на главной странице. Легко заметить, что мы поменяли формат отображения текста с “text/plain” на “text/html”,а вместо текста подкинули переменную строкового типа “s”, которая ссылается на область памяти программы PROGMEM. PROGMEM разрешает нам помещать код в flash-память, а не в оперативную, тем самым экономим ресурсы микроконтроллера.

 void handleRoot() {   String s = MAIN_page;   server.send(200, "text/html", s); } 

Этот пример конечно заработал

Смотрите также:  Подключение двух осевого джойстика KY-023 к Arduino. Пишем простую игру

Но мне было интересно проверить работу css. Закинул несколько стилей в теги и сделал 3 кнопки. Весь код получился вот такой

 const char MAIN_page[] PROGMEM = R"=====(   Control page    Main page Light Relay Door    )====="; 

Отлично – esp8266 легко отдаёт web-страницы с css, так что можно делать красивые админки, для управления чем-либо

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

<!DOCTYPE html PUBLIC «-//W3C//DTD HTML 4.0 Transitional//EN» «http://www.w3.org/TR/REC-html40/loose.dtd»> <?xml encoding=»utf-8″ <html>

Поскольку жестко прописывать в код sketch-а — некорректно, воспользуемся WiFiManager. Код вынесен в отдельный WiFi.ino файл (для создания нажать сочетение Ctrl-Shft-N).

#include "ESP8266WiFi.h" #include  #include  #include          //https://github.com/tzapu/WiFiManager //#include   //SSID of your network char ssidWiFi[32]; //SSID of your Wi-Fi router char passWiFi[32]; //Password of your Wi-Fi router //String ssidWiFi = ""; //String passWiFi = "";  //char* host = "api.thingspeak.com";  //ESP8266WebServer server(80); //DNSServer dnsServer; //PersWiFiManager wifiManager(server, dnsServer);  //int numOfRepeat = 0;  void setupWiFi() {   //Static parameters for AP   IPAddress _ip = IPAddress(192,168, 1, 5);   IPAddress _gw = IPAddress(192, 168, 1, 1);   IPAddress _sn = IPAddress(255, 255, 255, 0);      //WiFiManager intialization. Once its business is done, there is no need to keep it around   WiFiManager wifiManager;   //reset saved settings   //wifiManager.resetSettings();   wifiManager.setAPStaticIPConfig(_ip, _gw, _sn);   //wifiManager.setSTAStaticIPConfig(_ip, _gw, _sn);        //fetches ssid and pass from eeprom and tries to connect   //if it does not connect it starts an access point with the specified name   //and goes into a blocking loop awaiting configuration   if (!wifiManager.autoConnect("ResourcesMeterAP"))    {     Serial.println("failed to connect, we should reset as see if it connects");     delay(3000);     ESP.reset();     delay(5000);   }   else   {     String pass = WiFi.psk();     String ssid = WiFi.SSID();      //passWiFi = pass.c_str();     strcpy(passWiFi, pass.c_str());     strcpy(ssidWiFi, ssid.c_str());          Serial.print("Wi-Fi connected to " + String(ssidWiFi) + ". IP address: ");     Serial.println(WiFi.localIP()); //IP2STR( WiFi.localIP()));     Serial.print("Strength ...: ");     Serial.println(WiFi.RSSI());   } }  bool connectWiFi() {   if (WiFi.status() != WL_CONNECTED)   {     //Serial.println("Tryng to connect to Wi-Fi AP with SSID [" + String(ssidWiFi) + "]");     WiFi.mode(WIFI_STA);     WiFi.begin(ssidWiFi, passWiFi);     //WiFi.begin();        int connRes = WiFi.waitForConnectResult();        if (connRes != WL_CONNECTED)     {       Serial.println("Wi-Fi connection to " + WiFi.SSID() + " failed. Status " + String(WiFi.status()) + ", " + WiFiconnectionStatus(WiFi.status()) + ", Retrying later...n");       WiFi.disconnect();       return false;     }     else {       Serial.print("Wi-Fi connected to " + WiFi.SSID() + ". IP address: ");       Serial.println(WiFi.localIP()); //IP2STR( WiFi.localIP()));       Serial.print("Strength ...: ");       Serial.println(WiFi.RSSI());     }   }   return true; }  String WiFiconnectionStatus(int which) {   switch (which)   {   case WL_CONNECTED:     return "Connected";     break;   case WL_NO_SSID_AVAIL:     return "Network is not availible";     break;   case WL_CONNECT_FAILED:     return "Wrong password";     break;   case WL_IDLE_STATUS:     return "Idle status";     break;   case WL_DISCONNECTED:     return "Disconnected";     break;   default:     return "Unknown";     break;   } }

Полезные ссылки

  • WiFiManager with ESP8266 – Autoconnect, Custom Parameter and Manage your SSID and Password
  • http://ryandowning.net/PersWiFiManager/about.html — ещё один проект.

Spread the love Как задать статический IP адрес контроллеру ESP8266?Будем рассматривать этот вопрос на примере платы контроллера NodeMcu 0.9 ESP-12 WIFI ESP8266.Изучая стандартные примеры скетчей, которые прилагаются к библиотекам ESP8266WiFi при настройке Arduino IDE ESP8266 для работы с WiFi контроллером, все останавливаются на вопросе: «а как же мне узнавать IP-адрес, который во всех примерах получается динамически, без использования монитора порта?»Максимум удобства для обнаружения нашего контроллера, которые предлагаются в примерах — это предложение испоьзовать технологию mDNS. Это типа локальный способ назначения устройствам в сети своих символьных имен для доступа к ним по протоколу http на tcp.Первый способ — технология mDNSДавайте для начала рассмотрим этот способ удобного обращения к нашему WiFi контроллеру при помощи придуманных символьных адресов. Тем более, что в примерах приведен не полный и неправильный синтаксис обращения к классу mDNS.Действительно, задумка очень интересная. Работает это так: мы в программном коде своей программы указываем символьное название сервера, который будет крутиться в ESP8266. Например мы назовем его «teplica1» (теплица1). И чтобы обратиться к web-странице этого сервера, мы просто в адресной строке браузера нашего компьютера или гаджета пишемhttp://teplica1.local/и браузер нам отобразит содержимое, полученное от контроллера, не зависимо от динамически полученного IP-адреса в данный момент.Вот изменённый код web-сервера, взятый со стандартного библиотечного примера, который поддерживает сетевое назначение имен mDNS. Вобщем к обычному коду сервера добавляются всего 4 строки обращения к классу MDNS. К позитиву так же можно отнести и то, что библиотека забирает не очень много памяти контроллера, при её подключении. Теперь, чтобы обратиться к серверу нам не обязательно знать его IP. Просто достаточно ввести в строку браузера http://esp8266.local/ и получим доступ к веб-страничке контроллера и получим ответ «hello from esp8266!». Красота и великолепие не правда ли!? Но теперь вернемся к реальности. Технология MDNS на данный момент по умолчанию поддерживается только гаджетами с операционками фирмы Apple. На гаджеты иных операционных систем необходимо устанавливать специальные утилиты, с андроидом вообще плачевнее всего. Вобщем мне такое не подходит, честно говоря.

Хочу статический IP на ESP8266

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

config (ip, gateway, subnet)

Эта функция принимает следующие параметры: IP-адрес, гейтвей и маску подсети. У них довольно интересный тип переменной (посмотрим в примере). config активируют после функции begin.

Я взял предыдущий пример с mDNS и переделал его под задаваемый IP адрес без класса mDNS.

После загрузки этой программы в плату контроллера, можно любым браузером в WiFi сети перейти по адресу

http://192.168.1.17

и получим ответ hello from esp8266!

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

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

Шилд монтажный для Arduino Nano V3

Шилд для удобного монтажа периферии, подключаемой к контроллеру Arduino Nano. Так же удобно запитыва..

63.74грн.

Ниодимовый магнит 8mm x 1mm N35

Цилиндрический ниодимовый магнит N35Размеры 8мм x 1ммИдеально подходит для работы в связке с магнитн..

3.58грн.

Уроки Arduino видимость переменных для начинающих

Переменные в Arduino IDE разделяются на глобальные и локальные. Глобальные переменные дост..

Тестер автомобильный

Простое устройство для проверки целостности электрической цепи для автомобилистов.Индицирует наличие..

73.36грн.

Держатель для батареек 3хAA

Бокс для трёх пальчиковых батареек типа ААОбщее напряжение на проводах бокса получится 4,5 В..

20.52грн.

Функции библиотеки WiFi ESP8266 очень схожи с функциями библиотеки для обычного WiFi шилда.

Список отличий:

  • WiFi.mode(m): выбрать режим WIFI_AP (точка доступа), WIFI_STA (клиент), или WIFI_AP_STA (оба режима одновременно).
  • WiFi.softAP(ssid) создает открытую точку доступа
  • WiFi.softAP(ssid, password) создает точку доступа с WPA2-PSK шифрованием, пароль должен быть не менее 8 символов
  • WiFi.macAddress(mac) позволяет получить MAC адрес в режиме клиента
  • WiFi.softAPmacAddress(mac) позволяет получить MAC адрес в режиме точки доступа
  • WiFi.localIP() позволяет получить IP адрес в режиме клиента
  • WiFi.softAPIP() позволяет получить IP адрес в режиме точки доступа
  • WiFi.RSSI() пока не реализована
  • WiFi.printDiag(Serial); выводит диагностическую информацию
  • Класс WiFiUDP поддерживает прием и передачу multicast пакетов в режиме клиента. Для передачи multicast пакета используйте вместо udp.beginPacket(addr, port) функцию udp.beginPacketMulticast(addr, port, WiFi.localIP()). Когда вы ожидаете multicast пакеты, используйте вместо udp.begin(port) функцию udp.beginMulticast(WiFi.localIP(), multicast_ip_addr, port). Вы можете использовать udp.destinationIP() для определения того, был ли пакет отправлен на multicast адрес или предназначался именно вам. Multicast функции не поддерживаются в режиме точки доступа.

WiFiServer, WiFiClient, и WiFiUDP работаю точно так же, как и с библиотекой обычного WiFi шилда. Четыре примера идет в комплекте с этой библиотекой.

Тикер

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

В настоящее время не рекомендуется блокировать операции ввода-вывода (сеть, последовательный порт, файловые операции) в callback функциях тикера. Вместо блокирования устанавливайте флаг в callback функциях и проверяйте этот флаг в основном цикле.

EEPROM

Эта библиотека немного отличается от стандартной Arduino EEPROM. Необходимо вызвать функцию EEPROM.begin(size) каждый раз перед началом чтения или записи, размер (указывается в байтах) соответствует размеру данных, которые вы намереваетесь использовать в EEPROM. Размер данных должен быть в диапазоне от 4 до 4096 байт.

Функция EEPROM.write не производит запись данных во флеш память немедленно, вы должны использовать функцию EEPROM.commit() каждый раз, когда вы хотите сохранить данные в память. Функция EEPROM.end() тоже производит запись данных, а также освобождает оперативную память от данных, запись которых произведена. Библиотека EEPROM использует один сектор во флеш памяти, начиная с адреса 0x7b000 для хранения данных. В поставку включено три примера работы с EEPROM.

I2C (Библиотека Wire)

Реализован только режим ведущего, частота ориентировочно до 450 кГц. Перед использованием шины I2C, нужно выбрать пины SDA и SCL путем вызова функции Wire.pins(int sda, int scl), например Wire.pins( , 2) для модуля ESP-01. Для других модулей пины по умолчанию 4(SDA) и 5(SCL).

SPI

Библиотека SPI поддерживает весь Arduino SPI API, включая транзакции, в том числе фазу синхронизации (CPHA). Clock polarity (CPOL) пока не поддерживается (SPI_MODE2 и SPI_MODE3 не работают).

ESP8266 API

Поддержка функций, специфичных для ESP8266 (режим глубокого сна и сторожевой таймер), реализована в объекте ESP. Функция ESP.deepSleep(microseconds, mode) переводит модуль в режим глубокого сна. Параметр mode может принимать значения: WAKE_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED. GPIO16 должен быть соединен с RESET для выхода из режима глубокого сна.

Функции ESP.wdtEnable(), ESP.wdtDisable(), и ESP.wdtFeed() управляют сторожевым таймером.

ESP.reset() перезагружает модуль

ESP.getFreeHeap() возвращает размер свободной памяти

ESP.getFreeHeap() возвращает размер свободной памяти

ESP.getChipId() возвращает ESP8266 chip IDE, int 32bit

ESP.getFlashChipId() возвращает flash chip ID, int 32bit

ESP.getFlashChipSize() возвращает размер флеш памяти в байтах, так, как его определяет SDK (может быть меньше реального размера).

ESP.getFlashChipSpeed(void) возвращает частоту флеш памяти, в Гц.

ESP.getCycleCount() возвращает количество циклов CPU с момента старта, unsigned 32-bit. Может быть полезна для точного тайминга очень коротких операций

Библиотека OneWire

Библиотека OneWire была адаптирована для ESP8266 (внесены изменения в OneWire.h) Если у вас установлена библиотека OneWire в папку Arduino/libraries, то будет использоваться именно она, а не из комплекта поставки.

mDNS библиотека ESP8266mDNS

Библиотека позволяет реализовать в вашей программе ответ на мультикастовые DNS запросы для локальной зоны, например “esp8266.local”. В настоящее время поддерживается только одна зона. Позволяет обращаться к WEB серверу ESP8266 по имени, а не только по IP адресу. Дополнительную информацию вы можете найти в прилагаемом примере и в файле readme данной библиотеки.

Библиотека Servo

Библиотека позволяет управлять сервомоторами. Поддерживает до 24 сервоприводов на любых доступных GPIO. По умолчанию первые 12 сервоприводов будут использовать Timer0 и будут независимы от любых других процессов. Следующие 12 сервоприводов будут использовать Timer1 и будут разделять ресурсы с другими функциями, использующими Timer1. Большинство сервоприводов будут работать с управляющим сигналом ESP8266 3,3в, но не смогут работать на напряжении 3,3в и потребуют отдельный источник питания. Не забудьте соединить общий провод GND этого источника с GND ESP8266

Другие библиотеки, не включенные в поставку Arduino IDE

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

  • arduinoWebSockets – WebSocket сервер и клиент для esp8266 (RFC6455)
  • aREST REST API handler библиотека, позволяет управлять GPIO через http запросы вида http://192.168.1.101/digital/6/1
  • Blynk – легкий в освоении IoT фреймворк (страница на Kickstarter). Статья на нашем сайте об этой библиотеке и мобильном приложении ESP8266 – Управляем со смартфона через Blynk
  • DallasTemperature DS18B20, DS1820, DS18S20, DS1822
  • DHT11 – используйте для инициализации следующие параметры DHT dht(DHTPIN, DHTTYPE, 15)
  • NeoPixelBus – Arduino NeoPixel библиотека для esp8266
  • PubSubClient Библиотека MQTT by @Imroy. Статья на нашем сайте об этой библиотеке ESP8266 подключаемся к OpenWRT+Mosquitto+mqttwarn и передаем данные на ThingSpeak, EMAIL, Android, iOS, Twitter, CloudMQTT в 100 строчек кода в Arduino IDE
  • RTC – библиотека for Ds1307 & Ds3231 для esp8266
  • Souliss, Smart Home – фреймворк для Умного Дома, построенный на Arduino, Android и OpenHAB

Установка Arduino IDE через Boards Manager

  1. Установите Arduino IDE с официального сайта Arduino.cc
  2. Запустить Arduino IDE, далее Файл – Настройки – в поле Additional Boards Manager URLs вставить ссылку на стабильную версию http://arduino.esp8266.com/package_esp8266com_index.jsonили для nightly build http://arduino.esp8266.com/staging/package_esp8266com_index.json, нажать OK (В это поле вы можете вводить несколько ссылок, разделенных запятой)
  3. Инструменты – Плата – Boards Manager
  4. В Boards Manager в поле фильтра введите esp8266 или вручную пролистайте список и кликните на ESP8266 by ESP8266 Community Forum
  5. Кликните Install и дождитесь окончания загрузки (около 130 Мегабайт). Если загрузка произошла слишком быстро, возможно, что вы уже устанавливали Arduino IDE для ESP8266 и потребуется почистить кэш Boards Manager, иначе у вас останется установленной старая версия. Нужно сначала деинсталлировать старую версию, а потом необходимо удалить файлы кэша. Для Win7 x64 удалите файлы из папки C:UsersПользовательAppDataRoamingArduino15 и повторите все, начиная с п.2
  6. Закройте Boards Manager и в меню Инструменты выберите Плата – Generic ESP8266
  7. Установите частоту вашего модуля 80 или 160Mhz, размер флеш памяти и выберите последовательный порт, к которому подключен ваш USB-TTL адаптер

Схема подключения ESP8266

Оптимальное подключение ESP8266 для Arduino IDE

Оптимальное подключение ESP8266

Подключение ESP8266 Примечание USB-TTL
VCC ESP8266 подключайте к внешнему источнику питания >300мА, 3,3V  
GND все контакты GND должны быть соединены вместе: ESP8266, USB-TTL и источника питания GND
TX (UTXD)   RX
RX (URXD)   TX
GPIO0 подтягивающий к питанию резистор 10k DTR (если на вашем USB-TTL не разведен пин DTR, то вам придется вручную переключать GPIO0 на землю для перевода ESP8266 в режим прошивки)
RESET (RSBT, REST) подтягивающий к питанию резистор 10k, также можете добавить кнопку, соединяющую RESET и GND для ручного сброса модуля RTS (если на вашем USB-TTL не разведен пин RTS, то вам придется вручную перезагружать модуль )
CH_PD (CH_EN) подтягивающий к питанию резистор 10k  
GPIO15 (MTDO)  
GPIO2  
GPIO16 для успешного выхода из режима Deep Sleep необходимо соединить пины ESP8266 GPIO16 и RESET через резистор 470 Ом (на схеме не показан)  

Примечания.

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

2. Если на вашем USB-TTL конвертере выведены пины CTS и DSR – для автозагрузки прошивки они вам не помогут, т.к. работают только на вход.

3. Для стабильной работы ESP8266 требуется источник стабилизированного питания 3,3 вольт, ток более 250 миллиампер. Использование питания от USB-TTL конвертера может привести к нестабильности в работе.

Минимальное подключение ESP8266

Минимальное подключение ESP8266 (повышенная стабильность)

 

Более подробно, со всеми деталями, о подключении ESP8266 вы можете прочитать в нашей статье ESP8266 – подключение и обновление прошивки

Arduino IDE для ESP8266: быстрый старт

1. Подключить USB-TTL к USB

2. Подключить ESP8266 к USB-TTL как обычно. Если вы подключили ESP8266 по схеме без поддержки автозагрузки прошивки (не подключены DTR и RTS), то вручную соедините GPIO0 с землей, передерните питание модуля – все готово для  прошивки

3. Запускаем Arduino IDE

4. В меню ИнструментыПлатаGeneric ESP8266 board (в самом низу)

5. В меню Инструменты выбираем порт, к которому подключен наш USB-TTL

6. В меню Инструменты – выбираете частоту, размер флеш памяти вашего модуля

7. В меню Файл – Примеры (Образцы) – ESP8266WiFi – WiFiWebServer

8. В скетче заполняете SSID и пароль вашей WiFi сети

9. Жмем кнопку компиляции и загрузки скетча

10. Ждем окончании процесса прошивки. После прошивки, если модуль подключен по схеме без поддержки автопрошивки, отсоедините GPIO0 от земли и передерните питание модуля без отключения USB-TTL от питания

11. В меню Инструменты – Монитор последовательного порта

12. Выбираем скорость 115200

13. Смотрим что происходит в терминале

14. Когда модуль подключится к сети, то появятся надписи в мониторе “WiFi connected” и “Server started”

15. Ниже будет IP адрес вашего модуля ESP8266, например 192.168.1.248

16. Открываете любой браузер, в строке адреса вбиваете “http://192.168.1.248/gpio/1″

17. Смотрите монитор последовательно порта и если к ESP8266 к GPIO2 у вас подключен светодиод (через резистор, разумеется), то он включится.

18. Profit!

Автором этого проекта адаптации Arduino IDE для ESP8266 является наш соотечественник из Санкт-Петербурга Иван Грохотков.

Скачать Arduino IDE для ESP8266 с github

Скачать Arduino IDE для ESP8266 с build сервера

Скачать исходный код Arduino IDE для ESP8266

Задать вопросы автору проекта Ивану Грохоткову aka igrr или сообщить об ошибке в Arduino IDE для ESP8266 можно в специальном разделе на нашем форуме.

Интерес к интернету вещей растет с каждым днем, свои курсы по технологии 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
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий