Знакомство с недорогим и функциональным микроконтроллером esp8266: прошивка и пример использования

Содержание

Введение

Успех ESP8266 от Espressif Systems неоспорим. Это мощный микроконтроллер обладает встроенным Wi-Fi модулем и легко адаптируется к множеству применений в быстро растущей отрасли IoT (Internet of Things, интернет вещей). Одной из немногих трудностей использования этой микросхемы стало обновление прошивки в тысячах и тысячах отладочных модулей, которые проникли на рынок. Для предыдущей статьи были выявлены некоторые исправления и улучшения, и представление этой информации является целью данной статьи.

В частности, будут рассмотрены следующие улучшения:

  • лучшая схема прошивки;
  • более простая в использовании программа терминала;
  • обновленный инструмент прошивки Flash Download Tool и обновленная прошивка ESP8266 SDK v2.0.0.

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

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

Step 5: Code Explanation — Continued

void loop(){
 button_state = digitalRead(button);
 
 if(button_state == HIGH){
    mySerial.println("AT+CIPSEND=0,23");
    mySerial.println("<h1>Button was pressed!</h1>");
    delay(1000);
    SendCommand("AT+CIPCLOSE=0","OK");
  }
  
 String IncomingString="";
 boolean StringReady = false;
 
 while (mySerial.available()){
   IncomingString=mySerial.readString();
   StringReady= true;
  }
 
  if (StringReady){
    Serial.println("Received String: " + IncomingString);
  
  if (IncomingString.indexOf("LED=ON") != -1) {
    digitalWrite(LED,HIGH);
   }
 
  if (IncomingString.indexOf("LED=OFF") != -1) {
    digitalWrite(LED,LOW);
   }
  }
 }

In the loop, we read the state of the button and assign it to the variable “button_state.”

Then we check if the button is pressed.

If the case is true, we type the command “AT+CIPSEND=0,23” to send 23 bit of data through channel 0 to our device connected to the ESP-01. Then we type the message that we want to send. In this case the message is “Button was pressed!” Note that we can use html formatting to edit the text and make it a header.

Next, we create a string variable that will hold the data coming from the ESP module. Once all data has been read we check if the received data contains either a string equal to “LED=ON” or “LED=OFF” along the lines.

If the first case is true, the LED is turned on. If the second case is true, the LED is turned off.

Выбор микроконтроллера

В прошлой версии “Умного чайника” не было датчика температуры, а RGB-светодиод принимал только дискретные значения (логические 0 и 1) для каждого из 3 выводов. В новой версии устройства RGB-светодиод во время процесса подогрева должен плавно изменять цвет по спектру от зелёного до красного, проходя жёлтый и оранжевый цвета. Для этого на плате микроконтроллера нужны 2 пина, подключенных к каналам цифро-аналоговых преобразователей. Для датчика температуры DS18B20 нужен 1 пин, подключенный к каналу аналого-цифрового преобразователя. И если встроенный АЦП в модулях ESP8266 есть, то встроенных ЦАП нет. Поэтому такой вариант для нашего примера не подойдёт. А ESP32 как раз поддерживает два 8-битных канала ЦАП.

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

Различия ESP8266 и ESP32

Чип ESP32 является преемником ESP8266 и превосходит его во всех характеристиках, кроме стоимости. Интересно, что оба чипа представляют собой 32-разрядные микроконтроллеры, таким образом, интуиция здесь не срабатывает.

Влияние RISC-V на выбор микроконтроллера

RISC-V архитектура находит признание благодаря своей открытости, которая позволяет кастомизировать дизайн процессора, и свободе от лицензионных сборов в пользу разработчиков архитектуры. Это увеличивает конкуренцию на рынке и количество различных по характеристикам чипов, поскольку производители могут свободнее подходить к их изменению и улучшению. Архитектура процессора не всегда напрямую влияет на выбор микроконтроллера. Для производителя открытая архитектура позволяет экономить на процессорах и вкладывать в развитие других частей микроконтроллера. Также открытая архитектура способствует расширению семейства процессоров, что опять же позволяет экономить на процессоре, поскольку используется наиболее близкий к потребностям пользователей микроконтроллер. В целом открытая архитектура имеет положительные долгосрочные эффекты для производителей, и, соответственно, пользователей, поскольку открывает возможности свободного развития продуктов и обогащения рынка разнообразием новых устройств.

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

Если вы не располагаете вообще никакими USB-TTL конвертерами, то в таком случае можно использовать RaspberryPi. В данном случае для ESP8266 программирование и подключение осуществляется практически идентично, но при этом здесь все не так удобно, а дополнительно нужно будет использовать также стабилизатор питания на 3,3 вольта.

Для начала RX, TX и GND нашего устройства подключаем к ESP8266, а GND и VCC берем со рассчитанного на 3,3 вольта

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

Если не подключается…

Вы можете проверить наличие связи между Arduino и ESP8266 используя Serial Monitor, который можно открыть во вкладке Tools в Arduino IDE.

Откройте Serial Monitor и установите скорость 115200. Нажмите кнопку сброса на плате Arduino.

Проверьте наличие правильно загруженной программы

Если после сброса Arduino в Serial Monitor нет никаких сообщений, это скорее всего означает, что Arduino не выполнят вашу программу. Возможно:

  • нужный скетч не был загружен;
  • ваша Arduino не включена;
  • Serial Monitor не подключился к Arduino;
  • с вашей Arduino что то не так.
  • внесены недопустимые изменения в код, например откорректирована структура RemoteXY или массив RemoteXY_CONF, удалены вызовы функций RemoteXY_Init() или RemoteXY_Handler().

Если вы уже добавили в проект какой либо код вашей задачи, попробуйте протестировать RemoteXY без этого кода, используя только тот код который генерирует редактор.

Проверьте связь между Arduino и ESP8266

Если после сброса Arduino в Serial Monitor вы видите следующую последовательность команд, это означает, что инициализация ESP8266 проходит успешно и связь между Arduino и ESP8266 есть:

Если вы видите только повторяющиеся команды «AT», это означает что нет связи между Arduino и ESP8266.

Связь может отсутствовать по разным причинам. Ниже перечислены основные:

  • контакты RX и TX подключены не верно, перепутаны контакты, или подключены не к тем контактам, или не подключены совсем;
  • скорость передачи данных не совпадает, ESP8266 по умолчанию использует скорость 115200;
  • нет питания на ESP8266, при подаче питания на ESP8266 должен светиться красный светодиод;
  • не хватает мощности источника питания 3.3 В для ESP8266;
  • модуль ESP8266 неисправен.

Проверьте прошивку ESP8266

Если после сброса Arduino в Serial Monitor вы видите только начало последовательности команд, но нет завершающей команды AT+CIPSERVER=1,6377 это означает, что модуль ESP8266 имеет устаревшую прошивку. Требуется обновление прошивки.

Если инициализация проходит успешно и вы видите последнюю команду AT+CIPSERVER=1,6377, но при попытке подключения с мобильного приложения возникает ошибка, возможно, что модуль ESP8266 имеет устаревшую прошивку.

Проверьте объем памяти вашего ESP8266. Это можно сделать так же посмотрев маркировку чипа памяти, который находится на плате рядом с чипом ESP8266. Если размер памяти составляет 4 Mbit и меньше (установлен чип 25Q40), скорее всего этот модуль не будет работать как точка доступа для RemoteXY.

Проверьте питание ESP8266

Так же возможно, что вашей ESP8266 не хватает мощности источника питания. Некоторые платы Arduino имеют слабый стабилизатор напряжения 3.3 В, который не способен выдавать 200-300 мА в пиковых режимах. В этом случае в Serial Monitor вы так же увидите обрыв последовательности команд.

Проверьте особенности вашего смартфона

Некоторые модели смартфонов на Android имеют особенности подключения точек доступа WiFi, и возможно точка доступа не включается автоматически. Попробуйте подключиться к точке доступа предварительно в ручную, используя системные настройки. После этого попробуйте соединиться с устройством из приложения RemoteXY. Если в этом случае соединение устанавливается, значит ваш смартфон имеет такую особенность. Сообщите нам об этом.

Увеличение количества цифровых GPIO входов/выходов

Плата увеличения количества GPIO портов.

Для увеличения количества цифровых входов можно воспользоваться добротной платой расширителя GPIO на 8 Входов/Выходов. Она хорошо документирована, исполнена на высоком техническом уровне. Хотя, ценник не Aliexpress-а. При изготовлении нескольких сотен устройств, себестоимость конечного устройства существенно вырастет.

Посмотрим, что есть на сей счет есть у китайских собратьев. А у них конечно-же что-то есть и недорого.

8-канальный расширитель GPIO на чипе PCF8574 с DIP переключателями для назначения I2C адреса
8-канальный расширитель GPIO на чипе PCF8574 с джамперами для назначения I2C адреса. Эту плату можно каскадировать.

Конструктивно синие модули удобно каскадировать, втыкая один в другой. Адрес устройств удобно задается либо DIP переключателями, либо джамперами. Возможно подключение внутренних pullup резисторов на +5V.

16-ти канальный расширитель GPIO на чипе PCF8575

Старший брат TI PCF8575 позволяет получить 16 GPIO портов за цену в два раза выше. Но реализация платы попроще. никаких DIP переключателей для выбора адреса I2C. Зато 16 каналов в компактном исполнении.

Аналогичный чип от компании Microchip на 16 входов для расширения количества GPIO портов, MCP23017. Есть вариант для шины I2C и более шустрый для SPI (MCP23S17). Китайские продавцы нередко указывают в описании товара чип MCP23S17, однако по фото платы видно, что чип MCP23017

Обращайте на это внимание! Аналогичный чип на 8 портов — MCP23008

MCP23017 плата увеличения GPIO для микроконтроллеров

Цена этого варианта модуля в районе 1,5 USD. Исполнение платы попроще обойдется почти в два раза дешевле. Чип позволяет обеспечить увеличение GPIO на 8+8=16. Как и чип от Texas Instruments помимо входов для подключения устройств есть два выхода прерываний на каждый блок из 8 устройств. Этот чип позволяет работать на частоте до 1,7 МГц и 10 MHz для версии под шину SPI, в отличие от чипа PCF8574 для которого верхний предел 400 кГц. Также возможно подключение внутренних pullup резисторов на +5V. Схема подключения платы к ESP8266 разобрано здесь.

SX1509 модуль для увеличения количества GPIO.

Ещё один 8+8=16-ти канальный расширитель количества GPIO с Aliexpress на чипе SX1509. Библиотека и описание от Sparkfun. Чип дороже, чем ранее представленные. По ТТХ чип очень похож на ранее рассмотренные варианты. Работает на частоте 400 кГц. Есть встроенная поддержка ШИМ (PWM) на выходах.

Чип «заточен» для работы с LED и клавиатурой. В части LED из-за наличия ШИМ позволяет управлять яркостью светодидов, выполнять затухание, моргание и пр. Есть в наличии выход INT для трансляции прерываний микроконтроллеру. Поддерживаются встроенные pull-up, pull-down резисторы на входах.

GPIO expander от Fairchild (ON Semiconductor) FXL6408UMX. Аналогично 8 портов управляемых по шине I2C. Datasheet.

Среда разработки ПО

Давайте поговорим о IDE для ESP8266. Я как и большинство выбрал именно ESPlorer, так как тут очень много удобностей. Я на данной стадии почти не умею ничего программировать для ESP, так только поиграться можно но зная язык Lua, который к стати довольно таки и не сложный, можно писать программы. 

На этом месте я закончу свой рассказ так как далее я буду познавать превращение данной платки ESP-01 в дистанционный переключатель

Всем спасибо за внимание

Ссылки которые помогли в написании этой статьи.

  1. http://narodstream.ru/esp8266-urok-4-proshivaem-esp-01/
  2. http://wiki.amperka.ru
  3. http://www.avislab.com/blog/esp8266-nodemcu-start_ru/
  4. https://arduinoplus.ru/proshivka-nodemcu-esp8266/

ESP8266 vs ESP32

Вкратце сравню ESP8266 с ESP32.

  ESP8266 ESP32
MCU Xtensa Single-core 32-bit L106 Xtensa Dual-Core 32-bit LX6 with 600 DMIPS
802.11 b/g/n Wi-Fi HT20 HT40
Bluetooth X Bluetooth 4.2 and BLE
Typical Frequency 80 MHz 160 MHz
SRAM X
Flash X
GPIO 17 36
Hardware /Software PWM None / 8 channels None / 16 channels
SPI/I2C/I2S/UART 2/1/2/2 4/2/2/2
ADC 10-bit 12-bit
CAN X
Ethernet MAC Interface X
Touch Sensor X
Temperature Sensor X
Hall effect sensor X
Working Temperature -40ºC to 125ºC -40ºC to 125ºC
Price $ (3$ — $6) $$ ($6 — $12)
Where to buy

Использовать GPIO входы/выходы на этих чипах можно по-разному.

Функциональное назначение выводов чипа ESP8266.

При приобретении ESP32 devkit на Aliexpress нужно обращать внимание на количество PIN-ов. Наиболее распространенный вариант — 30 PIN-овый, такой-же как ESP8266

Он стоит в районе 5 USD. Есть вариант на 36 PIN и 38 PIN. На 38 PIN стоит в районе 8 USD. Отличить легко, PIN-ы опускаюся до нижнего края кнопок.

Здесь уже нужно смотреть, что нужно от платы, поскольку може оказаться выгоднее приобрести расширение на 16 GPIO за 1,5 USD, чем переплачивать за PIN-ы на devkit.

Функциональное назначение выводов чипа ESP32 с 36 PIN-ами

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

У ESP32 можно использовать 10 входов в качестве емкостных (TOUCH). Присоединенный к ним провод будет изменять емкость при поднесении руки. Например, можно реализовать вечные емкостные кнопки, которые могут быть реализованы на печатной плате, без использования механических компонент.

Аналого-цифровой преобразователь АЦП (ADC)

В ESP8266 только один АЦП (ADC), в то время как в ESP32 доступно 18!!! АЦП, причем 12 битных, в отличие от 10-ти битного АЦП ESP8266. Напряжение срабатывания АЦП в ESP32 можно менять от 0 до 4 V.

I2C адресация модуля ADS1115

16-ти битные внешние модули АЦП с чипом ADS1115 4-х канальные и стоят с доставкой в Россию в районе 1,5 USD. Примерно столько же стоит 12-ти разрядный ADS1015. Datasheet здесь.

Чтобы в ESP8266 получить такое-же количество каналов АЦП, как у ESP32 потребуется 4 шт. внешних АЦП и цена только этих модулей получится в районе 6 USD. Сам чип ESP32 распаянный на плате можно приобрести примерно за 7 USD с доставкой в Россию. Схема подключения здесь.

Если есть сомнения по поводу входного напряжения, то целесообразно использовать внешний АЦП, поскольку выход из строя платы на 4 канала обойдется несколько дешевле, чем потеря микроконтроллера. Либо подстраховываться установкой стабилитрона.

  • 4-х канальный 18-ти разрядный АЦП MCP3424 обойдется примерно в 5 USD. Младший одноканальный брат MCP3421 примерно в 2,5 USD.
  • 2-х канальный 24-х разрядный АЦП ADS1232 обойдется примерно в 4 USD. Есть 4-х канальный вариант ADS1234, но платы с этим чипом отсутствуют на Aliexpress. Доступен только сам чип.
  • 24-битный АЦП ADS 1256 будет уже 8-ми канальным, небольшая экономия, но при этом цена в районе 15 USD за качество оцифровки.
  • 24-х битный АЦП для цифровых весов HX711 обойдется меньше, чем в 2 USD.
  • 3-х канальный 24-х битный АЦП AD7793 обойдется примерно в 7 USD. Datasheet здесь.

Помимо АЦП в ESP32 есть два 8-ми битных ЦАП (DAC).

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

Помимо увеличения аналоговых входов с помощью АЦП есть вариант расширения мультиплексором. Хорошая статья на эту тему в которой подробно рассмотрен аналоговый мультиплексор/демультиплексор CD4051/74HC4051. Много вариантов от других производителей.

CD4051 — это 8 канальный аналоговый CMOS мультиплексор/демультиплексор. ДЛя увеличения количества аналоговых входов на 7 потребуется 1 аналоговый и 3 цифровых входа.

Функциональная схема работы мультиплексора/демультиплексора CD4051

Мультиплексор передает сигнал с одного из нескольких входов на единственный выход. Демультиплексор, напротив, передает сигнал с единственного входа на один из информационных выходов.

Если приобретать модуль на Aliexpress, то цена будет в районе 0,8 USD за 8 каналов, 16-ти разрядное АЦП ADS1115 — 1,5 USD за 4 канала. Если же приобретать только микросхему CD4051, то цена будет гораздо ниже микросхемы АЦП.

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

  1. Запустить Arduino IDE, далее Файл — Настройки — в поле Additional Boards Manager URLs вставить ссылку на стабильную версию
    http//arduino.esp8266.com/package_esp8266com_index.jsonили для nightly build
    http//arduino.esp8266.com/staging/package_esp8266com_index.json, нажать OK (В это поле вы можете вводить несколько ссылок, разделенных запятой)
  2. Инструменты — Плата — Boards Manager
  3. В Boards Manager в поле фильтра введите esp8266 или вручную пролистайте список и кликните на ESP8266 by ESP8266 Community Forum
  4. Кликните Install и дождитесь окончания загрузки (около 130 Мегабайт). Если загрузка произошла слишком быстро, возможно, что вы уже устанавливали Arduino IDE для ESP8266 и потребуется почистить кэш Boards Manager, иначе у вас останется установленной старая версия. Нужно сначала деинсталлировать старую версию, а потом необходимо удалить файлы кэша. Для Win7 x64 удалите файлы из папки C:\Users\Пользователь\AppData\Roaming\Arduino15 и повторите все, начиная с п.2
  5. Закройте Boards Manager и в меню Инструменты выберите Плата — Generic ESP8266
  6. Установите частоту вашего модуля 80 или 160Mhz, размер флеш памяти и выберите последовательный порт, к которому подключен ваш USB-TTL адаптер

Увеличение количества UART (RX/TX) портов

Для некоторых задач есть необходимость увеличения количества последовательных портов. Для старших моделей Arduino, например, Mega, острой необходимости в увеличении последовательных портов нет, там их достаточно. Однако для ESP8266 задача вполне актуальна, учитывая что там только один hardware serial port, да и тот нередко занят под распаянный на плате USB ковертер. Можно эмулировать работу последовательного порта на GPIO с помощью SoftSerial, но не для всех задач это приемлемо.

Расширение одного последовательного порта UART (RX/TX) на 8-мь дополнительных последовательных портов

Решение от компании AtlasScientific — 8:1 Serial Port Expander самое дорогое. Цена в районе 15$ без доставки довольно высока, хотя если сравнивать с одно и двух портовыми модулями, то цена за порт меньше 2 $, что выгоднее чем у 1-2-х портовых собратьев.

SC16IS760 модуль для конвертации I2C / SPI на один UART порт

Есть конвертеры I2C в один порт UART и 8 GPIO портов на чипе SC16IS750. Стоят порядка 4 $ с оставкой в Россию. SPI вариант на чипе SC16IS760. Учитывая, что на одну шину можно вешать несколько модулей — можно набрать нужное количество. SPI порт достаточно шустрый, чтобы обеспечить подключение достаточно большого количества таких модулей.

SC16IS762 модуль для конвертации I2C / SPI на два UART порта

Есть старший собрат ковертера I2C в два порта UART и 8 GPIO портов на чипе SC16IS752. Стоят порядка 5 $. SPI вариант на чипе SC16IS762.

Плат на чипах MAX14830, MAX3107, MAX3108, MAX3109 я на Aliexpress не нашел.

Схемное решение для получения 4-х портов UART.

Компоненты умного дома

Теперь я хотел бы подробнее остановится на компонентной схеме умного дома. Все компоненты уместились в следующей схеме:

Компоненты умного дома

Слева-направо: сначала идет ваше устройство на ESP8266, далее это прошивка ESP Easy (ее ставим на ESP8266), прошивку подключаем к MQTT-брокеру (например WQTT.ru или свой брокер на своем сервере), веб-сервис WQTT.ru уже имеет подключение к Алисе (на своем брокере это подключение придется сделать самостоятельно, что в общем несложно, потому что это наша привычная работа программиста), далее сервер логики Node RED, который подключен к MQTT-брокеру и управляет всем умным домом. И в конце можно поставить Homebridge для связи умного дома с Homekit.

Как вы наверное догадались, homebridge с голосовыми помощниками не обязательные компоненты. Главное это MQTT-брокер и Node RED. Эти два сервера вам обеспечат практический полный функционал и доступ к настройке любой логики.

Думаю общая картинка умного дома уже появилась и можно переходить к самим компонентам в отдельности. В этой статье рассмотрим MQTT-брокер и само устройство. В следующих статьях будем рассматривать настройку прошивки ESP Easy и Node RED. Этого будет достаточно, чтобы запустить простейший вариант умного дома.

В качестве устройства у нас будет светодиод, который встроен в ESP8266 и сидит на пине GPIO2. Этот светодиод будет имитировать освещение в гостиной например. Также подключим кнопку, которая будет включать этот светодиод. И еще в нашем устройстве будут два датчика: DHT11 и BMP085 (влажности и барометр с термометром). 

В логику (которая будет хранится в Node RED) заложим управление кнопкой и светодиодом, оповещение по телеграму о резком похолодании в комнате и вывод значений датчиков в Homekit и Алису.

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

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

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

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

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

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

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

Определения и инструменты для платы ESP8266 включают в себя полностью новый набор gcc, g++ и других достаточно больших скомпилированных двоичных файлов, поэтому загрузка и установка могут занять несколько минут (заархивированный файл весит ~110 МБ). После завершения установки рядом с записью появится надпись INSTALLED. Теперь можно закрыть менеджер плат.

Вспоминаем биты и байты

Объем EEPROM в модуле ESP8266 (например, ESP-01) является очень важным фактором для выполнения процесса прошивки. Это количество EEPROM может быть выражено в различных единицах измерения, а используемые единицы варьируются в документации от места к месту, что может внести некоторую путаницу. Ключевые моменты и таблица, приведенные ниже, включены в качестве справочной информации, чтобы свести эту путаницу к минимуму.

Обозначение для бита b, а для байта – B.
В одном байте (B) содержится восемь бит (b).
Обозначения для килобита Kb, а для килобайта – KB. Аналогично, мегабит обозначается Mb, а мегабайт – MB

И так далее.
Также хорошо бы обратить внимание, что большинство (возможно, все) модули ESP-01 на черных печатных платах содержат 1 MB EEPROM.

Единица измерения Байт (B) Килобайт (KB) Мегабайт (MB) Гигабайт (GB)  Терабайт (TB)
Количество байт 1 1 024 1 048 576 1 073 741 824 1 099 511 627 776

RTC

Подключение внешнего кварцевого резонатора к ESP32

По одним статьям RTC в ESP32 — это не Real Time Clock, а ядро низкого энергопотребления. Однако, по другим все-же Real Time Clock, но плохого качества (+-5%), который не стоит использовать в бизнес-приложениях.

Возможно, проблема неточности встроенного RTC может быть решена добавлением внешнего кварцевого резонатора. Я нашел упоминание о схеме подключения карцевого резонатора к контактам RTC_GPIO8/RTC_GPIO9. Но непонятно как запитывать встроенный RTC от батарейки. Отдельного входа RTC VBAT нет.

В общем, не факт, что удастся сэкономить на входе. Особенно, если нужен data logger, а не только RTC. В data logger RTC уже встроен и SPI выводы на чтение/запись придется отдать :-(. Хотя в data logger RTC нередко подключается на шину I2C.

Бизнес-логика в коде приложения

В первой части статьи я уже описывал бизнес-логику приложения. Напомню, что под бизнес-логикой я понимаю обработку событий с периферии и с облака. При обработке происходит или управление периферией, или передача атрибутов Capability в облако. 

Считывание показаний температуры с датчика

В отличие от примера для ESP8266, в этом примере добавляются события от настоящего датчика. Это взаимодействие организовано в виде передачи сообщений через очередь (FreeRTOS Queue) между двумя тасками/потоками: основным таском с управлением и мониторингом остальной периферии и таском, считывающим данные с датчика температуры. В основном таске создаётся очередь temperature_events_q, а также запускается таск, считывающий температуру.

В основном таске внутри бесконечного цикла на каждой итерации происходит попытка получить значение температуры из очереди и записать в переменную temperature_value. Если значение переменной temperature_value поменялось, то новое значение температуры отправляется в облако и отображается в UI приложения:

Подробнее о работе с тасками и очередями вы можете прочитать в 3 и 4 главе книги «Mastering the FreeRTOS Real Time Kernel», рекомендуемой на странице с ресурсами в документации FreeRTOS.

Светодиодная индикация

Помимо нового источника событий в коде бизнес-логики меняется управление RGB светодиодом при установке значения температуры подогрева “чайника” в коллбэке Thermostat Heating Setpoint Capability, а также в начале и завершении процесса подогрева. 

Вступление

В первой части статьи на примере “Умного чайника” я описал процесс разработки приложения, интегрированного в экосистему SmartThings. В этой части я усложняю пример: добавляю датчик температуры и делаю плавную индикацию RGB-светодиода. Я опишу, чем отличаются ESP8266 и ESP32, и почему в этом примере нам больше подходит именно ESP32. Также будет описана передача сообщений между потоками/тасками на примере очередей в FreeRTOS. Таким образом, данная статья предназначена для всех, кто хочет перейти от самых простых умных устройств с минимумом функционала, к устройствам чуть более сложным как с программной, так и с железной точки зрения.

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) Видим появление данных на платформе.

В Китае

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

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

2. Подключить ESP8266 к USB-TTL как обычно. Если вы подключили ESP8266 по схеме без поддержки автозагрузки прошивки (не подключены DTR и RTS), то вручную соедините GPIO0 с землей, передерните питание модуля — все готово для  прошивки

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

4. В меню Инструменты — Плата — Generic ESP8266 board (в самом низу)

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

6. В меню Инструменты — выбираете частоту, размер флеш памяти вашего модуля

7. В меню Файл — Примеры (Образцы) — ESP8266WiFi — WiFiWebServer

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

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

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

11. В меню Инструменты — Монитор последовательного порта

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

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

14. Когда модуль подключится к сети, то появятся надписи в мониторе «WiFi connected» и «Server started»

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

16. Открываете любой браузер, в строке адреса вбиваете «http://192.168.1.248/gpio/1»

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

18. Profit!

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

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