NodeMcu – платформа на основе ESP8266 для создания различных устройств интернета вещей (IoT). Модуль умеет отправлять и получать информацию в локальную сеть либо в интернет при помощи Wi-Fi. Недорогой модуль часто используется для создания систем умного дома или роботов Arduino, управляемых на расстоянии. В этой статье мы рассмотрим описание платы, отличие версий и распиновку последней версии модуля Esp8266 NodeMcu v3. Также мы коротко рассмотрим язык Lua, на котором нужно писать программы для NodeMcu.
Содержание
- Описание ESP8266 NodeMcu v3
- Распиновка NodeMcu v3
- Подключение NodeMCU к компьютеру
- Пример подключения светодиода к NodeMCU
- Прошивки для esp8266 NodeMcu
- Краткое описание языка Lua
- Описание ESP8266 NodeMcu v3
- Распиновка NodeMcu v3
- Подключение NodeMCU к компьютеру
- Пример подключения светодиода к NodeMCU
- Прошивки для esp8266 NodeMcu
- Краткое описание языка Lua
Описание ESP8266 NodeMcu v3
Технические характеристики модуля:
- Поддерживает Wi-Fi протокол 802.11 b/g/n;
- Поддерживаемые режимы Wi-Fi – точка доступа, клиент;
- Входное напряжение 3,7В – 20 В;
- Рабочее напряжение 3В-3,6В;
- Максимальный ток 220мА;
- Встроенный стек TCP/IP;
- Диапазон рабочих температур от -40С до 125С;
- 80 МГц, 32-битный процессор;
- Время пробуждения и отправки пакетов 22мс;
- Встроенные TR переключатель и PLL;
- Наличие усилителей мощности, регуляторов, систем управления питанием.
Существует несколько поколений плат NodeMcu – V1(версия 0.9), V2(версия 1.0) и V3 (версия 1.0). Обозначения V1, V2, V3 используются при продаже в интернет-магазинах. Нередко происходит путаница в платах – например, V3 внешне идентична V2. Также все платы работают по принципу open-source, поэтому их могут производить любые фирмы. Но в настоящее время производством плат NodeMcu занимаются Amica, DOIT и LoLin/Wemos.
Отличия от других модификаций
Платы поколения V1 и V2 легко отличить – они обладают различным размером. Также второе поколение оснащено улучшенной модификацией чипа ESP-12 и 4 Мб флэш-памяти. Первая версия, устаревшая, выполнена в виде яркой желтой платформы. Использовать ее неудобно, так как она покрывает собой 10 выходов макетной платы. Плата второго поколения сделана с исправлением этого недостатка – она стала более узкой, выходы хорошо подходят к контактам платы. Платы V3 внешне ничем не отличаются от V2, они обладают более надежным USB-выходом. Выпускает плату V3 фирма LoLin, из отличий от предыдущей платы можно отметить то, что один из двух зарезервированных выходов используется для дополнительной земли, а второй – для подачи USB питания. Также плата отличается большим размером, чем предыдущие виды.
Где купить модули NodeMCU и ESP8266
Сегодня на рынке доступно множество достаточно недорогих модификаций плат на базе ESP8266. Мы сделали небольшую подборку наиболее интересных вариантов:
Питание модуля NodeMcu
Подавать питание на модуль можно несколькими способами:
- Подавать 5-18 В через контакт Vin;
- 5В через USB-разъем или контакт VUSB;
- 3,3В через вывод 3V.
Преимущества NodeMcu v3
- Наличие интерфейса UART-USB с разъемом micro USB позволяет легко подключить плату к компьютеру.
- Наличие флэш-памяти на 4 Мбайт.
- Возможность обновлять прошивку через USB.
- Возможность создавать скрипты на LUA и сохранять их в файловой системе.
Недостатки модуля NodeMcu
Основным недостатком является возможность исполнять только LUA скрипты, расположенные в оперативной памяти. Этого типа памяти мало, объем составляет всего 20 Кбайт, поэтому написание больших скриптов вызывает ряд трудностей. В первую очередь, весь алгоритм придется разделять на линейные блоки. Эти блоки необходимо записать в отдельные файлы системы. Все эти модули исполняются при помощи оператора dofile.
При написании нужно соблюдать правило – при обмене данными между модулями нужно пользоваться глобальными переменными, а при вычислении внутри модулей – локальными. Также важно в конце каждого написанного скрипта вызывать функцию collectgarbage (сборщик мусора).
Распиновка NodeMcu v3
Модуль V3 имеет 11 контактов ввода-вывода общего назначения. Помимо этого некоторые из выводов обладают дополнительными функциями:
- D1-D10 – выводы с широтно-импульсной модуляцией;
- D1, D2– выводы для интерфейса I²C/TWI;
- D5–D8 – выводы для интерфейса SPI;
- D9, D10 – UART;
- A0 – вход с АЦП.
Подключение NodeMCU к компьютеру
Для начала работы с NodeMcu нужно подключить плату к компьютеру. Первым шагом будет установка драйвера CP2102 и открытие Arduino IDE. Затем нужно найти в «Файл» – «Настройки» и в окно «дополнительные ссылки для менеджера плат» вставить ссылку http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json.
После этого в меню «документы» – «плата» «менеджер плат» выбрать «esp8266» и установить последнюю версию. После проделанных действий в меню «инструменты» – «плата» нужно найти NodeMCU.
После того, как все необходимые данные будут установлены и скопированы, можно будет начать работать.
Пример подключения светодиода к NodeMCU
Принципиальная схема подключения представлена на рисунке.
Итоговый макет макет выглядит следующим образом:
Сама плата работает от напряжения 3.3 В, поэтому для подключения светодиода нужно использовать резистор. В данном примере для красного светодиода берется резистор номиналом 65 Ом.
Похожим способом к плате подключается и фотодиод:
Плату NodeMCU можно использовать и для управления по ИК каналу. Для управления нужен пульт дистанционного управления с ИК приемником и сама платформа. Инфракрасный приемник подключается по схеме, представленной ниже:
Прошивки для esp8266 NodeMcu
В основу платформы загружена стандартная прошивка Node MCU, в которую встроен интерпретатор языка Lua. При помощи Lua-команд можно выполнять следующие действия:
- Подключение к Wi-Fi точке доступа;
- Работа в роли Wi-Fi точки доступа;
- Переход в режим глубокого сна для уменьшения потребления энергии;
- Включение или выключения светодиода на выходе GPIO16;
- Выполнение различные операции с файлами во флэш-памяти;
- Поиск открытой Wi-Fi сети, подключение к ней;
- Вывод MAC адреса;
- Управление пользовательскими таймерами.
Для программирования NodeMCU можно использовать Arduino IDE или комплекс средств разработки SDK – ESPlorer. Этот комплекс обладает рядом отличий:
- Он может работать на множестве различных платформ;
- Обладает поддержкой нескольких открытых файлов;
- Позволяет подсвечивать код языка Lua;
- Возможность умной отправки файлов;
- Возможность поддержки нескольких видов прошивки одновременно.
Для обеспечения корректной и стабильной работы нужно обновить прошивку до последней версии. Существует несколько способов обновления – облачный сервис, Docker Image и компилирование в Linux. Каждый из этих способов обладает своими плюсами и минусами. Наиболее простым и понятным является первый способ.
Сбор прошивки в облачном сервисе
Облачный сервис обладает простым и удобным интерфейсом. Работа начинается с ввода email. Далее будет предложено выбрать тип прошивки – стабильная прошивка или тестируемая. Первая используется для обучения и создания большого количества объектов, поэтому рекомендуется выбирать именно ее. Следующим шагом будет подключение нужных модулей. По умолчанию уже записано несколько основных пунктов, остальные нужно включать только по необходимости. Затем выбираются дополнительные опции. Среди них есть поддержка FatFS для чтения sd-карты или включение режима отладки.
После начала сборки придет письмо на почту, сигнализирующее о начале запуска процесса. Через некоторое время придет и второе письмо – будет предложено выбрать версию float (дробные числа) или integer (целые числа).
После перехода по полученной ссылке нужно будет скачать файл bin и поместить его в Resources – Binaries. Там будет расположен файл nodemcu_integer_0.9.5_20150318.bin, который нужно удалить. В итоге содержимое папки будет выглядеть следующим образом.
Обновление прошивки Node Mcu
Для правильной и стабильной работы платы требуется перезаписать esp_init_data_default.bin. Скачать его можно на официальном сайте. Нужный файл нужно поместить снова в систему для прошивки NodeMCU Flasher по пути Resources – Binaries, предварительно удалив из него старый файл.
Затем можно подключать NodeMCU и приступить к обновлению. Для начала нужно поменять настройки – в NodeMCU Flasher во вкладке Config нужно выбрать файл собранной прошивки вместо INTERNAL://NODEMCU.
Остальное оставить без изменений, перейти на Operations и нажать Flash. Как только окончится прошивка, нужно снова перейти на Config и в первой строке указать путь esp_init_data_default.bin. Также дополнительно указывается адрес, куда нужно переместить этот файл. Для модуля NodeMCU следует выбрать адрес 0x3FC000. После этого нужно снова вернуться на Operations и нажать Flash.
После этого нужно переформатировать всю файловую систему млаты. Для этого нужно запустить ESPlorer, обязательно поставить скорость обмена 115200 и перезагрузить NodeMCU. После всех вышеописанных действий будет новая версия прошивки. Отладочная плата полностью перепрошита и готова к работе.
Краткое описание языка Lua
Язык Lua обладает простым синтаксисом и мощными конструкциями описания данных, которые основаны на массивах и расширяемой семантике. Этот мощный язык программирования используется для создания программного обеспечения, расширения различных игр. В отличие от остальных языков Lua обладает более гибкими и более мощными конструкциями.
Мигание светодиодами на Lua
Можно рассмотреть простейшую схему – мигание светодиодом. Этот пример поможет изучить работы с контактами GPIO. Светодиод нужно подключить как показано на схеме.
Затем нужно записать следующий скетч в левое окно ESPlorer:
gpio.mode (pin_number, gpio.OUTPUT) // установка рабочего режима на выход
gpio.write (pin_number, gpio.HIGH)// установка высокого уровня
gpio.write (pin_number, gpio.LOW)// установка низкого уровня
gpio.serout (1, gpio.HIGH, <+990000,990000>, 10, 1) // установка мигания светодиодом 10 раз
После нужно сохранить скрипт с названием init.lua. Сразу после этого начнется автоматическая загрузка написанного кода в отладочную плату и его выполнение. Если операция выполнена успешно, отладочная плата начнет мигать светодиодом.
Важно отметить, что плата самостоятельно выполняет скрипт, подключение к компьютеру нужно только для подачи питания.
NodeMcu – платформа на основе ESP8266 для создания различных устройств интернета вещей (IoT). Модуль умеет отправлять и получать информацию в локальную сеть либо в интернет при помощи Wi-Fi. Недорогой модуль часто используется для создания систем умного дома или роботов Arduino, управляемых на расстоянии. В этой статье мы рассмотрим описание платы, отличие версий и распиновку последней версии модуля Esp8266 NodeMcu v3. Также мы коротко рассмотрим язык Lua, на котором нужно писать программы для NodeMcu.
Описание ESP8266 NodeMcu v3
Технические характеристики модуля:
- Поддерживает Wi-Fi протокол 802.11 b/g/n;
- Поддерживаемые режимы Wi-Fi – точка доступа, клиент;
- Входное напряжение 3,7В – 20 В;
- Рабочее напряжение 3В-3,6В;
- Максимальный ток 220мА;
- Встроенный стек TCP/IP;
- Диапазон рабочих температур от -40С до 125С;
- 80 МГц, 32-битный процессор;
- Время пробуждения и отправки пакетов 22мс;
- Встроенные TR переключатель и PLL;
- Наличие усилителей мощности, регуляторов, систем управления питанием.
Существует несколько поколений плат NodeMcu – V1(версия 0.9), V2(версия 1.0) и V3 (версия 1.0). Обозначения V1, V2, V3 используются при продаже в интернет-магазинах. Нередко происходит путаница в платах – например, V3 внешне идентична V2. Также все платы работают по принципу open-source, поэтому их могут производить любые фирмы. Но в настоящее время производством плат NodeMcu занимаются Amica, DOIT и LoLin/Wemos.
Отличия от других модификаций
Платы поколения V1 и V2 легко отличить – они обладают различным размером. Также второе поколение оснащено улучшенной модификацией чипа ESP-12 и 4 Мб флэш-памяти. Первая версия, устаревшая, выполнена в виде яркой желтой платформы. Использовать ее неудобно, так как она покрывает собой 10 выходов макетной платы. Плата второго поколения сделана с исправлением этого недостатка – она стала более узкой, выходы хорошо подходят к контактам платы. Платы V3 внешне ничем не отличаются от V2, они обладают более надежным USB-выходом. Выпускает плату V3 фирма LoLin, из отличий от предыдущей платы можно отметить то, что один из двух зарезервированных выходов используется для дополнительной земли, а второй – для подачи USB питания. Также плата отличается большим размером, чем предыдущие виды.
Где купить модули NodeMCU и ESP8266
Сегодня на рынке доступно множество достаточно недорогих модификаций плат на базе ESP8266. Мы сделали небольшую подборку наиболее интересных вариантов:
Питание модуля NodeMcu
Подавать питание на модуль можно несколькими способами:
- Подавать 5-18 В через контакт Vin;
- 5В через USB-разъем или контакт VUSB;
- 3,3В через вывод 3V.
Преимущества NodeMcu v3
- Наличие интерфейса UART-USB с разъемом micro USB позволяет легко подключить плату к компьютеру.
- Наличие флэш-памяти на 4 Мбайт.
- Возможность обновлять прошивку через USB.
- Возможность создавать скрипты на LUA и сохранять их в файловой системе.
Недостатки модуля NodeMcu
Основным недостатком является возможность исполнять только LUA скрипты, расположенные в оперативной памяти. Этого типа памяти мало, объем составляет всего 20 Кбайт, поэтому написание больших скриптов вызывает ряд трудностей. В первую очередь, весь алгоритм придется разделять на линейные блоки. Эти блоки необходимо записать в отдельные файлы системы. Все эти модули исполняются при помощи оператора dofile.
При написании нужно соблюдать правило – при обмене данными между модулями нужно пользоваться глобальными переменными, а при вычислении внутри модулей – локальными. Также важно в конце каждого написанного скрипта вызывать функцию collectgarbage (сборщик мусора).
Распиновка NodeMcu v3
Модуль V3 имеет 11 контактов ввода-вывода общего назначения. Помимо этого некоторые из выводов обладают дополнительными функциями:
- D1-D10 – выводы с широтно-импульсной модуляцией;
- D1, D2– выводы для интерфейса I²C/TWI;
- D5–D8 – выводы для интерфейса SPI;
- D9, D10 – UART;
- A0 – вход с АЦП.
Подключение NodeMCU к компьютеру
Для начала работы с NodeMcu нужно подключить плату к компьютеру. Первым шагом будет установка драйвера CP2102 и открытие Arduino IDE. Затем нужно найти в «Файл» – «Настройки» и в окно «дополнительные ссылки для менеджера плат» вставить ссылку http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json.
После этого в меню «документы» – «плата» «менеджер плат» выбрать «esp8266» и установить последнюю версию. После проделанных действий в меню «инструменты» – «плата» нужно найти NodeMCU.
После того, как все необходимые данные будут установлены и скопированы, можно будет начать работать.
Пример подключения светодиода к NodeMCU
Принципиальная схема подключения представлена на рисунке.
Итоговый макет макет выглядит следующим образом:
Сама плата работает от напряжения 3.3 В, поэтому для подключения светодиода нужно использовать резистор. В данном примере для красного светодиода берется резистор номиналом 65 Ом.
Похожим способом к плате подключается и фотодиод:
Плату NodeMCU можно использовать и для управления по ИК каналу. Для управления нужен пульт дистанционного управления с ИК приемником и сама платформа. Инфракрасный приемник подключается по схеме, представленной ниже:
Прошивки для esp8266 NodeMcu
В основу платформы загружена стандартная прошивка Node MCU, в которую встроен интерпретатор языка Lua. При помощи Lua-команд можно выполнять следующие действия:
- Подключение к Wi-Fi точке доступа;
- Работа в роли Wi-Fi точки доступа;
- Переход в режим глубокого сна для уменьшения потребления энергии;
- Включение или выключения светодиода на выходе GPIO16;
- Выполнение различные операции с файлами во флэш-памяти;
- Поиск открытой Wi-Fi сети, подключение к ней;
- Вывод MAC адреса;
- Управление пользовательскими таймерами.
Для программирования NodeMCU можно использовать Arduino IDE или комплекс средств разработки SDK – ESPlorer. Этот комплекс обладает рядом отличий:
- Он может работать на множестве различных платформ;
- Обладает поддержкой нескольких открытых файлов;
- Позволяет подсвечивать код языка Lua;
- Возможность умной отправки файлов;
- Возможность поддержки нескольких видов прошивки одновременно.
Для обеспечения корректной и стабильной работы нужно обновить прошивку до последней версии. Существует несколько способов обновления – облачный сервис, Docker Image и компилирование в Linux. Каждый из этих способов обладает своими плюсами и минусами. Наиболее простым и понятным является первый способ.
Сбор прошивки в облачном сервисе
Облачный сервис обладает простым и удобным интерфейсом. Работа начинается с ввода email. Далее будет предложено выбрать тип прошивки – стабильная прошивка или тестируемая. Первая используется для обучения и создания большого количества объектов, поэтому рекомендуется выбирать именно ее. Следующим шагом будет подключение нужных модулей. По умолчанию уже записано несколько основных пунктов, остальные нужно включать только по необходимости. Затем выбираются дополнительные опции. Среди них есть поддержка FatFS для чтения sd-карты или включение режима отладки.
После начала сборки придет письмо на почту, сигнализирующее о начале запуска процесса. Через некоторое время придет и второе письмо – будет предложено выбрать версию float (дробные числа) или integer (целые числа).
После перехода по полученной ссылке нужно будет скачать файл bin и поместить его в Resources – Binaries. Там будет расположен файл nodemcu_integer_0.9.5_20150318.bin, который нужно удалить. В итоге содержимое папки будет выглядеть следующим образом.
Обновление прошивки Node Mcu
Для правильной и стабильной работы платы требуется перезаписать esp_init_data_default.bin. Скачать его можно на официальном сайте. Нужный файл нужно поместить снова в систему для прошивки NodeMCU Flasher по пути Resources – Binaries, предварительно удалив из него старый файл.
Затем можно подключать NodeMCU и приступить к обновлению. Для начала нужно поменять настройки – в NodeMCU Flasher во вкладке Config нужно выбрать файл собранной прошивки вместо INTERNAL://NODEMCU.
Остальное оставить без изменений, перейти на Operations и нажать Flash. Как только окончится прошивка, нужно снова перейти на Config и в первой строке указать путь esp_init_data_default.bin. Также дополнительно указывается адрес, куда нужно переместить этот файл. Для модуля NodeMCU следует выбрать адрес 0x3FC000. После этого нужно снова вернуться на Operations и нажать Flash.
После этого нужно переформатировать всю файловую систему млаты. Для этого нужно запустить ESPlorer, обязательно поставить скорость обмена 115200 и перезагрузить NodeMCU. После всех вышеописанных действий будет новая версия прошивки. Отладочная плата полностью перепрошита и готова к работе.
Краткое описание языка Lua
Язык Lua обладает простым синтаксисом и мощными конструкциями описания данных, которые основаны на массивах и расширяемой семантике. Этот мощный язык программирования используется для создания программного обеспечения, расширения различных игр. В отличие от остальных языков Lua обладает более гибкими и более мощными конструкциями.
Мигание светодиодами на Lua
Можно рассмотреть простейшую схему – мигание светодиодом. Этот пример поможет изучить работы с контактами GPIO. Светодиод нужно подключить как показано на схеме.
Затем нужно записать следующий скетч в левое окно ESPlorer:
gpio.mode (pin_number, gpio.OUTPUT) // установка рабочего режима на выход
gpio.write (pin_number, gpio.HIGH)// установка высокого уровня
gpio.write (pin_number, gpio.LOW)// установка низкого уровня
gpio.serout (1, gpio.HIGH, <+990000,990000>, 10, 1) // установка мигания светодиодом 10 раз
После нужно сохранить скрипт с названием init.lua. Сразу после этого начнется автоматическая загрузка написанного кода в отладочную плату и его выполнение. Если операция выполнена успешно, отладочная плата начнет мигать светодиодом.
Важно отметить, что плата самостоятельно выполняет скрипт, подключение к компьютеру нужно только для подачи питания.
Аппаратная платформа Arduino отличная возможность начать программирование микроконтроллеров, не смотря на все её недостатки в виде упрощенного IDE и раздутого скомпилированного кода. Но рано или поздно возможностей ардуино перестает хватать для реализации своих идей и настает момент, когда надо двигаться дальше.
Если вам не хватает поддержки беспроводных сетей, то у вас два выхода: подключить к ардуино модуль ESP-01 (на Али) и остаться со всеми остальными параметрами ардуино, либо использовать платы на основе ESP-12(E), например NodeMCU, WeMos (на Ali) и многие другие китайские поделки, и получить при этом все преимущества и недостатки контроллера esp8266 (да-да, по сравнению с ардуино у esp8266 все же есть некоторые недостатки, но о них ниже).
В этой статье я буду рассматривать работу с NodeMCU с точки зрения пользователя ардуино, покажу быстрый способ перехода от ардуино к NodeMCU, проведу сравнение NodeMCU с ардуино, а так же покажу как получить доступ к устройству, построенному на NodeMCU, через интернет из любой точки мира (при условии что само устройство имеет доступ в интернет).
Но в самом начале несколько слов о параметрах и возможностях NodeMCU. Но перед этим стоит уточнить, что сравнивать NodeMCU и Arduino довольно сложно, так как у них разная "весовая категория". При этом у каждой из плат есть свои преимущества и недостатки. Так NodeMCU имеет бОльшие вычислительные способности и частоту процессора, бОльший объем памяти и самое главное имеет встроенную поддержку Wi-Fi, но при этом уступает Arduino в количестве как цифровых, так и аналоговых выводов.
Файлы печатной платы приведены на гитхабе https://github.com/nodemcu/nodemcu-devkit-v1.0 , там же и распиновка печатной платы
Обратите внимание на два зарезервированных вывода слева сверху. На плате, что досталась мне, сюда выведены дополнительные выводы питания прямо с usb гнезда (см. изображение ниже), при этом при питании через Vin на выводе VUSB отсутствует напряжение. Не знаю, сделали ли это сами разработчики NodeMCU или же постарались китайские изготовители плат.
Модуль можно питать тремя различными способами с различным напряжением:
- 5-18 вольт через вывод Vin (согласно параметрам стабилизатора AMS1117-3.3)
- 5 вольт через вывод VUSB или USB-гнездо
- 3.3 вольта непосредственно через вывозы 3V
На плате установлен ESP-12E, который имеет следующие параметры (взяты из даташита на ESP-12E):
- протокол Wi-Fi 802.11 b/n/g
- частота 2.4 — 2.5 GHz (2400-2483.5 MHz)
- режим Wi-Fi: точка доступа, клиент
- защита Wi-Fi: WPA, WPA2
- шифрование Wi-Fi: WEP, TKIP, AES
- сетевые протоколы: IPv4, TCP, UDP, HTTP, FTP
- 80 MHz 32-bit процессор
- 11 доступных портов ввода/вывода UART, HSPI, I2C, I2S, GPIO, PWM
- рабочее напряжение 3.0 . 3.6 вольт
- максимальная нагрузка на вывод не более 12 mA
- максимальное потребление модуля 200 mA, среднее 80 mA (подробнее в 11 таблице даташита ESP-12E)
- рабочая температура -40 . 125 С
В том же даташите приведены назначения выводов. Выводы нумеруются против часовой стрелки начиная слева сверху, при этом антенна ESP-12E должна находиться вверху, а сам модуль должен быть повернут лицевой стороной.
NO. Pin Name Function
1 RST Reset the module
2 ADC АЦП 10 бит, диапазон входящего напряжения 0-1 вольт
3 EN Chip enable pin.Active high
4 IO16 GPIO16; может использоваться для вывода модуля из сна
5 IO14 GPIO14; HSPI_CLK
6 IO12 GPIO12; HSPI_MISO
7 IO13 GPIO13; HSPI_MOSI; UART0_CTS
8 VCC 3.3V power supply (VDD)
9 CS0 Chip selection
10 MISO Salve output master input
11 IO9 GPIO9
12 IO10 GBIO10
13 MOSI Master output slave input
14 SCLK Clock
15 GND GND
16 IO15 GPIO15; MTDO; HSPICS; UART0_RTS
17 IO2 GPIO2; UART1_TXD
18 IO0 GPIO0
19 IO4 GPIO4
20 IO5 GPIO5
21 RXD UART0_RXD; GPIO3
22 TXD UART0_TXD; GPIO1
И еще одна наглядная картинка с распиновкой ESP-12
Так же даташит содержит таблицу описания интерфейсов.
В качестве преобразователя USB-UART используется микросхема CH340G.
NodeMCU и ArduinoIDE
Переход в программировании от ардуино к NodeMCU не является сложной задачей, так как не придется осваивать иной язык программирования или иную IDE. Программировать NodeMCU можно из старой доброй ArduinoIDE, только необходимо добавить в нее поддержку esp8266. Для этого необходимо:
- запустить ArduinoIDE;
- перейти в пункт «Файл – Настройки»;
- в поле «Дополнительные ссылки для Менеджера плат» ввести адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json и нажать кнопку «ОК» (на скриншоте устаревшая и уже не рабочая ссылка);
- перейти в пункт меню «Инструменты – Плата:… — Менеджер плат», откроется окно Менеджера плат;
- в самом низу списка появится новый пункт «esp8266…», нажать на него и затем на кнопку «Установка»;
- дождаться завершения загрузки и установки необходимых файлов (будут загружены несколько пакетов объемом не менее 160 мегабайт) и перезапустить ArduinoIDE.
В итоге в пункте меню «Инструменты – Плата:…» появляется 21 новый пункт. Для работы с NodeMCU я выбираю из списка плату «NodeMCU 1.0 (ESP-12E Моdule)». На этом настройка ArduinoIDE завершена.
Обратите внимание на ссылки в менеджере плат. Ссылка More info приведет нас на страницу проекта на github, там в первую очередь стоит взглянуть на файл https://github.com/esp8266/Arduino/blob/master/variants/nodemcu/pins_arduino.h в котором описано, как обращаться к выводам из среды ArduinoIDE и их соответствие выводам GPIO.
Так же назначения выводов описаны в файле https://github.com/esp8266/Arduino/blob/master/variants/generic/common.h
Здесь видно, что SPI соответствует выводам D5-8.
Если нажать на ссылку Online help, то откроется страница http://esp8266.github.io/Arduino/versions/2.2.0/ что несколько странно, потому что установлена последняя версия 2.3.0 и страница http://esp8266.github.io/Arduino/versions/2.3.0/ так же существует и доступна. На этой странице можно найти много полезной информации на английском языке. Разберемся же что из того что там представлено будет полезно для нас.
Первым делом рассмотрим описание стандартных функций (приведены на странице http://esp8266.github.io/Arduino/versions/2.3.0/doc/reference.html). Здесь сказано что номера выводов в среде ArduinoIDE совпадают с нумерацией GPIO. То есть что бы установить единицу на выводе GPIO16 нужно использовать команду digitalWrite(16, HIGH) или digitalWrite(D0, HIGH). Все выводы (описанные в https://github.com/esp8266/Arduino/blob/master/variants/nodemcu/pins_arduino.h) могут работать с функциями pinMode, digitalRead, digitalWrite и analodWrite. Так же выводы, сконфигурированные на вход можно подтянуть к положительному выводу питания командой INPUT_PULLUP , вывод 16 можно притянуть к земле командой INPUT_PULLDOWN_16.
Прерывания доступны на всех GPIO, кроме GPIO16. Работа с прерываниями в NodeMCU ничем не отличается от работы с прерываниям в ардуино.
Аналоговый вход работает так же, как и на ардуино, analogRead(A0) считывает аналоговое значение с вывода GPIO17 (A0). Этот же АЦП может считывать напряжение VCC командой ESP.getVcc(), но перед этим в самом начале скетча (до функции setup) необходимо добавить строку ADC_MODE(ADC_VCC), а так же вывод А0 не должен быть никуда подключен.
Программный ШИМ работает на всех доступных GPIO, включается стандартной командой analogWrite(pin, value). Значение value лежит в диапазоне 0-1023 и может быть изменено функцией analogWriteRange(new_range). Стандартная частота ШИМ 1кГц, так же может быть изменена при помощи analogWriteFreq(new_frequency).
Порицаемая многими функция delay здесь играет особую роль. Дело в том, что кроме выполнения скетча, так же необходимо поддерживать связь по Wi-Fi. Это делается автоматически, после каждого выполнения loop или при вызове delay. Таким образом, если в функции loop есть фрагменты кода, которые выполняются более 50 микросекунд (например, выполняется какой-то большой цикл), то рекомендуют вызвать delay для нормальной работы Wi-Fi. Так же есть функция yield(), которая аналогична delay(0).
Последовательный порт Serial работает на GPIO1(TX) и GPIO3(RX). Последовательный порт Serial можно переназначить на GPIO15 (TX) и GPIO13 (RX) , для этого после вызова функции Serial.begin необходимо вызвать Serial.swap(). Для отмены переназначения выводов необходимо снова вызвать Serial.swap(). В Serial1 доступен только TX (GPIO2).
Так же в составе пакета для работы с esp8266 идут измененные библиотеки, работа с которыми отличается от стандартных библиотек.
EEPROM — перед началом работы с eeprom необходимо вызвать функцию EEPROM.begin(size), где необходимо указать, какой объем памяти eeprom необходимо использовать (от 4 до 4096 байт), функция EEPROM.write не записывает данные сразу,для записи данных надо использовать функцию EEPROM.commit, функция EEPROM.end так же записывает данные и завершает работу с eeprom.
I2C — перед началом работы с I2C необходимо вызвать функцию Wire.begin(int sda, int scl) , по умолчанию 4 (SDA) и 5 (SCL).
- функция ESP.deepSleep(microseconds, mode) переводит модуль в сон (mode — WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED). Чтобы вывести модуль из режима сна необходимо соединить GPIO16 и RST
- ESP.restart() перезапускает процессор
- сторожевой таймер (watchdog) реализован функциями ESP.wdtEnable(), ESP.wdtDisable(), и ESP.wdtFeed()
ESP8266 WiFi очень похожа на библиотеку WiFi Shield (https://www.arduino.cc/en/Reference/WiFi), и на странице http://esp8266.github.io/Arduino/versions/2.3.0/doc/libraries.html#wifi-esp8266wifi-library указаны только различия между этими библиотеками. Рассматривать только различия между библиотеками в отрыве от основной библиотеки WiFi Shield не имеет смысла, поэтому здесь делать я этого не буду.
Перейдем к практике.
Аналогом скетча "блинк" является нижеприведённый скетч, который создает локальную сеть и позволяет управлять выводами NodeMCU через адресную строку браузера.
Но если уж NodeMCU дает возможность управлять собой через интернет, то намного интереснее/удобнее/рациональнее создать устройство, управлять которым можно будет отовсюду, с любой точки планеты, а не только из локальной сети. Что бы реализовать такое соединение, необходимо использовать DNS серверы и настраивать модем, или использовать специальные сервисы, такие как Blynk или RemoteXY, например. Таких сервисов появляется всё больше и больше, выбор не ограничивается приведенными двумя примерами. Тем не менее, я покажу, как организовать доступ к NodeMCU из любой точки планеты именно при помощи сервиса RemoteXY.
В одной из своих предыдущих статей я рассказывал о способах подключения различных модулей связи к ардуино и работы с ними в сервисе RemoteXY, так же было рассмотрено подключение NodeMCU к локальной Wi-Fi сети (статья расположена по ссылке http://cxem.net/arduino/arduino213.php). Облачный способ подключения был создан уже послу публикации той статьи, и я в постскриптуме обещал рассмотреть этот способ связи в одной из следующих статей. Итак, поморгаем светодиодом через интернет.
Первым делом необходимо произвести конфигурацию подключения (смотрим скриншот).
Выбираем соединение "Cloud server — beta test", устройство NodeMCU, встроенный модуль связи и ArduinoIDE в качестве среды программирования. Далее необходимо настроить конфигурацию подключения модуля.
Здесь необходимо указать имя и пароль сети, к которой необходимо подключиться, выбрать токен из списка, нижние поля с серым фоном заполняются автоматически. Если необходимо создать новый токен, то необходимо нажать на кнопку "Мои токены", откроется страница со списком токенов, привязаных к вашему аккаунту.
Жмем "Создать новый токен", появляется окошко, в котором необходимо ввести имя устройства, при нажатии кнопки "создать" токен будет сгенерирован автоматически и появится в списке токенов.
В дальнейшем можно изменить имя устройства, нажав ссылку "изменить" в крайнем правом столбце таблицы. Переходим обратно в редактор и продолжаем работу над проектом.
На рабочем поле редактора я поместил элемент "кнопка", который по умолчанию привязан к выводу со светодиодом.
Здесь больше ничего делать не надо, жмем кнопку "Получть исходный код", копируем его в ArduinoIDE, в менеджере плат выбираем NodeMCU 1.0 (ESP-12E Module), выбираем COM-порт, остальные настройки оставляем без изменений и жмем "Загрузка".
Далее переходим к смартфону и запускаем программу RemoteXY. на стартовом экране сверху справа жмем на "+" что бы добавить новое подключение,
В списке выбираем "Облачный сервер"
Жмем на поле "Токен устройства" и появившемся окне вводим токен
Жмем "Ок" и "Подключиться"
И сразу же мы получаем доступ к устройству (если оно конечно имеет связь с сервером).
Обратите внимание, на странице списка токенов можно отслеживать состояние каждого устройство. Так надпись "connected" означает, что устройство подключено к серверу, а надпись "used" — что установлена связь между смартфоном и устройством.
А теперь создадим что-то полезное — кодовый замок-головоломку "Железный Феликс".
Идея этой «головоломки» принадлежит не мне, я лишь её адаптировал. В конце 90-х годов на телеканале «РТР» (нынешний первый канал) выходила передача «Довгань-шоу», маленький аналог «Форт-Боярда» с испытаниями и одним участником. В самом начале игры при помощи лототрона определялось 9-значное число, игроку в течение 9 небольших испытаний необходимо было найти эти числа (испытания были не сложными и короткими по продолжительности — 60-90-120 секунд). В конце игры, добытые в испытаниях числа, игроку необходимо было ввести в огромную копию арифмометра «Феликс», а недостающие числа подобрать. На подбор комбинации отводилось 120 секунд. Если комбинация была подобрана правильно, то рычаг, находящийся с правой стороны устройства, поддавался, дверь открывалась, и игрок мог выйти из комнаты (естественно в роли победителя).
Итак, воспроизведем этот «аттракцион» при помощи NodeMCU и смартфона. Для чего это нужно? Например, для организации квестов (по аналогии с той самой передачей, игроку необходимо будет добывать части пароля, а недостающие подобрать). Контроллер, при правильно подобранном пароле, может открыть дверь, или вывести на экран пароль, от кодового замка, точки доступа Wi-Fi (которая в свою очередь может открыть доступ к следующему квестовому устройству) или bluetooth. На худой конец такое устройство можно использовать просто как кодовый замок для двери, который трудно будет взломать перебором значений (еще бы, устройство предполагает 1 000 000 000 комбинаций пароля).