Код 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));
}
}
}
Код Arduino, который я пишу, имеет проблему с качеством передачи. /> Похоже, что мягкие работы плохо работают в 115200 бодах, но это частота, которую берет моя чип Lora (reylx rylr896), и кажется, что я не могу использовать другую частоту Лоры (или я могу?) < /p> ниже ответа из терминала: < /p>
Эмиттер Ардуино Код [code]#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);