101 lines
2.7 KiB
C++
101 lines
2.7 KiB
C++
// Only supports SX1276/SX1278
|
|
// 仅支持 SX1276/SX1278 无线电模块,SX1280,SX1262等其他无线电模块请使用RadioLibExamples目录的示例
|
|
#include <LoRa.h>
|
|
#include "LoRaBoards.h"
|
|
|
|
#ifndef CONFIG_RADIO_FREQ
|
|
#define CONFIG_RADIO_FREQ 868.0
|
|
#endif
|
|
#ifndef CONFIG_RADIO_OUTPUT_POWER
|
|
#define CONFIG_RADIO_OUTPUT_POWER 17
|
|
#endif
|
|
#ifndef CONFIG_RADIO_BW
|
|
#define CONFIG_RADIO_BW 125.0
|
|
#endif
|
|
|
|
|
|
#if !defined(USING_SX1276) && !defined(USING_SX1278)
|
|
#error "LoRa example is only allowed to run SX1276/78. For other RF models, please run examples/RadioLibExamples
|
|
// 仅支持 SX1276/SX1278 无线电模块,SX1280,SX1262等其他无线电模块请使用RadioLibExamples目录的示例
|
|
#endif
|
|
|
|
void setup()
|
|
{
|
|
setupBoards();
|
|
// When the power is turned on, a delay is required.
|
|
delay(1500);
|
|
|
|
Serial.println("LoRa Receiver");
|
|
|
|
#ifdef RADIO_TCXO_ENABLE
|
|
pinMode(RADIO_TCXO_ENABLE, OUTPUT);
|
|
digitalWrite(RADIO_TCXO_ENABLE, HIGH);
|
|
#endif
|
|
|
|
#ifdef RADIO_CTRL
|
|
Serial.println("Turn on LAN, Enter Rx mode.");
|
|
/*
|
|
* BPF LoRa LAN Control ,set HIGH turn on LAN ,RX Mode
|
|
* */
|
|
digitalWrite(RADIO_CTRL, HIGH);
|
|
#endif /*RADIO_CTRL*/
|
|
|
|
LoRa.setPins(RADIO_CS_PIN, RADIO_RST_PIN, RADIO_DIO0_PIN);
|
|
if (!LoRa.begin(CONFIG_RADIO_FREQ * 1000000)) {
|
|
Serial.println("Starting LoRa failed!");
|
|
while (1);
|
|
}
|
|
|
|
LoRa.setTxPower(CONFIG_RADIO_OUTPUT_POWER);
|
|
|
|
LoRa.setSignalBandwidth(CONFIG_RADIO_BW * 1000);
|
|
|
|
LoRa.setSpreadingFactor(10);
|
|
|
|
LoRa.setPreambleLength(16);
|
|
|
|
LoRa.setSyncWord(0xAB);
|
|
|
|
LoRa.disableCrc();
|
|
|
|
LoRa.disableInvertIQ();
|
|
|
|
LoRa.setCodingRate4(7);
|
|
|
|
// put the radio into receive mode
|
|
LoRa.receive();
|
|
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
// try to parse packet
|
|
int packetSize = LoRa.parsePacket();
|
|
if (packetSize) {
|
|
// received a packet
|
|
Serial.print("Received packet '");
|
|
|
|
String recv = "";
|
|
// read packet
|
|
while (LoRa.available()) {
|
|
recv += (char)LoRa.read();
|
|
}
|
|
|
|
Serial.println(recv);
|
|
|
|
// print RSSI of packet
|
|
Serial.print("' with RSSI ");
|
|
Serial.println(LoRa.packetRssi());
|
|
if (u8g2) {
|
|
u8g2->clearBuffer();
|
|
char buf[256];
|
|
u8g2->drawStr(0, 12, "Received OK!");
|
|
u8g2->drawStr(0, 26, recv.c_str());
|
|
snprintf(buf, sizeof(buf), "RSSI:%i", LoRa.packetRssi());
|
|
u8g2->drawStr(0, 40, buf);
|
|
snprintf(buf, sizeof(buf), "SNR:%.1f", LoRa.packetSnr());
|
|
u8g2->drawStr(0, 56, buf);
|
|
u8g2->sendBuffer();
|
|
}
|
|
}
|
|
}
|