b

 

 

Бложик потихоньку переезжает сюда

Радиомодули nRF24L01+ и Arduino


часть 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);
}