基于 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);
	}
}
原文地址:https://www.cnblogs.com/shy-/p/9073839.html