我试图允许使用2个Arduino Unos,2个LORA芯片(SX1278 433MHz),2个天线和2个Arduino IDE发送和接收数据。
问题在于接收数据命令。
这是SENDING命令的代码:
#include <SPI.h>
#include <LoRa.h>
int counter = 0;
const int ss = 10;
const int reset = 9;
const int dio0 = 2;
void setup() {
Serial.begin(9600);
LoRa.begin(433E6);
LoRa.setPins(ss, reset, dio0);
while (!Serial);
Serial.println("LoRa Sender");
}
void loop() {
Serial.print("Sending packet: ");
Serial.println(counter);
// send packet
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.endPacket();
counter++;
delay(5000);
}
在串行监视器上,我成功发送了包,但没有收到。这是接收代码:
#include <SPI.h>
#include <LoRa.h>
const int ss = 10;
const int reset = 9;
const int dio0 = 2;
void setup() {
Serial.begin(9600);
LoRa.begin(433E6);
LoRa.setPins(ss, reset, dio0);
while (!Serial);
Serial.println("LoRa Receiver");
}
void loop() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Received packet '");
// read packet
while (LoRa.available()) {
Serial.print((char)LoRa.read());
Serial.print("hello ");
}
// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
}
}
我使用了有关此git页面上的连接的说明: https://github.com/sandeepmistry/arduino-LoRa
答案 0 :(得分:0)
首先,我还没有使用Lora库。我与SX1278 libaray合作。因此,我可以为您提供帮助。 首先,这里是指向libaray的链接-Lora SX1278.h library
现在您可能会问为什么我不使用原始GitHub存储库中的库。好吧,我遇到了该库的问题,问题是这样的:
修改了sx1278 :: getPacket()库函数,以稳定Lora接收功能。有一个错误使esp感到恐慌。没有检查从REG_FIFO寄存器读取的有效载荷长度的有效值,这导致读取REG_FIFO寄存器的读取次数超过65000次。此外,yield()会添加到此函数的耗时部分。
这就是为什么我使用此自定义库。无论如何,为您: 您可以使用此功能发送数据包:
T_packet_state = sx1278.sendPacketTimeoutACK(ControllerAddress, message); //T_packet_state is 0 if the packet data is sent successful.
也可以使用以下功能接收数据:
R_packet_state = sx1278.receivePacketTimeoutACK(); //R_packet_state is 0 if the packet data is received successfully.
在代码的开头,只需定义以下几件事:
//Lora SX1278:
#define LORA_MODE 10 //Add your suitable mode from the library
#define LORA_CHANNEL CH_6_BW_125 //Ch number and Bandwidth
#define LORA_ADDRESS 3 //Address of the device from which you will send data
uint8_t ControllerAddress = 5; //Address of receiving end device
我对StackOverflow的第一个不错的回答。手指交叉
答案 1 :(得分:0)
要使this board工作,我必须显式初始化SPI
SPI.begin(/*sck*/ 5, /*miso*/ 19, /*mosi*/ 27, /*ss*/ cs);
可能与您的相同。另外,您应该正确初始化Lora:
while (!LoRa.begin(433E6)) {
Serial.print(".");
delay(500);
}
Serial.println("LoRa Initializing OK!");
使用您发布的代码,您真的不知道它是正确初始化还是实际发送任何数据。