- LoRa sx1278 с Arduino mega 2560 (Устройство 1, отправитель).
- LoRa sx1278 с Arduino UNO (Устройство 2, приемник).
Это рабочий процесс:
Устройство 1: отправляет 5 сообщений, а затем переключается в режим приема для получения данных.
Устройство 2: принимает 5 сообщений, а затем переключается в режим отправки данных.
Устройство 1 код:
#include
#include
const long frequency = 433E6; // LoRa frequency (adjust according to your region)
int sendCount = 0; // To count sent messages
bool isSending = true; // Flag for sending/receiving state
void setup() {
Serial.begin(9600);
while (!Serial);
if (!LoRa.begin(frequency)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("LoRa Sender/Receiver");
// Initially, set the node to send messages
switchToSending();
}
void loop() {
if (isSending) {
sendMessages(5); // Send 5 messages
switchToReceiving(); // Switch to receiving after sending
} else {
receiveMessages(); // Receive counter messages
}
}
void sendMessages(int count) {
for (int i = 0; i < count; i++) {
String message = "Message " + String(i + 1);
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.println("Sent: " + message);
delay(1000); // Delay between messages
}
sendCount += count;
}
void receiveMessages() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
// Read received packet
String receivedMessage = "";
while (LoRa.available()) {
receivedMessage += (char)LoRa.read();
}
Serial.println("Received: " + receivedMessage);
// Process the received message
if (receivedMessage.startsWith("Counter")) {
Serial.println("Received counter message from Receiver.");
}
}
}
void switchToSending() {
Serial.println("Switching to sending mode...");
isSending = true;
}
void switchToReceiving() {
Serial.println("Switching to receiving mode...");
isSending = false;
}
Код устройства 2:
#include
#include
const long frequency = 433E6; // LoRa frequency (adjust according to your region)
int receivedMessageCount = 0; // Counter for received messages
int counter = 0; // Counter to track messages sent back to the transmitter
bool isSendingCounter = false; // Flag to determine if the receiver should start sending counter messages
void setup() {
Serial.begin(9600);
while (!Serial);
if (!LoRa.begin(frequency)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("LoRa Receiver/Sender");
}
void loop() {
if (!isSendingCounter) {
receiveMessages(); // In receiving mode, waiting for 5 messages
} else {
sendCounterMessage(); // Start sending counter messages after receiving all 5
}
}
void receiveMessages() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
// Read received packet
String receivedMessage = "";
while (LoRa.available()) {
receivedMessage += (char)LoRa.read();
}
// Print received message
Serial.println("Received: " + receivedMessage);
receivedMessageCount++; // Increment received message count
// Check if all 5 messages are received
if (receivedMessageCount >= 5) {
Serial.println("All 5 messages received. Switching to counter sending mode...");
isSendingCounter = true; // Switch to sending counter messages
counter = 0; // Reset counter
}
}
}
void sendCounterMessage() {
String message = "Counter " + String(counter);
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.println("Sent: " + message);
counter++;
delay(1000); // Delay between counter messages
// After sending 5 counter messages, switch back to receiving mode
if (counter >= 5) {
isSendingCounter = false;
receivedMessageCount = 0; // Reset received message count
Serial.println("Switching back to receiving mode...");
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... nding-data