Отправка и приём данных 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 ломается. Нужно править библиотеку.