Arduino IDE для ESP8266 – esp8266
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 и передергивать питание модуля для прошивки.
Arduino IDE для 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 — функции пинов
Тайминг и delay
Функции millis и micros возвращают миллисекунды и микросекунды соответственно, прошедшие с момента старта модуля. Любимая многими функция delay также присутствует и приостанавливает выполнение скетча на указанное время в миллисекундах и позволяет отработать операциям WiFi и TCP/IP. Функция delayMicroseconds используется аналогично, только время задается в микросекундах.
Помните о том, что когда модуль поддерживает WiFi соединение, ему приходится выполнять множество фоновых задач, кроме вашего скетча. WiFi и TCP/IP функции библиотек SDK имеют возможность обработать все события в очереди после завершения каждого цикла вашей функции loop() или во время выполнения delay(…). Если в вашем коде есть фрагменты, которые выполняются более 50 миллисекунд, то необходимо использовать delay(…) для сохранения нормальной работоспособности стека WiFi.
Также вы можете использовать функцию yield(), которая эквивалентна delay(0). С другой стороны, функция delayMicroseconds блокирует выполнение других задач, поэтому ее использование для временных задержек свыше 20 миллисекунд не рекомендуется.
Последовательные порты 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); и т.д.
PROGMEM
Макрос PROGMEM работает точно также, как в Arduino, помещая read only данные и строковые константы (литералы) во флеш память, высвобождая HEAP. Важное отличие состоит в том, что в ESP8266 одинаковые литералы не хранятся в одном месте, поэтому использование строковых констант внутри конструкций F(«») и/или PSTR(«») приводит к расходованию флеш памяти при каждом вызове этих функций. Вы должны самостоятельно управлять одинаковыми строками для экономичного расходования места во флеш памяти.
Библиотека 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 шилда. Четыре примера идет в комплекте с этой библиотекой.
Тикер
Библиотека 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(0, 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
- Установите Arduino IDE с официального сайта Arduino.cc
- Запустить 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 (В это поле вы можете вводить несколько ссылок, разделенных запятой)
- Инструменты — Плата — Boards Manager
- В Boards Manager в поле фильтра введите esp8266 или вручную пролистайте список и кликните на ESP8266 by ESP8266 Community Forum
- Кликните Install и дождитесь окончания загрузки (около 130 Мегабайт). Если загрузка произошла слишком быстро, возможно, что вы уже устанавливали Arduino IDE для ESP8266 и потребуется почистить кэш Boards Manager, иначе у вас останется установленной старая версия. Нужно сначала деинсталлировать старую версию, а потом необходимо удалить файлы кэша. Для Win7 x64 удалите файлы из папки C:\Users\Пользователь\AppData\Roaming\Arduino15 и повторите все, начиная с п.2
- Закройте Boards Manager и в меню Инструменты выберите Плата — Generic ESP8266
- Установите частоту вашего модуля 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) | подтягивающий к земле резистор 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 – подключение и обновление прошивки
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 можно в специальном разделе на нашем форуме.
Настройка Arduino IDE для программирования WiFi модуля ESP8266
Настройка Arduino IDE для программирования WiFi модуля ESP8266
ESP8266 это дешовые широко распространенные модули Wi-Fi. Они состоят из самодостаточного микроконтроллера с GPIO (дискретными входами-выходами), аналоговым входом, портами параллельной связи, I2C, SPI, и самое главное с блоком Wi-Fi связи. Изначально продвигаемые как дешовые модули Wi-Fi для плат Arduino и Raspberry Pi, они так же могут быть запрограммированы как отдельные платы разработчика при помощи Arduino IDE. Для этого необходимо сначала установить библиотеки и инструментарий ESP8266 в Arduino IDE.
В этой статье будет описана процедура установки библиотек и инструментария для ESP8266, и начала программирования модуля ESP8266 в среде Arduino IDE.
Библиотеки и инструментарий доступны на гитхабе здесь:
https://github.com/esp8266/Arduino
Шаг 1: Добавление менеджера платы ESP8266 в Настройки Arduino IDE
1. В меню программы выберите закладку Файл -> Настройки
2. Во вкладке «Настройки», в пункте “Дополнительные ссылки для менеджера плат”, нажав на кнопку выбора, во всплывающем диалоговом окне выбираем:
для использования стабильной версии библиотек ESP8266:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
3. для использования последней версии библиотек ESP8266:http://arduino.esp8266.com/staging/package_esp8266com_index.json
4. Клацаем кнопку OK.
Шаг 2: Установка библиотек и инструментария ESP8266
1. В меню Arduino IDE выбираем Инструменты -> Платы: -> Менеджер плат…
2. В текстовом поле поиска Менеджера плат наберите ESP, затем виберите esp8266 by ESP8266 Community и нажмите кнопку Установка
3. Когда установка завершится, кликните по кнопке “Закрыть”
Шаг 3: Пробуем загрузить проект из Arduino IDE в плату ESP8266
1. Соединяем модуль ESP8266 с компьютером при помощи кабеля USB.
2. Можем произвести проверку связи, загрузив пустой скетч или простейший демо-проект Blink.
3. В среде Arduino IDE из меню выбираем тип платы, которую будем тестировать. В данном случае это “NodeMCU 0.9 (ESP-12 Module)”
4. Так же в меню Arduino IDE выбираем COM-порт, к которому подключен модуль Wi-Fi
5. Нажимаем кнопку Загрузить, чтобы скомпилировать и загрузить наш скетч
Если все прошло удачно, теперь ваша среда Arduino IDE готова для работы с модулями ESP8266.
Исправленная Wire библиотека для Arduino ESP8266 core: elchupanibrei — LiveJournal
Вся боль от использования библиотеки и драйвера I2C шины для Arduino ESP8266 тут, тут, тут и здесь.
Пока на шине один slave все работает, но стоит добавить устройств и ESP8266 начинает виснуть с перезагрузкой. Либа wire.h иногда не корректно завершает чтение, а slave не закончив передачу вешает SDA на землю и ждет от мастера SCL, чтоб отдать оставшийся кусок байта. Драйвер написан так, что он об этом ничего не знает и начинает передавать на этот или следующий slave новое сообщение. Устройства ничего не получают тк наш slave удерживает SDA. Либа ничего не получив начинает растягивать SCL. Когда растягивать уже некуда, главный цикл встает колом. Через ~3 секунды, после остановки loop(), срабатывает WDT и модуль перегружается. Самый треш и угар начинается если slave — это часы реального времени с резервным питанием. ESP8266 перегрузился, а часы все удерживают SDA и ждут когда же wire.h с ними закончит. Через ~3 секунды опять сработает WDT и модуль снова перезагрузится. Круг замкнулся. Не поможет даже передергивание общего питания тк часики в этот момент питаются от батарейки.
Arduino сообщество и модераторы форума esp8266.ru морозились:
— не подключайте больше одного устройства
— не используйте i2c и перейдите на spi
— добавьте еще один МК с нативной поддержкой i2c и передавайте данные в esp по uart
— у меня с одним slave все работает…
Такое чувство, что они все на заплате у Espressif. Помучившись нескольких месяцев и покурив официальный datasheet на i2c переписал драйвер и библиотеку обертку под Arduino. Теперь ничего не виснет и работает стабильно. Тестировал на скоростях шины 10KHz, 15KHz, 25KHz, 50KHz 100KHz, 200KHz, 250KHz, 300KHz, 400kHz и частоте камня 80MHz.
Забирать тут.
UDP: Официальный стандарт на i2c шину здесь.
UDP2: Народ разучился читать read.me поэтому продублирую тут.
Скопируйте и замените twi.h и core_esp8266_si2c.cpp в папке %USERPROFILE%\AppData\Local\Arduino15\pa
Скопируйте и замените Wire.h и Wire.cpp в папке %USERPROFILE%\AppData\Local\Arduino15\pa
Цифры 2.5.2 могут отличаться, зависят от версии установленного ядра. Заменить значит удалить старый и на его место записать новый. Если вы хотите сохранить исходные файлы — просто измените расширение файла например так — twi.h.OLD и т. д. Если изменить только имя файла, вы получите ошибку во время компиляции. Потому что линковщик работает с тем что внутри файлов *.h и *.cpp, а не с именами. Это вам не windows!!!
UDP3: Похоже многие свалились с луны и не знают, что для нормальной работы i2c шины линии SDA и SCL должны быть подтянуты к питанию. Почему, читаем тут и тут.
UDP4: Для сенсорных панелей и длинных проводов добавил кучу медленных скоростей: 10KHz, 15KHz, 25KHz, 50KHz. Парочку быстрых для разгона: 250KHz, 300KHz, 600KHz. Например экран на PCF8574 легко взял отметку в 600KHz. Скорость меняется так — Wire.setClock(15000), где число в герцах. По умолчанию, библиотека не получив вовремя ответ, начинает растягивать SCL до 250 микросекунд, временно уменьшая частоту до 4KHz. По совету gihub юзера добавил нулевой значение. Теперь если в setup() сразу после декларации ВСЕХ устройств на I2C вписать Wire.setClockStretchLimit(0), где число в микросекундах. Драйвер будет растягивать SCL до бесконечности, те 0Hz. Недостаток — если на шине беда, вся система подвиснет в бесконечном цикле. В общем фича для отчаянных. Лучше вписать 1250 микросекунд — скорости 0.8Hz должно хватить любому тормозу. Ширину импульсов смотрел клоном Saleae Logic.
Arduino + ESP8266 с нуля на примере Wi-Fi термометра, часть первая / Хабр
Часть 1. Подготовка ESP8266Зачем эта статья? На хабре уже есть ряд статей про использование ESP в разных конфигурациях, но почему-то без подробностей о том, как именно все подключается, прошивается и программируется. Типа «я взял ESP, две пальчиковые батарейки, DHT22, закинул в коробку, потряс часик и термометр готов!». В итоге, получается странно: те, кто уже работают с ESP не видят в сделанном ничего необычного, а те, кто хочет научиться — не понимают с чего начать. Поэтому, я решил написать подробную статью о том, как подключается и прошивается ESP, как его связать с Arduino и внешним миром и какие проблемы мне попадались на этом пути. Ссылки на Aliexpress привожу лишь для представления порядка цен и внешнего вида компонентов.
Итак, у меня было два микроконтроллера, семь разных сенсоров, пять источников питания, температурный датчик DHT22 и целое множество проводков всех сортов и расцветок, а так же бессчетное количество сопротивлений, конденсаторов и диодов. Не то, чтобы все это было необходимо для термометра, но если уж начал заниматься микроэлектроникой, то становится трудно остановиться.
Питание
Для работы ESP8266 нужно напряжение 3.3В и ток не ниже 300мА. К сожалению, Arduino Uno не в состоянии обеспечить такой ток, как не в состоянии обеспечить его и переходники USB-UART (программаторы) типа FT232RL — их предел около 50мА. А значит придется организовать отдельное питание. И лучше бы, чтобы Arduino тоже работал от 3.3В, чтобы избежать проблем типа «я подал пятивольтовый сигнал на вывод RX модуля ESP, почему пахнет паленой пластмассой?».
Есть три решения.
1. Купить готовый блок питания на 3.3В.
2. Купить готовый модуль с регулятором напряжения, понижающий 5В до 3.3В. Пожалуй, это самый удобный вариант.
3. Собрать модуль самому из регулятора AMS1117 и одного танталового конденсатора на 22мкФ.
Я выбрал третий пункт, поскольку мне часто нужно 3.3В, я жадный и я люблю встраивать регуляторы прямо в блоки питания.
С AMS1117 все просто: если положить его текстом вверх, то напряжение на ногах растет слева направо: 0(Gnd), 3.3В (Vout), 5В (Vin).
Между нулем и выходом нужен танталовый конденсатор на 22мкФ (так по инструкции, что будет если поставить электролитический — я не проверял). У танталового SMD-конденсатора плюс там, где полоска. Немного чудовищной пайки совершенно не предназначенных для такого варварства SMD-компонентов и:
Обязательно проверяйте выходное напряжение. Если оно значительно меньше 3.3В (например, 1.17В) — дайте регулятору остыть после пайки и проверьте контакты. Если поставите конденсатор больше, чем на 22мкФ, то мультиметр может показать более высокое напряжение.
Почему именно AMS1117? Он широко используется. Его вы можете найти почти везде, даже в Arduino Uno, как правило, стоит AMS1117-5.0.
Если вы знаете что-то схожих габаритов и цены, еще более простое в использовании — напишите, пожалуйста.
Важный момент. Не знаю уж почему, но AMS1117 крайне капризно относится к качеству соединений. Контакты должны быть надежны. Лучше — пропаяны. Иначе он на тестах выдает 3.3В, но под нагрузкой не выдает ничего.
Подключение ESP8266
Я выбрал модель 07, поскольку у нее отличный металлический экран, который работает как защита от наводок, механических воздействий и как радиатор. Последнее обеспечивает разницу между сгоревшим модулем и просто нагревшимся. Кроме того, есть гнездо под внешнюю антенну.
Чтобы чип запустился нужно соединить VCC и CH_P через резистор 10кОм. Если такого нет, то сгодится любой из диапазона 1-20кОм. Кроме того, конкретно модель 07 еще требует, чтобы GPIO15 (самый ближний к GND) был «на земле» (этого на картинке не видно, потому что соединение с другой стороны).
Теперь берем переходник USB-UART, переключаем его на 3.3В и подключаем RX к TX, TX к RX и GND к «земле» (у меня без этого передача нестабильна). Если вы не можете переключить на 3.3В, то можно использовать простейший резисторный делитель напряжения: соедините ESP RX с TX переходника через сопротивление в 1кОм, а ESP RX с «землей» через 2кОм. Существует масса более сложных и более надежных способов связать 3.3В и 5В, но в данном случае и так сойдет.
И соединяемся на скорости 9600 по нужному COM-порту (можно посмотреть в диспетчере устройств).
Я использую SecureCRT, Putty тоже подойдет, а ценители Линукса и так знают, что делать и где смотреть.
(AT+RST перезагружает чип)
Если ничего не происходит — выключите — включите питание, если все равно ничего не происходит — проверьте соответствие TX/RX, попробуйте переставить их местами или припаять к чипу.
Иногда чип в ходе издевательств экспериментов зависает и тогда его надо обесточить, в том числе отключив и переходник (например, вытащив его из USB), поскольку чипу хватает даже поступающих крох питания, чтобы упорно тупить и не работать.
Иногда фокусы с переходником вешают USB-порт. Можно в качестве временного решения использовать другой USB-порт, но вообще лучше перезагрузить компьютер.
Иногда при этом меняется номер COM-порта. Под Linux это можно решить с помощью udev.
Если вместо текста приходит мусор, то проверьте настройки скорости. Некоторые старые чипы работают на 115200.
На старте чип нагревается, но если он реально горячий и продолжает греться — отключайте и проверяйте все соединения. Чтобы на корпус не попадало +3.3В, чтобы 5В к нему вообще никуда не приходили, чтобы «земля» переходника была соединена с «землей» чипа. Модели с металлическим экраном очень трудно сжечь (но нет ничего невозможного), а на модели без экранов жалуются, мол даже небольшая ошибка может стать последней в жизни чипа. Но это я не проверял.
Прошивка
Мой выбор — NodeMCU. У нее проблемы с памятью и поддержкой железа, но это многократно окупается простотой кода и легкостью отладки.
Так же потребуются NodeMCU flasher и LuaLoader (последнее — опционально, есть и другие клиенты для работы с этой прошивкой).
Выключаем чип. Подсоединяем GPIO0 к земле и включаем чип:
Если ничего не происходит и поля AP MAC/STA MAC пустые — проверьте еще раз, чтобы GPIO0 был на «земле».
Если прошивка началась, но зависла — посмотрите в закладке Log, у меня почему-то конкретно этот чип отказался прошиваться на FT232RL, но зато без проблем прошился на PL2303HX на скорости 576000. PL2303HX в указанном варианте не имеет переключения на 3.3В, чтобы им воспользоваться нужно открыть пластиковый корпус и перепаять провод с 5V на 3.3V, есть варианты с пятью выходами: 3.3, 5, TX, RX, Gnd.
Обратите внимание: STA MAC поменялся. Подозреваю, что flasher его неправильно показывал, но требуется проверка.
Для экономии сил и нервов можно взять готовый или полуготовый вариант.
Есть одноразовые адаптеры с удобной разводкой.
Есть готовые к прошивке.
Есть варианты с простенькие кит-комплекты и посложнее — ESP8266-EVB
Есть с готовым USB-адаптером — NodeMCU Development Board. Под нее даже какие-то шилды делают.
Если же вы, как и я, не слишком любите готовые решения, то рекомендую всего брать с запасом, потому что опыт, как говорят, прямо пропорционален количеству сожженных компонентов.
Ценные ссылки из комментариев:
NodeMCU custom builds
Programming ESP8266-EVB with Arduino IDE
Объяснение про танталовый конденсатор.
Update: заменил в тексте «программатор» на «переходник USB-UART» или просто «переходник». По моему опыту термин «программатор» используется чаще, но, пожалуй, «переходник USB-UART» будет точнее.
Прошивка esp8266 через Arduino IDE
ESP8266 – это популярный китайский микроконтроллер от компании Espressif, основным достоинством которого является встроенный интерфейс WiFi и совместимость с ардуино. Совместимость означает возможность писать программы и загружать их через Arduino IDE,ведь большинство скетчей могут с минимальными доработками использоваться в ESP8266. В этой статье мы узнаем, что из себя представляет стандартная прошивка ESP 8266, как можно программировать эти модули в привычной для многих ардуинщиков Arduino IDE. Мы узнаем, как подготовить среду программирования, как с ее помощью написать скетч и как затем подключить и прошить WiFi-модуль.
Начальная прошивка ESP8266 с WiFi
Сегодня на базе чипа ESP8266 выпускается большое количество модулей, о них мы писали в отдельной статье, посвященной этому микроконтроллеру. Заводские ESP8266 идут со стандартной прошивкой от компании Espressif. Этот софт позволяет работать с модулем вай-фай как с обычным модемом, то есть посредством AT команд, которые подаются на последовательный порт. Таким образом, вы можете использовать модули «из коробки» как внешнее WiFi устройство (в зависимости от режима работы это может быть и точка доступа, и ретранслятор).
Но огромным преимуществом ESP8266 является возможность использовать его как микроконтроллер, подключая вешние устройства и программируя логику систему через прошивку. Вот об этом мы и поговорим.
Как прошить ESP8266
Стандартная микропрограмма внутри ESP8266 не только ограничивает наши возможности, но и обладает определенными недостатками (к примеру, медленный интерфейс обмена данными с контроллером), что может быть критично для некоторых проектов. Если мы захотим использовать ESP8266 как полноценный контроллер, нам надо будет записать туда свою программу или интерпретатор, который будет выполнять поступающие из вне команды. Можно выделить несколько основных способов перепрошивки ESP8266:
- Использование “родного” SDK. Компания Espressif выпустила набор программных средств для разработки собственных прошивок. SDK предоставляет широкий спектр возможностей, тем не менее, пользоваться им довольно-таки трудно в виду не совсем очевидного и приятного интерфейса.
- Загрузка готовых решений. На просторах Всемирной паутины есть множество уже готовых со встроенным интерпретатором. Среди множества решений наверняка найдутся и тем, которые подойдут вашему проекту. Тем не менее, у готовых прошивок есть недостатки. Они могут быть ненадежными, решать не совсем те задачи и быть избыточно большими. Из-за встроенного интерпретатора софт сильно загружает ОЗУ, что приводит к медленной работе.
- Настройка работы через WEB-интерфейс. Существует ряд прошивок, которые позволяют изменить конфигурации ESP8266 через интернет-интерфейс. В качестве примера можно привести коммерческий софт HOME-SMART. Недостатком подобных прошивок является довольно-таки узкий спектр возможностей.
- Использование Arduino IDE. Пожалуй, один из лучших способов написания прошивки для ESP, который используется чаще всего. Это связано с тем, что у рассматриваемой IDE есть целый ряд достоинств, речь о которых пойдет в следующем разделе.
Прошивка ESP 8266 в Arduino IDE
Почему для прошивки ESP 8266 многие предпочитают использовать Arduino IDE? Есть целый ряд причин, которые оправдывают использование именно данной среды разработки. Во-первых, она очень проста. Скетчи в Arduino IDE пишутся на языке, который в плане синтаксиса напоминает С/С++. Большинство функций, которые используются для программирования платы Ардуино, можно применять для написания прошивки к ESP8826 (к примеру, pinMode(), digitalRead() и пр.). Поэтому если вы писали скетчи для платы Arduino, то проблем с написание прошивки возникнуть не должно.
Во-вторых, Arduino IDE поддерживает множество различных библиотек, которые значительно облегчают процесс программирования. Некоторые из них можно использовать для того, чтобы писать прошивку для ESP8266. К примеру, при создании софта наверняка пригодятся такие модули, как:
- WiFi ESP8266. Объемная библиотека для работы с беспроводной сетью. Позволяет получать IP и MAC адрес в различных режимах (клиент, точка доступа), выводить диагностическую информацию, создавать открытую точку доступа и пр.
- Программный модуль, с помощью которого можно выполнять различные операции через заданное количество времени.
- Библиотека используется для работы с ПЗУ.
- Программный модуль, которые обеспечивает поддержку нескольких, специфических для ESP 8266 функций. К примеру, библиотека позволяет активировать режим глубокого сна и управлять сторожевым таймером. Кроме этого, в состав программного модуля входят функции для перезагрузки девайса, определения размера свободной памяти и т.д.
И это лишь верхушка айсберга. У Arduino IDE есть еще несколько менее значимых преимуществ.
Чтобы использовать среду разработки Ардуино с ESP8266, для начала необходимо произвести предварительную настройку. Именно о ней мы сейчас и поговорим.
Подготовка Arduino IDE
Для начала необходимо установить на свой ПК крайнюю версию среды Arduino IDE. Сделать это можно на официальном интернет-сайте. На момент написания статьи крайняя версия IDE – это 1.8.5. После загрузки и инсталляции среды разработки, необходимо запустить ее и перейди в раздел Файл > Настройки. Там есть поле для дополнительных ссылок менеджера плат. В него необходимо вписать http://arduino.esp8266.com/stable/package_esp8266com_index.json и клацнуть на кнопочку ОК.
Затем нужно перейти в Инструменты > Плата. Там будем представлен список доступных плат. Но на интересует пункт Менеджер плат. Это приведет к запуску нового диалога. В нем необходимо найти пункт под названием esp8266 by ESP8266 Community и кликнуть по нему. Вышеописанные манипуляции приведут к появлению кнопочки Установка. Нужно выбрать подходящую версию (лучше всего крайнюю). Далее надо нажать на кнопку, отвечающую за установку. После этого среда разработки начнет скачивать необходимые файлы. Это не займет много времени, так как нужный пакет весит всего 150 МБ.
Возвращаемся к списку плат. После инсталляции программного модуля там появилось несколько новых пунктов, которые соответствуют рассматриваемому микроконтроллеру. Надо выбрать вариант Generic ESP8266 Module. Затем следует определить входящий пункт, через уже знакомый раздел Инструменты. Там же следует задать параметры модуля (частота, объем flash-паммяти). На этом настройка программной среды завершена.
Подключение ESP8266
Для подключения ESP8266 не потребуется много коннекторов, так как рассматриваемый аппаратный модуль использует всего несколько пинов. Выходы TX/RX и землю нужно подключить к конвертору TTL-USB (его, в свою очередь, надо подключить к USB). Далее следует подсоединить питание в 3.3В к пину VCC.
Важно! Не стоит использовать питание от USB-TTL конвертера, так как это может привести к нестабильной работе аппаратного модуля. Лучше используйте внешний источник питания.
Чтобы иметь возможность загружать на микроконтроллер прошивку, необходимо подсоединить GPIO0 к земле. При таком подключении аппаратный модуль загружает прошивку во flash-память. Запуск программы происходит сразу же, без отсоединения от GPIO.
Важно! Перед загрузкой прошивки для ESP8266 необходимо перезагрузить модуль. Сделать это можно, передёрнув питание или же подав землю на RESET.
Последовательность действий при загрузке скетча
Процесс загрузки скетча элементарен. В самой программе необходимо заполнить SSID, а также указать пароль вай-фай. После этого следует клацнуть на кнопочку компиляции и загрузить скетч на устройство.
Важно! Если аппаратный модуль был подключен без автопрошивки, то надо отсоединить пин GPIO0 от земли и передернуть питание.
Далее следует перейти в Инструменты > Монитор последовательного порта. Надо выбрать скорость 115200. После этого стоит обратить внимание на терминал. Если модуль подключен к сети, то в таком случае на мониторе должны появится соответствующие надписи. Внизу будет расположен IP адрес аппаратного модуля.
Программирование ESP8266 в среде Arduino IDE
Волшебная палочка POV на ESP8266
Проект который Вы можете сделать со своим ребенком на новогодних каникулах 🙂
Прошивка: MagicWandPOW
Схема: Волшебная палочка POV на ESP8266
ESP8266 Библиотека WebSocketsServer
Скетч: Step14-WebSockedServer
Программирование по порядку.
Как установить плагин в среду ARDUINO IDE, который позволяет загрузить файловую систему в ESP8266.
Если у нас есть возможность использовать файловую систему прямо на кристалле ESP8266 зачем нам SD карты и веб страницы помещенные в код?
Ссылка на загрузку плагине здесь: ESP8266FS-0.3.0.zip
Программирование по порядку.
Пример использования библиотеки TickerScheduler.
Библиотека позволяет выполнять различные задачи с различными промежутками времени.
Скетч: Step13-TickerScheduler
Программирование по порядку.
Пример связи Web страницы и датчиков DHT11, DHT22/AM2302/RHT03 – передаем данные температуры и влажности на страницу из ESP8266 в виде графика.
Возможности page.htm?*
Step12-Graf-DHT
Программирование по порядку.
Как создать свои WEB страницы не используя HTML продолжение – передаем данные на страницу из ESP8266 в виде графика.
Возможности page.htm?*
Step11-GrafNoHTML
Программирование по порядку.
Как создать свои WEB страницы не используя HTML продолжение – передаем данные на страницу из ESP8266.
Возможности page.htm?*
Step10-DataNoHTML
Программирование по порядку.
Как создать свои WEB страницы не используя HTML.
Возможности page.htm?*
Step9-CodNoHTML
Архив качать здесь: https://github.com/tretyakovsa/Sonoff_Loader
ESP8266 и Arduino, подключение, распиновка / Хабр
Привет geektimes. Тема ESP8266, как и IoT(интернет вещей), всё больше набирает популярности, и уже Arduino подхватывает инициативу — добавляя эти Wi-Fi модули в список поддерживаемых плат.Но как же его подключить к ардуино? И возможно как-то обойтись вообще без ардуино? Сегодня именно об этом и пойдёт речь в этой статье.
Забегая наперёд, скажу, что будет вторая статья, уже более практическая, по теме прошивки и программирования модуля ESP8266 в среде разработки Arduino IDE. Но, обо всём по порядку.
Этот видеоролик, полностью дублирует материал, представленный в статье.
На данный момент, существует много разновидностей этого модуля, вот некоторые из них:
А вот распиновка ESP01, ESP03, ESP12:
* Данную картинку можно посмотреть в хорошем качестве на офф. сайте pighixxx.com.
Лично мне, больше всего нравится версия 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 управлении, где вместо пульта ДУ будет обычный смарт. Но пока что я к этому ещё не пришёл, так что это всего лишь планы на будущее.
Продолжение этой статьи.
Даташиты на:
ASM1117 3.3 B;
ESP8266EX(микроконтроллер, что стоит в модуле);
Ещё ссылки:
Русскоязычное сообщество по ESP8266;
Схемы рисовал в программе Fritzing;
Почему многие не любят Arduino;
Все мои публикации на geektimes.
By Сергей ПоделкинЦ ака MrПоделкинЦ.
AdagioPro | Управляет Poollights Adagio RGB через RS-485 |
AlertMe | Позволяет отправлять электронную почту и SMS только с ESP8266! |
Алгодуино | Простая реализация клиента API на C ++ для цепочки блоков Algorand. |
AllWize | Arduino-совместимая библиотека для взаимодействия с радио модулями RC1701HP-OSP / WIZE |
АльмавиосЛитМqtt | Простой клиент MQTT для подключения к облачным провайдерам |
Aloes Device | Коннектор MQTT для Алоэ |
Antares ESP8266 HTTP | Библиотека для упрощения процесса получения / развертывания данных на платформе Antares IoT |
Antares ESP8266 MQTT | Библиотека для упрощения процесса подписки и публикации данных на платформе Antares IoT через MQTT на ESP8266 |
AntaresLoraID | Лора.id Библиотека Arduino для Dragino / RFM и автономных модулей LoRaWAN. |
anto-esp8266-arduino | Позволяет ESP8266 подключаться к платформе Anto.io IoT. |
Приложение Fernando K | Библиотека, помогающая работать с приложением Fernando K |
АрдуиноIHC | Библиотека для подключения к вводу / выводу данных контроллера IHC. |
ArduinoIoTCloud | Эта библиотека позволяет подключаться к сервису Arduino IoT Cloud. |
ArduinoUniqueID | Arduino Library для получения заводского серийного номера от микроконтроллера Atmel AVR, SAM, SAMD, STM32 и ESP. |
АрдуиноVNC | Клиент VNC для Arduino |
Arduino_ConnectionHandler | Библиотека Arduino для управления сетевым подключением (WiFi, GSM, NB, [Ethernet]) |
ArtnetWifi | ArtNet с ESP8266, ESP32 и другими. |
astra_esp8266 | Простой доступ к базе данных Cassandra с ESP8266. |
AstroMech | Протокол для обмена небольшими объемами данных через аудио. |
AsyncElegantOTA | Асинхронно выполнять OTA для ESP8266 и ESP32. |
AsyncTelegram | Простая библиотека Arduino Telegram BOT для ESP8266 и ESP32 |
AutoConnect | ESP8266 / ESP32 Конфигурация WLAN во время выполнения с веб-интерфейсом. |
AzureIoTHub | Библиотека Azure IoT для Arduino. Для Arduino MKR1000 или Zero и WiFi Shield 101, Adafruit Huzzah и Feather M0 или SparkFun Thing. |
AzureIoTHubMQTTClient | Клиентская библиотека Центра Интернета вещей Azure для ESP8266 по протоколу MQTT. |
AzureIoTProtocol_HTTP | Библиотека протокола HTTP Azure для Arduino. Для Arduino MKR1000 или Zero и WiFi Shield 101, Adafruit Huzzah и Feather M0 или SparkFun Thing. |
AzureIoTProtocol_MQTT | Библиотека протокола Azure MQTT для Arduino. Для Arduino MKR1000 или Zero и WiFi Shield 101, Adafruit Huzzah и Feather M0 или SparkFun Thing. |
Утилита AzureIoT | Общая библиотека служебных программ Azure C для Arduino. Для Arduino MKR1000 или Zero и WiFi Shield 101, Adafruit Huzzah и Feather M0 или SparkFun Thing. |
Билан LoRaWAN | LoRaWAN Библиотека Arduino для автономных модулей LoRaWAN класса A и C с простым API. |
Bh2750 | Библиотека Arduino для коммутационных плат цифровых датчиков освещенности, содержащая Bh2750FVI IC |
Bleeper | Библиотека для хранения общих конфигураций. |
BlueDisplay | Эта библиотека позволяет смартфону или планшету Android работать в качестве графического дисплея для Arduino. |
BlynkGSM_Manager | Simple GSM shield Credentials Manager для плат Blynk и ESP32 / ESP8266 с SSL или без него, данные конфигурации сохраняются в LittleFS / SPIFFS / EEPROM. |
Blynk_Async_GSM_Manager | Simple GSM shield Credentials Manager для плат Blynk и ESP32 / ESP8266 с SSL или без него, данные конфигурации сохраняются в LittleFS / SPIFFS / EEPROM. |
Blynk_Async_WM | Simple WiFiManager для Blynk и ESP8266 / ESP32 с SSL или без него, данные конфигурации сохраняются в LittleFS, SPIFFS или EEPROM |
Blynk_WiFiManager | Simple WiFiManager для Blynk и ESP8266 / ESP32 с SSL или без него, данные конфигурации сохраняются в LittleFS, SPIFFS или EEPROM |
BoodskapTransceiver | Библиотека Arduino для платформы Интернета вещей Boodskap |
Брзо I2C | Brzo I2C — это быстрая реализация I2C, написанная на ассемблере для esp8266 |
Библиотека программного обеспечения BSEC | Библиотека программного обеспечения Bosch Sensortec Environmental Cluster (BSEC) |
Byteduino | Облегченная реализация платформы криптовалюты Obyte (ранее Byteball) для ESP8266 и ESP32 |
CaptureTimer | Библиотека входного захвата Arduino |
Ch476msc | Библиотека для микросхемы управления файловым менеджером Ch476. |
cloud4rpi-esp-arduino | Подключите плату к панели управления Cloud4RPi с помощью MQTT — https://cloud4rpi.io. |
— ESP8266 Arduino Core 2.7.2-90-g8258db53 документация
WiFi (библиотека ESP8266WiFi)
БиблиотекаESP8266WiFi была разработана на основе ESP8266 SDK с использованием соглашения об именах и общей философии функциональности библиотеки Arduino WiFi Shield. Со временем изобилие функций Wi-Fi, перенесенных из ESP8266 SDK в эту библиотеку, переросло API-интерфейсы библиотеки WiFi Shield, и стало очевидно, что нам необходимо предоставить отдельную документацию о том, что нового и дополнительного.
ESP8266Документация к библиотеке Wi-Fi
Тикер
Библиотека для повторного вызова функций с заданным периодом.Включены три примера.
В настоящее время не рекомендуется выполнять блокировку операций ввода-вывода (сетевых, последовательных, файловых) из функций обратного вызова тикера. Вместо этого установите флаг внутри обратного вызова тикера и проверьте наличие этого флага внутри функции цикла.
Вот библиотека для упрощения использования Ticker
и предотвращения сброса WDT:
TickerScheduler
EEPROM
Это немного отличается от стандартного класса EEPROM. Вам необходимо вызвать EEPROM.begin (size)
, прежде чем вы начнете читать или писать, размер — это количество байтов, которое вы хотите использовать.Размер может быть от 4 до 4096 байт.
EEPROM.write
не выполняет запись во флэш-память немедленно, вместо этого вы должны вызывать EEPROM.commit ()
всякий раз, когда вы хотите сохранить изменения во флэш-памяти. EEPROM.end ()
также зафиксирует и освободит копию содержимого EEPROM в ОЗУ.
EEPROM использует один сектор флэш-памяти, расположенный сразу после встроенной файловой системы.
Включены три примера.
Обратите внимание, что сектор необходимо заново перепрограммировать каждый раз, когда необходимо сохранить измененные данные EEPROM, поэтому флеш-память очень быстро изнашивается, даже если записываются небольшие объемы данных.Рассмотрите возможность использования одной из библиотек EEPROM, упомянутых ниже.
I2C (библиотека проводов)
Библиотека Wire в настоящее время поддерживает главный режим примерно до 450 кГц. Перед использованием I2C контакты для SDA и SCL должны быть установлены путем вызова Wire.begin (int sda, int scl)
, то есть Wire.begin (0, 2)
на ESP-01, иначе они по умолчанию имеют контакты 4 (SDA) и 5 (SCL).
SPI
БиблиотекаSPI поддерживает весь API-интерфейс Arduino SPI, включая транзакции, включая этап настройки (CPHA).Установка полярности часов (CPOL) пока не поддерживается (SPI_MODE2 и SPI_MODE3 не работают).
Обычные контакты SPI:
-
MOSI
= GPIO13 -
MISO
= GPIO12 -
SCLK
= GPIO14
Существует расширенный режим, в котором вы можете поменять местами обычные контакты на аппаратные контакты SPI0.
Для этого необходимо вызвать SPI.pins (6, 7, 8, 0)
перед вызовом SPI.begin ()
. Булавки будут
изменить на:
-
MOSI
= SD1 -
MISO
= SD0 -
SCLK
= CLK -
HWCS
= GPIO0
В этом режиме контакты SPI используются совместно с контроллером, который считывает программный код из флэш-памяти и управляется аппаратным арбитром (флэш-память всегда имеет более высокий приоритет).Для этого режима CS будет контролироваться аппаратно, так как вы не можете управлять линией CS с GPIO, вы никогда не знать, когда арбитр собирается предоставить вам доступ к шине, поэтому вы должны позволить ему обрабатывать CS автоматически.
SoftwareSerial
Порт ESP8266 библиотеки SoftwareSerial, созданный Питером Лерупом (@plerup), поддерживает скорость передачи данных до 115200 бод и несколько экземпляров SoftwareSerial. См. Https://github.com/plerup/espsoftwareserial, если вы хотите предложить улучшение или открыть проблему, связанную с SoftwareSerial.
API для ESP
Некоторые специфичные для ESP API, относящиеся к глубокому сну, RTC и флэш-памяти, доступны в объекте ESP
.
ESP.deepSleep (микросекунды, режим)
переведет чип в режим глубокого сна. Режим
является одним из WAKE_RF_DEFAULT
, WAKE_RFCAL
, WAKE_NO_RFCAL
, WAKE_RF_DISABLED
. (GPIO16 должен быть привязан к RST для выхода из режима глубокого сна.) Чип может находиться в спящем режиме не более ESP.deepSleepMax ()
микросекунд. Если вы реализуете режим глубокого сна с WAKE_RF_DISABLED
и требуете функции WiFi при пробуждении, вам необходимо будет реализовать дополнительный WAKE_RF_DEFAULT
, прежде чем функция WiFi станет доступной.
ESP.deepSleepInstant (микросекунды, режим)
работает аналогично ESP.deepSleep
, но мгновенно засыпает, не дожидаясь отключения WiFi.
ESP.rtcUserMemoryWrite (смещение, & данные, размер (данные))
и ESP.rtcUserMemoryRead (offset, & data, sizeof (data))
позволяет сохранять данные в пользовательской памяти RTC чипа и извлекать их из нее соответственно. Смещение
измеряется блоками по 4 байта и может находиться в диапазоне от 0 до 127 блоков (общий размер памяти RTC составляет 512 байтов). данные
должны быть выровнены по 4 байта. Сохраненные данные могут сохраняться между циклами глубокого сна, но могут быть потеряны после включения и выключения чипа. Данные, хранящиеся в первых 32 блоках, будут потеряны после выполнения обновления OTA, поскольку они используются внутренними компонентами ядра.
ESP.restart ()
перезапускает ЦП.
ESP.getResetReason ()
возвращает строку, содержащую последнюю причину сброса в удобочитаемом формате.
ESP.getFreeHeap ()
возвращает размер свободной кучи.
ESP.getHeapFragmentation ()
возвращает показатель фрагментации (0% — чистый, более ~ 50% — небезопасный)
ESP.getMaxFreeBlockSize ()
возвращает самый большой непрерывный свободный блок ОЗУ в куче, что полезно для проверки фрагментации кучи. ПРИМЕЧАНИЕ: Максимальный блок malloc () будет меньше из-за накладных расходов диспетчера памяти.
ESP.getChipId ()
возвращает идентификатор чипа ESP8266 как 32-битное целое число.
ESP.getCoreVersion ()
возвращает строку, содержащую версию ядра.
ESP.getSdkVersion ()
возвращает версию SDK в виде символа.
ESP.getCpuFreqMHz ()
возвращает частоту процессора в МГц в виде 8-битного целого числа без знака.
ESP.getSketchSize ()
возвращает размер текущего скетча как 32-битное целое число без знака.
ESP.getFreeSketchSpace ()
возвращает свободное пространство эскиза как 32-разрядное целое число без знака.
ESP.getSketchMD5 ()
возвращает строку в нижнем регистре, содержащую MD5 текущего эскиза.
ESP.getFlashChipId ()
возвращает идентификатор флэш-чипа как 32
— ESP8266 Arduino Core 2.7.2-90-g8258db53 документация
Это рекомендуемый метод установки для участников и библиотеки. Разработчики.
Инструкции — Windows 10
Во-первых, убедитесь, что у вас еще не установлена версия ядра ESP8266. с помощью Board Manager (см. выше). Если да, удалите его из Совет директоров перед продолжением. Также желательно стереть Arduino15 содержание.
Установите git для Windows (если еще не; см. Https: // git-scm.ru / download / win)
Откройте командную строку (cmd) и перейдите в каталог Arduino по умолчанию. Обычно это Sketchbook каталог (обычно
C: \ users \ {username} \ Documents \ Arduino
, где переменная среды% USERPROFILE%
обычно содержитC: \ users \ {username}
)Клонируйте этот репозиторий в каталог оборудования / esp8266com / esp8266.
cd% ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ% \ Documents \ Arduino \ если не существует оборудования mkdir hardware cd оборудование если не существует esp8266com mkdir esp8266com cd esp8266com git clone https: // github.com / esp8266 / Arduino.git esp8266
У вас должна получиться следующая структура каталогов в
C: \ Users \ {ваше имя пользователя} \ Documents \
Ардуино | --- библиотеки --- оборудование | --- esp8266com | --- esp8266 | --- загрузчики --- ядра --- док --- библиотеки --- пакет --- тесты --- инструменты --- варианты --- Платформа.текст --- programmers.txt --- README.md --- доски.txt --- ЛИЦЕНЗИЯ
Инициализировать подмодули
cd% ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ% \ Documents \ Arduino \ hardware \ esp8266com \ esp8266 git обновление подмодуля --init
Если в процессе сборки появляются сообщения об отсутствующих файлах, связанных с
SoftwareSerial
, это должно быть связано с тем, что этот шаг был пропущен и является обязательным.
Скачать бинарные инструменты
cd esp8266 / инструменты python3 получить.ру
Перезапустить Arduino
При использовании Arduino IDE для Visual Studio (https://www.visualmicro.com/) обязательно щелкните Инструменты — Visual Micro — Повторное сканирование цепочек инструментов и библиотек
При последующем обновлении локальной библиотеки перейдите в каталог esp8266 и выполните команду git pull
cd% ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ% \ Documents \ Arduino \ hardware \ esp8266com \ esp8266 git статус git pull
Обратите внимание, что теоретически вы можете установить в C: \ Program Files (x86) \ Arduino \ hardware
, однако это имеет последствия для безопасности, не говоря уже о том, что каталог часто удаляется при повторной установке Arduino IDE.У него есть преимущество (или недостаток, в зависимости от вашей точки зрения) — он доступен для всех пользователей вашего ПК, которые используют Arduino.
— ESP8266 Arduino Core 2.7.2-90-g8258db53 документация
Прерывания
На ESP8266 можно использовать прерывания, но их следует использовать с осторожностью. и имеют несколько ограничений:
- Функции обратного вызова прерывания должны быть в IRAM, поскольку флэш-память может быть
посреди других операций, когда они происходят. Сделайте это, добавив
атрибут
ICACHE_RAM_ATTR
в определении функции. Если это атрибут отсутствует, эскиз выйдет из строя при попыткеattachInterrupt
с сообщением об ошибке.
ICACHE_RAM_ATTR void gpio_change_handler (void * data) {...
- Прерывания не должны вызывать
delay ()
илиyield ()
или вызывать какие-либо процедуры которые внутренне используютdelay ()
илиyield ()
. - Длительно выполняющиеся (> 1 мс) задачи в прерываниях вызовут нестабильность или сбои.
WiFi и другие части ядра могут стать нестабильными при прерывании
блокируются длительным прерыванием. Если у тебя много дел, ты можешь
установить изменчивый глобальный флаг, который ваш основной цикл
()
может проверять каждый проход или используйте запланированную функцию (которая будет вызываться вне прерывания контекст, когда это безопасно) для длительной работы. - Операции с памятью могут быть опасными, и их следует избегать в прерываниях.
Обращения к
new
илиmalloc
должны быть минимизированы, потому что они могут потребовать длительное время работы, если память фрагментирована. Звонки наrealloc
ибесплатно
НИКОГДА не звоните. Использование любых процедур или объектов, которые вызываютfree
илиrealloc
сами по себе также запрещены по той же причине. Это означает, чтоString
,std :: string
,std :: vector
и другие классы, которые используют непрерывную память, размер которой может быть изменен, должны использоваться с крайняя осторожность (следите за тем, чтобы строки не менялись, векторные элементы не добавлено и т. д.).
Цифровой ввод-вывод
Номера контактов в Arduino напрямую соответствуют контактам ESP8266 GPIO
числа. Функции pinMode
, digitalRead
и digitalWrite
работайте в обычном режиме, поэтому для чтения GPIO2 звоните по телефону digitalRead (2)
.
Цифровые выводы 0–15 могут быть INPUT
, OUTPUT
или INPUT_PULLUP
. Штырь
16 может быть INPUT
, OUTPUT
или INPUT_PULLDOWN_16
. При запуске
контакты настроены как INPUT
.
могут также выполнять другие функции, такие как Serial, I2C, SPI. Эти функции обычно активируются соответствующей библиотекой. В На схеме ниже показано расположение контактов популярного модуля ESP-12.
Функции контактов
Цифровые контакты 6-11 не показаны на этой схеме, потому что они используются для подключите микросхему флэш-памяти к большинству модулей. Пытаюсь использовать эти булавки как Операции ввода-вывода, скорее всего, вызовут сбой программы.
Обратите внимание, что некоторые платы и модули (ESP-12ED, NodeMCU 1.0) also break out контакты 9 и 11. Их можно использовать как ввод-вывод, если микросхема флэш-памяти работает в режиме DIO. (в отличие от QIO, который используется по умолчанию).
Прерывания контактов поддерживаются через attachInterrupt
, detachInterrupt
functions. Прерывания могут быть привязаны к любому GPIO
пин, кроме GPIO16. Поддерживаются стандартные типы прерываний Arduino: ИЗМЕНЕНИЕ
, ПОДЪЕМ
, ПАДЕНИЕ
. ISR должны иметь ICACHE_RAM_ATTR
перед определением функции.
Аналоговый вход
ESP8266 имеет единственный канал АЦП, доступный пользователям. Это может быть использовано либо для чтения напряжения на выводе АЦП, либо для чтения напряжения питания модуля (VCC).
Для считывания внешнего напряжения, приложенного к выводу АЦП, используйте analogRead (A0)
.
Диапазон входного напряжения голого ESP8266 составляет 0–1,0 В, однако некоторые
платы могут иметь делители напряжения. На всякий случай <1,0 В
можно протестировать. Если, например, 0,5 В обеспечивает значения около ~ 512, затем максимум
напряжение скорее всего будет 1.0 В и 3,3 В могут повредить ESP8266.
Однако значения около ~ 150 указывают на то, что максимальное напряжение
скорее всего будет 3,3 В.
Чтобы прочитать напряжение VCC, используйте ESP.getVcc ()
и вывод ADC должен быть сохранен
неподключенный. Кроме того, необходимо добавить следующую строку в
эскиз:
Эта строка должна появляться вне каких-либо функций, например справа
после # включить
линий вашего эскиза.
Аналоговый выход
analogWrite (вывод, значение)
включает программную ШИМ на данном выводе.ШИМ
может использоваться на контактах с 0 по 16. Вызов analogWrite (контакт, 0)
, чтобы отключить ШИМ.
на булавке.
значение
может быть в диапазоне от 0 до 255 (это значение по умолчанию для Arduino).
Диапазон ШИМ можно изменить, вызвав analogWriteRange (new_range)
или analogWriteResolution (биты)
. new_range
может быть от 15… 65535
или бит
может быть от 4 до 16.
ПРИМЕЧАНИЕ: Диапазон по умолчанию analogWrite
был 1023 в выпусках ранее
3.0, но это приводит к несовместимости с внешними библиотеками, которые
зависит от ядра Arduino по умолчанию 256. Существующие приложения, которые
полагаться на предыдущее значение 1023 может добавить вызов analogWriteRange (1023)
к их подпрограмме setup ()
, чтобы вернуться к своему прежнему поведению. Приложения
которые уже вызывали analogWriteRange
, не нуждаются в изменении.
Частота ШИМ по умолчанию 1 кГц. Вызов analogWriteFreq (new_frequency)
для изменения частоты.Допустимые значения
от 100 Гц до 40000 Гц.
ESP не имеет аппаратной ШИМ, поэтому реализация осуществляется программно. С одним выходом PWM на 40 кГц процессор уже довольно загружен. Чем больше Выходы ШИМ используются, и чем выше их частота, тем ближе вы к ограничения ЦП, и меньшее количество циклов ЦП доступно для выполнения эскиза.
Сроки и задержки
миллис ()
и микросекунд ()
возвращают количество миллисекунд и
после сброса прошло соответственно микросекунды.
задержка (мс)
приостанавливает выполнение скетча на некоторое время