Официальный сайт компании Arduino по адресу arduino.cc
Создаю канал связи на NRF24L01
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте, уважаемые!
Разочаровался я что-то в Wi-Fi, т.к. канал ооочень короткобойный, даже внешняя антенна не помогает. Попались мне в руки модули E01-ML01DP5 на 100 мВт, порадовали расстоянием передачи.
Цифры и байты передаются, теперь хочу перевести на передачу стандартных сообщений моего проекта. Сообщения типа "L#-8888888-999". Написал пару простеньких скетчей - трансмиттер и приемник.
Трансмиттер:
#include <SPI.h> #include <RF24.h> RF24 radio(9, 10); const uint32_t pipe = 123456789; char sender[13]; void setup() { Serial.begin(57600); radio.begin(); radio.setDataRate(RF24_250KBPS); radio.openWritingPipe(pipe); } void loop() { char sender[] = "L#0000000-000"; radio.write(sender, strlen(sender)); Serial.println(sender); delay(1000); }
Приёмник:
#include <SPI.h> #include <RF24.h> RF24 radio(9, 10); const uint32_t ch1 = 123456789; int len=0; char data[]=""; void setup() { Serial.begin(57600); radio.begin(); radio.setDataRate(RF24_250KBPS); radio.openReadingPipe(1,ch1); radio.startListening(); } void loop() { if(radio.available()) { len = radio.getDynamicPayloadSize(); radio.read(&data, len ); Serial.println(data); } }
Проблема в том, что к сожалению нет приёма. Я предполагаю, что система ждет финишный байт (вроде 0х03 в МК), но его не получает, поэтому буфер просто переполняется поступающими данными. При смене параметра len = 13 приходит куча "переносов" в мониторе порта. При замене строчки на
radio.read(&data, sizeof(data));
в мониторе появляются также переносы с редкими символами [] и <.
Подскажите, что ж я неверно делаю.
И параллельно - был ли у кого-либо опыт работы с библиотекой RF24-Ethernet?
Всем Спасибо за Ответы!
https://github.com/AlexGyver/nRF24L01
Пожалуйста
Увы, даже скопировав скетчи, в приемнике снова идет мусор с высокой частотой.
Recieved: 255
Recieved: 0
Recieved: 1
Recieved: 0
Recieved: 128
Recieved: 0
Recieved: 14
Recieved: 0
Recieved: 223
Recieved: 0
Recieved: 0
Recieved: 0
Recieved: 255
Recieved: 0
Recieved: 0
Recieved: 192
Recieved: 0
Recieved: 0
Recieved: 192
Recieved: 0
Recieved: 223
Recieved: 0
Recieved: 0
Recieved: 128
Recieved: 0
Recieved: 0
Recieved: 223
Recieved: 0
Recieved: 0
Recieved: 255
Recieved: 0
Recieved: 255
Recieved: 0
Написал пару простеньких скетчей - трансмиттер и приемник.
В 7-ой строке приёмника память под массив data не выделена (вернее, выделенн 1 байт). А в 23-ей строке Вы в него читаете. Результат - прочитанное пишется поверх других переменных. Замените 7-ую строку на что-то борлее разумное, например,
char
data[33]
;
В передатчике сделайте так, чтобы хвостовой 0 строки тоже передавался. Для этого в строке 21 вместо strlen(sender) пишите strlen(sender)+1.
Попробуйте, что получится и отпишитесь (только при этом обязательно опубликуйте актуальные скетчи).
char
data[33]
;
Увы, ничего не дало. Также продолжает плодить переносы.
Тоже самое...
Ниже. Также добавил обозначение канала и правильно указал название "трубы". Пробовал менять скорость до 1 мбит/сек - результат такой же... Уже не знаю чего ему надо...
Передатчик:
Приемник:
Ну, то, что Вы сделали - по любому правильно.
А сейчас - отлаживайтесь. Не работает вслепую.
Вот что у Вас возвращает write? Печатайте в сериал! Чему равно len в 25-ой строке приёмника? Печатайте в сериал. Всё печатайте и смотрите! Всё! Это поможет локализовать проблему.
И, да, кстати, не знаю, чтоу Вас за библиотека, но в моей верии адрес долже быть указателем на байт (сам адрес задаётся массиво байтов), а не числом uint64_t как у Вас.
Ну, то, что Вы сделали - по любому правильно.
А сейчас - отлаживайтесь. Не работает вслепую.
Вот что у Вас возвращает write? Печатайте в сериал! Чему равно len в 25-ой строке приёмника? Печатайте в сериал. Всё печатайте и смотрите! Всё! Это поможет локализовать проблему.
Библиотека? Да я отсюда брал https://github.com/maniacbug/RF24
Заметил оооочень интересную фитчу.
После некоторых корректировок, при отсылке не посылке, а простой "1" раз в секунду, в монитор порта приемника прилетают хексовые числа, причем постоянно:
FFFFD8D8
FFFF8383
E0
E0
70
E0
70
80
0
FFFF8383
FFFFD8D8
EA3
0
FFFFD8D8
1C00
FFFFD8D8
70
1C00
FFFFD8D8
0
0
FFFFD8D8
Честно, я уже разочаровался их подключить. Перечитал кучу форумов, перепробовал кучу скетчей и примеров, разные версии библиотек (от МаньякБага и АлексГайвера) - один хрен при одиночном (тоесть второй модуль ОТКЛЮЧЕН!) подключении в сериал идет беспорядочный мусор. Такое чувство, что мне продали паленые модули....
Вот и сейчас, на таком скетче, льется мусор
Ну, приёмник без передатчика Вы не знаю для чего выложили. Может Вы и передаёте мусор, кто ж Вас знает.
Евгений, ну я же написал - передатчика нет. Отключен он.
А так, вот вам и приемник.
канал 110 поставьте, чтобы гадость с WiFi не ловил
Инопланетяне приветы шлют!!! ПС все что внутри <> пакет а за приветы духов
канал 110 поставьте, чтобы гадость с WiFi не ловил
Канал выбирался на основе данных с сканера каналов - https://github.com/gcopeland/RF24/blob/master/examples/scanner/scanner.pde
Менее загруженные - 50, 104 и 112. Но при переборе любого из них - тот же мусор. "Погуляв" по форуму, добавил всевозможные атрибуты для определения параметров передачи - ничего. Я не врубаюсь, почему именно с этими модулями гемморой, судя по сообщениям иных пользователей, у других никаких таких трудностей с ними нет, и загружая их же скетчи, получается то же самое.......
Проект уже жмет, месяц остался. Хотелось бы определиться - или заработают, или их в мусорку (500р на ветер) и покупка дальнобойной уличной точки доступа wifi.
Спасибо!
Традиционно: Передатчик
...и приёмник
В общем разобрался - модули заработали. Заработали только на библиотеке от tmrh20.
Теперь создаю процедуру импорта данных с Serial-порта.
Так и написали бы в чем была проблема. А то с криками ПАМАГТИ!! все прибегают, внимания требуют, а как своим опытом поделится - жлобе одно оказывается.
Так и написали бы в чем была проблема. А то с криками ПАМАГТИ!! все прибегают, внимания требуют, а как своим опытом поделится - жлобе одно оказывается.
А проблема проста - не все библиотеки этот модуль переваривает. МаньякБаг не скушал, сторонние - тоже самое.
Подниму свою же темку - хочу оптимизировать код, добавив функцию отправки, но почему то в созданной функции IDE ругается на незадекларированную переменную. Проблема в том, что передается символьный код разного формата. Я пытаюсь забить этот код в стринговую переменную messageout и сделать условие отправки messageout>0. Но почему то в новосозданной функции он не
Ругается на if (messageout!=0) - 'messageout' was not declared in this scope
В чем моя ошибка?
Ругается на if (messageout!=0) - 'messageout' was not declared in this scope
В чем моя ошибка?
У Вас сразу несколько ошибок.
1. Вы выложили неполный код, чем затруднили работу тем, кто хочет Вам помочь
2. Вы используете в строке 25 необъявленную переменную messageout.
То, что Вы объявляли её в других функциях - нещитова. Что за строка 2 я не понимаю (нужен полный код).
А вообще, очень рекомендую изучить "Области видимости переменных".
Чисто политически не могу выложить что там внутри =)
Но там по сути обработчик значений с датчиков, т.е. ничего интересного для радиопередатчика.
То, что Вы объявляли её в других функциях - нещитова. Что за строка 2 я не понимаю (нужен полный код).
Ну почему же? До сетапа я ее объявил. 2ая строка - это и есть ее объявление после "дефайнов".
Ну почему же? До сетапа я ее объявил. 2ая строка - это и есть ее объявление после "дефайнов".
Вы со мной спорите или с компилятором? Он говорит необъявлена - значит необъявлена. И никаких вариантов быть не может. А если Вы там что-то объявляли, значит неправильно это делали. Если код политически секретный, то и разбирайтесь с ним политически самостоятельно.
В принципе, разобрался. Затаился иной символ после #define.
С Победой!
В принципе, разобрался. Затаился иной символ после #define.
другие обьявления messageout убрали, надеюсь? Даже в том обрывке кода. что у вас приведен - переменная обьявлена трижды.
До победы еще рано. Что то не так затаилось у меня в коде.
В тестовом скетче проеобразование в массив (input.toCharArray(transive, 32); срабатывает, в основной программе - нет.
Тестовая программа передает введенную посылку на другое устройство.
Зато не работает в основной программе. В сериал другого устройства выдает пустую строчку.
Ну и код.
messageout, time_sync, tyme_sync0 - обьявлены дважды. Может и еще какие, внимательно не смотрел.
Вы, похоже, не понимаете, как обьявляются переменные