发送端
- 仿真图:
*仿真图中使用使用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); } }
- 参考资料: