大创 backup

发送端

  • 仿真图:

    *仿真图中使用使用TMP传感器(LM34)代替实际使用的DHT11传感器。
  • 连接方式:
    • DHT11的正极(VCC)与5V电源接口连接
    • DHT11的负极(GND)与GND连接
    • DHT11的输出口(VOUT)与D2口连接
    • NRF24L01接法:
    • VCC接3.3V
    • GND接GND
    • CD接D8
    • CSN接D10
    • MOSI接D11
    • MISO接D12
    • SCK接D13
    • IRQ不接
  • sender.ino:

    /*DHT11*/ 
    #include <dht11.h>
    #define DHT11PIN 2
    /*NRF24L01*/ 
    #include <SPI.h>  
    #include <Mirf.h>  
    #include <nRF24L01.h>  
    #include <MirfHardwareSpiDriver.h>  
    dht11 DHT11;
    int chk;
    float temperature,humidity;
    void setup(){
    Serial.begin(9600);
    /*初始化发送端*/ 
    Mirf.cePin=8;
    Mirf.csPin=10;
    Mirf.spi = &MirfHardwareSpi;  
    Mirf.init();  
    Mirf.setRADDR((byte *)"ABCDE"); //设置自己的地址(发送端地址),使用5个字符  
    Mirf.payload = sizeof(value);  
    Mirf.channel = 90;              //设置所用信道  
    Mirf.config();      
    }
    void getdata()//获取传感器数据函数 
    {
    chk = DHT11.read(DHT11PIN);
    switch (chk)
    {
    case DHTLIB_OK: 
            Serial.println("OK"); 
            break;
    case DHTLIB_ERROR_CHECKSUM: 
            Serial.println("Checksum error"); 
            break;
    case DHTLIB_ERROR_TIMEOUT: 
            Serial.println("Time out error"); 
            break;
    default: 
            Serial.println("Unknown error"); 
            break;
    }
    humidity=(float)DHT11.humidity;
    temperature=(float)DHT11.temperature;
    }
    void loop(){
    getdata();
    Mirf.setTADDR((byte *)"FGHIJ");           //设置接收端地址  
    Mirf.send((float *)&humidity);               
    while(Mirf.isSending()) delay(1);         //直到发送成功,退出循环  
    Mirf.send((float *)&temperature);               
    while(Mirf.isSending()) delay(1); 
    delay(1000);
    }

接收端:

接法相同。

  • 接收端程序

    #include <SPI.h>
    #include <Mirf.h>
    #include <nRF24L01.h>
    #include <MirfHardwareSpiDriver.h>
    float value;
    void setup() {
    Serial.begin(9600);
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();
    
    Mirf.setRADDR((byte *)"FGHIJ"); //设置自己的地址(接收端地址),使用5个字符
    Mirf.payload = sizeof(value);
    Mirf.channel = 90;   //设置使用的信道
    Mirf.config();
    Serial.println("Listening...");  //开始监听接收到的数据
    }
    void loop() {
    if(Mirf.dataReady()) {  //当接收到程序,便从串口输出接收到的数据
        Mirf.getData((float *) &value);
        Serial.print("Got data: ");
        Serial.println(value);
    }
    }
  • 参考资料:

猜你喜欢

转载自www.cnblogs.com/shy-/p/9073839.html