Обмен данными между ESP8266 и Arduino

 
+
-
edit
 

Balancer

администратор
★★★★★
В который раз сталкиваюсь с необходимостью передавать (или получать) данные с Arduino по воздуху. Традиционные рецепты, типа nRF24L01 или 433МГц передатчиков требуют дополнительного программирования и дополнительной ноды-гейта, а я так до сих пор её и не собрал :) А так — то на табло надо данные выводить, то с сенсоров снимать, то управлять пресловутой рожей робота :)

Пару дней назад (в Телеграм-чате писал, сюда поленился) в доме от соседей из параллельного подъезда сильно пахло не то чесноком, не то газом. В панику удариться не дал мой газовый сенсор MQ-2, который не показал ничего аномального :)



Но для пущей уверенности данных надо бы побольше. И у меня есть аналогичные MQ-4, MQ-9 и MQ-135. Но как их подключать? Все они требуют аналогового входа. Данные нужны по воздуху. У ESP8266 только один аналоговый вход. Когда-то я брал I²C-АЦП на 4 канала. Собрался подключать. Вижу, что протокол работы с ним какой-то замороченный. И в NodeMCU надо его поддержку отдельно включать/перекомпилировать/перепрошивать. А ломает же! :) Воткнул временно эти сенсоры в Arduino, скармливаю в комп, всё равно надо сутки прогреть после первого включения.

Ну, а если в комп скармливаются данные, то можно же и к ESP8266 подключить? Идея давно в воздухе витает, но есть две потенциальных проблемы:

1. Нужно как-то согласовывать формат данных, писать на ESP парсер.
2. Использование последовательного порта ставит крест на отладке ESP с компа.

Однако, второй пункт проблемой больше не является, т.к.

- Есть ide.lua, редактор скриптов через браузер
- Есть допиленная система fail-proof, которая отменяет инициацию скриптов при трёх быстрых перезапусках ESP — это защищает от ошибок при скриптописании, приводящих к bootloop'у.

Ок, тогда остаётся передача данных. Я итак скармливаю из Arduino на комп данные в CSV-формате для удобства чтения. Пишу на lua простейший парсер в несколько строчек. Подсовываю ему данные с последовательного порта. И пуляю результат на MQTT. Voilà!

/bal/esp-uni/values {"D2":"0","D3":"0","D0":"1","D1":"0","A3":"287","A2":"319","A1":"295","A0":"182"}


В общем-то, оно уже работает. Но мысль идёт дальше. И под ESP/NodeMCU, и под Arduino есть JSON. Надо передавать данные в нём, это позволит совсем избежать проблем парсинга. Более того, это позволит достаточно эффективно передавать параметры, наоборот, с ESP (точнее, из внешнего мира через ESP) на Arduino, например, для управления LED-матрицей или той самой головой робота :) Можно гнать сложные данные с командами, параметрами или целые сценарии. Я всё хотел для этого написать Forth-подобный парсер, но, если подумать, тут достаточно простого командного сценария.

Допишу до конкретики, причешу, поделюсь результатом :)
 55
+
-
edit
 

Balancer

администратор
★★★★★
Кстати, у использования Arduino вместо отдельного АЦП несколько плюсов:

- Цена (~100 рублей для Arduino Nano против 140руб. у ADS1115)
- Число каналов
- Производительность (Arduino может свои каналы принимать обрабатывать быстрее, чем ESP будет дёргать отдельные каналы АЦП через I²C)

Минус только в разрядности (ADS1115 — 16 битный против 10 бит Arduino) и, видимо, в потребляемом токе.

16 Bit I2C ADS1115 Module ADC 4 channel with Pro Gain Amplifier RPi 1PCS-in Integrated Circuits from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap amplifier module, Buy Quality channel amplifier directly from China 4 g Suppliers: 16 Bit I2C ADS1115 Module ADC 4 channel with Pro Gain Amplifier RPi 1PCS //  s.click.aliexpress.com
 

Pro Mini Atmega168 Module 5V 16M Compatible Nano Replace Atmega328 For Arduino Nano-in Integrated Circuits from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap module 5v, Buy Quality pro mini directly from China arduino pro mini Suppliers: Pro Mini Atmega168 Module 5V 16M Compatible Nano Replace Atmega328 For Arduino Nano //  s.click.aliexpress.com
 
 55
+
-
edit
 

Balancer

администратор
★★★★★
Вдогонку.

Встроенный JSON-модуль в NodeMCU:

JSON-библиотека для Arduino (доступна для установки прямо из встроенного менеджера библиотек Arduino IDE)

Home

ArduinoJson is a C++ JSON library for Arduino and IoT. It supports serialization, deserialization, streams and fixed memory allocation. //  arduinojson.org
 
 55

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru