一 材料清单
arduino uno 1个
arduino 2560 1个
nrf24l01 2个
陶晶驰串口屏 1个
二 本文目的
通过串口屏触摸按键远程控制arduino 2560上的LED 点亮。
三 硬件接线
3.1 发射端接线
3.1.1uno和发射模块接线
nRF24L01 与Arduino UNO接线如下:
————————————————
/*nRF24L01 Arduino UNO
VCC <-> 3.3V
GND <-> GND
CE <-> D9
CSN <-> D10
MOSI <-> D11
MISO <-> D12
SCK <-> D13
IRQ <-> 不接
————————————————
3.1.2 串口屏和uno接线
串口屏与Arduino UNO接线如下:
————————————————
RX <-> TX0(D1)
TX <-> RX0(D0)
GND <-> GND
VCC <-> VCC
————————————————
3.2 接收端接线
nRF24L01 与Arduino 2560接线如下:
————————————————
/*nRF24L01 Arduino UNO
VCC <-> 3.3V
GND <-> GND
CE <-> D49
CSN <-> D53
MOSI <-> D51
MISO <-> D50
SCK <-> D52
IRQ <-> 不接
————————————————
四 代码部分
4.1发射端代码
发射端由串口屏和arduino uno 组成,测试代码如下:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include<ArduinoJson.h>
#define TJC Serial
#define lenth 6
RF24 radio(9,10);// CE, CSN
const char text[32] ={0};//用于存放接收到的数据
const byte addresses[][6]={"66666","88888"};//为双向通信创建两个通道地址,6为写通道,8为读取通道
bool ok=0;
void sendend()
{
TJC.write(Oxff);
TJC.write(Oxff);
TJC.write(oxff);
}
void setup()
{
TJC.begin(115200);//串口屏采用相同的波特率
radio.begin();
radio.setChannel(114);//设置信道(0-127),114号通道
radio.openwritingPipe(addresses[0]);//88888
radio.openReadingPipe(1, addresses[1]); // 66666
radio.setPALevel(RF24_PA_HIGH);
}
int n = 0;
int buttun = 1;
void loop()
{
char str[100];
int m = 0;
while (TJC.available() >= lenth)
{
unsigned char comd[lenth];
unsigned char head = TJC.peek();
if (head == 0x55)
{
TJC.readBytes(comd,lenth);
if (comd[3] == Oxff && comd[4] == Oxff && comd[5] == Oxff)
{
if (comd[1] == 0x00)
{
if (comd[2] == 0x01)
{
sprintf(str, "t0.txt=\"open\"");
TJC.print(str);
sendend();
radio.stoplistening();
const char text2[] = ("open"};
bool ok=radio.write(&text2, sizeof(text2));
delay(100);
//Serial.print("00发送:");
//Serial.println("OOReqMesFor01")
radio.startListening();
delay(100);
}
if (comd[2]==0x00)
{
sprintf(str, "t0.txt=\"close\"");
TJC.print(str);
sendend();
radio.stopListening();
const char text2[] = ("close");
bool ok=radio.write(&text2, sizeof(text2));
delay(100);
//Serial.print("00发送:");
//Serial.println("OOReqMesFor01")
radio.startListening();
delay(100);
}
}
}
} else
TJC.read()
}
}
}
4.2 串口屏代码
串口屏端代码如下:
printh 55
printh 00
prints bt0.val,1
printh ff ff ff
4.3 接收端代码
接收端为arduino 2560 ,其代码如下:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10);// CE, CSN
const char text[32]={0);//用于存放接收到的数据
const byte addresses[][6]=["66666","88888"};//为双向通信创建两个通道地址,6为写通道,8为读取通道
int led=7;
void setup()
{
Serial.begin(115200);
radio.begin();
radio.setChannel(114);//设置信道(0-127),114号通道
radio.openwritingPipe(addresses[1]);//66666
radio.openReadingPipe(1, addresses[0]); // 88888
radio.setPALevel(RF24_PA_HIGH);
}
void loop()
{
if (radio.available() > 0) // 是否有有效数据可以读取
{
radio.read(&text, sizeof(text));
delay(500);
String comdata ="";
comdata += text;
if (comdata == "open")
{
Serial.print("01接收到:");
Serial.println(comdata);
digitalwrite(led,HIGH);
radio.stopListening();
}
if (comdata == "close")
{
Serial.print("01接收到:");
Serial.println(comdata);
digitalwrite(led,LOW);
radio.stopListening();
radio.startListening();
}
else
{
radio.startListening();
}
}