Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
Я могу отправлять текст с Arduino по беспроводной сети на RPi. Теперь я пытаюсь отправить данные датчика, которые я измеряю, на Pi. Вот что у меня ниже:
int moisture = A0;
int temp = 3;
//Пропуская настройку и чтение значений
radio.write(&moisture);
radio.write(&temp);
//вышеупомянутая пара строк, где у меня начинаются проблемы. RPi будет выдавать случайный набор чисел
4 ответа
Лучший ответ:
Поскольку вы не указали и не показали, какую библиотеку NRF24L01 вы используете, нельзя точно сказать, в чем проблема, но в некоторых реализациях NRF24 метод write()
принимает ( или требует) второй параметр, len
, задающий количество отправляемых байтов. Если используемая вами библиотека не требует этого параметра, возможно, она использует какое-то значение по умолчанию или обрабатывает буфер как строку, завершающуюся нулевым байтом.
В любом из этих случаев результаты могут быть ошибочными.
Вместо того, чтобы опускать второй параметр, укажите его. Например:
radio.write(&moisture, 2);
radio.write(&temp, 2);
Рекомендую выбрать платформу для общения. Вам не нужно иметь дело с низкоуровневым общением. Я предлагаю вам попробовать https://www.mysensors.org/ Это помогает подключить ваши датчики, дает вам примеры кодов для выбранных датчики для передачи данных в сторону вашего Pi. Существует хорошо документированный API, на котором вы можете построить свое приложение. На Pi вы можете использовать последовательный шлюз и/или установленный контроллер. Эти контроллеры написаны для связи с вашими датчиками и другими узлами. Они предоставляют графический веб-интерфейс для визуализации ваших данных и их истории. Для контроллера я рекомендую начать с https://www.domoticz.com/ или Openhab. Я думаю, что Domoticz - лучший выбор для начала. с на Пи.
Вероятнее всего, ваша библиотека nrf24l01 позволяет передавать только текстовые или строковые данные, а не числовые данные. когда вы отправляете свои измеренные данные, nrf24l01 обрабатывает их как текст. так что вы читаете текст (номера юникода текста). Я столкнулся с той же проблемой.
Я предлагаю вам указать действительный размер данных с функцией записи, например, для radio.write(&moisture,sizeof(moisture)). надеюсь, что это будет работать для дальнейшего объяснения этого метода www.robofever.in
- nrf24l01 сгорел при подаче 6,5 В на VIN?
- nRF24L01 - пропускает конечные символы во время передачи
- NRF24L01 PA+LNA с Arduino
- nRF24L01+ Невозможно установить адрес
- Отправка строк из NRF24L01 в приложение
- Состояние цифрового вывода Arduino не передается через NRF24L01, тогда как состояние аналогового вывода передается, почему?
- Как определить, когда передатчик выключен?
- вопрос по трубке nRF24L01