Arduino это круто! — Радиомодуль nRF24L01+ 2.4 ГГц
как оказалось 433 давольно таки слабоват чтоб пробить 3 стены. но отказываться от него не будем так как одна из плат приемника все таки может получать данные и с третей комнаты, и датчики подают сильный сигнал. но для связи розеток и управлением светом решено воспользоваться 2.4ГГц очень хороший мануальчик с описаниями я нашел сдесь спасибо автору завтра получу партия радиомодулей дабы не потерять в закладках статью скопирую сюда пару примеров.
Первый пример, передача данных с аналогового входа.:
#include #include #include // 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() { int data; if (radio.available()){ // проверяем не пришло ли чего в буфер. radio.read(&data, sizeof(data)); // читаем данные, указываем сколько байт читать Serial.print("data: "); Serial.println(data); } } ------------------------------------------------------------------------------ #include #include #include // 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.openWritingPipe(pipe); // открываем трубу на передачу. } void loop() { int data = analogRead(0); // читаем значение radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет Serial.print("data: "); Serial.println(data); // delay(1000); }Второй пример, передача данных с DHT11.:
#include #include #include // https://github.com/maniacbug/RF24 #include const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба" dht11 sensor; 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.openWritingPipe(pipe); // открываем трубу на передачу. delay(1000); } void loop() { int data[2]; sensor.read(8); data[0] = int(sensor.temperature); // заполняем массив data[1] = int(sensor.humidity); radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет Serial.print("Humidity (%): "); Serial.println(data[1]); Serial.print("Temperature (oC): "); Serial.println(data[0]); delay(1000); } ------------------------------------------------------------------------------- #include #include #include // 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() { int data[2]; if (radio.available()){ // проверяем не пришло ли чего в буфер. radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать Serial.print("Humidity (%): "); Serial.println(data[1]); Serial.print("Temperature (oC): "); Serial.println(data[0]); } }Третий пример, передача данных с DHT11 по запросу.:
#include #include #include // 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(); // включаем приемник, начинаем слушать трубу } // // для ПроМини void loop() { int data[2]; if (Serial.available() > 0){ // если чтото пришло в сериал int val = Serial.parseInt(); // читаем в переменную if (val == 1){ // если это 1 radio.stopListening(); // останавливает приём (нужно перед началом передачи) radio.openWritingPipe(pipe); // открываем трубу на передачу. radio.write(&val, sizeof(val)); // отправляем val и указываем сколько байт пакет radio.startListening(); // включаем приемник, начинаем слушать трубу } Serial.flush(); // очищаем буфер } if (radio.available()){ // проверяем не пришло ли чего в буфер. radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать Serial.print("Humidity (%): "); Serial.println(data[1]); Serial.print("Temperature (oC): "); Serial.println(data[0]); } } --------------------------------------------------------------------------------- #include #include #include // https://github.com/maniacbug/RF24 #include const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба" dht11 sensor; 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.openWritingPipe(pipe); // открываем трубу на передачу. } ////// для UNO void loop() { int data[2]; if (radio.available()){ // проверяем не пришло ли чего в буфер. int val; radio.read(&val, sizeof(val)); // читаем данные и указываем сколько байт читать if (val == 1){ // если пришло 1, radio.stopListening(); // останавливает приём (нужно перед началом передачи) sensor.read(8); // читаем градусник delay(1000); data[0] = int(sensor.temperature); // заполняем массив data[1] = int(sensor.humidity); //отправляем данные radio.openWritingPipe(pipe); // открываем трубу на передачу. radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет radio.startListening(); // включаем приемник, начинаем слушать трубу } } }