HC-12 модуль радиосвязи uart
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
HC-12 модуль радиосвязи uart
Здравствуйте. Прошу помощи. Есть два модуля hc-12. Пытаюсь сделать простое управление. С одной стороны ардуино нано подключена к ПК. С другой стороны ардуино про микро. Обе ардуино исправны. Прошиваются а значит uart работает. При подключении к монитору порта модулей HC-12 оба отзываются на команды АТ. Сравнил их настройки. Всё одинаково. И ранее я их подключал. И мне удалось связаться между ними. Может что в скече не так написал
- Реклама
Re: HC-12 модуль радиосвязи uart
а почему бы не припаять ардуино напрямую к радио модулю по SPI ?
с этими юартами одни проблемы...
с этими юартами одни проблемы...
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Эмм. Ну если в радиомодуле есть spi это конечно здорово. А кто потратит столько времени на изучение А потом ещё и свою программу будет писать
Re: HC-12 модуль радиосвязи uart
mixon46 писал(а):Ну если в радиомодуле есть spi это конечно здорово.
я потратил столько времени на изучение А потом ещё и свою программу написалmixon46 писал(а):А кто потратит столько времени на изучение А потом ещё и свою программу будет писать
https://www.radiokot.ru/forum/viewtopic ... 8&t=148087
правда модуль у меня чуть другой... но принцип тот же)) все радио модули работают одинаково.
отличие только в названиях регистров))
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Респект конечно. Но для того что бы применить ваши знания к какому либо проекту придётся и их изучить. Я разобрался с uart. На 32u4 он работает по другому. Инициализируется по другому. Но мне удалось отправить командное слово с одной ардуины на другую и получить ответ. Так что опыты прошли удачно
- Реклама
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: HC-12 модуль радиосвязи uart
[uquote="mixon46",url="/forum/viewtopic.php?p=4178775#p4178775"]А кто потратит столько времени на изучение А потом ещё и свою программу будет писать[/uquote]
Золотые слова!
Вся суть абдуринщиков в двух предложениях!
Представь себе, а я сижу по вечерам и на девборде изучаю новые датчики. То под один напишу, то под другой. Когда-то, наивный, думал готовое в сети найти — а нет ничего! Одни лишь огрызки убогого абдуринокода.
Золотые слова!
Вся суть абдуринщиков в двух предложениях!
Представь себе, а я сижу по вечерам и на девборде изучаю новые датчики. То под один напишу, то под другой. Когда-то, наивный, думал готовое в сети найти — а нет ничего! Одни лишь огрызки убогого абдуринокода.
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Я про то что что бы управлять модулем его надо изучить. SPI интерфейс. Написать библиотеку с какими то определёнными методами. Что бы библиотеку написать надо понимать как этот spi работает. Ну как бы это сложно
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: HC-12 модуль радиосвязи uart
Если для тебя это сложно, то лучше брось радиогубительство! Что сложного в том, чтобы прочитать пару даташитов, да написать код для общения с нужной железякой?
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Может оно и не сложно. Но Я пока не придерживаюсь углубленного изучения данного модуля. Оно не сложно когда потратишь несколько дней на изучения. А потом забудешь ради чего это изучал
Написал такой код. Не один из светодиодов не загорается что странно. Кто может подсказать. Хотя есть сейчас мысль если байтов пришло 0 то будет -1 показывать. Проверим
#define LED_GREEN 4
char i = 1;
int SET = 2;
int t = 0;
int bitok = 0;
void setup() {
pinMode (SET, OUTPUT);
digitalWrite (SET, HIGH);
Serial.begin (9600);
pinMode (LED_RED, OUTPUT);
digitalWrite (LED_RED, LOW);
pinMode (LED_GREEN, OUTPUT);
digitalWrite (LED_GREEN, LOW);
}
void loop() {
while (i==1) //переходим в режим проверки ближнего модуля HC-12
{
digitalWrite (SET, LOW); //делаем низкий уровень на ноге set
delay (100); //выдерживаем время для переключения в режим настроек
Serial.println ("AT"); //отправляем команду проверки модуля
delay (10); //выдержка перед считыванием оветных данных с модуля HC-12
String stroka = Serial.readString (); //считаем и запишем ответные данные
Serial.print (stroka); //отправляем с ардуины в порт эти даные (они же отправятся на модуль HC-12, но модуль их не должен отправить)
digitalWrite (SET, HIGH); //выходим из режима настроек
delay (2000); //задержка перед переходом модуля в режим приемо передачи
i=2; //выставляем бит выхода из данной задачи
}
while (i==2) //переходим в режим проверки дальнего модуля HC-12
{
Serial.println ("FMT"); //отправляем команду FMT для ожидания обратной связи
delay (5); //выжидаем время для получения ответа
t = Serial.available ();
if (t == 2) //проверим наличие 2 пришедших байт информации
{String stroka = Serial.readString (); //запишем в строку эти данные
if (stroka == "OK") //если обратная связь с модулем присутствует то
{Serial.println (stroka); //отпраляю в монитор порта эти данные (они же будут отправлены обратно на 32U4)
i=3; //перехожу в режим передачи данных
digitalWrite (LED_GREEN, HIGH); //в этом режиме можно зажечь зеленый индикатр связи
};
delay (10);
if (t >= 0) //если данных не поступило
{Serial.print ("ERROR HC12"); //выводим ошибку в монитор порта (эти же данные будут отправлены в дальний HC12)
i=4; //выход в режим ошибки
digitalWrite (LED_RED, HIGH); //в этом режиме можно зажечь красный индикатор ошибки
digitalWrite (SET, HIGH); //перевести модуль в режим настроек что бы он перестал подавать каманды в эфир
}
};
};
while (i==3) //следующий цикл для общения контроллеров между собой
{};
}
Добавлено after 2 hours 49 minutes 45 seconds:
Объясните почему if (t==0) не работает. Если я знаю что он равен 0
Добавлено after 21 minute 15 seconds:
Всё норм. Количество кавычек неправильно поставил. Теперь работает
Написал такой код. Не один из светодиодов не загорается что странно. Кто может подсказать. Хотя есть сейчас мысль если байтов пришло 0 то будет -1 показывать. Проверим
Спойлер
#define LED_RED 3#define LED_GREEN 4
char i = 1;
int SET = 2;
int t = 0;
int bitok = 0;
void setup() {
pinMode (SET, OUTPUT);
digitalWrite (SET, HIGH);
Serial.begin (9600);
pinMode (LED_RED, OUTPUT);
digitalWrite (LED_RED, LOW);
pinMode (LED_GREEN, OUTPUT);
digitalWrite (LED_GREEN, LOW);
}
void loop() {
while (i==1) //переходим в режим проверки ближнего модуля HC-12
{
digitalWrite (SET, LOW); //делаем низкий уровень на ноге set
delay (100); //выдерживаем время для переключения в режим настроек
Serial.println ("AT"); //отправляем команду проверки модуля
delay (10); //выдержка перед считыванием оветных данных с модуля HC-12
String stroka = Serial.readString (); //считаем и запишем ответные данные
Serial.print (stroka); //отправляем с ардуины в порт эти даные (они же отправятся на модуль HC-12, но модуль их не должен отправить)
digitalWrite (SET, HIGH); //выходим из режима настроек
delay (2000); //задержка перед переходом модуля в режим приемо передачи
i=2; //выставляем бит выхода из данной задачи
}
while (i==2) //переходим в режим проверки дальнего модуля HC-12
{
Serial.println ("FMT"); //отправляем команду FMT для ожидания обратной связи
delay (5); //выжидаем время для получения ответа
t = Serial.available ();
if (t == 2) //проверим наличие 2 пришедших байт информации
{String stroka = Serial.readString (); //запишем в строку эти данные
if (stroka == "OK") //если обратная связь с модулем присутствует то
{Serial.println (stroka); //отпраляю в монитор порта эти данные (они же будут отправлены обратно на 32U4)
i=3; //перехожу в режим передачи данных
digitalWrite (LED_GREEN, HIGH); //в этом режиме можно зажечь зеленый индикатр связи
};
delay (10);
if (t >= 0) //если данных не поступило
{Serial.print ("ERROR HC12"); //выводим ошибку в монитор порта (эти же данные будут отправлены в дальний HC12)
i=4; //выход в режим ошибки
digitalWrite (LED_RED, HIGH); //в этом режиме можно зажечь красный индикатор ошибки
digitalWrite (SET, HIGH); //перевести модуль в режим настроек что бы он перестал подавать каманды в эфир
}
};
};
while (i==3) //следующий цикл для общения контроллеров между собой
{};
}
Объясните почему if (t==0) не работает. Если я знаю что он равен 0
Добавлено after 21 minute 15 seconds:
Всё норм. Количество кавычек неправильно поставил. Теперь работает
Re: HC-12 модуль радиосвязи uart
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4178828#p4178828"]...Что сложного в том, чтобы прочитать пару даташитов..[/uquote]
спецификация bluetooth , например, около 4тыс страниц.. USB - ок. 1000..
Re: HC-12 модуль радиосвязи uart
Не нужно держать в голове даташиты)) Достаточно представлять как работают радио модули... А работают они все одинаково - пишем / читаем регистры согласно даташиту. Всё)).
А SPI всё равно учить придётся... https://arduinomaster.ru/datchiki-ardui ... i-arduino/
Без SPI невозможно подключить к ардуино всякие флешки... экранчики... радио модули... интернет модули... и т.д.
Список SPI устройств огромный)) Намного больше чем UART))

А SPI всё равно учить придётся... https://arduinomaster.ru/datchiki-ardui ... i-arduino/
Без SPI невозможно подключить к ардуино всякие флешки... экранчики... радио модули... интернет модули... и т.д.
Список SPI устройств огромный)) Намного больше чем UART))
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: HC-12 модуль радиосвязи uart
[uquote="AndyGU70",url="/forum/viewtopic.php?p=4179026#p4179026"]спецификация bluetooth , например, около 4тыс страниц.. USB - ок. 1000..[/uquote]
А кто тебя заставляет спеки целиком читать? Когда я рисовал HID и CDC, мне нужна была только конкретная часть.
Аналогично с мануалом на МК: зачем все пару тысяч страниц читать, если тебе нужен только USART и пара таймеров?
А кто тебя заставляет спеки целиком читать? Когда я рисовал HID и CDC, мне нужна была только конкретная часть.
Аналогично с мануалом на МК: зачем все пару тысяч страниц читать, если тебе нужен только USART и пара таймеров?
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Да. У меня как раз есть экран ls020 от siemens. Вроде даже есть библиотеки для общения с ним через spi. Так же помимо 3 основных sck, miso, mosi есть и ещё cs и вроде rs. Для управления им. Мой проект будет содержать этот дисплей если я его одалею
Добавлено after 4 hours 48 minutes 41 second:
Вся проблема в основной библиотеке для uart Leonardo. Он отправляет данные через одинаковые промежутки времени. Примерно один раз в секунду. При чем интересно то что я не отправляю данные в serial1 а только считываю. При этом мигает лампочка txd через равные промежутки времени. Лампочка же показывает что появляется на ноге сигнал. Почему же интересно она мигает
Добавлено after 4 hours 48 minutes 41 second:
Вся проблема в основной библиотеке для uart Leonardo. Он отправляет данные через одинаковые промежутки времени. Примерно один раз в секунду. При чем интересно то что я не отправляю данные в serial1 а только считываю. При этом мигает лампочка txd через равные промежутки времени. Лампочка же показывает что появляется на ноге сигнал. Почему же интересно она мигает
Re: HC-12 модуль радиосвязи uart
я подключал разные экраны...
из больших только нокия...
принцип везде одинаковый))
uart Leonardo...
не знаю... я не использую библиотеки... ардуино прекрасно работает без них))
uart Leonardo...
не знаю... я не использую библиотеки... ардуино прекрасно работает без них))
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Это очень здорово что ты смог подключить дисплеи к контроллеру. Это можно назвать 1 классом. Скажи а как не использовать библиотеки? Писать и обращаться напрямую к регистрам? Это так сложно кажется. Наверно не потяну
Добавлено after 4 minutes 22 seconds:
Ардуино понятное дело что хренотень. Так как не понимаешь что скрыто за методами которые используешь. Про классы и наследование вообще молчу.
Писать на С уже лучше. Например cvavr. Сам писал. Тут уже и с регистрами общаешься. И задержки ставишь уже по таймеру сам. Так сказать углублённо.
.
Самым верхом можно считать знание asembler. Когда каждую команду прописываешь. И если чуток где то ошибся то вообще ничего не работает.
Добавлено after 17 minutes 11 seconds:
По поводу ардуино на 32U4. Тут serial.begin () это инициализация порта USB для связи с ПК. А serial.begin1 () инициализация uart порта. Я искал в библиотеках hardwareserial и softwareserial какие либо упоминания о методах класса serial. И всё же ничего толкового не понял. Сравнить arduino nano на atmega328 и promicro на 32U4. Есть большая разница в работе классов serial для 328 и serial1 для 32U4. Если для 328 uart сразу отзывается и переправляет данные обратно. То для 32U4 это происходит с какой то задержкой. В итоге у меня получилось что я отправляю данные с одного радиомодуля на другой. Но в ответ мне ничего не приходит. Так как модуль на другой стороне имеет приличную задержку. Как оно работает это загадка
Добавлено after 4 minutes 22 seconds:
Ардуино понятное дело что хренотень. Так как не понимаешь что скрыто за методами которые используешь. Про классы и наследование вообще молчу.
Писать на С уже лучше. Например cvavr. Сам писал. Тут уже и с регистрами общаешься. И задержки ставишь уже по таймеру сам. Так сказать углублённо.
.
Самым верхом можно считать знание asembler. Когда каждую команду прописываешь. И если чуток где то ошибся то вообще ничего не работает.
Добавлено after 17 minutes 11 seconds:
По поводу ардуино на 32U4. Тут serial.begin () это инициализация порта USB для связи с ПК. А serial.begin1 () инициализация uart порта. Я искал в библиотеках hardwareserial и softwareserial какие либо упоминания о методах класса serial. И всё же ничего толкового не понял. Сравнить arduino nano на atmega328 и promicro на 32U4. Есть большая разница в работе классов serial для 328 и serial1 для 32U4. Если для 328 uart сразу отзывается и переправляет данные обратно. То для 32U4 это происходит с какой то задержкой. В итоге у меня получилось что я отправляю данные с одного радиомодуля на другой. Но в ответ мне ничего не приходит. Так как модуль на другой стороне имеет приличную задержку. Как оно работает это загадка
Re: HC-12 модуль радиосвязи uart
библиотеки использую только для приложений на ПК...
писать для операционной системы без библиотек сложновато))
ассемблер использую когда надо разогнать МК до предела... для простых задач Си и cvavr прекрасно подходит))
давно не писал для ардуино... помню только что ардуино имеет прямой доступ к регистрам МК...
и весь код Си из cvavr прекрасно работает и в среде ардуино...
пример кода для UART есть в даташите МК на котором собрано ардуино...
писать для операционной системы без библиотек сложновато))
ассемблер использую когда надо разогнать МК до предела... для простых задач Си и cvavr прекрасно подходит))
давно не писал для ардуино... помню только что ардуино имеет прямой доступ к регистрам МК...
и весь код Си из cvavr прекрасно работает и в среде ардуино...
пример кода для UART есть в даташите МК на котором собрано ардуино...
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Кто может мне объяснить С. Про наследование класса. Что это такое. Вот пример. Есть класс serial. В нём есть список методов. Но в этом списке нет метода Serial.readSerial. Этот метод берётся из класса Stream.
Кто может помочь разобраться как это работает на живом примере
Кто может помочь разобраться как это работает на живом примере
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: HC-12 модуль радиосвязи uart
В С нет классов. А в абдурине нет С++. Точней, там как бы С++, но через такую жопу деланный, что лучше бы на асме писали эти рукожопы!
mixon46, если хочешь нормально с железом разобраться, удали с аврки абдуринозагрузчик и пиши на С или асме.
mixon46, если хочешь нормально с железом разобраться, удали с аврки абдуринозагрузчик и пиши на С или асме.
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: HC-12 модуль радиосвязи uart
Принято. Будем тогда копать C. Как они там реально это всё понамудрили. В этих классах никокого ладу дать не могу
Добавлено after 9 minutes 26 seconds:
Может там и нет ничего сложного. Но знания c++ у меня полностью отсутствуют. Мне то нужно было понять почему данные с uart не отправляются моментально в этой promicro на 32U4. К стати сказать у данного микроконтроллера имеется 10 или 12 (точно не помню) битный таймер с тремя ШИМ каналами. Что говорит о том что на данном МК реально сделать частотный преобразователь.
Добавлено after 9 minutes 26 seconds:
Может там и нет ничего сложного. Но знания c++ у меня полностью отсутствуют. Мне то нужно было понять почему данные с uart не отправляются моментально в этой promicro на 32U4. К стати сказать у данного микроконтроллера имеется 10 или 12 (точно не помню) битный таймер с тремя ШИМ каналами. Что говорит о том что на данном МК реально сделать частотный преобразователь.
Re: HC-12 модуль радиосвязи uart
если удалить ардуинозагрузчик то придётся прошивать МК программатором...
если есть программатор то проблем нет)) пишем на С или Асме... компилируем в арвстудии или в cvavr... на выходе получаем HEX файл и его зашиваем в МК. Всё))
Добавлено after 4 minutes 10 seconds:
На С нет классов. В С есть список простых команд. А вместо класса есть функции которые мы вызываем в коде... когда надо. ))
если есть программатор то проблем нет)) пишем на С или Асме... компилируем в арвстудии или в cvavr... на выходе получаем HEX файл и его зашиваем в МК. Всё))
Добавлено after 4 minutes 10 seconds:
На С нет классов. В С есть список простых команд. А вместо класса есть функции которые мы вызываем в коде... когда надо. ))


