Оглавление
- Тестирование контакта ADC (A0)
- См.также
- Код прошивки
- STM32 (STM32F103C8T6)
- ESP RainMaker
- ESP-07
- Прошивки для esp8266 NodeMcu
- Пример Arduino: мигалка
- Оптимальное подключение ESP8266
- Как быстро подключить ESP8266
- Best Pins to Use – ESP8266
- CoreMark
- Specifications of ESP8266
- UART (serial bus)¶
- Constructor
- Об официальных и неофициальных платах
Тестирование контакта ADC (A0)
Чтобы отправлять команды при помощи ESPlorer IDE, вам нужно установить последовательное соединение между компьютером и ESP. Для этого сделайте следующее:
- Подключите ESP-12E или программатор FTDI к компьютеру
- Выставьте скорость передачи данных на 9600 бод
- Выберите порт, к которому подключен ESP-12E или программатор FTDI (например, COM3)
- Нажмите на кнопку «Open/Close»
Все элементы, необходимые для этих действий, показаны на картинке ниже красным цветом:
Затем впишите команду print(adc.read(0)) и нажмите на кнопку «Send», как показано на картинке ниже:
Вам должно вернуться значение в диапазоне от «0» до «1024». Теперь покрутите потенциометр и еще несколько раз отправьте команду print(adc.read(0)). Если регулятор потенциометра будет выставлен ближе к 0 вольт, программа напечатает что-то около «0», а если ближе к 3,3 вольт, то что-то около «1024».
См.также
AliExpress — глобальная виртуальная (в Интернете) торговая площадка, предоставляющая возможность покупать товары производителей из КНР
Код прошивки
Для прошивки всех используемых ниже модулей используем один и тот же код.
Основные функции:
-
Установка Wi-Fi соединения
-
Подключение к объекту на платформе Rightech IoT Cloud по протоколу MQTT
-
Отправка рандомных значений по температуре («base/state/temperature») и влажности («base/state/humidity») каждые 5 секунд (PUB_DELAY)
-
Получение сообщений о переключении света («base/relay/led1»)
Работоспособность кода будем проверять на платформе Rightech IoT Cloud, именно поэтому в качестве адреса MQTT-брокера указан dev.rightech.io. Идентификаторами клиентов служат идентификаторы объектов, созданных на платформе. Под каждую проверку я завела на платформе отдельный объект, именно поэтому во всех скринах кодов, которые будут далее представлены, отличается только строка <ric-mqtt-client-id>.
Прим. — Можно подключаться и к одному и тому же объекту, тогда можно использовать один и тот же код для прошивки всех плат без изменений, однако следите, чтобы в таком случае платы не подключались к одному и тому же объекту одновременно, иначе случится коллизия.
STM32 (STM32F103C8T6)
Данная отладочная плата известна также под названием проект “Blue pill”. Опенсорсное решение на базе ARM процессора. Плата призвана заменить собой платформу Arduino Nano и имеет следующие характеристики:
- Архитектура Микроконтроллера ARM Cotrex M3
- Разрядность 32 Бит
- Максимальная частота 72 Мгц
- Объем памяти программ (FLASH): 64 / 128 кБайт
- Объем памяти данных (RAM): 20 кБайт
- Выводы: 37
- UART: 3
- SPI: 2
- I2C: 2
- CAN: 1
- USB: 1
- АЦП: 2 АЦП, 10 каналов, время преобразования 1 мкс
- Напряжение питания микроконтроллера 2 … 3,6 В
- Напряжение питания платы 5 В
- Ток потребления до 50 мА
По сравнению с основным конкурентом — Arduino Nano, характеристики более чем впечатляющие. Да и зона применения этого микроконтроллера гораздо шире. Однако без нюансов не обходится. Стоит учитывать, что напряжение питания у микроконтроллера на этой плате составляет в среднем 3,3 вольта, соответственно и логика работы микроконтроллера трехвольтовая. У Arduino Nano напряжение питания 5 Вольт и логика соответствующая.
Однако, не все так печально. Разработчики предусмотрели такой вариант и ряд выходов платы сделали толерантными к 5ти вольтовой логике. Данная информация представлена на изображении ниже:
При этом, если вам необходимо больше выводов, толерантных к 5ти вольтовой логике, чем может предложить данный модуль, существуют преобразователи логических уровней, которые позволяют решить данную проблему.
На китайских торговых площадках мне встречались преобразователи на 4 и 8 каналов, стоят копейки, но позволяют избавиться от головной боли :). Вот ссылка на 4х канальный преобразователь:
Устройства на базе STM32 в последние годы все больше и больше набирают популярность. На них строят как примитивные устройства, так и квадрокоптеры. А с выходом marlin 2.0 количество 3Д принтеров на подобной платформе значительно увеличится.
Свои модули STM32 (STM32F103C8T6) я заказывал вот тут:
Ну а теперь поговорим о модулях на микроконтроллерах с WIFI.
Так или иначе рано или поздно любому радиолюбителю или инженеру становится скучно и не интересно разрабатывать автономные устройства, либо обстоятельства вынуждают разрабатывать устройства взаимодействующие друг с другом или через интернет. У Адруино есть шилды, которые позволяют подружить микроконтроллер с сетью, но прогресс не стоит на месте и был разработан новый микроконтроллер уже имеющий у себя на борту интерфейс wifi. Представляю Вашему вниманию микроконтроллер ESP8266.
Основные характеристики ESP8266 следующие:
- Тактовая частота 80 МГц с возможностью разгона до 160 МГц без гарантии стабильности работы
- Платформа 32 Бит
- Поддержка Wifi стандартов b/g/n
- Количество портов GPIO 14, из них доступно 11
- Количество аналоговых входов 1
- АЦП 10 Бит
- Питания от 2,6 до 3,6 В
- Потребляемая мощность до 215 мА в режиме передачи, 100 мА в режиме приема, 70 мА в режиме ожидания.
- Поддерживаются три режима пониженного потребления, все без сохранения соединения с точкой доступа: Modem sleep (15 мА), Light sleep (0.4 мА), Deep sleep (15 мкА)
Имеются следующие интерфейсы:
- UART
- SPI
- I2C
Вот основные особенности данного микроконтроллера. Как видим, есть свои достоинства и недостатки. К достоинствам можно отнести:
- Производительная платформа
- Наличие Wifi
- Наличие поддержки самых востребованных интерфейсов
- Наличие режимов низкого энергопотребления
- Совместимость со средой Arduino IDE
К недостаткам можно отнести следующее:
- Мало количество портов GPIO
- Только один аналоговый вход
- Высокое энергопотребление в режиме передачи
Однако, недостатки не такие уж и критичные и для ряда проектов просто несущественные.
За счет своей функциональности микроконтроллер ESP8266 приобрел широкую популярность в среде разработчиков устройств и модулей для умного дома и интернета вещей. О чем свидетельствует популярность модулей Sonoff, обзоры которых я делал ранее. (Обзоры модулей Sonoff). Также данные микроконтроллеры используются во всяких устройствах с Wifi на борту, таких как кондиционеры, роботы-пылесосы и т.д.
ESP RainMaker
Вместе с этой новой платой Espressif продвигает платформу ESP RainMaker. Это некая среда, которая позволяет быстро создавать концепты и прототипы для IoT устройств.
На ESP32-C3-DevKitM-1 плате уже была прошивка ESP RainMaker, с которой можно получить общее представление об этом платформе.
Идея примерно такова:
На плате настроен обычный бинарный переключатель. При подключении платы через USB консоль мы получаем QR код, который надо отсканировать в приложении ESP RainMaker (доступно для Android и iOS) для первоначальной конфигурации настроек WiFi и добавлении этого устройства в приложение.
После этого можно управлять встроенным RGB светодиодом на плате через Espressif облако, которое находится на Amazon AWS.
ESP RainMaker SDK позволяет создавать разнообразные устройства, не только бинарный переключатель как в примере. Это может быть датчик измерения температуры или влажности, LCD экран, несколько выключателей сразу или много разных устройств вместе сразу. В последнем случае одна плата будет показана как несколько устройств в приложении.
Для того, что бы поиграться с ESP RainMaker не обязательно ждать когда можно купить ESP32-C3. Сама платформа замечательно работает на ESP32 и ESP32-S2. Для сборки прошивки достаточно иметь настроенный ESP-IDF:
В консоле появится QR код и дальше уже всё в приложении.
ESP-07
Особенности этого модуля — керамическая антенна и разъем для внешней антенны, металлический экран.
Подключение к IoT
Аппаратная часть
Работа с этим модулем, к сожалению, прошла не слишком гладко. Ни один из возможных вариантов подключения не сработал, и я, уже отчаявшись, решила удалять его описание из статьи. Но тут мне дали новый модуль и сказали попробовать еще раз — о чудо, он заработал с первого раза! В чем было дело и как сломался первый модуль, который я мучила, — неизвестно, но скорее всего он был убит нещадной статикой. Мораль этого лирического отступления такова — если у вас что-то не заработало по инструкции, написанной ниже, не вините инструкцию — сначала прозвоните и проверьте все контакты, а потом попробуйте на другом модуле.
1) Собираем схему
ESP-07 |
USB-Serial |
VCC |
VCC |
CH_PD (рекомендуется через резистор) |
VCC |
TX |
RX |
RX |
TX |
GND |
GND |
GPIO 15 (рекомендуется через резистор) |
GND |
GPIO 0 — сначала не подключен, но будет использоваться для перевода в режим программирования далее, поэтому к нему уже подведен провод |
|
все остальные контакты не подключены |
RTS, CTS — не подключены |
На фото этого и следующего модуля уже можно заметить резисторы. После неведомой поломки уже решила перестраховаться и поставила килоомники, хотя и без них все должно работать.
2) Переводим в режим программирования (необходимо каждый раз выполнять перед прошивкой модуля)
2.1) Отключаем питание от модуля2.2. Подключаем пин GPIO 0 к GND
2.2) Подключаем пин GPIO 0 к GND
ESP-07 |
USB-Serial |
VCC |
VCC |
CH_PD |
VCC |
TX |
RX |
RX |
TX |
GND |
GND |
GPIO 15 |
GND |
GPIO 0 |
GND |
все остальные контакты не подключены |
RTS, CTS — не подключены |
2.3) Подключаем модуль к питанию
2.4) Железо готово, приступаем к программной части.
Программная часть
1) Выбираем плату: Tools (Инструменты) -> Board(Плата) Generic ESP8266 Module.
2) Вставляем подготовленный код.
3) Задаем данные для подключения Wi-Fi и идентификатор своего объекта на платформе.
4) Компилируем и загружаем скетч на плату.
5) Для обычной работы модуля (не для режима прошивки) пин GPIO 0 должен быть свободен, поэтому отключаем его от GND.
6) Переподключаем питание ESP-07 (например, вытаскиваем и вставляем обратно адаптер).
7) Видим появление данных на платформе.
В Китае
Прошивки для esp8266 NodeMcu
В основу платформы загружена стандартная прошивка Node MCU, в которую встроен интерпретатор языка Lua. При помощи Lua-команд можно выполнять следующие действия:
- Подключение к Wi-Fi точке доступа;
- Работа в роли Wi-Fi точки доступа;
- Переход в режим глубокого сна для уменьшения потребления энергии;
- Включение или выключения светодиода на выходе GPIO16;
- Выполнение различные операции с файлами во флэш-памяти;
- Поиск открытой Wi-Fi сети, подключение к ней;
- Вывод MAC адреса;
- Управление пользовательскими таймерами.
Для программирования NodeMCU можно использовать Arduino IDE или комплекс средств разработки SDK – ESPlorer. Этот комплекс обладает рядом отличий:
- Он может работать на множестве различных платформ;
- Обладает поддержкой нескольких открытых файлов;
- Позволяет подсвечивать код языка Lua;
- Возможность умной отправки файлов;
- Возможность поддержки нескольких видов прошивки одновременно.
Для обеспечения корректной и стабильной работы нужно обновить прошивку до последней версии. Существует несколько способов обновления – облачный сервис, Docker Image и компилирование в Linux. Каждый из этих способов обладает своими плюсами и минусами. Наиболее простым и понятным является первый способ.
Сбор прошивки в облачном сервисе
После начала сборки придет письмо на почту, сигнализирующее о начале запуска процесса. Через некоторое время придет и второе письмо – будет предложено выбрать версию 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. После всех вышеописанных действий будет новая версия прошивки. Отладочная плата полностью перепрошита и готова к работе.
Пример Arduino: мигалка
Чтобы убедиться, что ядро ESP8266 Arduino и NodeMCU правильно настроены, мы загрузим самый простой скетч – The Blink!
Для этого теста мы будем использовать встроенный светодиод. Как упоминалось ранее в этом руководстве, вывод платы D0 подключен к встроенному синему светодиоду и программируется пользователем. Отлично!
Прежде чем мы перейдем к загрузке скетча и игре со светодиодом, мы должны убедиться, что в Arduino IDE выбрана правильная плата. Откройте Arduino IDE и выберите пункт NodeMCU 0.9 (ESP-12 Module) в меню Инструменты → Плата.
Рисунок 9 – Выбор отладочного модуля NodeMCU в Arduino IDE
Теперь подключите ESP8266 NodeMCU к компьютеру через USB-кабель micro-B. Как только плата будет подключена, ей должен быть назначен уникальный COM-порт. На компьютерах с Windows это будет что-то вроде COM#, а на компьютерах Mac/Linux он будет в виде /dev/tty.usbserial-XXXXXX. Выберите этот последовательный порт в меню Инструменты → Порт. Также выберите скорость загрузки: 115200
Рисунок 10 – Выбор COM порта в Arduino IDE
Предупреждение
Уделите больше внимания выбору платы, выбору COM порта и скорости загрузки. В случае некорректных настроек при загрузке новых скетчей вы можете получить ошибку espcomm_upload_mem.
После выполнения всех настроек попробуйте пример скетча, приведенного ниже.
После загрузки кода светодиод начнет мигать. Возможно, чтобы ваш ESP8266 начал работать со скетчем, вам придется нажать кнопку RST.
Рисунок 11 – Рабта тестового скетча Blink на ESP8266 NodeMCU
Оптимальное подключение 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 входит:
2. Убедиться два раза, что питающее напряжение для модуля составляет 3,3 вольта.
Внимание! Допустимый диапазон напряжения питания модуля ESP8266 от 3,0 до 3,6 вольт. Подача повышенного напряжения питания на модуль гарантированно приведет к выходу ESP8266 из строя
Питающее напряжение может быть и существенно ниже 3 вольт, заявленных в документации
Внимание!
Внимание!
ESP8266 — подключение
Красный — питание 3,3в
Черный — GND
Желтый — на стороне ESP8266 — RX, на стороне USB-TTL — TX
Зеленый — на стороне ESP8266 — TX, на стороне USB-TTL — RX
Оранжевый — CH_PD (CHIP ENABLE) — должен быть всегда подтянут к питанию
Синий — GPIO0 — подключен через выключатель к земле для включения режима перепрошивки модуля. Для обычного старта модуля GPIO0 можно оставить никуда не подключенным.
Розовый на правой схеме — нестабилизированное питание 5-8 вольт
4. Для старта модуля разорвите цепь GPIO0 — GND и можете подавать питание (причем именно в таком порядке: сначала убеждаемся, что GPIO0 «висит в воздухе», затем подаем питание на VCC и CH_PD)
Внимание! В вышеприведенных, реально работающих, примерах подключения ESP8266 используется подключение выводов ESP8266 «напрямую» к земле и питанию, либо «висячее в воздухе», как у нас никуда не подключен RESET, что является абсолютно неправильным и пригодно только для пары первых экспериментов, хотя и вполне работоспособно на подавляющем большинстве модулей. «Напрямую» к питанию подключается только вывод VCC, остальные выводы: CH_PD, RESET, GPIO0, GPIO2, должны быть подтянуты (pullup) к питанию (VCC) через резистор от 4,7 до 50 кОм
«Напрямую», к минусу (общему проводу) питания подключаем только GND, а GPIO0 подтягиваем (pulldown) тоже через резистор до 10k к GND для перевода модуль в режим загрузки прошивки. Если вы планируете и дальше экспериментировать с ESP8266, то сделайте , впрочем так же как и для любых других микроконтроллеров. Детальное описание pullup и pulldown выходит за рамки данной статьи, но вы сможете легко нагуглить описание правильного подключения портов ввода-вывода. «» подключение позволит вам избежать множества «чудес» и проблем и будет неизбежно необходимым при возникновении затруднений с запуском или перепрошивкой модуля ESP8266.
Best Pins to Use – ESP8266
One important thing to notice about ESP8266 is that the GPIO number doesn’t match the label on the board silkscreen. For example, D0 corresponds to GPIO16 and D1 corresponds to GPIO5.
The following table shows the correspondence between the labels on the silkscreen and the GPIO number as well as what pins are the best to use in your projects, and which ones you need to be cautious.
The pins highlighted in green are OK to use. The ones highlighted in yellow are OK to use, but you need to pay attention because they may have unexpected behavior mainly at boot. The pins highlighted in red are not recommended to use as inputs or outputs.
Label | GPIO | Input | Output | Notes |
D0 | GPIO16 | no interrupt | no PWM or I2C support | HIGH at bootused to wake up from deep sleep |
D1 | GPIO5 | OK | OK | often used as SCL (I2C) |
D2 | GPIO4 | OK | OK | often used as SDA (I2C) |
D3 | GPIO0 | pulled up | OK | connected to FLASH button, boot fails if pulled LOW |
D4 | GPIO2 | pulled up | OK | HIGH at bootconnected to on-board LED, boot fails if pulled LOW |
D5 | GPIO14 | OK | OK | SPI (SCLK) |
D6 | GPIO12 | OK | OK | SPI (MISO) |
D7 | GPIO13 | OK | OK | SPI (MOSI) |
D8 | GPIO15 | pulled to GND | OK | SPI (CS)Boot fails if pulled HIGH |
RX | GPIO3 | OK | RX pin | HIGH at boot |
TX | GPIO1 | TX pin | OK | HIGH at bootdebug output at boot, boot fails if pulled LOW |
A0 | ADC0 | Analog Input | X |
Continue reading for a more detailled and in-depth analysis of the ESP8266 GPIOs and its functions.
Pins used during Boot
The ESP8266 can be prevented from booting if some pins are pulled LOW or HIGH. The following list shows the state of the following pins on BOOT:
- GPIO16: pin is high at BOOT
- GPIO0: boot failure if pulled LOW
- GPIO2: pin is high on BOOT, boot failure if pulled LOW
- GPIO15: boot failure if pulled HIGH
- GPIO3: pin is high at BOOT
- GPIO1: pin is high at BOOT, boot failure if pulled LOW
- GPIO10: pin is high at BOOT
- GPIO9: pin is high at BOOT
Pins HIGH at Boot
There are certain pins that output a 3.3V signal when the ESP8266 boots. This may be problematic if you have relays or other peripherals connected to those GPIOs. The following GPIOs output a HIGH signal on boot:
- GPIO16
- GPIO3
- GPIO1
- GPIO10
- GPIO9
Additionally, the other GPIOs, except GPIO5 and GPIO4, can output a low-voltage signal at boot, which can be problematic if these are connected to transistors or relays. You can read this article that investigates the state and behavior of each GPIO on boot.
GPIO4 and GPIO5 are the most safe to use GPIOs if you want to operate relays.
Analog Input
The ESP8266 only supports analog reading in one GPIO. That GPIO is called ADC0 and it is usually marked on the silkscreen as A0.
The maximum input voltage of the ADC0 pin is 0 to 1V if you’re using the ESP8266 bare chip. If you’re using a development board like the ESP8266 12-E NodeMCU kit, the voltage input range is 0 to 3.3V because these boards contain an internal voltage divider.
You can learn how to use analog reading with the ESP8266 with the following guide:
ESP8266 ADC – Read Analog Values with Arduino IDE, MicroPython and Lua
On-board LED
Most of the ESP8266 development boards have a built-in LED. This LED is usually connected to GPIO2.
The LED works with inverted logic. Send a HIGH signal to turn it off, and a LOW signal to turn it on.
When the RST pin is pulled LOW, the ESP8266 resets. This is the same as pressing the on-board RESET button.
GPIO0
When GPIO0 is pulled LOW, it sets the ESP8266 into bootloader mode. This is the same as pressing the on-board FLASH/BOOT button.
GPIO16
GPIO16 can be used to wake up the ESP8266 from deep sleep. To wake up the ESP8266 from deep sleep, GPIO16 should be connected to the RST pin. Learn how to put the ESP8266 into deep sleep mode:
- ESP8266 Deep Sleep with Arduino IDE
- ESP8266 Deep Sleep with MicroPython
I2C
The ESP8266 doens’t have hardware I2C pins, but it can be implemented in software. So you can use any GPIOs as I2C. Usually, the following GPIOs are used as I2C pins:
- GPIO5: SCL
- GPIO4: SDA
The pins used as SPI in the ESP8266 are:
- GPIO12: MISO
- GPIO13: MOSI
- GPIO14: SCLK
- GPIO15: CS
PWM Pins
ESP8266 allows software PWM in all I/O pins: GPIO0 to GPIO16. PWM signals on ESP8266 have 10-bit resolution. Learn how to use ESP8266 PWM pins:
- ESP8266 PWM with Arduino IDE
- ESP8266 PWM with MicroPython
CoreMark
Ради интереса запустил CoreMark бенчмарк для оценки производительности нового RISC-V ядра и сравнил эти данные с предыдущим ESP32 (к сожалению, у меня нет ESP32-S2 для более широкого сравнения).
Ниже приведены попугаи для разной частоты процессора и для общего ознакомления добавлены значения при компиляции с выключенными оптимизациями (-O0):
CoreMark 1.0 |
GCC |
Частота CPU |
|
ESP32-C3 |
388 |
GCC8.4.0 -O3 |
160 МГц |
98 |
GCC8.4.0 -O0 |
160 МГц |
|
ESP32 (одно ядро) |
313 |
GCC8.4.0 -O3 |
160 МГц |
77 |
GCC8.4.0 -O0 |
160 МГц |
|
469 |
GCC8.4.0 -O3 |
240 МГц |
|
115 |
GCC8.4.0 -O0 |
240 МГц |
Я сделал измерения ESP32-C3 на 80 МГц, но значения получились ровно в два раза ниже, что и предполагалось и поэтому в таблице не привожу.
В попугаях RISC-V получился примерно на 24% быстрее. Конечно, обычные задачи, которыми мы загружаем такие микроконтроллеры будут сильно отличаться от синтетических бенчмарков, но было интересно посмотреть.
Надо так же не забывать, что ESP32 поддерживает работу на частоте 240 МГц, а у ESP32-C3 максимальная частота только 160 МГц. Так же ESP32 имеет два ядра, которые можно задействовать в зависимости от задач.
Но повышенная частота 240 МГц так же скажется на потреблении устройства. То есть, ESP32-C3 за каждый попугай будет просить меньше электронов (я не измерял потребление, но есть несколько замеров других наблюдателей).
Specifications of ESP8266
Esp8266 specification divides into three parts: Hardware, Software, and Wi-Fi. In hardware specification, its package size is QFN 32pins with a dimension of 5mm x 5mm. Operating voltages range from 2.5V to 3.6V. The chip consumes 80mA of current on average. Its CPU is Tensilica L106 which is a 32bit processor with on-chip SRAM. The peripheral interface contains UART, SDIO, SPI, I2C, I2S, IR remote control, GIPO’s, ADC, PWM, LED Light and button.
Its firmware can be updated using OTA and UART. It uses IPv4, TCP, UDP, and HTTP as network protocols. User can configure using AT commands set, Cloud Server and using a mobile application.
Wi-Fi frequency ranges from 2.4G to 2.5G. It uses standard Wi-Fi protocol IEEE 802.11 b/g/n. Esp6266 Wi-Fi capabilities are certified by Wi-Fi Alliance.
UART (serial bus)¶
See .
from machine import UART uart = UART(, baudrate=9600) uart.write('hello') uart.read(5) # read up to 5 bytes
Two UARTs are available. UART0 is on Pins 1 (TX) and 3 (RX). UART0 is
bidirectional, and by default is used for the REPL. UART1 is on Pins 2
(TX) and 8 (RX) however Pin 8 is used to connect the flash chip, so
UART1 is TX only.
When UART0 is attached to the REPL, all incoming chars on UART(0) go
straight to stdin so uart.read() will always return None. Use
sys.stdin.read() if it’s needed to read characters from the UART(0)
while it’s also used for the REPL (or detach, read, then reattach).
When detached the UART(0) can be used for other purposes.
If there are no objects in any of the dupterm slots when the REPL is
started (on hard or soft reset) then UART(0) is automatically attached.
Without this, the only way to recover a board without a REPL would be to
completely erase and reflash (which would install the default boot.py which
attaches the REPL).
To detach the REPL from UART0, use:
import os os.dupterm(None, 1)
The REPL is attached by default. If you have detached it, to reattach
it use:
Constructor
SerialESP8266wifi(Stream serialIn, Stream serialOut, byte resetPin)
- serialIn this object is used to read from the ESP8266, you can use either hardware or software serial
- serialOut this object is used to write to the ESP8266, you can use either hardware or software serial
- Example:
SerialESP8266wifi(Stream serialIn, Stream serialOut, byte resetPin, Stream debugSerial)
- serialIn this object is used to read from the ESP8266, you can use either hardware or software serial
- serialOut this object is used to write to the ESP8266, you can use either hardware or software serial
- debugSerial enables wifi debug and local echo to Serial (could be hw or sw)
- Example:
Об официальных и неофициальных платах
Команда NodeMCU опубликовала в фотографию, которая демонстрирует, как официальные платы V2 отличаются от неофициальных. Но я, честно говоря, не совсем понимаю термин «официальный». На мой взгляд, если речь об open-source, то понятия «официальные платы» просто не существует. Это может значить лишь, что Amica – это «подтвержденный» производитель, а DOIT и LoLin – нет.
Затем NodeMCU опубликовали в еще одно фото (см. ниже), где подробнее рассказали, что является официальным, а что – нет. Amica – это, по всей видимости, единственный производитель, который производит свои прототипные платы со стопроцентным соответствием с требованиями NodeMCU V2. Платы Amica не продаются на Banggood, но их можно купить на AliExpress и seeed studio.
Официальная прототипная плата NodeMCU 1.0/V2