Esp8266 — сообщество разработчиков

node.dsleep()¶

Enters deep sleep mode, wakes up when timed out.

Theoretical maximum deep sleep duration can be found with . «Max deep sleep for ESP8266» claims the realistic maximum be around 3.5h.

Caution

This function can only be used in the condition that esp8266 PIN32(RST) and PIN8(XPD_DCDC aka GPIO16) are connected together. Using sleep(0) will set no wake up timer, connect a GPIO to pin RST, the chip will wake up by a falling-edge on pin RST.

Parameters

  • number (integer) or , sleep time in micro second. If , it will sleep forever. If , will not set sleep time.

  • number (integer) or . If , it will use last alive setting as default option.

    • 0, init data byte 108 is valuable
    • > 0, init data byte 108 is valueless
    • 0, RF_CAL or not after deep-sleep wake up, depends on init data byte 108
    • 1, RF_CAL after deep-sleep wake up, there will be large current
    • 2, no RF_CAL after deep-sleep wake up, there will only be small current
    • 4, disable RF after deep-sleep wake up, just like modem sleep, there will be the smallest current
  • number (integer) or . If present and non-zero, the chip will enter Deep-sleep immediately and will not wait for the Wi-Fi core to be shutdown.

ESP8266 Development Platforms

Now, let’s move on to the interesting stuff!

There are a variety of development platforms that can be equipped to program the ESP8266. You can go with Espruino – JavaScript SDK and firmware closely emulating Node.js, or use Mongoose OS – An operating system for IoT devices (recommended platform by Espressif Systems and Google Cloud IoT) or use a software development kit (SDK) provided by Espressif or one of the platforms listed on .

Fortunately, the amazing ESP8266 community took the IDE selection a step further by creating an Arduino add-on. If you’re just getting started programming the ESP8266, this is the environment we recommend beginning with, and the one we’ll document in this tutorial.

This ESP8266 add-on for Arduino is based on the amazing work by Ivan Grokhotkov and the rest of the ESP8266 community. Check out the ESP8266 Arduino GitHub repository for more information.

Принципиальная схема

Вариант для сайта — Принципиальная схема в формате pdf доступна для скачивания в секции загрузок, оригинал проекта доступен в онлайн среде проектирования электроники EasyEDA.

Как я заметил в первой части статьи, схемотехника устройства на NodeMCU несколько отличается от подобного устройства на Arduino (Рисунок 13). Во-первых, это обусловлено тем, что номинальное напряжение питания СнК ESP8266 равно 3.3 В. Во-вторых, техническая документация на СнК, практические руководства и тематические форумы не дают однозначного ответа на вопрос о совместимости Wi-Fi модулей на ESP8266 с 5-вольтовыми устройствами.

Рисунок 13. Принципиальная схема контроллера подсветки (версия на NodeMCU).

Кроме того, в модулях типа NodeMCU для питания СнК установлена микросхема линейного регулятора напряжения 3.3 В (обычно из серии AMS1117-3.3), для которой максимальное входное напряжение составляет 15 В (в некоторых модификациях до 18 В). В этом случае модуль NodeMCU можно было запитать непосредственно от блока питания 12 В. Однако, по ряду очевидных причин я решил установить дополнительный регулятор напряжения 5 В с соответствующим фильтрующими конденсаторами. Напряжение питания 5 В с выхода регулятора подается на вход Vin Wi-Fi модуля.

Cхема ШИМ управления светодиодной лентой не изменилась. Затвор силового MOSFET подключен к порту D5 NodeMCU.

Диапазон входных напряжений интегрированного в СнК ESP8266 аналого-цифрового преобразователя составляет 0 – 1 В, поэтому немного изменена схема подключения датчика освещенности (фоторезистора). В зависимости от типа используемого фоторезистора, возможно, потребуется включить в измерительную цепь дополнительный резистивный делитель. В моем случае (фоторезистор VT93N1 номиналом 12 кОм) в делителе напряжения нет необходимости – даже в условиях высокой яркости напряжение на входе АЦП не достигало 0.9 В, поэтому резистор R7 не устанавливается, а вместо R6 ставится перемычка (SMD резистор 0 Ом).

Датчик температуры DS18B20 подключается к разъему P3. Напряжение питания 3.3 В для датчика температуры поступает с модуля NodeMCU, сигнальный вывод датчика с подтягивающим резистором R5 подключается к порту D3.

Разъем P4 и контакт 3 разъема P3 предусмотрены для возможности дальнейшего расширения функционала.

Для подключения датчика движения используется аналогичный сдвоенный разъем TB1-TB2. Выходная линия датчика движения подключается к порту D2 через схему согласования логических уровней (5 В/3.3 В), выполненную на резисторе R3 и диоде Шоттки D1. При текущем способе подключения датчика движения (как и в случае с контроллером на Arduino) схема согласования логических уровней не нужна, и ее можно исключить. Однако, в зависимости от типа используемого датчика движения и способа его подключения, указанная цепь может оказаться обязательной, так как СнК ESP8266 может выйти из строя при работе с 5-вольтовыми сигналами.

Замечу, что примененная схема согласования логических уровней является односторонней. Желательно в схеме использовать диоды Шоттки – они имеют низкое прямое падение напряжения.

Arduino Example: Blink

To make sure ESP8266 Arduino core and the NodeMCU are properly set up, we’ll upload the simplest sketch of all – The Blink!

We will use the on-board LED for this test. As mentioned earlier in this tutorial, D0 pin of the board is connected to on-board Blue LED & is user programmable. Perfect!

Before we get to uploading sketch & playing with LED, we need to make sure that the board is selected properly in Arduino IDE. Open Arduino IDE and select NodeMCU 0.9 (ESP-12 Module) option under your Arduino IDE > Tools > Board menu.

Now, plug your ESP8266 NodeMCU into your computer via micro-B USB cable. Once the board is plugged in, it should be assigned a unique COM port. On Windows machines, this will be something like COM#, and on Mac/Linux computers it will come in the form of /dev/tty.usbserial-XXXXXX. Select this serial port under the Arduino IDE > Tools > Port menu. Also select the Upload Speed : 115200

Warning:

More attention needs to be given to selecting board, choosing COM port and selecting Upload speed. You may get espcomm_upload_mem error while uploading new sketches, if failed to do so.

Once you are done, try the example sketch below.

Once the code is uploaded, LED will start blinking. You may need to tap the RST button to get your ESP8266 to begin running the sketch.

Печатная плата

разработан в EasyEDA; Gerber-файлы доступны для загрузки (Рисунок 14). Компоненты и разъемы старался расположить так же как на плате для Arduino версии контроллера, однако размеры платы получились чуть больше. также можно оналйн при помощи GerberViewer.

На верхнем и нижнем слое выполнена заливка Copper Area (GND, земля) и шелкография. Как и в случае с платами для Arduino-версии контроллера, минимальный заказ (5 шт.) на изготовление печатных плат был выполнен в кратчайшие сроки, но в итоге я получил 6 плат.

Рисунок 14. Проект печатной платы контроллера на NodeMCU в среде EasyEDA.

Все компоненты устанавливаются свободно, при этом я даже не проверял размеры и диаметры отверстий в используемых библиотечных компонентах. Полученный комплект печатных плат показан на Рисунке 15. Плата с установленными компонентами изображена на Рисунке 16.

Рисунок 15. Комплект печатных плат, изготовленных в EasyEDA.
 
Рисунок 16. Вид платы контроллера на NodeMCU с установленными компонентами.

Build Options¶

The following sections explain some of the options you have if you want to build your own NodeMCU firmware.

Select Modules

Disable modules you won’t be using to reduce firmware size and free up some RAM. The ESP8266 is quite limited in available RAM and running out of memory can cause a system panic. The default configuration is designed to run on all ESP modules including the 512 KB modules like ESP-01 and only includes general purpose interface modules which require at most two GPIO pins.

Edit and comment-out the statement for modules you don’t need. Example:

TLS/SSL Support

To enable TLS support edit and uncomment the following flag:

The complete configuration is stored in . This is the file to edit if you build your own firmware and want to change mbed TLS behavior. See the documentation for details.

Set UART Bit Rate

The initial baud rate at boot time is 115200bps. You can change this by
editing in :

Note that, by default, the firmware runs an auto-baudrate detection algorithm so that typing a few characters at boot time will cause
the firmware to lock onto that baud rate (between 1200 and 230400).

Integer build

By default a build will be generated supporting floating-point variables.
To reduce memory size an integer build can be created. You can change this
either by uncommenting in :

OR by overriding this with the command as it’s :

Tag Your Build

Identify your firmware builds by setting the environment variable .
You may also edit . The variable will be included in .

u8g2 Module Configuration

Display drivers and embedded fonts are compiled into the firmware image based on the settings in and . See the for details.

NodeMCU PyFlasher¶

Self-contained NodeMCU flasher with GUI based on Python, esptool.py (see below) and wxPython. A runnable .exe is available for Windows and a .dmg for macOS.

No installation required on Windows and macOS! Instructions how to run it on other platforms are available on the project site.

  1. Install drivers for USB-to-serial. Which driver you need depends on the ESP8266 module or USB-to-serial converter you use.
  2. Connect USB cable to device and computer.
  3. Download then start PyFlasher
  4. Select serial port, browse for firmware binary and set the flash options.

Note that this tool is not an official NodeMCU offering. It’s maintained by a NodeMCU team member as an individual, though.

Подключение ESP8266 через RaspberryPi

Да, можно и «из пушки по воробьям», если под рукой нет вообще никакого USB-TTL конвертера. Подключение через малинку аналогично Arduino, но не такое удобное, т.к. дополнительно потребуется стабилизатор питания на 3,3 вольта. RX, TX, GND малинки подключаем к ESP8266, VCC и GND берем со стабилизированного источника питания на 3,3 вольта

Обратите внимание на то, что необходимо соединить GND всех устройств: малинки, стабилизатора и ESP8266. Брать 3,3 вольта питания с малинки для ESP8266 я лично не пробовал, поэтому вам предлагать такой вариант не буду

Если встроенный в вашу версию малины стабилизатор держит до 300 миллиампер дополнительной нагрузки, то подключение ESP8266 вполне возможно. Если сами захотите рискнуть — пожалуйста.

Как правильно подключить ESP8266

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

Схема подключения ESP8266 (без автозагрузки прошивки, прошиваемся предварительно установив перемычку BURN и перезагрузив модуль)

Схема подключения с поддержкой автозагрузки прошивки из Arduino IDE, UDK, Sming. Для Flash Download Tool и XTCOM_UTIL, возможно, потребуется отключение RTS/DTR. Если RTS и DTR вам отключать неудобно, то можно добавить в схему перемычки

На этих схемах не показано подключение ADC и свободных GPIO — их подключение будет зависеть от того, что вы захотите реализовать, но если хотите стабильности, то не забудьте притянуть все GPIO к питанию (pullup), а ADC к земле (pulldown) через подтягивающие резисторы.

Резисторы на 10k могут заменены на другие от 4,7k до 50k, за исключением GPIO15 — его номинал должен быть до 10k. Номинал конденсатора, который сглаживает высокочастотные пульсации, может быть другим.

Соединение RESET и GPIO16 через резистор deep sleep на 470 Ом вам потребуется, если вы будете использовать режим deep sleep: для выхода из режима глубокого сна модуль перезагружает сам себя, подавая низкий уровень на GPIO16. Без этого соединения глубокий сон будет вечным для вашего модуля.

На первый взгляд на этих схемах кажется, что GPIO0, GPIO2, GPIO15, GPIO1 (TX), GPIO3 (RX) заняты и вы не можете их использовать для своих целей, но это не так. Высокий уровень на GPIO0 и GPIO2, низкий на GPIO15 требуются только для старта модуля, а в последующем вы можете использовать их по своему усмотрению, только не забудьте обеспечить требуемые уровни до перезагрузки модуля.

Можно использовать и TX, RX как GPIO1 и GPIO3 соответственно, не забывая о том, что при старте модуля любая прошивка будет дергать TX, отправляя отладочную информацию в UART0 на скорости 74480, но после успешной загрузки вы можете использовать их не только как UART0 для обмена данными с другим устройством, но и как обычные GPIO.

Для модулей, имеющих меньшее количество разведенных пинов, как например, ESP-01 подключение неразведенных пинов не требуется, т.е. на ESP-01 разведены только: VCC, GND, GPIO0, GPIO2, CH_PD и RESET — вот только их и подтягиваете. Нет никакой необходимости припаиваться прямо к микросхеме ESP8266EX и притягивать неразведенные пины, только если вам это действительно необходимо.

Данные схемы подключения родились после множества экспериментов, проведенных нашими форумчанами и собраны по крупицам из разрозненной и недоступной изначально документации нашим сообществом, я всего лишь постарался объединить эти знания в одном месте. Множество советов по подключению вы найдете на нашем форуме.  Там же вы сможете задать интересующие вас вопросы или найти помощь в решении проблем. Если вы увидели ошибку, неточность в этой статье или вам есть что добавить, то сообщите мне об этом в специальной теме на нашем форуме.

Внимание!

Правильным будет сказать вам, что не существует идеальной и в тоже время универсальной схемы подключения ESP8266. Все дело в том, что очень многое зависит от прошивки, которую вы собираетесь туда залить. Вышеприведенные схемы рассчитаны на новичков, которые только начинают осваивать ESP8266, для экспериментов. Для реальных проектов, возможно, вам придется немного изменить схему. Например, для прошивки TCP2UART нужно подключить RTS к GPIO15, а CTS к GPIO13

Также в реальных проектах рекомендую уделить особое внимание питанию

Docker¶

The Docker NodeMCU build image is the easiest method to build NodeMCU related components locally on your preferred platform.

Offering:

  • build NodeMCU firmware based on locally cloned sources and configuration
  • cross-compile Lua files into LFS image locally

Detailed instructions available in the image’s README. As for available config options and study the comments in .

For LFS

  1. In edit the line and adjust the size to that needed. Note that this must be a multiple of 4Kb.
  2. Build as you would otherwise build with this image (i.e. see its README)

Note that this Docker image is not an official NodeMCU offering. It’s maintained by a NodeMCU team member as an individual, though.

gpio.pulse¶

This covers a set of APIs that allow generation of pulse trains with accurate timing on
multiple pins. It is similar to the API, but can handle multiple pins and has better
timing control.

The basic idea is to build a object and then control it with methods on that object. Only one
object can be active at a time. The object is built from an array of tables where each inner table represents
an action to take and the time to delay before moving to the next action.

One of the uses for this is to generate bipolar impulse for driving clock movements where you want (say) a pulse on Pin 1 on the even
second, and a pulse on Pin 2 on the odd second. and can be used to keep the pulse synchronized to the
RTC clock (that is itself synchronized with NTP).

Attention

This sub module is disabled by default. Uncomment in before building the firmware to enable it.

To make use of this feature, decide on the sort of pulse train that you need to generate — hopefully it repeats a number of times.
Decide on the number of GPIO pins that you will be using. Then draw up a chart of what you want to happen, and in what order. Then
you can construct the table struct that you pass into . For example, for the two out of phase square waves, you might do:

Step Pin 1 Pin 2 Duration (μS) Next Step
1 High Low 100,000 2
2 Low High 100,000 1

This would (when built and started) just runs step 1 (by setting the output pins as specified), and then after 100,000μS, it changes to step 2i. This
alters the output pins
and then waits for 100,000μS before going back to step 1. This has the effect of outputting to Pin 1 and Pin 2 a 5Hz square wave with the pins being out of phase. The frequency will be
slightly lower than 5Hz as this is software generated and interrupt masking can delay the move to the next step. To get much closer to 5Hz,
you want to allow the duration of each step to vary slightly. This will then adjust the length of each step so that, overall, the output is
at 5Hz.

Step Pin 1 Pin 2 Duration (μS) Range Next Step
1 High Low 100,000 90,000 — 110,000 2
2 Low High 100,000 90,000 — 110,000 1

When turning this into the table structure as described below, you don’t need to specify anything
special when the number of the next step is one more than the current step. When specifying an out of order
step, you must specify how often you want this to be performed. The number of iterations can be up to around 4,000,000,000 (actually any value that fits into
an unisgned 32 bit integer). If this isn’t enough repeats, then loops can be nested as below:

The loop/count in step 2 will cause 1,000,000,000 pulses to be output (at 1kHz). This is around 11 days. At this point, it will continue onto step 3 which triggers the
11 days of 1kHz. THis process will repeat for 1,000,000,000 times (which is roughly 30 Million years).

The looping model is that associated with each loop there is a hidden variable which starts at the value and decrements on each iteration until it gets to zero
when it then proceeds to the next step. If control reaches that loop again, then the hidden variable is reset to the value of again.

ESP8266 12-E Chip Pinout

The following figure illustrates the ESP8266 12-E chip pinout. Use this diagram if you’re using an ESP8266 bare chip in your projects.

Note: not all GPIOs are accessible in all development boards, but each specific GPIO works in the same way regardless of the development board you’re using. If you’re just getting started with the ESP8266, we recommend reading our guide: Getting Started with the ESP8266.

At the moment, there are a wide variety of development boards with the ESP8266 chip that differ in the number of accessible GPIOs, size, form factor, etc…

The most widely used ESP8266 boards are the ESP-01, ESP8266-12E NodeMCU Kit, and the Wemos D1 Mini. For a comparison of these board, you can read this guide: ESP8266 Wi-Fi Development Boards comparison.

В чём прошивается?

Существует несколько софтов для прошивки МК. Например NodeMCU Flasher (которая подходит не только для плат NodeMCU) или ESPTool (необходим Python).

Однако в этой статье работа с МК и процесс прошивки будут рассмотрены в Arduino IDE.

Изначально среда Arduino IDE не предназначена для работы с МК серии ESP. Чтобы это исправить, идём в Файл → Настройки и в поле Дополнительные ссылки для Менеджера плат вставляем эту ссылку:

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

После установки в списке плат появится немалое количество плат. Если не нашли свою плату или не знаете её названия — выбирайте Generic ESP8266 Module. Теперь можно выбрать свой МК в списке COM-портов.

Теперь что касается скорости передачи. У ESP8266 две скорости передачи: основная — её вы указываете при инициализации последовательного порта, и скорость, на которой передаётся отладочная информация. Она передаётся сразу после подачи питания на МК. Обычно это скорости 115200 бод и 74800 бод 0 соответственно.

Обновление прошивки ESP8266

Модуль ESP8266 замечателен тем, что не требует специального программатора — обновление прошивки производится на том же железе, на котором вы подключаете модуль ESP8266 к компьютеру, т.е. тоже через USB-TTL конвертер (ну или Arduino или RPi). Для обновление прошивки на модуле ESP8266 проделайте следующее:

для Win систем подойдет XTCOM UTIL (удобно работать, если прошивка состоит из одного файла), мультиплатформенный esptool (требуется python, нужно указывать параметры в командной строке),  FLASH DOWNLOAD TOOL (много настроек, удобно прошивать прошивки, состоящие из нескольких файлов, позволяет «собрать» прошивку в один файл из нескольких). Также вы найдете и другие программы для прошивки ESP8266 — попробуйте разные и пользуйтесь той, которая вам больше понравится.

3. Отключите от последовательного порта вашу терминальную программу

4. Отключите CH_PD от питания, подключите GPIO0 модуля к GND, подключите обратно CH_PD модуля.

5. Запускайте программу для прошивки модуля и загружайте новую прошивку в модуль ESP8266.

Загрузка прошивки в модуль обычно осуществляется на скорости 115200, но режим прошивки модуля поддерживает автоопределение скорости и прошивка может быть осуществлена на скорости от 9600 и выше. Максимальная скорость зависит от многих факторов (вашего USB-TTL конвертера, длины проводов и прочего) и может быть определена экспериментально на конфигурации именно вашего оборудования.

Все последние версии прошивок загружаются с нулевого адреса (0x00000).

В статье Обновление прошивки ESP8266 подробно описана загрузки прошивки в модуль с помощью программы XTCOM_UTIL.

Использованная литература

Оцените статью:
Оставить комментарий