#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Ra01S.h>
// 发送端
// 定义射频频率,单位为赫兹Hz,这里设置为480000000Hz,即480MHz,作为中心频率
#define RF_FREQUENCY 480000000 //// 定义射频频率,单位为赫兹 Hz center frequency
// 定义发射输出功率,单位为分贝毫瓦dBm,这里设置为20dBm,表示发射功率的大小
#define TX_OUTPUT_POWER 20 //// 定义发射输出功率,单位为分贝毫瓦 dBm tx output power
// 定义LoRa带宽,这里设置为4,对应的值为125Khz(不同的数字对应不同的带宽取值,如下所示)
// bandwidth // 2: 31.25Khz // 3: 62.5Khz // 4: 125Khz // 5: 250KHZ // 6: 500Khz
#define LORA_BANDWIDTH 4 // 定义 LoRa 带宽
// 定义LoRa扩频因子,这里设置为11,取值范围在SF5到SF12之间
#define LORA_SPREADING_FACTOR 11 // 定义 LoRa 扩频因子// spreading factor [SF5..SF12]
// 定义LoRa编码率,这里设置为1,对应的值为4/5(不同数字对应不同编码率取值,如下所示)
// [1: 4/5, // 2: 4/6, // 3: 4/7, // 4: 4/8]
#define LORA_CODINGRATE 1 // 定义 LoRa 编码率
// 定义LoRa前导码长度,这里设置为8,发送和接收时该长度相同
#define LORA_PREAMBLE_LENGTH 8 // 定义 LoRa 前导码长度 // Same for Tx and Rx
// 定义LoRa有效载荷长度,这里设置为0,表示可变长度数据包(带有显式头部);取值1到255表示固定长度数据包(带有隐式头部)
#define LORA_PAYLOADLENGTH 0 // 定义 LoRa 有效载荷长度// 0: Variable length packet (explicit header) // 1..255 Fixed length packet (implicit header)
// DS18B20温度传感器连接的引脚,这里设置为引脚3
const int ONE_WIRE_BUS = 3; // DS18B20 连接的引脚
// 继电器控制引脚,设置为引脚1
const int RELAY_PIN = 1; // 继电器控制引脚
// 创建OneWire对象,用于与DS18B20温度传感器进行单线通信,传入连接的引脚参数
OneWire oneWire(ONE_WIRE_BUS);
// 创建DallasTemperature对象,用于获取DS18B20温度传感器的温度数据,传入前面创建的OneWire对象作为参数
DallasTemperature sensors(&oneWire);
// 用于存储当前获取到的温度值,初始化为浮点数类型
float currentTemp;
// 用于记录LED的状态,初始化为false,表示关闭状态
bool ledState1 = false;
// ES932C3默认SPI接口相关引脚说明:
// MISO引脚为GPIO6,MOSI引脚为GPIO5,SCK引脚为GPIO4,CS引脚为GPIO7
// ES932C3 NSS脚为GPIO7,RST脚为GPIO9,BUSY脚为GPIO2
// ESP32连接DS18B20的引脚为GPIO3,连接继电器的引脚为GPIO1
// 第一种写法传递3个参数:
// 1. ESP32 SPI总线的片选引脚GPIO5接RA-01SC(LLCC68)模块的NSS脚
// 2. ESP32的引脚GPIO16接RA-01SC(LLCC68)模块的RST脚
// 3. ESP32的引脚GPIO4接RA-01SC(LLCC68)模块的BUSY脚
// SX126x lora(5, 16, 4);
// 这里采用的是连接方式,将ESP32C3的 引脚GPIO7接RA-01SC(LLCC68)模块的NSS脚,
// GPIO9接RST脚,GPIO3接BUSY脚,创建SX126x类型的对象lora用于LoRa通信
SX126x lora(7, 9, 3);
// 第二种写法传递5个参数 (SPI select, Reset, Busy, TXEN, RXEN) 没有试过
// SX126x lora(5, 6, 7, 8, 9);
// 函数setup在程序开始时执行一次,用于初始化各种设置
void setup()
{
// 延迟5000毫秒,可能是为了给硬件一些启动时间或者等待某些设备初始化完成
delay(5000);
// 初始化串口通信,设置波特率为115200,用于后续输出调试信息等
Serial.begin(115200);
// 将继电器控制引脚设置为输出模式,以便后续可以通过该引脚控制继电器的开合
pinMode(RELAY_PIN, OUTPUT);
// 将继电器引脚初始化为低电平,默认关闭继电器
digitalWrite(RELAY_PIN, LOW); // 默认关闭继电器LOW
// 如果取消注释这行,将开启LoRa模块的调试打印功能,可用于查看LoRa通信的详细情况
// lora.DebugPrint(true);
// 在串口输出提示信息,表示要禁用TCXO(可能是某种晶体振荡器相关设置)
Serial.println("Disable TCXO");
// 调用lora对象的begin方法初始化LoRa模块,传入射频频率和发射输出功率作为参数,
// 并将返回值存储到ret变量中,如果返回值不等于ERR_NONE(可能是预定义的错误码),
// 则进入无限循环(可能是为了在初始化失败时暂停程序以便排查问题)
int16_t ret = lora.begin(RF_FREQUENCY, TX_OUTPUT_POWER); // 初始化 LoRa 模块,设置频率和发射功率
if (ret!= ERR_NONE) while (1) {
delay(1);
}
// 调用lora对象的LoRaConfig方法配置LoRa模块的参数,
// 传入扩频因子、带宽、编码率、前导码长度、有效载荷长度、是否开启CRC校验以及是否反转中断等参数
lora.LoRaConfig(LORA_SPREADING_FACTOR,LORA_BANDWIDTH,LORA_CODINGRATE,LORA_PREAMBLE_LENGTH,LORA_PAYLOADLENGTH,false,false);//invertIrq
}
// 函数loop会不断循环执行,是程序的主要执行部分
void loop()
{
// 定义一个长度为255的无符号8位整数数组txData,用于存储要发送的数据
uint8_t txData[255]; // 定义一个用于发送数据的数组,长度为 255
// 使用sprintf函数将格式化后的字符串存储到txData数组中,
// 格式化字符串中包含固定文本"esp32c3 Hello World "以及通过调用loopDS18B20函数获取到的温度值,保留两位小数
sprintf((char *)txData, "esp32c3 Hello World %.2f", loopDS18B20());
// 获取txData数组中存储的字符串的长度,存储到len变量中
uint8_t len = strlen((char *)txData);
// 调用lora对象的Send方法以同步模式发送数据,传入要发送的数据数组txData、数据长度len以及发送模式SX126x_TXMODE_SYNC作为参数,
// 如果发送成功,则在串口输出"Send success FaSongWanCheng"信息,否则输出"Send fail"信息
if (lora.Send(txData, len, SX126x_TXMODE_SYNC)) { // 以同步模式发送数据,如果发送成功则打印成功信息,否则打印失败信息
Serial.println("Send success FaSongWanCheng");
} else {
Serial.println("Send fail");
}
// 延迟10000毫秒,即每隔10秒执行一次上述发送数据的操作
delay(10000);
}
// 函数loopDS18B20用于获取DS18B20温度传感器的温度数据,并进行一些相关操作
float loopDS18B20()
{
// 调用sensors对象的requestTemperatures方法,向DS18B20温度传感器请求获取温度数据
sensors.requestTemperatures();
// 通过sensors对象的getTempCByIndex方法获取温度传感器的温度值,索引为0(可能表示获取第一个连接的温度传感器的数据),
// 并将获取到的温度值存储到currentTemp变量中
currentTemp = sensors.getTempCByIndex(0);
// 对ledState1的状态取反,用于切换LED的状态(这里可能是模拟某种与温度相关的指示灯状态变化)
ledState1 =!ledState1;
// 根据ledState1的新状态,通过digitalWrite函数设置继电器引脚的电平,从而控制继电器的开合
digitalWrite(RELAY_PIN, ledState1);
// 在串口输出当前获取到的温度值
Serial.println(currentTemp);
// 返回获取到的温度值,以便在其他函数中使用
return currentTemp;
}
//--------------------------------------------------------------------------------------------------------------
#include <Ra01S.h>库
GitHub - nopnop2002/Arduino-LoRa-Ra01S: An Arduino Library for LoRa Communication using SX1262/1268
#include <Arduino.h>
#include <Ra01S.h>
#include <HardwareSerial.h>
//接收端
#define RF_FREQUENCY 480000000 //// 定义射频频率,单位为赫兹 Hz center frequency
#define TX_OUTPUT_POWER 20 //// 定义发射输出功率,单位为分贝毫瓦 dBm tx output power
#define LORA_BANDWIDTH 4 // 定义 LoRa 带宽 // bandwidth // 2: 31.25Khz // 3: 62.5Khz // 4: 125Khz // 5: 250KHZ // 6: 500Khz
#define LORA_SPREADING_FACTOR 11 // 定义 LoRa 扩频因子// spreading factor [SF5..SF12]
#define LORA_CODINGRATE 1 // 定义 LoRa 编码率 // [1: 4/5, // 2: 4/6, // 3: 4/7, // 4: 4/8]
#define LORA_PREAMBLE_LENGTH 8 // 定义 LoRa 前导码长度 // Same for Tx and Rx
#define LORA_PAYLOADLENGTH 0 // 定义 LoRa 有效载荷长度// 0: Variable length packet (explicit header) // 1..255 Fixed length packet (implicit header)
//ES932C3默认SPI接口:MISO引脚GPIO6 MOSI引脚GPIO5 SCK引脚GPIO4 CS引脚GPIO7
//ES932C3 NSS脚GPIO7 RST脚GPIO9 BUSY脚GPIO3
//ESP32 DS18B20 GPIO3 继电器引脚GPIO1
//第一种写法传递3个参数:1.ESP32 SPI总线的片选引脚GPIO5接RA-01SC(LLCC68)模块的NSS脚 2.ESP32的引脚GPIO16接RA-01SC(LLCC68)模块的RST脚 3.ESP32的引脚GPIO4接RA-01SC(LLCC68)模块的BUSY脚
//SX126x lora(5, 16, 4);
SX126x lora(7, 9, 3);
HardwareSerial mySerial1(1); //软串口,用来与淘晶驰屏幕进行通信
int sum01 = 0;
int sum02 = 0;
int sum03 = 1;
int txtjc = 0;
void setup() {
delay(5000);
Serial.begin(115200);
mySerial1.begin(9600, SERIAL_8N1, 20, 21);
while (mySerial1.read() >= 0); //因为串口屏开机会发送88 ff ff ff,所以要清空串口缓冲区 //清空串口缓冲区
mySerial1.print("page main\xff\xff\xff"); //发送命令让屏幕跳转到main页面
//nowtime = millis(); //获取当前已经运行的时间
//lora.DebugPrint(true);
Serial.println("Disable TCXO");
int16_t ret = lora.begin(RF_FREQUENCY, TX_OUTPUT_POWER); // 初始化 LoRa 模块,设置频率和发射功率
if (ret != ERR_NONE) while (1) {
delay(1);
}
// 配置 LoRa 模块的参数,包括扩频因子、带宽、编码率、前导码长度、有效载荷长度、CRC 开启状态和中断反转状态
lora.LoRaConfig(LORA_SPREADING_FACTOR, LORA_BANDWIDTH, LORA_CODINGRATE, LORA_PREAMBLE_LENGTH, LORA_PAYLOADLENGTH, false, false); //invertIrq
}
void loop() {
uint8_t rxData[255] = {0};
uint8_t rxLen = lora.Receive(rxData, 255);
char myChar[255] = {0};
char myChardata[255] = {0};
char myChardata1[100] = {0};
char myChardatarssi[100] = {0};
char myChardatadbsnr[100] = {0};
if ( rxLen > 0 ) {
for (int i = 0; i < rxLen; i++) {
if (rxData[i] > 0x19 && rxData[i] < 0x7F) {
//if (rxData[i] > 0x00 && rxData[i] < 0xFF) {
myChar[i] = rxData[i];
txtjc = 1;
}
// else {
// Serial.println("?");
// txtjc = 2;
// }
}
Serial.println(rxLen);
Serial.print(myChar);
Serial.println();
int8_t rssi = 0;
int8_t snr = 0;
lora.GetPacketStatus(&rssi, &snr);
Serial.print("rssi: ");
Serial.print(rssi, DEC);
Serial.println(" dBm");
Serial.print("snr: ");
Serial.print(snr, DEC);
Serial.println(" dB");
//sprintf(myChardata, "t%d.txt=\"%s\"\xff\xff\xff", sum01, myChar); //只能16个字符
sprintf(myChardatarssi, "t6.txt=\"%d_dBm\"\xff\xff\xff", rssi); //只能16个字符
mySerial1.print(myChardatarssi);//把字符串发送出去
sprintf(myChardatadbsnr, "t7.txt=\"%d_dB\"\xff\xff\xff", snr); //只能16个字符
mySerial1.print(myChardatadbsnr);//把字符串发送出去
}
//用sprintf来格式化字符串,给t0的txt属性赋值
if (sum01 < 6 && txtjc == 1) {
sprintf(myChardata, "t%d.txt=\"%s\"\xff\xff\xff", sum01, myChar); //只能16个字符
//sum03++;
sprintf(myChardata1, "t%d.txt=\"\"\xff\xff\xff", sum03); //只能16个字符---------------------------------------------------------------------------------
//sprintf(myChardata, "t0.txt=\"%s\"\xff\xff\xff", myChar); //只能16个字符
//把字符串发送出去
mySerial1.print(myChardata1);//先清空文本控件
delay(1);
mySerial1.print(myChardata);
Serial.print("TAOJINGCHI1:");
Serial.println(myChardata);
sum03++;
sum01++;
if (sum01 >= 6) {
sum01 = 0;
}
if (sum03 >= 6) {
sum03 = 0;
}
txtjc = 0;
}
// else if (txtjc == 2) {
// sum02++;
// sum01 = 0;
// sum03 = 1;
// sprintf(myChardata, "t11.txt=\"xxx%s\"\xff\xff\xff", sum02);
// //把字符串发送出去
// Serial.print("TAOJINGCHI2:");
// Serial.println(myChardata);
// mySerial1.print(myChardata);
// if (sum02 >= 100) {
// //ESP.restart();
// sum02 = 0;
// }
// }
delay(1);
}
947

被折叠的 条评论
为什么被折叠?



