• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как подключить дополнительные RX и TX к ESP32

Уже начинаю жалеть, что связался с P3 RGB Matrix panel. Да, все красиво, пока мы подключаем только саму панель. Ну еще без проблем подключил по SPI SD карту и датчик BMP280, с RTC по I2C. А вот подключить просто датчик CO2 MH-Z19B не получается. Там нужны RX и TX. А у меня все пины уже заняты. Остались RX0 и TX0. Ну TX еще можно задействовать не используя сериал порт. RX в принципе тоже можно, но тогда прошивать только по WiFi или перепаивать каждый раз проводочек - не очень удобно. И вот встал вопрос, как найти еще пару RX и TX.
В теории у меня много Arduino NANO (ну как много, штук 5). А вот как скрестить их и как потом писать скетч? Вот этого я не понимаю.
Есть еще всякие расширители портов. Но я нашел скажем расширитель под I2C. Есть так же вроде RX-TX расширитель. Но как его задействовать если все основные пина RX и TX уже заняты? По хорошему конечно чтоли "нарастить" обычные GPIO. Ведь эта панель аж 13 пинов использует! Посадить ее на I2C скажем как ЖК дисплеи наверное нельзя. Иначе бы давно уж готовое решение было. Хотя те же адресные светодиодные матрицы вообще одним контактом управляются!
ПОдскажите, как найти выход? Да я конечно сам буду читать и искать. Ведь еще пару недель назад я вообще не знал как к этой матрице с таким количеством пинов подступиться.
 
Схема-V1.jpg
Вот схема. Да, датчика CO2 тут понятно нет. Т.е. его Rx и Tx тут цеплять некуда. Вот эта вся компания работает. Экран показывает, часики тикают, температуру, влажность и давление меряет, инфа с карточки считывается и записывается на нее.
 
Схему приложил, пока тишина. Прям на схеме конкретизирую.
Вот распиновка ESP32 DEVKIT V1 DOIT. Матрица управляется по очень большому количеству пинов. Аж 13! Так вот Tx и Rx U0 которые использовать конечно можно, но геморойно. А вот U2 которые думаю без проблем. Но для этого надо еще 2 свободных GPIO. Ну там может еще GPIO понадобятся. Хотя там есть еще 4 только на вход. Их думаю под ИК приемник, датчик движения задействовать.
В общем осталось как-то получить хотя бы 2 дополнительных GPIO.
В инете вижу платы расширителей. вот например статья. Но там ничего не написано как их использовать. И еще их недостаток в том, что их надо заказывать и ждать от 2 недель и дольше.
У меня есть как я писал несколько Arduino nano. Я так понимаю можно ее подсоединить. В теории вроде как по I2C шине. Но опять таки как потом всей этой командой управлять? Не нахожу материала. Каждой плате свой скетч писать или как? Даже если я весь дисплей прицеплю к Nano и задам там библиотеку и пины, как управлять этим по I2C?
 

Вложения

Вот опять в теории можно подключить нану через UART. Про написание кода пока молчу. Вопрос можно ли подключить ее к U0 Rx и Tx на ESP32? Или этот порт используется только для подключения к компу по USB и соответственно прошивки.
 

enjoynering

Well-known member
де не густо у вас пинов. есть другой вариант. CO2 MH-Z19B не самый лучший co2 сеносор на рынке по соотношению цена/качество. возьмите Sensirion SCD30. сейчас его можно нати за $17..$25. у него есть I2C интерфейс. я даже писал для него либу - https://elchupanibrei.livejournal.com/70106.html

очень стабильный. он у меня в работе 27/7 (с отключеной ASC) уже 2 года и я его еще ни разу не калибровал - на улице стабильно показывает 400ppm.
 
Хм. Этот датчик брал уже больша года назад и за довольно большие бапки для таких девайсов. Брал по наводке Алекса Гайвера. Он его хвалил. Сейчас подцепил уже NANO по I2C начинаю разбираться. Если получится весь дисплей на NANO повесить, то оставлю как есть. Ну а не получится буду покупать SCD30.
ВАУ! Этот тоже больше 2 тысяч стоит!
 
У меня такое чувство, что вы не читаете, что вам пишут.
Что я не читаю? Вы уж тогда ссылку дайте, где за 17$ можно купить. Я нашел от 2000 и выше на Алиэкспресс. Где дешевле купить такие штуки не знаю.
И да, моя MH-Z19B столько же примерно стоит. Но! Она уже куплена. И если я куплю еще одну, то 2000 будут валятся без дела. Я хочу использовать этот датчик в деревне, где печка есть. А такой дом у меня один. Конечно если выход не найду, придется купить. Я же так и написал.
 

enjoynering

Well-known member
Вот- https://www.aliexpress.com/item/1005002467019989.html

В деревне, где печка, там страшен угарный газ - CO. Для него есть хорошие готовые решения на потолок с резервным питанием от батареек или в розетку. Рекомендую, реально спасает жизни.

Пы.сы. если мне не изменяет память то у MH-Z19B выход pwm, если его задействовать, то можно использовать оставшиеся (только на вход) gpio
 
Блин! Вот я "ХИМИК" едреныть! Ведь действительно мне СО нужен датчик!
Вся беда в том, что бабуля покупать готовое ничего не хочет! А тут вроде внучек сделал своими руками! Буду искать датчик СО для Ардуино. Может он по I2C будет работать.
 

enjoynering

Well-known member
Дело ваше, но я бы купил промышленный со извещатель и засунул в картонную коробку для бабушки. Хоть какие это сертификаты безопасности и тесты. А ваш, кривой косой код может отказать в ответственный момент.
 
Ну а по вопросу из темы никто не подскажет? По I2C Ардуино НАНО вроде подключил. Датчики пока не пробовал к ней цеплять. Но вот RxTx там тоже один и задействован под прошивку. ESP32 C3 подключить по I2C не смог. И вроде стартует она как Slave без ошибок, но мастер ее не видит.
 
Короче связать то я связал ESP с Ардуиной по I2C. Осталось как-то передать по I2C данные в формате float, которые датчик выдает.
Вот тут вроде обсуждают этот вопрос. Но у них мастер передает данные в слейв. У меня же наоборот. А вот тут я не смог сам изменить.
 
Короче говоря вопрос встал так. Как на слейве несколько переменных, как правило формата float передать через I2C на мастер, а там принять их и обратно преобразовать во что-то, что можно сохранить в файл и вывести на экран.
 
Даже не знаю, стоит спрашивать, как-то тут совсем тихо. Но попробую. Как передавать я разобрался немного. И даже нормально передаю одну переменную float. По той ссылке, что я писал, используют библиотеку I2C_Anything.h. Там типа при передаче пищешь
Код:
void requestEvent() {
 I2C_writeAnything(t);
 I2C_writeAnything(h);
}
Эта функция вызывается на slave устройстве так:
Код:
  Wire.begin(8);                /* join i2c bus with address 8 */
  Wire.onReceive(receiveEvent); /* register receive event */
  Wire.onRequest(requestEvent); /* register request event */
А при приеме на master делашь вот так:
Код:
   float t_sl, h_sl;
   Wire.requestFrom(0x08,8);
   if(Wire.available()) {        // read response from slave 0x08
     I2C_readAnything(t_sl);
     I2C_readAnything(h_sl);
   }
Так вот если я передаю одну переменную, то все ОК (понятно пишем Wire.requestFrom(0x08,4);). А вот если две переменных, то первая так и принимается нормально, а вот во второй вместо скажем 20,0 мы получаем 1101004800 .
 
Блин! Как мало времени на изменение дается. Хочу добавить. если я как и в примере на том сайте передаю переменную типа long, то она нормально передается и принимается. А вот если вторая float, то такая хрень. При чем ведь и long и float обе 4 байта. Не пойму, в чем дело?
 
Разобрался. Сам долбое...б! :) Скопировал с того сайта и задал одну переменную float, а другую long как на том сайте, а слал обе float. Вот теперь бы все мои предыдущие посты удалить, т.к. вел разговор сам с собой и сам же накосячил!
 

enjoynering

Well-known member
Даже не знаю, стоит спрашивать, как-то тут совсем тихо.
вам здесь не пищут, потому что вы занимаетесь фигней.

1. вешать микрокотроллер на микрокотроллер - это как бы очень странно.
2. судя потому какие вопросы вы задаете и какие либы вы используете - вы в программировании новичек. использоваьт ваш код в самопальном детекторе СО - это рисковать жизнью. купите промышеленный, они стоят не дорого.
 
Забудем про СО детектор. У меня на ESP32 не хватает пинов. Я решил задачу за счет подключения по I2C Arduino. Так же скажем когда все датчики и экран висели на ESP, то при сборе данных с датчика BMP280 происходила какая-то задержка и бегущая строка на экране дергалась. При подключенной Arduino nano и работе с bmp280 с Arduino этого удалось избежать. Честно говоря не понимаю чего странного вешать микроконтроллер на микроконтроллер. Это очень широко используется(на сколько я вижу обсуждения в интернете). Это у меня 2-3 датчика (правда дисплей занимает аж 13 пинов), а у людей их по 10-20 штук разных. И хорошо когда они все на I2C.
В общем у меня скорее был теоретический интерес. Скажем в моем конкретном случае можно решить проблему как подключением Arduino NANO, так и покупкой ESP32 38pin.
Ну и если уж про СО датчик, то это более теоретический вопрос был. Я новичек в С++, программированием же я занимался почти всю жизнь (Delphi, Basic, ASP, Java, PHP, PowerShell), так что простенький код для замера показаний датчика и включения мигалки или пищалки как-нибудь осилю.
 
Сверху Снизу