часть 3, работа с несколькими модулями, код из видео
/// приемник #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> // https://github.com/maniacbug/RF24 #include <Wire.h> const uint64_t pipe01 = 0xF0F1F2F3F4LL; // идентификатор передачи, "труба" const uint64_t pipe02 = 0xF0F1F2F3F1LL; // могут различатся только на младший байт RF24 radio(9, 10); // CE, CSN void setup(){ Serial.begin(9600); radio.begin(); delay(2); radio.setChannel(9); // канал (0-127) radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1,pipe01); // открываем трубу с индитификатором "pipe01" radio.openReadingPipe(2,pipe02); // открываем трубу с индитификатором "pipe02" // radio.openReadingPipe(0,pipe01); // или открываем все трубы разом radio.startListening(); // включаем приемник, начинаем слушать трубу } // radio.stopListening(); // останавливает приём (нужно перед началом передачи) void loop() { uint8_t pipeNum = 0; if (radio.available(&pipeNum)){ // проверяем не пришло ли чего в буфер. if (pipeNum == 1){ float temperature = 0; radio.read(&temperature, sizeof(temperature)); Serial.println(pipeNum); if (temperature < 0) Serial.print("-"); else Serial.print("+"); Serial.println(temperature); Serial.println(); } if (pipeNum == 2){ int data[2] = {0}; radio.read(&data, sizeof(data)); Serial.println(pipeNum); if (data[0] < 0) Serial.print("-"); else Serial.print("+"); Serial.print(data[0]); Serial.print("C "); Serial.print(data[1]); Serial.println("%"); Serial.println(); } } }
// передатчик температуры с 18b20 // без запроса #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> // https://github.com/maniacbug/RF24 #include <OneWire.h> const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба" RF24 radio(9, 10); // CE, CSN OneWire ds(2); void setup(){ // Serial.begin(9600); radio.begin(); delay(2); radio.setChannel(9); // канал (0-127) radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_HIGH); radio.openWritingPipe(pipe); // открываем трубу на передачу. } void loop(){ ////////////// 18b20 ////////////// byte addr[8]; byte data[12]; if (!ds.search(addr)) { // если 18b20 не найден float temperature = -128; radio.write(&temperature, sizeof(temperature)); delay(5000); } ds.reset_search(); ds.reset(); ds.select(addr); ds.write(0x44); delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); for (int i = 0; i < 9; i++) data[i] = ds.read(); int raw = (data[1] << 8) | data[0]; if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6]; float temperature = raw / 16.0; /////////////////////////////// // отправляем данные и указываем сколько байт пакет radio.write(&temperature, sizeof(temperature)); }
// передатчик температуры и влажности с DHT11 // без запроса, для уно #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> // https://github.com/maniacbug/RF24 #include <dht11.h> const uint64_t pipe = 0xF0F1F2F3F1LL; // индитификатор передачи, "труба" dht11 sensor; RF24 radio(9, 10); // CE, CSN void setup(){ // Serial.begin(9600); radio.begin(); delay(2); radio.setChannel(9); // канал (0-127) radio.setDataRate(RF24_250KBPS); 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)); // отправляем данные и указываем сколько байт пакет delay(1000); }