• 基于 arduino 的低功耗无线传感结点设计


    发送端

    • 仿真图:

      *仿真图中使用使用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);
    	}
    }
    
  • 相关阅读:
    NOIP2020 退役记
    CSP2020 游记
    Owenのgalgame 颓废合集
    Atcoder Grand Contest 选做
    xlrd》操作excel 出现的问题:File "D:python37libsite-packagesxlrdformula.py", line 1150, in evaluate_name_formula assert len(tgtobj.stack) == 1
    数据库文档生成代码
    vue 父类组件如何引入子组件
    jna设置回调函数接收c++数组
    在一个vue文件调用另外一个vue文件中的方法
    idea 执行sprinboot 报错 commend line is too long
  • 原文地址:https://www.cnblogs.com/shy-/p/9073839.html
Copyright © 2020-2023  润新知