Передача данных между esp и mega

Добрый вечер. У меня имеется плата Mega с esp8266, все в одном флаконе так сказать. Между ними на плате связь по uart, ну наверное видели ж такие платы, не буду описывать. Так вот на Mega висит куча датчиков, и вот вопрос как мне лучше с помощью serial передавать данные с Mega на esp? Как лучше сделать, массивом и потом его разбирать по байтно на esp или какой-то строкой параметр - значение? Вы уж извините, если вопрос совсем глупый, я скетчи пишу крайне редко и совсем, совсем начинающий.

Лучше сделать так, как Вам удобнее в Вашей задаче.

«Все истинно верующие да разбивают яйца с того конца, с какого удобнее »

Так задача то с виду простая, передаю данные с датчиков по uart с меги на esp и за тем esp через mqtt на сервер. С последней задачей вопросов нет, меня все устраивает. А вот с передачей между мегой и esp… Массивом вроде просто, но если порезать показания до размера byte, а если оставить float то это ж массив в массиве какой-то. Ну а как бы вы сделали?

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

Можно, например, привести все данные к 2..4 байтовому типу и передать его в виде массива (причем тут массив в массиве не понял). Можно и строку сформировать, а на есп её распарсить.

У самого к чему душа лежит то?

поменьше преобразований хочется

почему не выходит использовать тот же тип как от esp через mqtt ?

Если esp в роли тупо ретранслятора, то парсингом пусть занимается сервер. А еsp передаёт просто побайтно. Как принял в буфер сразу передал на сервер. ESP намного шустрее меги, она может ещё чем то заниматься. А на меге я бы формировал данные в формате json. И серверу будет легче))

Перечислите, пожалуйста, все.

На меге висят два DHT22, три концевика, один просто аналоговый датчик освещенности (короче обычный фоторезистор), аналоговый датчик газа (не помню как называется. Короче данный очень разношерстный по объему. Про json сразу и подумал, но увы почему-то не могу вообще найти толковой инфы самого его синтексиса и как его формировать и извлекать из него. Может кинете ссылку толковую с разжевыванием

Только недавно разбирали.

Возможно следует подумать о ESP32? И дешевле на порядок, и габариты раз в шесть меньше, и обменом не заниматься. Одни плюсы. :roll_eyes:

Эту плату мне жена когда-то подарила :joy: Нужно применить. Короче пришел к выводу, jsonом буду отправлять. Изучаю уже. Короче послали вы меня на json :rofl:

эта плата хороша тем что для нее есть некоторые модули дополнения, и печать их лично не придется)))
а так же на редкость удачное и полезное решение, по мимо кода который можно запустить на 2 мк, можно использовать сенсорный дисплей с 16 пинами для вывода!))) и очень большой скоростью вывода анимации, и в целом придумать с 10ток проектов минимум которые можно сделать на ней, без траты времени на подключение на макетки))) но это все же не точно, долго с ней не сидел…

Не так и не так. Изначально данные живут в какой-то структуре или массиве структур? Вот я бы эту структуру прямо в двоичном виде и передавал бы. Зачем мне её сначала во что-то преобразовывать для передачи, а потом преобразовывать обратно после приёма? В каком виде данные живут - в том бы и передавал.

Но, возможно, Вам это неудобно. Делайте как Вам удобнее. Ибо, как говаривал Владимир Владимирович:

однажды, кто то очень долго мучился, передавая структуру в двоичном виде, забывая о выравнивании и размерности типов разных платформ, так и появился формат JSON :grinning_face_with_smiling_eyes:

Ну, я думаю, что он по-другому появился (гораздо прозаичнее), но не суть. Меня спросили как бы я делал, я ответил.

Здесь есть два тонких момента.

  1. Язык Си не стандартизует длину отдельных типов данных. Соответственно, казалось бы, одинаковые типы могут иметь на 8-разрядной и 32-разрядной архитектуре различную длину. Поэтому следует использовать только те типы, длина которых определенно известна. Ну и не забывать о выравнивании, которое может различаться для 8- и 32-разрядной архитектуре.
  2. Если Вы передаете данные не побайтно, а более длительными порциями, следует позаботиться о синхронизации. Т.е. исключить случаи, когда один и тот же байт трактуется передатчиком как находящийся в начале пакета, а приемником - в середине, и наоборот.

Тут почитайте , может пригодится.

Можно по протоколу modbus библиотеки имеются.

Друзья, спасибо за помощь, за советы. Короче остановился на JSON. Заджейсонил, так сказать, на одной стороне, передал по serial на другую. Принял строку на другой стороне, разджейсонил и уже топиками передал. Почему не передал джейсоном? Что-то вроде не нашел как на WQTT на умный дом Алиса разбирать json на показания. Очень понравилось предложение вообще по битно передать все, но что-то я очень сильно засомневался в своих знаниях это реализовать. Не совсем понимаю как мне из этих битов сложить переменную float. Очень у меня мало знаний, но я учусь, пытаюсь.

1 лайк