не могу получить данные по NRF24L01 с DHT22
- Войдите на сайт для отправки комментариев
Втр, 10/03/2015 - 21:15
взял коды с просторов интернета, и немного переделал под себ. Проблема в том, что приемник, не принимает(или передатчик не отдает) данные с датчика DHT22, причем передачик, когда подключен по USB в сериал данные шлет отлично. вот скетчи, подскажите если кто ошибку видит, заранее благодарен.
Приемник:
#include "SPI.h" #include "nRF24L01.h" #include "RF24.h" // https://github.com/maniacbug/RF24 const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба" RF24 radio(9, 10); // CE, CSN void setup(){ Serial.begin(9600); radio.begin(); delay(2); radio.setChannel(9); // канал (0-127) // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS // RF24_250KBPS на nRF24L01 (без +) неработает. // меньше скорость, выше чувствительность приемника. radio.setDataRate(RF24_1MBPS); // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe" radio.startListening(); // включаем приемник, начинаем слушать трубу } // radio.stopListening(); // останавливает приём (нужно перед началом передачи) void loop() { if (radio.available()){ // проверяем не пришло ли чего в буфер. int data[3]; radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать Serial.print("Humidity (%): "); Serial.println(data[1]); Serial.print("Temperature (oC): "); Serial.println(data[0]); Serial.print("chislo: "); Serial.println(data[3]); } else Serial.println("no data");// это уж сам дописал, именно это и пишется в сериале, зн нужные данные не получает delay(1000); }
Перредатчик:
#include "SPI.h" #include "nRF24L01.h" #include "RF24.h" // https://github.com/maniacbug/RF24 #include "DHT.h" #define DHTPIN 7 // what pin we're connected to const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба" RF24 radio(9, 10); // CE, CSN #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); radio.begin(); delay(2); radio.setChannel(9); // канал (0-127) // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS // RF24_250KBPS на nRF24L01 (без +) неработает. // меньше скорость, выше чувствительность приемника. radio.setDataRate(RF24_1MBPS); // мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, radio.setPALevel(RF24_PA_HIGH); radio.openWritingPipe(pipe); // открываем трубу на передачу. delay(1000); } void loop() { int data[3]; data[0] = int(dht.readHumidity()); // заполняем массив data[1] = int(dht.readTemperature()); data[2] = int(5); delay(100); radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет Serial.print("Humidity (%): "); Serial.print(data[0]); Serial.print(" chislo: "); Serial.print(data[2]); Serial.print(" Temperature (oC): "); Serial.println(data[1]); delay(1000); }
заремируй ВСЕ что связано с датчиками
и попробуй передать зарание( в ручную) заполненный масив
если не помогло убирай весь Serial который у тебя после отсылки данных стоит
------
у меня тоже постоянно глюки были пока приемную часть не перевел на внешнее прерывание
на nrf24 и пин для этого есть
переделал приемник на прерывание, теперь такая картина, когда на ардуинке с кодом передатчика нажимаю резет, приходит в сериал два раза мой массив на приемник с задержкой в 1 сек, как в приемника и написано. видимо что-то с отправкой у меня не то.
Даже пробовал NRFки отдельно запитывать.
Передатчик:
Приемник:
100 лет назад перешёл на Serial.begin(115200) и жалею что в ИДЕ больше нельзя ......
В Realterm проверял - даже Serial.begin(921600) прекрасно работает.
Дмаю, здесь это не спасет...
radio.write возвращает bool с результатом выполения, попробуй добавить if на этот bool.
Я для передатчика всё равно пайп на чтение открывал, ибо не знаю, как там отчет о приёме ходит. :)
Ну и DHT22 чаще раза в 2 секунды опрашивать смысла нет.
переписал вообще все. сделал счетчик для опроса датчика, т.е. получаю их каждые 10 секунд, и только потом пишу в массив и отправляю этот массив. от руки заполняю массив цифрами, все приходит, как только пытаюсь запихнуть значения с датчика, все... тишина. приходит 2 раза, только при нажатии на резет на передатчике. пробовал слать с потенциометра данные, летят как миленькие, все пишет в сериал с приемника. Припаял кандеры на NRFки, проблему не решило. вот какой скетч на данный момент:
Приемник:
Передатчик:
ПС: Щас попробую для экспиримента даллас подключить, или датчик дыма
А не проще впиндюрить delay?
аааа, пендюрил... все одно. щас вон с youtube взял пример готовый, и библиотеки все по новой качнул по егоссылкам, у чела шлется все, у меня нет.. и NRFки менял и дуины менял. не работает... именно DHT 22 и DHT11, пробовал по командам 1,2,3,4 гасить и зажигать светодиоды - все работает(брал у Осипова примеры), массив заполненный рукой - шлет, с потенциометра - шлет, ХЗ что такое
Самое интересное, они приходят 2 раза!!! когда на передатчике жмешь резет.
Я делал не через массив, а через структуру.
Клиент на UNO https://github.com/radjah/arduino/blob/master/RF24/temp_nw/client_SHT21/...
Сервер на NANO https://github.com/radjah/arduino/blob/master/ReadSHT2x_nosd_nolcd/ReadS...
С DHT тоже работало.
Огромное спасибо, мир не без добрых людей!:) щас попробую перепилить под себя.
Собственно вот. Только на передающей стороне дисплея уже нет, и туда я еще RTC добавил.
Собственно вот. Только на передающей стороне дисплея уже нет, и туда я еще RTC добавил.
можете дать скетч?