Перейти к содержимому

Как проверить esp8266 работает или нет

  • автор:

ESP8266 с чего начать или первый опыт

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

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

image

Итак, приступим!

Я заказал себе 3 варианта плат на известном китайском сайте:

  1. ESP8266 WIFI Serial Wireless Dev Test Board на основе ESP-12 (далее «Жёлтая плата») ($3.12)
  2. ESP8266 ESP-07 вместе с Adapter Plate For ESP8266 (далее ESP-07) ($2.30)
  3. LoLin V3 NodeMcu Lua на основе ESP-12 (далее «Лолин») ($3.12)
  1. У Жёлтой платы уже встроены светодиодики, которыми можно сразу поморгать, для питания можно использовать не сказочные 3,3В, которые надо еще как-то добыть, а 3 батарейки типа АА или подключив 4,5В (что я и сделал).
  2. ЛоЛин меня подкупила тем, что подключается с помощью микро юсб кабеля и ей не нужны никакие UART конвертеры — в ней сразу он встроен на основе китайского чипа CH340, для которого можно легко найти драйвера как на win7x64 и на win10x64 (мои случаи), и, опять же питание от обычного адаптера с USB выходом, а не мудреные 3,3В.
  3. Конкретно эту ESP-07 я брал под метеостанцию. Ртутно-аналоговый градусник выцвел, прибивать новый лениво, да и врёт он нагреваясь от стены дома прилично. Для начинающих рекомендую брать сразу Adapter Plate — удорожание всего на 20 центов, а удобств намного больше.

Во всех инструкциях по запуску пишут, что если Вы подключили питание и появилась WiFi сеть «AI-THINKER xxxxxxx», значит устройство работает. С моими устройствами так и вышло — они все создали WiFi сеть, к которой можно было подключиться. Ура! Заработало! Обрадовался я, но рано.

Для начала решил экспериментировать с Жёлтой платой. У продавца с лучшим показателем цена-рейтинг в описании товара были только картинки. И ни слова описания. На русскоязычных ресурсах были упоминания это платы, но конкретики именно про неё не нашёл. У некоторых продавцов я видел такую инструкцию:

Инструкция к Жёлтой плате

1. Android phone installation IOT.APK, IOS client be released later
2. shorting cap connected to the power to enter the programming mode, enter the normal operating state removed
3. Replace the battery, mobile search network «AI-THINKER» router
4. join the router (the router module form) password is: ai-thinker
5. after the success can be added directly to the control module of the mobile phone.
6. Enter the home router «SSID» and «Password» in the «Configure Device», then click on the icon at the top of the router, wait a few moments after the jump to join the router, connect the phone router WiFi, again «discovered device» to achieve control in the LAN.

Мой вольный перевод:

1. На устройство с Wi-Fi работающим на ОС Андроид (не работает на версии 5.0 и старше!) установите IOT.APK, Клиент для IOS будет выпущен позже
2. На плате необходимо снять пермычку, активирующую режим прошивки.
3. Перезагрузите модуль (отключить и подключить питание) и через минуту ищите на андроид устройстве Wi-Fi сеть «AI-THINKER»
4. Подключитесь к этой сети с паролем «ai-thinker»
5. После этого запустите установленной приложение IOT и нажмите на лупу. Плата должна автоматически определиться. После этого перемещайте ползунки, щелкайте выключателями и наблюдайте светодиоды на плате.

Нестыковка была в том, что моя сеть «AI-THINKER хххххххх» не спрашивала пароль, а сразу телефон к ней подключался. И приложение в упор не «видело» ESP после подключения. RGB светодиод горел синим с установленной перемычкой или зеленым без неё.

image

Я догадывался, что, возможно, китайцы спаять — спаяли, а прошить забыли (или криво прошили). Поэтому решил шить сам. Для прошивки я использовал ESP8266 Flasher. И тут вылез второй сюрприз: ни одна программа плату не распознавала, на команды не отвечала, прошивка не заливалась. Подключал через Ардуино и через UART-конвертер — ничего. Две другие платы уже успел перепрошить и помигать светодиодом, а тут глухо. Пока не догадался прозвонить контакты.

На этой плате отдельно выведены три контакты для прошивки: TX, RX, GND. Так вот оказалось, что TX разведен на RX самой ESP-12, соответственно RX — на TX. Т.е. просто надо было поменять местами два провода: к отдельно вынесенным трём контактам подключаем UART-конвертер по схеме:

TX-TX
RX-RX
GND-GND
Или Ардуино:
TX-RX
RX-TX
GND-GND

После такого открытия модуль ожил, была найдена оригинальная прошивка для мигания светодиодами (AI-THINKER-IOT-2014-10-17 165528.bin) и прошита все тем же ESP8266 Flasher. Появился пароль на точку доступа, и приложение сразу увидело Жёлтую плату. Единственный нюанс: для перепрошивки надо установить перемычку, для всех остальных случаев снять. И не забывать перезагружать устройство после перепрошивки.

ESP8266 ESP-07 вместе с Adapter Plate

Инструкция подключения ESP-07 (ESP-12) через UART-конвертер:

image

  • Красный — питание 3,3в;
  • Черный — GND;
  • Желтый — на стороне ESP8266 — RX, на стороне USB-TTL — TX;
  • Зеленый — на стороне ESP8266 — TX, на стороне USB-TTL — RX;
  • Оранжевый — CH_PD (CHIP ENABLE) — должен быть всегда подтянут к питанию;
  • Синий — GPIO0 — подключен через выключатель к земле для включения режима перепрошивки модуля. Для обычного старта модуля GPIO0 можно оставить никуда не подключенным;
  • Серый — GPIO15 (MTDO, HSPICS) этот пин необходимо притянуть к земле;
  • Если подключаете к Ардуино, то RX-RX, а TX-TX.

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

Загружал скрипт через ESplorer.

Было на Ардуино

image

Стало на ESP8266

image

Жду компактный модуль питания 220AC — 3,3DC чтобы оптимизировать количество проводов.

LoLin V3 NodeMcu (Лолин)

Эту плату советовали сразу прошить прошивкой NodeMcu, что и было сделано через программу NodeMcu flasher. Сама прошивка собирается конструктором, что позволяет включить только самое необходимое.

Далее предполагалось подключение и управление 2-хканальным реле и управлять двумя бра в спальне. Тут хочу остановиться на одном ньансе. У китайского варианта такого реле есть перемычка JD-VCC — VCC — GND. По умолчанию она установлена на контакты JD-VCC — VCC.

image

Так вот, пермычку никогда нельзя устанавливать на VCC — GND — устроите КЗ! Эти три контакта используются для дополнительного питания реле, в случаях, когда управляющее может быть недостаточным для срабатывания реле. Присутсвие перемычки обозначает, что питание идет от «управляющих» контактов.

Скрипт был использован такой:

Текст скрипта

#================= init.lua ================= -- вводим имя сети и пароль сюда ssid,pass = "SSID","PASSWORD"; if (file.open('wificonf') == true)then ssid = string.gsub(file.readline(), "\n", ""); pass = string.gsub(file.readline(), "\n", ""); file.close(); end wifi.setmode(wifi.STATION) wifi.sta.config(ssid,pass) wifi.sta.autoconnect(1); print('IP:',wifi.sta.getip()); --print('MAC:',wifi.sta.getmac()); led1 = 3 led2 = 4 gpio.mode(led1, gpio.OUTPUT) gpio.mode(led2, gpio.OUTPUT) restart=0; gpio.write(led1, gpio.HIGH); gpio.write(led2, gpio.HIGH); t=0 tmr.alarm(0,1000, 1, function() t=t+1 if t>999 then t=0 end end) srv=net.createServer(net.TCP, 1000) srv:listen(80,function(conn) conn:on("receive",function(client,request) -- парсинг для отслеживания нажатий кнопок _GET local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = <> if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end -- это начало веб сайта -- в начале ставим , в конце каждой строки знак \ -- в конце последней строки не ставим знак \, а  conn:send('HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\ \ \ \ \ \ \ My control\ \ 
\
\

\ \ \

\

\ \ \

\
\
\ ') -- это конец -- теперь опрос нажатых кнопок local _on,_off = "","" if(_GET.pin == "ON1")then gpio.write(led1, gpio.LOW); elseif(_GET.pin == "OFF1")then gpio.write(led1, gpio.HIGH); elseif(_GET.pin == "ON2")then gpio.write(led2, gpio.LOW); elseif(_GET.pin == "OFF2")then gpio.write(led2, gpio.HIGH); end conn:on("sent",function(conn) conn:close() end) collectgarbage(); end) end) #========================================

Я не смог повторно найти ссылку на первоисточник. Но схема проста: К Лолин подключаем на выходы D3 и D4 реле 1 и реле 2 (led1 = 3 led2 = 4). Дальше заходим на выданный нашим роутером IP адресс и видим страничку:

image

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

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

Ссылки
  • esp8266.ru — очень обширный ресурс по ESP8266
  • NodeMcu flasher (ESP8266 Flasher)
  • NodeMcu конструктор
  • Драйвер CH340 (для Windows)
  • Статья «ESP8266 — подключение и обновление прошивки»
  • AI-THINKER-IOT-2014-10-17 165528.bin — прошивка для Желтой платы
  • ESplorer
  • Народный мониторинг
  • Как отправлять данные датчиков DS18B20 на Народный мониторинг
  • Проект homes-smart

Проверить работает ли сервер

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

Shustrik Новичок привет всем. Поднял сервер на плате. Управляю встроенным светодиодом. Вопрос можно ли как то управлять сервоприводом? Понедельник в 00:15 РедактироватьПожаловаться+ ЦитатаОтветитьНик в ответВ закладки Shustrik Shustrik Новичок Разобрался. Но есть проблема. После выполненной команды, серво занимается определенное положение. Потом нужно отключить серву, для свободного перемещения рукой. Вот мой код)). Когда серва заняла позицию я её отключаю, даю время занять положение и отключаю, но при этом отключается сервер. Пока не перезапустишь. Может быть кто нибудь посоветует как, это можно обойти? Код (Text): #include #include #include /* * This sketch demonstrates how to set up a simple HTTP-like server. * The server will set a GPIO pin depending on the request * http://server_ip/gpio/0 will set the GPIO2 low, * http://server_ip/gpio/1 will set the GPIO2 high * server_ip is the IP address of the ESP8266 module, will be * printed to Serial when the module is connected. */ #include const char* ssid = "net651"; const char* password = "21343242514"; Servo servo; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); void setup() < Serial.begin(115200); delay(10); servo.attach(D5); // prepare GPIO2 pinMode(2, OUTPUT); digitalWrite(2, 0); pinMode(5, OUTPUT); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) < delay(500); Serial.print("."); >Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); > void loop() < digitalWrite(5, 0); // Check if a client has connected WiFiClient client = server.available(); if (!client) < return; >// Wait until the client sends some data //Serial.println("new client"); while(!client.available()) < delay(1); >// Read the first line of the request String req = client.readStringUntil('\r'); //Serial.println(req); client.flush(); // Match the request int val; if (req.indexOf("/gpio/0") != -1) < val = 0; Serial.println("0 "); >else if (req.indexOf("/gpio/1") != -1) < val = 1; Serial.println("1"); >else < //Serial.println("invalid request"); client.stop(); return; >// Set GPIO2 according to the request digitalWrite(2, val); client.flush(); // Prepare the response String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n\r\nGPIO is now "; s += (val)?"high":"low"; s += "\n"; // Send the response to the client client.print(s); delay(1); Serial.println("Client disonnected"); // The client will actually be disconnected // when the function returns and 'client' object is detroyed if(val == 1) < servo.attach(D5); delay(100); servo.write(180); delay(1000); servo.detach(); >if(val == 0) < servo.attach(D5); delay(100); servo.write(0); delay(1000); servo.detach(); >>

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования

Микроконтроллер ESP8266 — недорогая и функциональная микросхема, от производителя Espressif, которая поддерживает WiFi-интерфейса.

Обложка поста Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования

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

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

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

Разновидности МК серии ESP и их плат

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

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

ESP-01

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 1

Микроконтроллер ESP-01

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

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 2

Плата WiFi-реле

ESP-03

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 3

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

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 4

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

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 5

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

Платы

WeMos D1 mini

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 6

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

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 7

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

NodeMCU v3

Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования 8

Финальная версия платы этой серии. Существует и 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 — Over 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-скриптов.

Как работать с микроконтроллером ESP8266?

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

  • управление через 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. Чтобы это исправить, идём в Файл → Настройки и в поле Дополнительные ссылки для Менеджера плат вставляем эту ссылку:

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

После установки в списке плат появится немалое количество плат. Если не нашли свою плату или не знаете её названия — выбирайте 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 Found\n\n"; 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)

Что делает этот скетч? МК подключается к вашей 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 можно прошивать «по воздуху».

Знакомимся с модулем ESP8266 подробнее

Модуль ESP8266 (ESP-07)

ESP8266 — это микроконтроллер, разработанный в 2014 году и выпускающийся компанией Espressif Systems — китайской компанией из Шанхая. Он представляет собой сетевое решение с Wi-Fi-трансивером на борту плюс возможность выполнения записываемых в его память приложений.

Существует множество модификаций плат, именуемых обычно от ESP-01 до ESP-12. Сейчас уже появились ещё другие наименования плат от сторонних разработчиков. Отличия в платах заключается в основном в портах ввода-вывода, количестве флеш-памяти, вида коннекторов и т.п. Процессор — один и тот же, так что с точки зрения программирования не имеет значения какую плату программировать.

Спецификация ESP8266:

  • Напряжение питания: 3,3 В
  • Энергопотребление:10 мка. 170 мА
  • Флеш-память: до 16 мб максимум (обычно 512 кб)
  • Процессор: Tensilica L106, 32 бита
  • Скорость процессора: 80. 160 МГц
  • ОЗУ: 32 кб + 80 кб
  • Порты ввода-вывода общего назначения: 17 (мультиплексируемые с другими функциями)
  • АЦП: 1 ввод с разрешением 1024
  • Поддержка 802.11: b/g/n/d/e/i/k/r
  • Максимальное число подключений TCP: 5

Из спецификации видно, что вопрос как долго будет работать ESP8266 от батареек не может быть легко определён. Потребление энергии изменяется в очень широком диапазоне — при передаче на полной мощности оно составляет 170 миллиампер, а в режиме сне — всего 10 микроампер!

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

Подключение к ESP8266

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

Для упрощения работы с модулем на стадии программирования и отладки своего приложения можно использовать последовательный порт (UART). ESP8266 имеет специальный последовательный порт для этого — два порта, означенных Rx и Tx. Tx — служит для передачи данных, а Rx — для приёма. Этими портами модуль соединяется с соответствующими портами партёра. Наиболее удобно подключить этот порт к компьютеру посредством переходника USB-UART. При таком подключении мы может отправлять модулю команды из программы терминала прямо с клавиатуры и получать ответы от модуля в терминал или записывать программу в модуль.

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

У модуля ESP8266 есть также второй последовательный порт. Главное его назначение — вывод диагностической и отладочной информации. Это может быть очень полезно при проверке своей программы. Пин Tx второго последовательного порта мультиплексирован с пином GPIO2.

Второй UART ESP8266

Теория Wi-Fi

Работая с устройствами стандарта Wi-Fi, желательно иметь понимание принципе его работы в беспроводной сети. На высоком уровне, Wi-Fi — это беспроводная сеть для соединений TCP/IP. Wi-Fi — это набор протоколов беспроводной сети, описанных в стандарте IEEE 802.11.

Устройство, называемое Wireless Access Point (AP) — беспроводной точкой доступа (точкой доступа) работает как узел коммуникаций. Обычно оно подключено или работает в режиме роутера. Например, Wi-Fi роутер в вашем доме работает в таком режиме.

Модуль ESP8266 может работать как в режиме точки доступа (Access Point), так и в режиме клиента — рабочей станции (Station), а может и в обоих режимах одновременно. Чаще всего точка доступа имеет подключение к интернету и работает как мост между устройством и интернетом. Несколько рабочих станций в локальной сети общаются между собой также через точку доступа. Станция одновременно может быть подключена только к одной точке доступа. Каждое устройство в сети имеет собственный уникальный MAC-адрес — 48-битовое значение.

Если в пределах видимости находится несколько точек доступа, их потребуется как-то различать, поэтому у каждой точки доступа есть сетевой идентификатор, называемый SSID (Service Set Identifier, иногда также называемый BSSID) — это имя сети, имеющее длину до 32 символов.

Режим AT-команд

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

AT-команды

Когда модуль подключён к терминалу компьютера, мы можем отправить самую простую команду — «AT«. В ответ на неё модуль должен отправить ответ «OK«.

Тип Формат Описание
Тест AT+=? Запрос параметров и диапазона возможных значений
Запрос AT+? Запрос текущих значений параметров
Установка AT+=

Установка значений параметров
Выполнение AT+

Выполнение команд

Все команды заканчиваются символами «\r\n».

Команда Описание
AT Пишет в ответ «OK»
AT+RST Перезапускает модуль ESP8266
AT+GMR Возвращает версию SDK модуля и процессора AT команд.
Пример:
AT version:0.21.0.0
SDK version:0.9.5
AT+GLSP=

Включение режима сна на указанное число миллисекунд. Модуль проснётся через указанное время.
ATE[0|1] Отправка полученных AT команд обратно в терминал.
ATE0 — эхо выключено
ATE1 — эхо включено
AT+RESTORE Восстановление значение по умолчанию из флеш-памяти
AT+UART_CUR=,,,,

Настройка режима работы UART
AT+UART_DEF=,,,,

То же, что и AT+UART_CUR=,,,,
AT+SLEEP? Получить текущий режим сна
AT+SLEEP=

Режим сна:
  • 0 — режим сна выключен
  • 1 — режим неглубокого сна
  • 2 — режим модемного сна
  • ecn — защита
    • 0 — OPEN
    • 1 — WEP
    • 2 — WPA_PSK
    • 3 — WPA2_PSK
    • 4 — WPA_WPA2_PSK
    • mode
      • 0 — Soft AP
      • 1 — Station
      • 2 — Soft AP + Station
      • 0 — DHCP включен
      • 1 — DHCP выключен
      • 0 — не подключаться
      • 1 — подключаться
      • stat
        • 2 — получен IP
        • 3 — подключен
        • 4 — отключен
        • 0 — ESP8266 работает как клиент
        • 1 — ESP8266 работает как сервер
        • type — тип, TCP или UDP
        • addr — удалённый IP адрес
        • port — удалённый порт
        • local port — локальный порт
        • mode — только для UDP
        • 0 — режим одиночного подключения
        • 1 — режим множественных подключений
        • mode
          • 0 — удалить сервер (требует перезапуска)
          • 1 — создать сервер
          • 0 — нормальный режим
          • 1 — сквозной режим

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

          Модуль ESP8266 позволяет записывать собственные приложения для их запуска. Вы может скомпилировать код с языка C и загрузить в модуль. Такая процедура называется «прошивкой» (flashing). Для того, чтобы ваше приложение выполняло полезные функции, у него должна быть возможность отправлять и принимать данные по сети и/или работать с внешними датчиками, входами и выходами. ESP8266 оснащён базовыми функциями для этого, набор которых представляет собой примитивную «операционную систему». Службы этой ОС могут быть вызваны вашим приложением. Они полностью документированы и для вас будет очень полезно уметь пользоваться ими.

          Например, если вам надо подключиться к точке доступа WiFi, в API есть команда для этого. Для получения IP адреса также есть API, для получения времени с запуска модуля также есть API. Таких функций очень много и они позволяют делать с модулем очень много полезных вещей. Запомнить все функции, конечно, невозможно, но стоит знать об их существовании. В интернете можно получить последнюю информацию на сайте производителя: http://espressif.com/en/products/esp8266/ или http://bbs.espressif.com/.

          Режим загрузки

          Когда модуль ESP8266 загружается, он проверяет значения уровней на пинах MTDO (GPIO15), GPIO0 и GPIO2. Комбинация высоких и низких уровней на этих пинах позволяет получить 3-битовое число с восемью возможными значениями от 000 до 111. Каждое значение интерпретируется модулем:

          Значение Десятичное значение Пояснение
          000 0 нет данных
          001 1 Загрузка с данных по UART. Также данные для прошивки модуля.
          010 2 Быстрый старт
          011 3 Загрузка с флеш-памяти
          100 4 SDIO low speed V2
          101 5 SDIO high speed V1
          110 6 SDIO low speed V1
          111 7 SDIO high speed V2

          С практической точки зрения это значит, что если нам требуется нормальный запуск модуля, нам требуется загрузить его с флеш-памяти (значение на пинах 011), а если нам требуется перепрошить модуль, то на пинах должно быть значение 001.

          SDK ESP8266

          SDK (Software Development Kit — набор средств разработчика) для модуля ESP8266 для языка C представляет собой набор файлов, называемых заголовочными с расширениями .h. Простым языком это файлы определений типов данных и функций, которые могут потребоваться при компиляции программы. SDK ESP8266 содержит папку includes с файлами от компании Espressif для нашего модуля:

          Файл Пояснение
          at_custom.h определения собственных расширений AT команд
          c_types.h определения для языка C
          eagle_soc.h Низкоуровневые определения и макросы
          espconn.h Определения для TCP и UDP
          espnow.h Функции поддержки esp now
          ets_sys.h нет данных
          gpio.h Порты ввода-вывода
          ip_addr.h Определения для IP адреса и макросы
          mem.h Определения для работы с памятью
          os_type.h Тип ОС
          osapi.h Пользовательские заголовки с названием «user_config.h»
          ping.h Определения для ping
          pwm.h Определения для ШИМ
          queue.h Определения списков и очередей
          smartconfig.h Определения конфигурации
          sntp.h Определения SNTP
          spi_flash.h Определения для флеш-памяти
          upgrade.h Определения для обновлений
          user_interface.h Определения для ОС и WiFi.

          Компиляция

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

          Редактировать текст программы удобнее всего в каком-нибудь редакторе, который имеет подсветку синтаксиса, встроенную справку и другие полезные функции, и ещё лучше — в интегрированной среде разработки (Iintegrated Development Enviroment). Работая в такой среде вы можете написать текст программы, скомпилировать её и сразу же загрузить в модуль.

          Широко известны такие среды разработки как Eclipse и Arduino IDE.

          Eclipse — очень мощная среда, разработанная компанией IBM и получившая статус открытой много лет назад. Она написана на Java, что означает возможность работы в разных ОС: Windows, Linux, OS X. К этой среде разработки можно подключать множество дополнений, а набор таких дополнений для языка C называется «C Developers Tools» (CDT). CDT не включает компилятор языка C. Его следует выбрать самому. Подробнее о компиляции приложения для ESP8266 в Eclipse будет написано в отдельной статье.

          Arduino IDE — гораздо более простая среда разработки, которая, тем не менее, позволяет писать и загружать в модуль свои приложения. Как это делать описано в нашей статье «Arduino IDE + ESP8266».

          Отладка

          При написании программы очень часто они работают не так как ожидалось. Для модуля ESP8266 отладка (получение служебной информации и состояния системы) облегчается наличием последовательного порта специально для вывода отладочной информации. Вы можете напечатать в UART1 (GPIO2) что хотите при помощи функции os_printf(). Если подключить на пину GPIO2 модуля преобразователь UART-USB, то вы сможете видеть эту информацию на экране компьютера в реальном времени. Таким образом, имея один порт UART для прошивки модуля, а второй для отладки, вам не придётся ничего переключать при создании своей программы. Включение или выключение вывода информации управляется функцией system_set_os_print().

          В следующей статье мы напишем тестовую программу — мигание светодиодом, скомпилируем её и запишем в модуль.

          Ещё наши статьи о WiFI модуле ESP8266:

          • Arduino IDE + ESP8266
          • ESP8266 + Arduino: пример скетча
          • WiFi модуль ESP8266

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *