Esp8266 arduino ide использовать gpio

Обновлено: 04.07.2024

Это последовательный синхронный стандарт передачи данных в режиме полного дуплекса.

Предназначенный для обеспечения высокоскоростного сопряжения микроконтроллеров и периферии.

В простейшем случае состоит из четырех цифровых сигналов (для DIO)

  • MOSI — выход ведущего, вход ведомого (от ведущего к ведомому)
  • MISO — вход ведущего, выход ведомого (от ведомого к ведущему)
  • SCLK или SCK — последовательный тактовый сигнал (служит для передачи тактового сигнала для ведомых устройств)
  • CS или SS — выбор микросхемы, выбор ведомого.

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

В ESP8266 данный интерфейс поддерживается аппаратно, там даже два модуля SPI

Два модуля SPI:

Максимальная скорость работы – 80 мегагерц.

Максимальная скорость работы – 20 мегагерц.

Обратимся к распиновки чипа ESP8266EX

Нас будут интересовать эти выводы. Что это такое?

А это этот самый SPI только не простейшая его реализация по двум цифровым сигналам SD_DATA_1, SD_DATA_2,(отбрасывая тактовый генератор и выбор чипа), а по четырем SD_DATA_1, SD_DATA_2, SD_DATA_3, SD_DATA_4

Вот так это будет выглядеть на схеме, режим QIO передача по четырем линиям

Самые внимательные уже обратили внимание на надписи:

  • SD_DATA_2 - GPIO9 - D2
  • SD_DATA_3 - GPIO10 - D3

И если перейти от четырех сигнальных линий к двум отбрасывая SD_DATA_2, SD_DATA_3 то мы получим режим "DIO" - передача по двум линиям освобождая тем самым GPIO9 и GPIO10

На схеме это будет выглядеть так

В руководстве к ESP8266 написано: "Цифровые контакты 6-11 используются для подключения флэш-памяти чипа на большинстве модулей"

Где же они находятся в реальности? А вот где.

Обратимся к модулю ESP-12E

Вот его распайка

А вот как это выглядит в реальности.

SPI шина, GPIO на плате ESP8266, режимы прошивки (DOUT, DIO, QOUT, QIO) SPI шина, GPIO на плате ESP8266, режимы прошивки (DOUT, DIO, QOUT, QIO)

Во они эти контакты

И модули семейства Семейство плат WeMos, подсемейство NodeMcu

На схеме выделено GPIO 6-11 те которые находятся на боковой грани модуля ESP-12 и вынесены на пины модуля NodeMcu

Как же используются эти контакты (GPIO) и их значение?

А вот как, я написал чуть по другому, обозначив каналы MOSI, MISO номерами 1, 2. А не SD_DATA или не SDD2, SDD3, или D2, D3, так будет понятнее, а то с этими обозначениями кто во что горазд!

Назначение GPIO 6-11:

  • GPIO 6 SCLK (тактовый сигнал)
  • GPIO 7 MISO (от ведомого к ведущему канал 1)
  • GPIO 8 MOSI (от ведущего к ведомому канал 1)
  • GPIO 9 MISO (от ведущего к ведомому канал 2)
  • GPIO 10 MOSI (от ведущего к ведомому канал 2)
  • GPIO 11 CS0 (выбор микросхемы, выбор ведомого)

Почему то на GPIO 10 будет работать при прошивке модуля в режиме "DIO" или его модификации "DOUT", а вот GPIO 9 не работает все виснет возможно это связано с режимами MOSI, MISO

Но лучше не использовать ни один из контактов GPIO с 6 по 11.

GPIO 9 и 10 можно использовать на ESP8285, поскольку этот чип имеет встроенную флэш-память 1 МБ и соответственно не использует эти контакты. Один или оба GPIO 9, 10 иногда могут быть доступны на платах ESP8266, в зависимости от используемой прошивки и режима ее работы.

И кроме того в руководстве по ESP8266 пишут: "GPIO 10 можно использовать в качестве светового сигнала для индикации состояния связи между устройством и сервером".

А теперь рассмотрим прошивку модуля ESP8266 из среды Arduino IDE

Какой «Flash Mode» выбрать при прошивке модуля в среде IDE Arduino или при прошивки через Nodemcu Flasher?

Дело в том что если зайти в среде Arduino IDE в "инструменты", выбрать Generic ESP8266 module.

Esp1-min 1.jpg

Чип ESP8266 – это отличный инструмент для проектов, где используется управление через интернет, т.е. позволяющих управлять электронными устройствами из любой точки мира! Данное руководство рассказывает, как собрать такой проект при помощи платы Arduino.

Чип ESP8266 – это очень дешевый модуль, который поставляется с прошивкой, состоящей из AT-команд. Это значит, что вы можете подключить его к Arduino, фактически получив полнофункциональный WiFi-шилд. Кроме того, благодаря мощным вычислительным ресурсам и встроенной памяти модуль ESP8266 можно интегрировать в системы с датчиками и прочими электронными устройствами, считывающими или передающими данные при помощи GPIO-контактов.

Это руководство объясняет азы работы с WiFi-модулем ESP-01 – рассказывает о том, как он работает, как его настраивать, а также о том, как без помощи чипа FTDI проверять, установлено ли соединение между ESP-01 и другим устройством.

Как это работает?

Чип ESP8266 коммуницирует с платой Arduino через последовательный интерфейс. То есть, чтобы получать команды и отправлять ответные данные, он использует контакты RX и TX на Arduino (т.е. цифровые контакты 0 и 1). Модуль имеет полную поддержку стека TCP/UDP, благодаря чему его можно настроить как веб-сервер.

Esp8266 pinout-min 2.jpg

Чип ESP-01 также оснащен двумя GPIO-контактами, которые можно использовать для прямого управления устройствами вроде светодиодов или реле. Чип ESP8266, встроенный в ESP-01, питается от 3,3 вольт, поэтому если у вашей Arduino нет контакта для выдачи 3,3 вольт, вам нужно будет воспользоваться регулятором напряжения вроде 78R33, чтобы понизить 5 вольт, идущие от Arduino, до 3,3 вольт, которыми питается ESP8266.

Настройка Arduino

Во-первых, загрузите самую последнюю версию IDE Arduino (некоторые старые версии работать попросту не будут). Сделать это можно отсюда.

Загрузите на плату Arduino скетч BareMinimum. Это нужно для того, чтобы на Arduino не было никаких других программ, использующих канал для последовательной коммуникации. В данном руководстве мы воспользуемся AT-прошивкой, т.к. она совместима с IDE Arduino.

BareMin-min 3.jpg

Теперь подключаем ESP8266, следуя инструкциям ниже:

  • Контакт VCC – к 3,3-вольтовому источнику питания.
  • Контакты GPIO0 и GPIO1 – это цифровые контакты общего назначения. Контакт GPIO0 переключает режим, в котором функционирует модуль (режим программирования или режим обычного функционирования). В нашем случае (т.е. в случае обычного функционирования) GPIO0 должен быть подключен к 3,3 вольтам (HIGH). GPIO2 в данном случае не используется.
  • Контакт RX – к контакту 0 на Arduino (но потребуется отрегулировать напряжение).
  • Контакт CH_PD – это контакт для выбора устройства. Для функционирования в обычном режиме подключите его к 3,3 вольтам (HIGH).
  • Контакт RST – это контакт для сброса. Для функционирования в обычном режиме подключите его к 3,3 вольтам (HIGH). Чтобы сбросить чип, подключите его к GND (т.е. к 0 вольтам).
  • Контакт GND – к GND.
  • Контакт TX – к контакту 1 на Arduino.

Conn-min-1 4.jpg

Режимы ESP8266

Откройте монитор порта. В правом нижнем углу будет два выпадающих меню. В первом выберите пункт «NL & CR», а во втором – «115200 бод». Затем впишите в самом верхнем поле «AT». Монитор порта должен ответить словом «OK». Если после этого на экране начали появляться какие-то мусорные данные, попробуйте сбросить модуль или проверить скорость передачи данных (имеются в виду боды). Также убедитесь, что в первом выпадающем меню стоит пункт «NL & CR».

Кроме того, модуль ESP8266 может работать в 3 разных режимах:

Точка доступа (AP)

В этом режиме ESP8266 выступает в качестве WiFi-сети, т.е. точки доступа. Благодаря этому к модулю могут подключаться другие устройства. Кроме того, в режиме AP возможна двусторонняя связь между ESP8266 и устройством, подключенному через WiFi.

Стационарный (STA)

В этом режиме ESP-01 может подключаться к точке доступа (вроде WiFi-сети, имеющейся в вашем доме). В результате любое устройство может подключиться к этой WiFi-сети, а затем нее коммуницировать с модулем ESP8266.

Комбинированный

Этот режим совмещает в себе оба первых режима – AP и STA.

Об AT-командах для ESP8266 читайте по этой ссылке.

Установка ядра ESP8266

Во-первых, IDE Arduino нужно настроить на совместимость с модулем ESP-01, и для этого в IDE Arduino нужно будет установить ядро ESP8266. Обратите внимание, что вам понадобится IDE Arduino версии 1.6.4 или выше.

  • Откройте в IDE Arduino окно Файл > Настройки (File > Preferences).

Pref-min 5.jpg

Pref2-min 6.jpg

  • Откройте меню Инструменты > Плата > Менеджер плат. (Tools > Board > Boards Manager…).

Pref3-min 7.jpg

  • Впишите в поле поиска «esp» – внизу должен появиться пункт «esp8266». Установите его, нажав на кнопку «Установка».

Pref4-min 8.jpg

  • Выберите пункт Инструменты > Плата > Generic ESP8266 Module (Tools > Board > Generic ESP8266 Module).

Pref5-min 9.jpg

Управление входными/выходными контактами

Зайдите в IDE Arduino и откройте скетч-пример «Blink». Для этого кликните по Файл > Примеры > 01.Basics > Blink (File > Examples > 01.Basics > Blink). Номер контакта в скетче поменяйте с «13» на «2», потому что на ESP8266 есть только два GPIO-контакта – GPIO0 и GPIO2.

Pref5-min 9.jpg

Подключите модуль ESP-01 согласно картинке выше, а затем загрузите скетч, показанный ниже. Светодиод мигает? Значит, все работает!

Примечание: Во-время загрузки кода убедитесь, что контакт GPIO0 подключен к «земле».

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 поддерживает весь 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

Библиотека Servo

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

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

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

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

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

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

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

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

Подключение ESP8266ПримечаниеUSB-TTL
VCCESP8266 подключайте к внешнему источнику питания >300мА, 3,3V
GNDвсе контакты GND должны быть соединены вместе: ESP8266, USB-TTL и источника питанияGND
TX (UTXD) RX
RX (URXD) TX
GPIO0подтягивающий к питанию резистор 10kDTR (если на вашем 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. Не на всех модулях выведены все пины. Перед приобретением модуля ознакомьтесь с видами модулей и их распиновкой.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Интернет вещей (IoT) является одной из самых популярных областей в мире технологий. Физические объекты и цифровой мир связаны сейчас как никогда. Помня об этом, компания Espressif Systems (шанхайская компания по производству полупроводниковых устройств) выпустила крутой микроконтроллер с поддержкой Wi-Fi, ESP8266, по невероятной цене! С помощью него менее чем за 3 доллара можно контролировать и управлять устройством из любой точки мира – идеально подходит практически для любого проекта IoT.


Характеристики платы NodeMCU ESP8266 и ее использование в Arduino IDE

Модуль ESP-12E

Отладочная плата оснащена модулем ESP-12E, содержащим микросхему ESP8266 с RISC микропроцессором Tensilica Xtensa® 32-bit LX106, который работает с регулируемой тактовой частотой от 80 до 160 МГц и поддерживает RTOS.

Характеристики ESP-12E

  • 32-разрядный LX106 от Tensilica Xtensa®
  • Тактовая частота от 80 до 160 МГц
  • 128 КБ встроенной оперативной памяти
  • 4 МБ внешней внешней флеш-памяти
  • Приемопередатчик Wi-Fi 802.11b/g/n

ESP8266 содержит встроенный приемопередатчик Wi-Fi 802.11b/g/n HT40, поэтому он может не только подключаться к сети Wi-Fi и взаимодействовать с интернетом, но и устанавливать собственную сеть, позволяя другим устройствам подключаться напрямую к нему. Это делает ESP8266 NodeMCU еще более универсальным.

Требования к питанию

Поскольку диапазон рабочего напряжения ESP8266 составляет от 3 В до 3,6 В, данная плата для поддержания постоянного напряжения на уровне 3,3 В поставляется с LDO стабилизатором напряжения. Он может надежно обеспечивать ток до 600 мА, чего должно быть более чем достаточно, поскольку ESP8266 во время радиочастотных передач потребляет до 80 мА. Выход стабилизатора также выводится на выводы на сторонах платы и обозначен как 3V3. Эти выводы можно использовать для подачи питания на внешние компоненты.

Требования к питанию

Питание к ESP8266 NodeMCU подается через встроенный USB-разъем MicroB. В качестве альтернативы, если у вас есть стабилизированный источник напряжения 5 В, можно использовать вывод VIN для непосредственного питания ESP8266 и его периферии.

Предупреждение

ESP8266 требует 3,3 В для питания и логические уровни 3,3 В для связи. Контакты GPIO не допускают напряжение 5 В! Если вы хотите соединить плату со схемами 5 В (или выше), то необходимо реализовать согласование логических уровней.

Периферия и ввод/вывод

ESP8266 NodeMCU имеет в общей сложности 17 выводов GPIO, выведенных на разъемы с обеих сторон отладочной платы. Эти выводы могут использоваться для выполнения различных периферийных задач, в том числе:

  • вход АЦП – канал 10-разрядного АЦП;
  • интерфейс UART – интерфейс UART используется для загрузки кода по последовательной связи;
  • выходы ШИМ – выводы ШИМ могут использоваться для регулировки яркости светодиодов или управления двигателями;
  • интерфейсы SPI, I2C – интерфейсы используются SPI и I2C для подключения всевозможных датчиков и периферийных устройств;
  • интерфейс I2S – интерфейс I2S используется для цифровой передачи звука.

Мультиплексируемые выводы ввода/вывода

В ESP8266 используется функция мультиплексирования выводов (несколько периферийных устройств мультиплексируются на один вывод GPIO). Это означает, что один вывод GPIO может действовать как PWM/UART/SPI.

Кнопки и светодиодный индикатор на плате

На плате ESP8266 NodeMCU находятся две кнопки. Одна из них, помеченная как RST, расположенная в верхнем левом углу, представляет собой кнопку сброса, которая, конечно же, используется для сброса микросхемы ESP8266. Другая кнопка, FLASH, в левом нижнем углу – это кнопка загрузки, используемая при обновлении прошивки.

Кнопки и индикаторы

На плате также имеется светодиодный индикатор, который программируется пользователем и подключен к выводу D0 платы.

Последовательная связь

На плате установлен контроллер USB-UART CP2102 от Silicon Labs, который преобразует USB сигнал в сигнал последовательного порта и позволяет компьютеру программировать и взаимодействовать с микросхемой ESP8266.

Последовательная связь

Если на вашем компьютере установлена старая версия драйвера CP2102, рекомендуем выполнить обновление прямо сейчас.

Распиновка ESP8266 NodeMCU

С внешним миром ESP8266 NodeMCU соединяют всего 30 выводов. Ниже показана распиновка отладочной платы.

Рисунок 6 Распиновка ESP8266 NodeMCU

Рисунок 6 – Распиновка ESP8266 NodeMCU

Для простоты мы сгруппируем выводы с аналогичными функциями.

Выводы питания – на плате расположено четыре вывода питания, а именно: один вывод VIN и три вывода 3.3V. Если у вас есть стабилизированный источник напряжения 5 В, вывод VIN можно использовать для непосредственного питания ESP8266 и его периферии. Выводы 3.3V – это выходы встроенного стабилизатора напряжения. Эти выводы могут использоваться для подачи питания на внешние компоненты.

GND – это вывод земли отладочной платы ESP8266 NodeMCU.

Выводы I2C используются для подключения всех видов датчиков и периферийных устройств на шине I2C в вашем проекте. Поддерживаются и I2C Master, и I2C Slave. Работа интерфейса I2C может быть реализована программно, а тактовая частота составляет максимум 100 кГц. Следует отметить, что тактовая частота I2C должна быть выше самой низкой тактовой частоты из ведомых устройств.

Выводы GPIO На ESP8266 NodeMCU имеется 17 выводов GPIO, которые можно назначать программно на различные функции, такие как I2C, I2S, UART, PWM, дистанционное инфракрасное управление, светодиодный индикатор и кнопка. Каждый включенный вывод GPIO может быть настроен либо на внутреннюю подтяжку к земле или к шине питания, либо установлен на высокоимпедансное состояние. При конфигурировании на вход для генерирования прерываний процессора он может быть настроен на срабатывание либо по фронту, либо по спаду.

Вывод ADC подает сигнал на имеющийся в NodeMCU, встроенный 10-разрядный прецизионный аналого-цифровой преобразователь последовательного приближения (SAR ADC). С помощью этого АЦП могут быть реализованы две функции: проверка напряжения питания на выводе VDD3P3 и проверка входного напряжения на выводе TOUT (но не одновременно).

Выводы UART ESP8266 NodeMCU имеет 2 интерфейса UART, то есть UART0 и UART1, которые обеспечивают асинхронную связь (RS232 и RS485) и могут обмениваться данными со скоростью до 4,5 Мбит/с. Для связи можно использовать UART0 (выводы TXD0 , RXD0 , RST0 и CTS0 ), который поддерживает управление потоком. UART1 (вывод TXD1 ) поддерживает только сигнал передачи данных, поэтому он обычно используется для печати журнала событий.

Выводы SPI ESP8266 имеет два интерфейса SPI (SPI и HSPI), поддерживающих и ведомый (slave), и ведущий (master) режимы. Эти интерфейсы SPI также поддерживают следующие функции SPI:

  • 4 режима синхронизации передачи SPI;
  • до 80 МГц и тактовые частоты, полученные делением 80 МГц;
  • до 64 байт FIFO.

Выводы SDIO ESP8266 имеет защищенный цифровой интерфейс ввода/вывода (SDIO, Secure Digital Input/Output Interface), который используется для прямого подключения карт SD. Поддерживаются 4-битный 25 МГц SDIO v1.1 и 4-битный 50 МГц SDIO v2.0.

Выводы PWM На плате имеется 4 канала широтно-импульсной модуляции (PWM). Выход ШИМ может быть реализован программно и использован для управления двигателями и светодиодами. Частотный диапазон ШИМ регулируется от 1000 мкс до 10000 мкс, то есть от 100 Гц до 1 кГц.

Выводы управления используются, как ни странно, для управления ESP8266. Эти выводы включают в себя вывод включения микросхемы EN , вывод сброса RST и вывод пробуждения WAKE .

  • Вывод EN – микросхема ESP8266 включена, когда на вывод EN подается высокий логический уровень. При низком логическом уровне микросхема работает на минимальной мощности.
  • Вывод RST используется для сброса микросхемы ESP8266.
  • Вывод WAKE используется для вывода чипа из глубокого сна.

Платформы разработки для ESP8266

Теперь перейдем к интересным вещам!

Существует множество платформ разработки, которые могут быть оснащены для программирования ESP8266. Вы можете использовать Espruino – JavaScript SDK и прошивка, эмулирующая Node.js, или использовать Mongoose OS – операционную систему для устройств IoT (рекомендуемая платформа от Espressif Systems и Google Cloud IoT), или использовать комплект разработки программного обеспечения (SDK), предоставляемый Espressif. или любую из платформ, перечисленных на Википедии.

К счастью, крутое сообщество ESP8266 сделало выбор IDE на шаг вперед, создав дополнение к Arduino IDE. Если вы только начинаете программировать для ESP8266, мы рекомендуем начать с этой среды разработки, и ее мы опишем в данном руководстве.

Это дополнение ESP8266 для Arduino IDE основано на работе Ивана Грохоткова и остальной части сообщества ESP8266. Для получения дополнительной информации смотрите репозиторий GitHub ESP8266 Arduino.

Установка ядра ESP8266 на ОС Windows

Давайте приступим к установке ядра ESP8266 Arduino.

Во-первых, на вашем компьютере должна быть установлена последняя версия Arduino IDE (Arduino 1.6.4 или выше). Если у вас ее нет, рекомендуем сейчас обновиться.

Для начала нам нужно обновить менеджер плат с помощью пользовательского URL. Откройте Arduino IDE и выберите Файл → Настройки. Затем скопируйте приведенный ниже URL в текстовое поле Дополнительные ссылки для менеджера плат, расположенное в нижней части окна:

Рисунок 7 Установка платы ESP8266 в Arduino IDE с помощью json URL

Рисунок 7 – Установка платы ESP8266 в Arduino IDE с помощью json URL

Отлично. Затем перейдите к Менеджеру плат, выбрав Инструменты → Платы → Менеджер плат. Там, в дополнение к стандартным платам Arduino, должна быть пара новых записей. Отфильтруйте результаты поиска, введя esp8266. Нажмите на эту запись и выберите Установить.

Рисунок 8 Установка ядра ESP8266 в менеджере плат Arduino IDE

Рисунок 8 – Установка ядра ESP8266 в менеджере плат Arduino IDE

Определения и инструменты для платы ESP8266 включают в себя полностью новый набор gcc, g++ и других достаточно больших скомпилированных двоичных файлов, поэтому загрузка и установка могут занять несколько минут (заархивированный файл весит

110 МБ). После завершения установки рядом с записью появится надпись INSTALLED. Теперь можно закрыть менеджер плат.

Пример Arduino: мигалка

Чтобы убедиться, что ядро ESP8266 Arduino и NodeMCU правильно настроены, мы загрузим самый простой скетч – The Blink!

Для этого теста мы будем использовать встроенный светодиод. Как упоминалось ранее в этом руководстве, вывод платы D0 подключен к встроенному синему светодиоду и программируется пользователем. Отлично!

Прежде чем мы перейдем к загрузке скетча и игре со светодиодом, мы должны убедиться, что в Arduino IDE выбрана правильная плата. Откройте Arduino IDE и выберите пункт NodeMCU 0.9 (ESP-12 Module) в меню Инструменты → Плата.

Рисунок 9 Выбор отладочного модуля NodeMCU в Arduino IDE

Рисунок 9 – Выбор отладочного модуля NodeMCU в Arduino IDE

Рисунок 10 Выбор COM порта в Arduino IDE

Рисунок 10 – Выбор COM порта в Arduino IDE

Предупреждение

Уделите больше внимания выбору платы, выбору COM порта и скорости загрузки. В случае некорректных настроек при загрузке новых скетчей вы можете получить ошибку espcomm_upload_mem.

После выполнения всех настроек попробуйте пример скетча, приведенного ниже.

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

Читайте также: