Esp8266 arduino ide использовать gpio
В общем, ESP-01 у меня работает вместе с Arduino Mega и обеспечивает последнюю связью с внешним миром.
То есть, они соединены по RX/TX.
На Меге навешано не так мало и иногда она виснет напрочь. Хотелось бы ESP-01 использовать заодно, как аппаратный watchdog. То есть если не получает от Ардуины секунд 10 чего-то типа "status=ok" по RX , перегружает её к чертям. Но для этого же нужно, чтобы она сажала Reset Ардуины на землю, например, на 100 мс. Могу ли я на ESP-01 GPIO0 или GPIO2 выставить на какое-то время в LOW, (в среде Arduino IDE) или эти пины на ESP-01 "нечистые" и только сами могут ждать LOW или HIGH на этих пинах, чтобы войти в режим перепрошивки и проч?
Пардон, если бестолково сформулировал.
Сергей_Ф
Moderator
@CCat можете, а gpio2 вообще не участвует в выборе режима загрузки. Но учтите, после прошивки esp скетчем из Ардуино она будет общаться по uart так как заложено в скетче. Никаких АТ команды там не будет.
Member
@CCat можете, а gpio2 вообще не участвует в выборе режима загрузки. Но учтите, после прошивки esp скетчем из Ардуино она будет общаться по uart так как заложено в скетче. Никаких АТ команды там не будет.
Спасибо! Да меня уже давно отговорили от AT-команд на этом форуме, так что у меня давно ESP-01 прошита под Arduino IDE. И там вертится скетч, который принимает определенные команды от Ардуины (имя точки доступа, пароль, URL, с которого нужно взять инфу) и отправляет полученную строку Ардуине.
Значит, GPIO2 вообще свободно. Хотя для начала попробую GPIO0, просто она у меня удобно выведена (думал, буду прошивать, не доставая из корпуса, поэтому вывел на "гребенку" reset и GPIO0), так что можно не откручивать и не паять.
Активный участник сообщества
@CCat можете, а gpio2 вообще не участвует в выборе режима загрузки. Но учтите, после прошивки esp скетчем из Ардуино она будет общаться по uart так как заложено в скетче. Никаких АТ команды там не будет.
Jump Boot не поддерживается в Arduino и других прошивках, кроме Web-свалки.
Сергей_Ф
Moderator
согласитесь что в данном случае это совсем не важно. Для всех допустимых вариантах он в высоком уровне, что ТС и нужно.
С выводом log загрузки посложнее, но тоже решаемо.
Алексей.
Active member
Сергей_Ф
Moderator
Member
На каком gpio? 0? А как именно - через оптопару?
Вот видел такую схему
Там еще отслеживание нажатия кнопки (зачем-то между GPIO0 и GPIO2, пока не постиг мудрости решения)
How to Use the ESP8266-01 Pins
(Это там "Step 5: Another Trick – Driving a Relay and Reading a Push Button Using GPIO0 / GPIO2")
Решит задачу оптопара с релейного модуля? С одной стороны +3.3 и GPIO0, с другой - земля и RESET Ардуины?
Алексей.
Active member
Сергей_Ф
Moderator
@CCat в случае gpio2 вполне можно ограничиться механической фильтрацией реле, с gpio0 сигнал лучше отфильтровать RC фильтром, иначе при загрузке esp ваша мега тоже будет перезагружаться, скорее всего. По вашей схеме с оптроном, кнопку выкидывание, между gpio0 и n1-com ставите резистор на 100 Ом, и между n1 оптрона ставите конденсатор 0.01-0.1 мкФ. Хотя может заработает напрямую, если оптрон сам отфильтрует 26 МГц.
Активный участник сообщества
Алексей.
Active member
Смешно
Немного не так, при программировании модуль извлекается из изделия, после программирования устанавливается обратно в изделие, при включении питания на том звоне который длиться во время инициализации сдк, реле вообще никаких звуков не издает.
Member
@CCat в случае gpio2 вполне можно ограничиться механической фильтрацией реле, с gpio0 сигнал лучше отфильтровать RC фильтром, иначе при загрузке esp ваша мега тоже будет перезагружаться, скорее всего. По вашей схеме с оптроном, кнопку выкидывание, между gpio0 и n1-com ставите резистор на 100 Ом, и между n1 оптрона ставите конденсатор 0.01-0.1 мкФ. Хотя может заработает напрямую, если оптрон сам отфильтрует 26 МГц.
(Исправлено по уточнению из поста ниже)
Я правильно понял? Такая схема имеет право на жизнь?
Если я правильно понял ту схему, "земля" идет от GPIO0 "по команде", поскольку по умолчанию на GPIO0 после инициализации ESP "HIGH"
Посмотреть вложение 5895
Сергей_Ф
Moderator
Member
О, действительно, у меня же RC-фильтр не туда.
Я просто смотрел на резистор как на токоограничивающий, вот и поставил к питанию автоматически.
Исправил предыдущий пост.
Активный участник сообщества
Смешно
Немного не так, при программировании модуль извлекается из изделия, после программирования устанавливается обратно в изделие, при включении питания на том звоне который длиться во время инициализации сдк, реле вообще никаких звуков не издает.
Т.е. её время срабатывания более 150 мс?
И режим deep_sleep у вас не используется. Иначе пришлось бы ставить логику на увеличение времени удержания reset от GPIO_16, дабы не защелкнулось состояние "программирования" по фронту RESET с описываемых тут пинов, пока там разрядятся емкости, навешанные на пины
PS: А чё "смешного"? ШИМ никогда не видели? При выводе туда 26 MHz для вашего транзистора через резистор это равно 1.65 В.
Ну вот этим ШИМ приближаем контакты для создания дуги - без этого то как в вашем устройстве?
И снова привет Хабр. Этот материал является продолжением моей предыдущей статьи — ESP8266 и Arduino, подключение, распиновка, и, должен сказать, что они взаимосвязаны. Я не буду затрагивать темы, которые уже раскрыты.
А сегодня, я поведаю, как же программировать ESP8266 при помощи Arduino IDE, так же прошивать другие прошивки, например NodeMcu… Вообщем, этот материал не ограничивается только одной темой Ардуино.
Тема ESP8266 — довольно таки непростая. Но, если работать с этими Wi-Fi модулями в среде разработки Arduino IDE — порог вхождения опускается до приемлемого для обычного ардуинщика уровня. Да и не только ардуинщика, а любого человека, у которого есть желание сварганить что-то по теме IoT(интернет вещей), причём не затрачивая много времени читая документацию для микросхемы и изучение API для этих модулей.
Данное видео, полностью дублирует материал, представленный в статье ниже.
Ну что же, мы уже умеем подключать ESP8266 и переводить его в режим программирования, теперь давайте перейдём к чему-то более полезному.
Скажу сразу — один раз запрограммировав модуль в среде разработки ардуино, мы сносим родную прошивку, и у нас пропадёт возможность работать с модулем при помощи AT-команд. Лично мне, от этого, не холодно/не жарко, но если кому-то это будет нужно — ближе к концу статьи я покажу, как обратно прошить в модуль родную прошивку, ну или какой-то загручик типа NodeMcu.
Для начала, на офф.сайте качаем последнюю версию Arduino IDE, на данный момент это 1.6.7. Более старые версии типа 1.0.5. не подойдут, потому что банально не имеют нужного функционала, а танцы с бубном нас не интересуют, не так ли?
Запускаем среду разработки и тут же идём в Файл/Настройки:
Вставляем ссылку в поле «Дополнительные ссылки для Менеджера плат:» и жмём «OK».
Данную ссылку я взял на странице проекта Arduino core for ESP8266 WiFi chip.
Потом идём Инструменты/Плата:/Менеджер плат.
Перед нами появится окно менеджера плат, листаем его до самого низа, и если всё сделано правильно мы увидим что-то подобно этому:
Кликаем курсором по надписи "esp8266 by ESP8266 Community" после этого, у нас появилась кнопка «Установка», выбираете нужную версию, я беру последнюю, на сегодняшний день это 2.1.0. и устанавливаю её. Среда разработки закачает нужные ей файлы(около 150 мегабайт) и напротив надписи "esp8266 by ESP8266 Community" появится «INSTALLED» то есть установлено:
Листаем список плат вниз и видим, что в списке у нас появилось много разных ESP, берём «Generic ESP8266 Module»:
Идём в «Инструменты» и выбираем нужный COM порт(у меня это COM32) Arduino или USB UART конвертора, потом ставим Upload Speed:«115200»:
Далее открываем консоль в Arduino IDE, подаём питание на модуль, если всё было сделано правильно, то мы увидим что-то в этом роде:
Выставляем скорость 74880 и «NL & CR» и опять же отключаем и подаём питание и он ответит кое какой отладочной информацией:
Заметьте, 74880 — не основная скорость ESP8266, просто он всего лишь на ней отправляет отладочную информацию. Если модуль ничего не отправляет в консоль, тогда возможно что-то подключили не так как надо.
По умолчанию скорость должна быть 115200, но в отдельных случаях может быть и 9600 и другие… Так что попробуйте подобрать.
После подбора нужной скорости отправляем модулю «AT» и он должен ответить что всё «ОК». Команда «AT+GMR» выводит информацию о прошивке.
Прежде чем начать прошивать ESP8266 в Arduino IDE я советую дочитать статью до конца.
Теперь давайте попробуем прошить ESP8266 через Arduino IDE. Переводим модуль в режим программирования(как это сделать я писал в предыдущей статье).
Давайте зашьём мигалку штатным светодиодом:
Замигал? Значит всё сделано правильно. Откуда я взял что светодиод подключен на первый пин? В предыдущей статье есть картинка с распиновкой разных модулей, и там есть разметка портов, при использовании загрузчика Arduino(пины отмечены розовым цветом).
Мигание светодиодом это конечно хорошо, но надо бы какой-то веб-сервер заделать или начать управлять светодиодом хотя бы при помощи кнопок в браузере, не так ли? Но об этом я расскажу уже как-нибудь в другой раз.
А теперь как прошить назад родную прошивку, да и как вообще прошивать модуль сторонними загрузчиками. Для ESP8266 есть такая программа как NodeMCU Flasher, которая изначально предназначена для прошивки загрузчика NodeMCU. Но как оказалось, она отлично прошивает и другие прошивки.
Я прикреплю к статье архив с данной программой и прошивкой для удобства, но тут всегда можно скачать новую версию NodeMCU Flasher.
В папке «nodemcu-flasher-master» есть 2 папки Win64 и Win32 и в зависимости от того какая разрядность у вашей ОС выбираем нужную. Дальше в папке Release запускаем «ESP8266Flasher.exe» и видим интерфейс программы:
Выбираем нужный COM порт и идём во вкладку «Config», убираем хрестик около «INTERNAL://NODEMCU» и ставим его на один пункт ниже, как на скрине:
(Если захотите прошить загрузчик NodeMCU — убираете хрестик там где его не было, и ставите — где он был, то есть около «INTERNAL://NODEMCU»).
Потом жмём по шестеренке и выбираем где лежит наша прошивка, прошивка как правило в формате *.bin(в прикреплённом архиве это «v0.9.5.2 AT Firmware.bin» которая лежит в основной папке), и так же выбираем «0x00000» как и выше.
Дальше идём во вкладку «Advanced» и меняем там скорость на 115200, именно эта скорость будет основная и модуль будет отзываться по ней на AT-команды в случае соответствующей прошивки.
Возвращаемся опять на вкладку «Operation» переводим модуль в режим программирования и жмём «Flash»:
Всё, модуль начал прошиваться, после перепрошивки не забываем перезагрузить модуль и вуаля, он прошит нужной нам прошивкой.
Проверяем AT-командой «AT+GMR» сделали ли мы всё верно:
Как видите всё нормально прошилось.
By Сергей ПоделкинЦ ака MrПоделкинЦ.
Уже на подходе плата на базе esp32:
Которая значительно круче чем esp8266, так что нас скоро ждёт бум, как мне кажется, темы IoT(интернет вещей).
Привет Хабр. Тема ESP8266, как и IoT(интернет вещей), всё больше набирает популярности, и уже Arduino подхватывает инициативу — добавляя эти Wi-Fi модули в список поддерживаемых плат.
Но как же его подключить к ардуино? И возможно как-то обойтись вообще без ардуино? Сегодня именно об этом и пойдёт речь в этой статье.
Забегая наперёд, скажу, что будет вторая статья, уже более практическая, по теме прошивки и программирования модуля ESP8266 в среде разработки Arduino IDE. Но, обо всём по порядку.
Этот видеоролик, полностью дублирует материал, представленный в статье.
На данный момент, существует много разновидностей этого модуля, вот некоторые из них:
А вот распиновка ESP01, ESP03, ESP12:
Лично мне, больше всего нравится версия ESP07. Как минимум за то, что тут есть металлический экран (он защищает микросхемы от внешних наводок, тем самым обеспечивает более стабильную работу), своя керамическая антенна, разъём для внешней антенны. Получается, подключив к нему внешнюю антенну, например типа биквадрат, то можно добиться неплохой дальности. К тому же, тут есть немало портов ввода вывода, так называемых GPIO(General Purpose Input Output — порты ввода-вывода общего назначения), по аналогии с ардуино — пинов.
Давайте вернёмся к нашим баранам Wi-Fi модулям и Arduino. В этой статье, я буду рассматривать подключение ESP8266(модели ESP01) к Arduino Nano V3.
Но, данная информация будет актуальна для большинства модулей ESP8266 и так же разных Arduino плат, например самой популярной Arduino UNO.
Пару слов по ножкам ESP01:
Vcc и GND(на картинке выше это 8 и 1) — питание, на ножку Vcc можно подавать, судя по документации, от 3 до 3.6 В, а GND — земля (минус питания). Я видел, как один человек подключал этот модуль к двум AA аккумуляторам (напряжение питания в этом случае было примерно 2.7 В) и модуль был работоспособным. Но всё же разработчики указали диапазон напряжений, в котором модуль должен гарантированно работать, если вы используете другой — ваши проблемы.
Внимание! Этот модуль основан на 3.3 В логике, а Arduino в основном — 5 В логика. 5 В запросто могут вывести из строя ESP8266, потому на него нужно отдельно от ардуино подавать питание.
— На моей ардуинке есть ножка, где написано 3.3 В, почему бы не использовать её?
Наверное подумаете вы. Дело в том, что ESP8266 довольно таки прожорливый модуль, и в пиках может потреблять токи до 200 мА, и почти никакая ардуинка по умолчанию не способна выдать такой ток, разве что исключением является Arduino Due, у которой ток по линии 3.3 В может достигать 800 мА, чего с запасом хватит, в других же случаях советую использовать дополнительный стабилизатор на 3.3 В, например AMS1117 3.3 В. Таких валом как в Китае, так и у нас.
Ножка RST 6 — предназначена «железной» для перезагрузки модуля, кратковременно подав на неё низкий логический уровень, модуль перезагрузиться. Хоть и на видео я этим пренебрёг, но всё же вам советую «прижимать» данную ногу резистором на 10 кОм к плюсу питания, дабы добиться лучшей стабильности в работе модуля, а то у меня перезагружался от малейших наводок.
Ножка CP_PD 4(или по-другому EN) — служит, опять же, для «железного» перевода модуля в энергосберегающий режим, в котором он потребляет очень маленький ток. Ну и снова — не будет лишним «прижать» эту ногу резистором на 10 кОм к плюсу питалова. На видео я тупо закоротил эту ногу на Vcc, потому как под рукой не оказалось такого резистора.
Ноги RXD0 7 TXD0 2 — аппаратный UART, который используется для перепрошивки, но ведь никто не запрещает использовать эти порты как GPIO(GPIO3 и GPIO1 соотвественно). GPIO3 на картинке почему-то не размечен, но в даташите он есть:
К стати, к ножке TXD0 2 подключен светодиод «Connect», и горит он при низком логическом уровне на GPIO1, ну или когда модуль отправляет что-то по UART.
GPIO0 5 — может быть не только портом ввода/вывода, но и переводить модуль в режим программирования. Делается это подключив этот порт к низкому логическому уровню(«прижав» к GND) и подав питание на модуль. На видео я делаю это обычной кнопкой. После перепрошивки — не забудьте вытащить перемычку/отжать кнопку(кнопку во время перепрошивки держать не обязательно, модуль при включении переходит в режим программирования, и остаётся в нём до перезагрузки).
GPIO2 3 — порт ввода/вывода.
И ещё один немаловажный момент, каждый GPIO Wi-Fi модуля может безопасно выдавать ток до 6 мА, чтобы его не спалить, обязательно ставьте резисторы последовательно портам ввода/вывода на… Вспоминаем закон Ома R = U/I = 3.3В / 0.006 А = 550 Ом, то есть, на 560 Ом. Или же пренебрегайте этим, и потом удивляйтесь почему оно не работает.
В ESP01 все GPIO поддерживают ШИМ, так что к нашим четырём GPIO, то есть GPIO0-3 можно подключить драйвер двигателя, аля L293 / L298 и рулить двумя двигателями, например катера, или же сделать RGB Wi-Fi приблуду. Да, да, данный модуль имеет на борту много чего, и для простеньких проектов скрипач Arduino не нужен, только для перепрошивки. А если использовать ESP07 то там вообще портов почти как у Uno, что даёт возможность уже уверенно обходиться без ардуино. Правда есть один неприятный момент, аналоговых портов у ESP01 вообще нет, а у ESP07 только один, ADC зовётся. Это конечно усугубляет работу с аналоговыми датчиками. В таком случае ардуино аналоговый мультиплексор в помощь.
Всё вроде как по распиновке пояснил, и вот схема подключения ESP8266 к Arduino Nano:
Видите на Arduino Nano перемычка на ножках RST и GND? Это нужно для того, чтобы ардуинка не мешала прошивке модуля, в случае подключения ESP8266 при помощи Arduino — обязательное условие.
Так же если подключаете к Arduino — RX модуля должен идти к RX ардуинки, TX — TX. Это потому, что микросхема преобразователь уже подключена к ножкам ардуино в перекрестном порядке.
Так же немаловажен резистивный делитель, состоящий из резисторов на 1 кОм и 2 кОм (можно сделать из двух резисторов на 1 кОм последовательно соединив их) по линии RX модуля. Потому как ардуино это 5 В логика а модуль 3.3. Получается примитивный преобразователь уровней. Он обязательно должен быть, потому что ноги RXD TXD модуля не толерантные к 5 В.
Ну и можно вообще обойтись без ардуино, подключив ESP8266 через обычный USB-UART преобразователь. В случае подключения к ардуино, мы, по сути, используем штатный конвертер интерфейсов usb и uart, минуя мозги. Так зачем тратиться лишний раз, если можно обойтись и без ардуино вообще? Только в этом случае, мы подключаем RXD модуля к TXD конвертора, TXD — RXD.
Если вам лениво заморачиваться с подключением, возится с резисторами и стабилизаторами — есть готовые решения NodeMcu:
Тут всё значительно проще, воткнул кабель в компьютер, установил драйвера и программируй, только не забывай задействовать перемычку/кнопку на GPIO0 для перевода модуля в режим прошивки.
Ну вот, с теорией наверное всё, статья получилась пожалуй довольно таки большая, и практическую часть, аля прошивка и программирование модуля, я опубликую немного позже.
Я, у себя на ютуб канале, открыл целый плейлист посвящённый моим видео по теме этого Wi-Fi модуля. В планах построили машинку, или лодку, на Wi-Fi управлении, где вместо пульта ДУ будет обычный смарт. Но пока что я к этому ещё не пришёл, так что это всего лишь планы на будущее.
By Сергей ПоделкинЦ ака MrПоделкинЦ.
Уже на подходе плата на базе esp32:
Которая значительно круче чем esp8266, так что нас скоро ждёт бум, как мне кажется, темы IoT(интернет вещей).
Последние пару лет практически все прототипирование несложных IoT-устройств я делаю на NodeMCU, хотя зачастую она и великовата по размеру, и дороговата, и избыточна по функционалу. А все потому, что имела неудачный опыт с ESP-01, которая совершенно не поддавалась прошивке. Сейчас пришло время преодолеть этот барьер и освоить другие железки, от которых мне нужно следующее - Wi-Fi и пины для подключения периферии.
В этой статье разберем подключение к платформе Интернета вещей наиболее популярных плат с интерфейсом Wi-Fi. Их можно использовать, чтобы управлять своим устройством дистанционно или чтобы снимать показания с сенсоров через интернет.
Несколько представленных в статье модулей (ESP-01, ESP-07, ESP-12E, ESP-12F) и плат (Goouuu Mini-S1, WeMos D1 mini и NodeMCU V2) базируются на контроллере ESP8266, использование которого позволяет простым и дешевым способом добавить в своё устройство беспроводную связь через Wi-Fi.
Так выглядит модельный ряд модулей на базе чипа ESP8266.
Последняя плата из тех, о которых я расскажу (ESP32 WROOM DevKit v1), построена на контроллере семейства ESP32 - более продвинутой по своим возможностям версии ESP8266.
Все представленные модели можно программировать и загружать прошивки через Arduino IDE точно так же, как при работе с Arduino.
Оптимальное подключение 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) | подтягивающий к земле резистор 10k (для тех модулей, где выведен пин GPIO15) | |
GPIO2 | подтягивающий к питанию резистор 10k (на схеме не показан, но рекомендуется для увеличения стабильности) | |
GPIO16 | для успешного выхода из режима Deep Sleep необходимо соединить пины ESP8266 GPIO16 и RESET через резистор 470 Ом (на схеме не показан) |
Примечания.
1. Не на всех модулях выведены все пины. Перед приобретением модуля ознакомьтесь с видами модулей и их распиновкой.
2. Если на вашем USB-TTL конвертере выведены пины CTS и DSR — для автозагрузки прошивки они вам не помогут, т.к. работают только на вход.
3. Для стабильной работы ESP8266 требуется источник стабилизированного питания 3,3 вольт, ток более 250 миллиампер. Использование питания от USB-TTL конвертера может привести к нестабильности в работе.
Минимальное подключение ESP8266
Минимальное подключение ESP8266 (повышенная стабильность)
Более подробно, со всеми деталями, о подключении ESP8266 вы можете прочитать в нашей статье ESP8266 – подключение и обновление прошивки
Базовые функции языка Wiring
Управление GPIO осуществляется точно также, как и управление pin для arduino: pinMode , digitalRead , digitalWrite , analogWrite функционируют как обычно. GPIO нумеруются так, как мы уже привыкли: для чтения состояния GPIO2 нужно использовать команду digitalRead ( 2 )
GPIO0-GPIO15 могут быть INPUT , OUTPUT , INPUT_PULLUP , и INPUT_PULLDOWN . GPIO16 может быть только INPUT , OUTPUT или INPUT_PULLDOWN . Команда analogRead ( A0 ) считывает значение ADC (АЦП) с TOUT.
Команда analogWrite ( pin , value ) включает программный PWM (ШИМ) на указанном GPIO. Команда analogWrite ( pin , 0 ) отключает PWM. value может быть в диапазоне от 0 до PWMRANGE . Константа PWMRANGE в настоящее время равна 1023.
Поддержка прерываний обеспечивается функциями attachInterrupt , detachInterrupt . Прерывания могут быть назначены на любой GPIO, кроме GPIO16. Стандартные прерывания Arduino CHANGE , RISING , FALLING тоже поддерживаются.
ESP8266 — функции пинов
PROGMEM
Макрос PROGMEM работает точно также, как в Arduino, помещая read only данные и строковые константы (литералы) во флеш память, высвобождая HEAP. Важное отличие состоит в том, что в ESP8266 одинаковые литералы не хранятся в одном месте, поэтому использование строковых констант внутри конструкций F ( "" ) и/или PSTR ( "" ) приводит к расходованию флеш памяти при каждом вызове этих функций. Вы должны самостоятельно управлять одинаковыми строками для экономичного расходования места во флеш памяти.
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
17. Смотрите монитор последовательно порта и если к ESP8266 к GPIO2 у вас подключен светодиод (через резистор, разумеется), то он включится.
Автором этого проекта адаптации Arduino IDE для ESP8266 является наш соотечественник из Санкт-Петербурга Иван Грохотков.
Задать вопросы автору проекта Ивану Грохоткову aka igrr или сообщить об ошибке в Arduino IDE для ESP8266 можно в специальном разделе на нашем форуме.
1. ESP-01
ESP-01 - самый популярный модуль на ESP8266. PCB антенна обеспечивает дальность до 400 м на открытом пространстве.
Другие библиотеки, не включенные в поставку Arduino IDE
Почти все библиотеки, которые не используют низкоуровневый доступ к регистрам микропроцессора AVR должны работать без каких-либо доработок. На сегодняшний день можно точно сказать, что протестированы и полностью работоспособны следующие библиотеки:
Библиотека Servo
Библиотека позволяет управлять сервомоторами. Поддерживает до 24 сервоприводов на любых доступных GPIO. По умолчанию первые 12 сервоприводов будут использовать Timer0 и будут независимы от любых других процессов. Следующие 12 сервоприводов будут использовать Timer1 и будут разделять ресурсы с другими функциями, использующими Timer1. Большинство сервоприводов будут работать с управляющим сигналом ESP8266 3,3в, но не смогут работать на напряжении 3,3в и потребуют отдельный источник питания. Не забудьте соединить общий провод GND этого источника с GND ESP8266
Тайминг и delay
Функции millis и micros возвращают миллисекунды и микросекунды соответственно, прошедшие с момента старта модуля. Любимая многими функция delay также присутствует и приостанавливает выполнение скетча на указанное время в миллисекундах и позволяет отработать операциям WiFi и TCP/IP. Функция delayMicroseconds используется аналогично, только время задается в микросекундах.
Помните о том, что когда модуль поддерживает WiFi соединение, ему приходится выполнять множество фоновых задач, кроме вашего скетча. WiFi и TCP/IP функции библиотек SDK имеют возможность обработать все события в очереди после завершения каждого цикла вашей функции loop ( ) или во время выполнения delay ( . . . ) . Если в вашем коде есть фрагменты, которые выполняются более 50 миллисекунд, то необходимо использовать delay ( . . . ) для сохранения нормальной работоспособности стека WiFi.
Также вы можете использовать функцию yield ( ) , которая эквивалентна delay ( 0 ) . С другой стороны, функция delayMicroseconds блокирует выполнение других задач, поэтому ее использование для временных задержек свыше 20 миллисекунд не рекомендуется.
Библиотека WiFi ESP8266 (ESP8266WiFi)
Функции библиотеки 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 шилда. Четыре примера идет в комплекте с этой библиотекой.
EEPROM
Эта библиотека немного отличается от стандартной Arduino EEPROM. Необходимо вызвать функцию EEPROM . begin ( size ) каждый раз перед началом чтения или записи, размер (указывается в байтах) соответствует размеру данных, которые вы намереваетесь использовать в EEPROM. Размер данных должен быть в диапазоне от 4 до 4096 байт.
Функция EEPROM . write не производит запись данных во флеш память немедленно, вы должны использовать функцию EEPROM . commit ( ) каждый раз, когда вы хотите сохранить данные в память. Функция EEPROM . end ( ) тоже производит запись данных, а также освобождает оперативную память от данных, запись которых произведена. Библиотека EEPROM использует один сектор во флеш памяти, начиная с адреса 0x7b000 для хранения данных. В поставку включено три примера работы с EEPROM.
Установка Arduino IDE через Boards Manager
I2C (Библиотека Wire)
Реализован только режим ведущего, частота ориентировочно до 450 кГц. Перед использованием шины I2C, нужно выбрать пины SDA и SCL путем вызова функции Wire . pins ( int sda , int scl ) , например Wire . pins ( 0 , 2 ) для модуля ESP-01. Для других модулей пины по умолчанию 4(SDA) и 5(SCL).
Библиотека SPI поддерживает весь Arduino SPI API, включая транзакции, в том числе фазу синхронизации (CPHA). Clock polarity (CPOL) пока не поддерживается (SPI_MODE2 и SPI_MODE3 не работают).
Тикер
Библиотека Ticker может быть использована для выполнения периодически повторяющихся событий через определенное время. Два примера включено в поставку.
В настоящее время не рекомендуется блокировать операции ввода-вывода (сеть, последовательный порт, файловые операции) в callback функциях тикера. Вместо блокирования устанавливайте флаг в callback функциях и проверяйте этот флаг в основном цикле.
Arduino IDE для ESP8266: краткий обзор реализованных в настоящее время функций
Модули на базе ESP8266
Для работы с модулями на базе ESP8266 есть два варианта:
Работа с AT командами (в стандартной прошивке Wi-Fi модуль общается с управляющей платой через «AT-команды» по протоколу UART);
Wi-Fi модуль как самостоятельный контроллер (все представленные модули очень умные: внутри чипа прячется целый микроконтроллер, который можно программировать на языке C++ через Arduino IDE).
В статье будем рассматривать второй вариант - прошивка модулей в виде самостоятельного полноценного устройства. Здесь также есть два варианта прошивки с точки зрения железа:
Через плату Arduino;
Через USB-Serial адаптер.
Питание
Родное напряжение модуля — 3,3 В. Его пины не толерантны к 5 В. Если вы подадите напряжение выше, чем 3,3 В на пин питания, коммуникации или ввода-вывода, модуль выйдет из строя.
Arduino IDE для ESP8266 позволяет писать скетчи и загружать их одним кликом в ESP8266 в знакомой среде (я бы даже сказал «до боли знакомой») Arduino IDE. Для тех кому интерфейс Arduino IDE не очень по душе, есть поддержка плагина для Eclipse. Итак, обо всем по порядку. Самые нетерпеливые могут сразу перейти к Arduino IDE для ESP8266: быстрый старт
Arduino IDE для ESP8266 позволяет создавать прошивки и прошивать их в ESP8266 точно так же, как вы это делаете с Arduino. При этом никаких плат Arduino не требуется, это не тот случай, когда ESP8266 используется в качестве WiFi шилда для Arduino. Кроме того, вы можете использовать практически все Arduino библиотеки с ESP8266 после небольшой доработки. В настоящее время уже достаточно много библиотек адаптировано для использования с ESP8266, но о них чуть ниже.
Arduino IDE для ESP8266 поддерживает все существующие на сегодняшний день модули ESP8266 (потому что они особо и не отличаются), включая модули с флеш бОльшего, чем 512k объема. Поддерживаются модули NodeMCU (всех версий), Olimex-MOD-WiFi-ESP8266.
Поддерживается режим авторестарта и прошивки по RTS+DTR, как у обычной Arduino, для этого потребуется USB-TTL адаптер с разведенными пинами DTR и RTS. Если у вас только RX, TX и GND на USB-TTL, то придется по-старинке вручную притягивать к земле GPIO0 и передергивать питание модуля для прошивки.
mDNS библиотека ESP8266mDNS
Библиотека позволяет реализовать в вашей программе ответ на мультикастовые DNS запросы для локальной зоны, например «esp8266.local». В настоящее время поддерживается только одна зона. Позволяет обращаться к WEB серверу ESP8266 по имени, а не только по IP адресу. Дополнительную информацию вы можете найти в прилагаемом примере и в файле readme данной библиотеки.
Настройка среды программирования Arduino IDE
По умолчанию среда IDE настроена только на AVR-платы. Для платформ, представленных ниже, необходимо добавить в менеджере плат дополнительную поддержку.
1) Открываем среду программирования Arduino IDE.
4) В пункте меню Tools (Инструменты) -> Board (Плата) выбираем Boards manager (Менеджер плат).
Находим в списке платформы на ESP8266 и нажимаем на кнопку Install (Установить).
6) Надпись INSTALLED сообщает, что дополнения успешно установлены.
7) Аналогичным образом устанавливаем дополнение для ESP32.
8) Теперь нам доступны к программированию платформы с модулем ESP8266 и ESP32.
Примечание - Также для работы с платами понадобится установить драйверы CH340 (WeMos и Goouuu) и CP2102 (для остальных). Их отсутствие повлияет на то, найдет ли Arduino IDE COM-порт, к которому подключена плата.
Схема подключения ESP8266
Оптимальное подключение ESP8266 для Arduino IDE
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, то будет использоваться именно она, а не из комплекта поставки.
Код прошивки
Для прошивки всех используемых ниже модулей используем один и тот же код.
Установка Wi-Fi соединения
Подключение к объекту на платформе Rightech IoT Cloud по протоколу MQTT
Отправка рандомных значений по температуре ("base/state/temperature") и влажности ("base/state/humidity") каждые 5 секунд (PUB_DELAY)
Работоспособность кода будем проверять на платформе Rightech IoT Cloud, именно поэтому в качестве адреса MQTT-брокера указан dev.rightech.io. Идентификаторами клиентов служат идентификаторы объектов, созданных на платформе. Под каждую проверку я завела на платформе отдельный объект, именно поэтому во всех скринах кодов, которые будут далее представлены, отличается только строка .
Прим. - Можно подключаться и к одному и тому же объекту, тогда можно использовать один и тот же код для прошивки всех плат без изменений, однако следите, чтобы в таком случае платы не подключались к одному и тому же объекту одновременно, иначе случится коллизия.
Внешний вид
Последовательные порты Serial и Serial1 (UART0 и UART1)
Объект Serial работает точно также, как и с Arduino. Помимо аппаратного FIFO (по 128 байт для приема и передачи) определен и программный буфер размером по 256 байт для приема и передачи данных. Прием и передача данных происходит по прерываниям, прозрачно для вашего скетча. Функции записи и чтения блокируют выполнение скетча только когда аппаратный FIFO и программный буфер переполняются.
Serial использует аппаратный UART0, работающий на GPIO1(TX) и GPIO3(RX). Эти пины могут быть переназначены на GPIO15 (TX) и GPIO13 (RX) вызовом функции Serial . swap ( ) ; после Serial . begin ( ) ; . Повторный вызов Serial . swap ( ) ; вернет все на свои места.
Serial1 использует аппаратный UART1, работающий только на передачу. UART1 TX это GPIO2. Для включения Serial1 используйте Serial1 . begin ( ) ;
По умолчанию, отладочная информация библиотек WiFi выключается, когда вы вызываете функцию Serial . begin ( ) ; . Для включения отладочной информации на UART0 используйте Serial . setDebugOutput ( true ) ; Для перенаправления вывода отладочной информации на UART1 используйте команду Serial1 . setDebugOutput ( true ) ;
И Serial и Serial1 поддерживают 5, 6, 7, 8 бит данных, odd (O), even (E), и no (N) режимы четности, и 1 или 2 стоп бита. Для выбора нужного режима вызывайте Serial . begin ( baudrate , SERIAL_8N1 ) ; или Serial . begin ( baudrate , SERIAL_6E2 ) ; и т.д.
Читайте также: