Увеличение количества входов/выходов ESP8266/ESP32/Arduino

У Arduino количество входов в старших версиях (Arduino Mega) значительное, однако само устройство все-же больше заточено под прототипирование и выпуск IoT устройств в небольших количествах. Быстро и недорого заткнуть брешь. Этот вариант пригоден далеко не для всех задач, особенно когда нужно развертывать сотни IoT устройств.

На Arduino довольно удобно разрабатывать. Есть Aruino IDE, несложный вариант C++, поддержка в среде Visual Studio Code/Visual Studio 2017. Накоплена огромная экспертиза, множество штатных библиотек, закрывающих многие задачи, масса форумов, статей и т.п. Однако, к сожалению, если нужно сделать удаленное обновление прошивки, нормального штатного решения для Arduino мне найти не удалось. Нестандартные bootloader разрабатывались давно, обновлений кода нет и насколько стабильно работают, непонятно.

Микроконтроллеры ESP8266 и старший собрат ESP32 — это промышленные микроконтроллеры, отлично документированные с штатной поддержкой обновления программного обеспечения по TCP/IP.

Если разрабатывается решение для промышленной автоматизации, то рекомендую использовать чипы ESP. Будет хороший задел на будущее в части дальнейшего развития. Учитывая то, что код под ESP можно создавать на С++ в среде Arduino IDE/Visual Studio Code/2017, а многие библиотеки совместимы между Arduino и ESP, в случае необходимости можно перейти с ESP на Arduino. Естественно, с потерей функционала Wi-Fi, который встроен в ESP, а в Arduino требуется дополнительный shield. Например, тот-же самый ESP8266. 🙂

В чипах ESP уже встроена поддержка Wi-Fi и Bluetooth (ESP32), есть режимы пониженного энергопотребления, что упрощает разработку устройств работающих от аккумулятора.

Электропитание ESP8266/ESP32

Для автономного электропитания рекомендую используется емкий Li-Ion аккумулятор 18650. На Aliexpress можно найти варианты аккумулятора на 9900 mAh. Скорее всего китайцы лукавят, ставя эту цифру, но батарея действительно емкая.

К ней несложно найти недорогой battery shield для питания устройств на этих микроконтроллерах. Есть и недорогие пассивные battery case для случая, когда управление Li-Ion аккумулятором реализованно на отдельном shield. Например, для платы Wemos D1 mini есть такой вариант shield.

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

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

24-битный АЦП ADS 1256 будет уже 8-ми канальным, небольшая экономия, но при этом цена в районе 15 USD за качество оцифровки. Хотя 24-х битный АЦП для цифровых весов HX711 обойдется меньше, чем в 2 USD.

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

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

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

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

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

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

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

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

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

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

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


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

Сразу отмечу качественное исполнение модулей по цене в районе 1 USD. Чип от TI PCF8574 обеспечивает 8 каналов ввода-вывода (GPIO) управляемых по шине I2C. Есть выход INT соединяемый с входом микроконтроллера поддерживающим обработку прерываний. При возникновении прерывания на одном из входов платы расширения, прерывание транслируется микроконтроллеру для дальнейшей приоритетной обработки поступившего сигнала.

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


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

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

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

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

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

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

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

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

RTC

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

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

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

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

Подключение датчиков 4..20 мА

Промышленные датчики сообщающие об изменении измеряемого параметра изменением тока в диапазоне 4.. 20 мА широко распространены. Они обладают высокой помехоустойчивостью, поэтому к такому датчику можно подвести кабель длиной в несколько сотен метров.

Простейший способ подключения датчика с токовой петлей 4..20 мА к микроконтроллеру — использовать следующую схему:

Подключение датчика тока 4..20 мА к Arduino/ESP8266/ESP32

В ней нет гальванической развязки. Стабилитрон защищает входы микроконтроллера от напряжения превышающего 5,1 V и переплюсовки. Есть и более сложные схемы. Не знаю из какой книги скан, нашел эту страничку на просторах Интернет. Буду благодарен, если перешлете ссылку:

Чтобы точно измерить изменение тока, резистор R1 на 250 Ом на котором микроконтроллер замеряет напряжение (U = I*R) должен быть с минимальным допуском: 1% или лучше.

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

После продолжительных поисков мне удалось найти на Aliexpress модуль, реализующий преобразование ток 4..20 мА в напряжение и достаточно защищенный от разных напастей.

Преобразователь тока 4..20мА в напряжение для подключения к АЦП микроконтроллера

В модуле уже распаян прецизионный резистор на котором замеряется падение напряжения, стабилитрон, защищающий вход от ошибки с полярностью и превышения напряжения >5 V, а также усилитель, обеспечивающий напряжение на выходе в определенных диапазонах, заданных джамперами:

  • 0 — 2.5 V range: J1 1-2 feet short, 3-4 feet shorted                 
  • 0 — 3.3 V range: J1 1-2 feet off, 3-4 feet off                 
  • 0 — 5.0 V range: J1 1-2 feet short, 3-4 feet shorted                 
  • 0 — 10.0 V range: J1 1-2 feet short, 3-4 feet off

По этой-же ссылке можно найти антипод этому модулю, делающий обратное преобразование напряжение в ток 4..20 мА (voltage to current converter). Этот модуль при подключении к датчику напряжения позволит увеличить длину кабеля от него до микроконтроллера.

Конвертер напряжения в ток 4..20 мА

Если искать на просторах интернет то аналогичные конвертеры тока 4..20 мА в напряжение от брендовых производителей стоят недешево, ~20 USD. Например, такое.

Подключение I2C датчиков

В теории к одной шине I2C можно подключить до 127 устройств. У каждого из устройств должен быть свой уникальный адрес. Нередко адрес устройства один и жестко «прошит», поэтому нельзя подключить на одну шину несколько таких модулей. Входов I2C в ESP всего 1 (2 у ESP32) шт.

Для подключения I2C устройств с совпадающими адресами используются I2C мультиплексоры. На Aliexpress из недорогих доступен I2C extender на чипе TCA9548A. Цена в районе 1 USD с доставкой в Россию.

8-канальный I2C мультиплексор на чипе TCA9548A

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

Фактически, мультиплексор обеспечивает временную прямую коммутацию GPIO микроконтроллера с выбранным устройством по его номеру. Это некоторый недорогой workaround для решения проблем с конфликтом адресов I2C.

Интерфейс RS485

Промышленный интерфейс RS485 используется для снятия данных и управления различными устройствами. Обычно используется протокол Modbus RTU/TCP.

О shields для Arduino позволяющих получить RS485 интерфейс я писал ранее. Однако, shields пригодны для прототипирования, но нет смысла использовать их при разработке устройств промышленной автоматизации.

Для добавления поддержки интерфейса RS485 к микроконтроллерам вновь обратимся к Aliexpress. 🙂 К сожалению, система поиска на Aliexpress оставляет желать лучшего. Не всегда удается подобрать сочетание поисковых слов, чтобы найти нужный модуль. Ссылка для поиска плат интерфейса RS485 в Serial UART.

Собственно, на Aliexpress из самых недорогих вариантов представлен такой. На нем не распаяны разъемы, поэтому их придется заказывать отдельно.

Модуль интерфейса RS485 для Arduino/ESP8266/ESP32

В общем, это промышленный модуль для организации RS485 интерфейса на микроконтроллере ESP8266/ESP32/Arduino. Количество его продаж на Aliexpress высокое и отзывы хорошие.

  • Защита 485 шины от удара молнии.
  • Схема с высокой помехозащищенностью. Расстояние до 1000 м.
  • Возможность замены на «горячку». 🙂
  • RXD, TXD светодиодный индикатор.
  • Защита стабилитроном чипов от перенапряжения.
  • Поддерживает питание от 3.3V и 5.0V, что удобно для ESP микроконтроллеров у которых штатное напряжение 3,3 V.
  • Поддерживает скорость 110-256000bps/
  • Напряжение сигнала: 3.3 V и/или 5.0 V.

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

В данном случае китайские производители выпускают массовый продукт, который продается тысячами через различные каналы реализации и у них цена производства очень низкая.

RS485 в RX/TX конвертер

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

Подробнее о работе с этими конвертерами в статье.

Подключение K-Type термопар

Модуль MAX6675 для подключения термопары K-Type к
микроконтроллеру по шине SPI

Для подключения термопар используется несколько типов конвертеров доступных на Aliexpress. Термопары позволяют измерять очень низкие и очень высокие тепературы.

Недорогой модуль MAX6675 транслирует данные снятые с термопары по шине SPI. АЦП 12-ти битный. Позволяет измерять только положительные температуры от 0 до +700 оС. Детектирует обрыв термопары. Цена в районе 1,5 USD.

Модуль MAX31855 для подключения термопары K-Type к микроконтроллеру по шине SPI

Более современный и дорогой модуль MAX31855, заменивший MAX6675 также передает данные по шине SPI. «Обвязка» чипа посерьезнее, чем у MAX6675. У него уже 14-ти битный АЦП, серьезнее детектирование проблем с термопарой. Дополнительно определяет закорачивание выхода термопары на Vcc или GND. Диапазон измеряемых температур от -270 до +1768 оС (крайние диапазоны).

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

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

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

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

Решение от компании AtlasScientific — 8:1 Serial Port Expander самое дорогое. Цена в районе 15$ довольно высока.


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.

Заключение

На этом краткий обзор по вариантам расширения входов микроконтроллеров завершаю. В дальнейшем рассмотрю работу с указанными модулями подробнее.

Spread the love
Запись опубликована в рубрике IT рецепты, IT решения для бизнеса с метками , . Добавьте в закладки постоянную ссылку.