ESP32C3连接ra-01sc调试记录arduino llcc68

#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);
}

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值