Лора Ардуино качество данных деградируетсяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Лора Ардуино качество данных деградируется

Сообщение Anonymous »

Код Arduino, который я пишу, имеет проблему с качеством передачи. /> Похоже, что мягкие работы плохо работают в 115200 бодах, но это частота, которую берет моя чип Lora (reylx rylr896), и кажется, что я не могу использовать другую частоту Лоры (или я могу?) < /p>
ниже ответа из терминала: < /p>

Эмиттер Ардуино Код

Код: Выделить всё

#include 
#include 

// Création de l'instance SoftwareSerial pour le module LoRa sur les broches 2 (RX) et 3 (TX)
SoftwareSerial loraSerial(2, 3);  // RX, TX

// Fonction pour vider complètement le buffer de réception de loraSerial
void clearSerialBuffer() {
while (loraSerial.available()) {
loraSerial.read();
}
}

// Fonction pour envoyer une commande AT via loraSerial et lire la réponse
void sendCommand(String cmd) {
cmd.trim();  // Supprime les espaces superflus

// Envoi de la commande AT avec terminaison "\r\n"
loraSerial.print(cmd);
loraSerial.print("\r\n");
loraSerial.flush();  // Attendre que la transmission soit terminée
delay(200);          // Laisser un délai pour que le module traite la commande

// Lecture de la réponse du module
String response = "";
unsigned long startTime = millis();
while (millis() - startTime < 2000) {
if (loraSerial.available()) {
response += loraSerial.readString();
}
}
// Affichage dans le moniteur série (debug)
Serial.print("Réponse pour ");
Serial.println(cmd);
Serial.println(response);

// Vider le buffer pour la prochaine commande
clearSerialBuffer();
}

// Fonction pour envoyer un message LoRa et lire la réponse
bool sendLoRaMessage(String message) {
String command = "AT+SEND=2," + String(message.length()) + "," + message;
// Envoi de la commande avec terminaison "\r\n"
loraSerial.print(command);
loraSerial.print("\r\n");
loraSerial.flush();

// Attendre la réponse du module
String response = "";
unsigned long startTime = millis();
while (millis() - startTime < 2000) {
if (loraSerial.available()) {
response += loraSerial.readString();
}
}

// Afficher la réponse pour le débogage
Serial.print("Réponse pour ");
Serial.println(command);
Serial.println(response);

// Vider le buffer
clearSerialBuffer();

// Vérifier si la réponse contient une erreur
if (response.indexOf("+ERR=") != -1) {
Serial.println("❌ ERREUR DETECTÉE !");
return false;
} else {
Serial.println("✅ Message envoyé avec succès !");
return true;
}
}

void setup() {
// Initialisation du port série matériel pour le débogage
Serial.begin(115200);
delay(500);

// Initialisation de loraSerial pour communiquer avec le module LoRa
loraSerial.begin(115200);
delay(500);

// Réinitialiser le module LoRa
sendCommand("AT+RESET");
delay(500);

// Configuration du module LoRa
sendCommand("AT+ADDRESS=1");       // Définir l'adresse du module
delay(200);
sendCommand("AT+NETWORKID=1");     // Définir l'ID du réseau
delay(200);
sendCommand("AT+BAND=915000000");  // Définir la fréquence à 915 MHz
delay(200);

// Vérifier la configuration (si la commande de lecture est supportée)
sendCommand("AT+NETWORKID?");
}

void loop() {
// Envoyer un message simple "A" via LoRa
bool success = sendLoRaMessage("HELLO");

if (!success) {
Serial.println("⚠️ Erreur détectée, attente de 5 secondes avant un nouvel essai...");
delay(5000);
} else {
delay(4000); // Pause normale entre les envois
}
}
< /code>
приемник arduino code < /p>
#include 
#include 

// Crée une instance SoftwareSerial pour le module LoRa sur les broches 8 (RX) et 9 (TX)
SoftwareSerial loraSerial(2, 3); // RX, TX

// Fonction pour vider complètement le buffer de réception de loraSerial
void clearSerialBuffer() {
while (loraSerial.available()) {
loraSerial.read();
}
}

// Fonction pour envoyer une commande AT via loraSerial et lire la réponse
void sendCommand(String cmd) {
cmd.trim();   // Supprime les espaces superflus

// Envoi de la commande AT avec terminaison "\r\n"
loraSerial.print(cmd);
loraSerial.print("\r\n");
loraSerial.flush();  // Attendre que la transmission soit terminée
delay(200);          // Laisser un délai pour que le module traite la commande

// Lecture de la réponse du module
String response = "";
unsigned long startTime = millis();
while (millis() - startTime < 2000) {
if (loraSerial.available()) {
response += loraSerial.readString();
}
}
// Affichage dans le moniteur série (debug)
Serial.print("Réponse pour ");
Serial.println(cmd);
Serial.println(response);

// Vider le buffer pour la prochaine commande
clearSerialBuffer();
}

void setup() {
// Initialisation du port série matériel pour le débogage
Serial.begin(115200);
delay(500);

// Initialisation de loraSerial pour communiquer avec le module LoRa
loraSerial.begin(115200);
delay(500);

// Réinitialiser le module LoRa
sendCommand("AT+RESET");
delay(500);

// Configuration du module LoRa
sendCommand("AT+ADDRESS=2");       // Définir l'adresse du module
delay(200);
sendCommand("AT+NETWORKID=1");     // Définir l'ID du réseau
delay(200);
sendCommand("AT+BAND=915000000");  // Définir la fréquence à 915 MHz
delay(200);

// Vérifier la configuration (si la commande de lecture est supportée)
Serial.println("Récepteur LoRa prêt.");
}

void loop() {
// Vérifier si des données sont disponibles provenant du module LoRa
if (loraSerial.available()) {
// Lire la chaîne de caractères jusqu'à la fin de ligne (retour chariot ou saut de ligne)
String receivedMessage = loraSerial.readStringUntil('\n');
receivedMessage.trim(); // Supprime les espaces et retours chariots en trop
if (receivedMessage.length() > 0) {
Serial.print("Message reçu : ");
Serial.println(receivedMessage);
}
// Analyser le message pour extraire l'adresse, le contenu et le RSSI
int firstCommaIndex = receivedMessage.indexOf(',');
int secondCommaIndex = receivedMessage.indexOf(',', firstCommaIndex + 1);
int thirdCommaIndex = receivedMessage.indexOf(',', secondCommaIndex + 1);

if (firstCommaIndex != -1 && secondCommaIndex != -1 && thirdCommaIndex != -1) {
String length = receivedMessage.substring(firstCommaIndex+1,secondCommaIndex); // Extrait l'adresse
String message = receivedMessage.substring(secondCommaIndex+1,thirdCommaIndex); // Extrait le message
String rssiStr = receivedMessage.substring(thirdCommaIndex + 1); // Extrait le RSSI

// Convertir le RSSI en float
float rssi = rssiStr.toFloat();

// Afficher les informations extraites
Serial.print("Longueur du message : ");
Serial.println(length);
Serial.print("Message reçu : ");
Serial.println(message);
Serial.print("RSSI : ");
Serial.println(rssi);
Serial.println(receivedMessage.substring(9,14));
}

}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... s-degraded
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»