单片机学习小组
直播中

张桂兰

7年用户 1318经验值
私信 关注

Lora sx1278是怎样利用串口协议去实现数据传输的呢

Lora sx1278是怎样利用串口协议去实现数据传输的呢?其代码该怎样去实现呢?

回帖(1)

杨秀英

2022-2-21 10:04:20
1、LoRa模块的配置

模块我是买的正点原子的Lora sx1278用串口协议实现数据的传输,拿来配置一下就能用啦很方便。

这是附带的上位机软,按照商家给的手册再根据自己的需求分分钟配置好。
注意事项
(1)发射功率不要太高,会导致信号过于精准,不易于接收。
(2)模块地址、通信信道以及波特率要保持一致。
(3)配置的时候,上面的波特率一定要选115200,不然会提示连接超时。
2、Arduino uno代码


#include                         /软串口头文件
#include                                 //导入dht11的头文件


#define DhtPIN A0                                 //dht11控制的端口


SoftwareSerial LoRa_Serial(2, 3);         // RX, TX //模拟一个软串口,开发板接受LoRa模块接收的信号
dht11 DHT11;                                                 //实体化dht11的类,命名为:DHT11
String comdata = "";                //接收的字符串
char str_chk[] = "chk =";
char str_temp[] = "temp =";
char str_hum[] = "Hum =";
long previousMillis = millis();     //上一次激活时间
long interval = 5000;               //间隔


void Receive_Data() {
  while (LoRa_Serial.available() > 0) {        //有数据过来
    comdata += char(LoRa_Serial.read());
    delay(2);
  }
  
  Serial.print("comdata = ");
  Serial.println(comdata);                        //打印信息
  comdata = "";                                                //接收信息归0
}


void Send_Data() {
  float res_temp = 0.0;
  float res_hum = 0.0;


  DHT11.read(DhtPIN);                                 //读取传感器数据
  res_temp = (float)DHT11.temperature;
  res_hum = (float)DHT11.humidity;
  if (res_temp >= 0 && res_hum > 0) {
    LoRa_Serial.print("temp = ");//串口打印结果,便于观察和调试
    LoRa_Serial.print(res_temp);//串口打印结果,便于观察和调试
    LoRa_Serial.print(",Hum = ");//串口打印结果,便于观察和调试
    LoRa_Serial.println(res_hum);//串口打印结果,便于观察和调试
  }


}


void setup() {
  // put your setup code here, to run once:
  pinMode(DhtPIN, OUTPUT);  //设置dht11端口模式为输出


  Serial.begin(9600);//初始化端口连续通信从波特率9600开始
  Serial.println("hardware seriall!");
  Serial.begin(9600);
  Serial.println("software serial!");
}


void loop() {
  // put your main code here, to run repeatedly:
  if (LoRa_Serial.available()) {
    Receive_Data();
  }
  if (millis() - previousMillis > interval) {
    Send_Data();
    previousMillis = millis();
  }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分