Отправка и приём данных HC-12
- Войдите на сайт для отправки комментариев
Хотел с помощью модулей HC-12 передавать зашифрованные данные.
По итогу у меня получается так, что на приёме данные бьются.
Пример:
Отправил - f4f2b6db26f3666f4f00a7d588416f8330f5574d96e707f3f60eace320f21276
Принял - f4f2b6db26f3666f⸮f60eace320f21276
Возможно так выходит из-за того, что мк просто не успевает обрабатывать данные, но я не знаю, как это можно исправить.
Если строка короткая (Например - 123456) - данные принимаются нормально.
Помогите пожалуйста разобраться и решить данную проблему
+ почему-то данные нормально принимаются только в режиме FU3 (если не считать того, что длинные строки бьются), в других режимах данные не принимаются.
Передатчик - Arduino Nano, настройки дефолтные
Приёмник - Arduino Uno, настройки дефолтные
#include <SoftwareSerial.h> SoftwareSerial radio(5, 4); // RX, TX char data[100]; void setup() { Serial.begin(9600); radio.begin(9600); // VCC,GND на HC12 pinMode(2, OUTPUT); pinMode(3, OUTPUT); digitalWrite(2, HIGH); digitalWrite(3, LOW); } void loop() { radio.write(0xCD); char data[100] = "f4f2b6db26f3666f4f00a7d588416f8330f5574d96e707f3f60eace320f21276"; radio.write(data, sizeof(data)); radio.write('\n'); delay(5000); }
Код приёмника:
#include <SoftwareSerial.h> SoftwareSerial radio(5, 4); // RX, TX char data[100]; void setup() { Serial.begin(9600); radio.begin(9600); // VCC,GND на HC12 pinMode(2, OUTPUT); pinMode(3, OUTPUT); digitalWrite(2, HIGH); digitalWrite(3, LOW); } void loop() { if (radio.available() && radio.read() == 0xCD){ radio.readStringUntil('\n').toCharArray(data, sizeof(data)); Serial.println(String(data)); } }
Вот еще несколько кодов проверил
Заменил перенос строки на 0xAA
Тут дело не в этом
Для начала уберите из схемы радио и проверьте, передается ли информация напрямую.
Принимайте побайтово и выводите в Serial , чтобы локализовать проблему. Скорость вывода должна быть гораздо выше скорости приема.
Принимайте побайтово и выводите в Serial , чтобы локализовать проблему. Скорость вывода должна быть гораздо выше скорости приема.
Не подскажете, как можно это реализовать?
Для начала уберите из схемы радио и проверьте, передается ли информация напрямую.
Сейчас проверю, отпишусь
да вообще идея передавать зашифрованные данные в виде строк, вычитывая их с помощью readStringUntil() - абсолютно нежизнеспособна
Для начала уберите из схемы радио и проверьте, передается ли информация напрямую.
Проверил, все передается нормально
да вообще идея передавать зашифрованные данные в виде строк, вычитывая их с помощью readStringUntil() - абсолютно нежизнеспособна
Тогда какие есть адекватные аналоги?
Тогда какие есть адекватные аналоги?
свой протокол с заголовком. суффиксом и контрольной суммой
Тогда какие есть адекватные аналоги?
свой протокол с заголовком. суффиксом и контрольной суммой
Я пока не сильно в этом разбираюсь, поэтому пока это сложновато, хотелось бы что-то проще
Я пока не сильно в этом разбираюсь, поэтому пока это сложновато, хотелось бы что-то проще
"проще" в протоколе - сложнее в передаче и приеме.
Эта задача имеет два решения - 1)простое 2)правильное. Простое ты уже попробовал.
"проще" в протоколе - сложнее в передаче и приеме.
Эта задача имеет два решения - 1)простое 2)правильное. Простое ты уже попробовал.
Понял, хорошо. Есть примеры какие-то, как можно реализовать протокол этот?
Вот буквально на днях была тема: http://arduino.ru/forum/programmirovanie/peredacha-dannykh-s-korrektsiei-oshibok
Вот буквально на днях была тема: http://arduino.ru/forum/programmirovanie/peredacha-dannykh-s-korrektsiei-oshibok
Спасибо, буду разбираться
Извиняюсь на некропостинг, но решение проблемы автора вот тут https://www.youtube.com/watch?v=NOfOsLXPY88. Там все из за 0 ломается. Нужно править библиотеку.