Bonjour à tous,
Je viens vers vous afin d'avoir votre aide après une longue période de recherche et de test.
Je suis en train de faire un système de surveillance à distance pour un appareil qui effectue des mesures.
Le but principale est de pouvoir redémarrer à distance avec des relais et des SMS, pouvoir regarder si il est toujours alimenté en 220v et si mon appareil se déplace grâce au GPS (en cas de vol)
pour la partie SMS, surveillance du 220v, et relais, j'ai réussi à tout faire fonctionner.
Je viens vers vous car je n'arrive pas à faire fonctionner mon module SIM800L et NEO6M (GPS) en même temps, j'arrive à les faire fonctionner séparément.
Je vous joins mon code, si vous avez le temps de regarder =)
J'utilise ici un arduino mega ainsi que ses ports séries en hard, j'ai essayé en avec la lib SoftwareSerial sans plus du succès.
Le code fonctionne bien jusqu’à ConnectionGPS(),
l'arduino mega n'arrive pas à lire le serial 3.
Si je test le code tout seul (ConnectionGPS()) sans rien d'autre cela fonctionne sauf si je laisse les lignes en com l'arduino n'arrive pas à lire le serial 3 également.
//-------bibliothèque-----------//
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <String.h>
#include <TinyGPS++.h> // alim GPS en 3.3v arduinoTX => RX GPS / arduinoRX => TX GPS
//------Pin connection----------//
LiquidCrystal_I2C lcd(0x27, 20, 4); // adress serial du LCD
//-------variable-------//
//---variable SIM800L---//
String textMessage;
String SerialConnReso;
String SerialQR;
int QR;
int SCR = 0;
int SGPS = 0;
//---variable GPS---//
char data;
TinyGPSPlus gps;
//-----------------SOUS_PROGRAMME------------------//
void ModeSMSon()
{
Serial1.println("AT+CMGF=1"); // mode txt on
Serial1.print("AT+CNMI=2,2,0,0,0\r"); //mode de reception de sms en direct
}
//**************************************************************************************************************************************************
void ConnectionReseau() {
while (SCR == 0)
{
lcd.backlight(); //allume le rétro éclairage
lcd.setCursor(0, 0); //choix de la ligne et du pixel de début de la phrase
lcd.print("Test connection GSM");
Serial.println("Test connection GSM");
delay(3000);
Serial1.println("AT+COPS?"); // demande de connection reseau
if (Serial1.available() > 0 )
{
SerialConnReso = Serial1.readString();
if (SerialConnReso.indexOf("+COPS: 0,0") >= 0)
{
lcd.backlight(); //allume le rétro éclairage
lcd.setCursor(0, 1); //choix de la ligne et du pixel de début de la phrase
lcd.print("Connection GSM OK");
Serial.println("Connection GSM OK");
delay(2000);
lcd.clear(); // efface le texte sur le LCD
SCR = 1;
}
else
{
lcd.backlight(); //allume le rétro éclairage
lcd.setCursor(1, 1); //choix de la ligne et du pixel de début de la phrase
lcd.print("Connection GSM OUT");
Serial.println("Connection GSM OUT");
delay(500);
lcd.setCursor(0, 2); //choix de la ligne et du pixel de début de la phrase
lcd.print("Attente connection");
Serial.println("Attente connection");
delay(1000);
lcd.clear(); // efface le texte sur le LCD
SCR = 0;
}
}
}
}
//*******************************************************************************************************************************************************************************
void ConnectionGPS()
{
if (Serial3.available() && SGPS == 0)
{
/* lcd.backlight(); //allume le rétro éclairage
Serial.println("Test connection GPS");
lcd.setCursor(0,0); //choix de la ligne et du pixel de début de la phrase En comm car si je l'active l'arduino n'arrive plus à lire le serial 3
lcd.print("Test connection GPS");
delay(2000);
*/
data = Serial3.read();
Serial3.print(data);
gps.encode(data);
if (gps.location.isUpdated() > 0)
{
Serial.println(gps.location.lat(), 6);
Serial.println(gps.location.lng(), 6);
SGPS = 1;
}
if (gps.location.isUpdated() < 0)
{
lcd.backlight(); //allume le rétro éclairage
lcd.setCursor(1, 1); //choix de la ligne et du pixel de début de la phrase
lcd.print("Connection GPS OUT");
Serial.println("Connection GPS OUT");
delay(500);
lcd.setCursor(0, 2); //choix de la ligne et du pixel de début de la phrase
lcd.print("Attente connection");
Serial.println("Attente connection");
delay(1000);
lcd.clear(); // efface le texte sur le LCD
SGPS = 0;
}
}
}
//****************************************************************************************************
void QualityGSM()
{
Serial1.println("AT+CSQ");
delay(300);
if (Serial1.available() > 0)
{
SerialQR = Serial1.readString();
Serial.print(SerialQR);
delay(10);
}
if (SerialQR.indexOf("+CSQ: 0,0") >= 0)
{
QR = 0;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 1,0") >= 0 || SerialQR.indexOf("+CSQ: 2,0") >= 0 || SerialQR.indexOf("+CSQ: 3,0") >= 0)
{
QR = 1;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 4,0") >= 0 || SerialQR.indexOf("+CSQ: 5,0") >= 0 || SerialQR.indexOf("+CSQ: 6,0") >= 0)
{
QR = 2;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 7,0") >= 0 || SerialQR.indexOf("+CSQ: 8,0") >= 0 || SerialQR.indexOf("+CSQ: 9,0") >= 0)
{
QR = 3;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 10,0") >= 0 || SerialQR.indexOf("+CSQ: 11,0") >= 0 || SerialQR.indexOf("+CSQ: 12,0") >= 0)
{
QR = 4;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 13,0") >= 0 || SerialQR.indexOf("+CSQ: 14,0") >= 0 || SerialQR.indexOf("+CSQ: 15,0") >= 0)
{
QR = 5;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 16,0") >= 0 || SerialQR.indexOf("+CSQ: 17,0") >= 0 || SerialQR.indexOf("+CSQ: 18,0") >= 0)
{
QR = 6;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 19,0") >= 0 || SerialQR.indexOf("+CSQ: 20,0") >= 0 || SerialQR.indexOf("+CSQ: 21,0") >= 0)
{
QR = 7;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 22,0") >= 0 || SerialQR.indexOf("+CSQ: 23,0") >= 0 || SerialQR.indexOf("+CSQ: 24,0") >= 0)
{
QR = 8;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 25,0") >= 0 || SerialQR.indexOf("+CSQ: 26,0") >= 0 || SerialQR.indexOf("+CSQ: 27,0") >= 0)
{
QR = 9;
AffichQR();
}
if (SerialQR.indexOf("+CSQ: 28,0") >= 0 || SerialQR.indexOf("+CSQ: 29,0") >= 0 || SerialQR.indexOf("+CSQ: 30,0") >= 0 || SerialQR.indexOf("+CSQ: 31,0") >= 0)
{
QR = 10;
AffichQR();
}
}
//******************************************************************************************************************************************************************************
void AffichQR()
{
delay(100);
lcd.setCursor(0, 0); //choix de la ligne et du pixel de début de la phrase
delay(100);
lcd.print("GSM");
lcd.setCursor(3, 0); //choix de la ligne et du pixel de début de la phrase
lcd.print(QR);
lcd.setCursor(5, 0); //choix de la ligne et du pixel de début de la phrase
lcd.print("/10");
}
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
Serial3.begin(9600);
lcd.init(); // initialisation de l'afficheur
lcd.backlight(); //allume le rétro éclairage
lcd.setCursor(4, 2); //choix de la ligne et du pixel de début de la phrase
lcd.print("Demarrage...");
delay(2000);
// while(!Serial)
delay(100);
ModeSMSon(); //activation du mode SMS pour le SIM800L
lcd.clear(); // efface le texte sur le LCD
delay(100);
ConnectionReseau();
delay(100);
ConnectionGPS();
}
void loop()
{
QualityGSM();
if (Serial1.available() > 0)
{
textMessage = Serial1.readString();
Serial.print(textMessage);
delay(10);
}
if (textMessage.indexOf("test") >= 0)
{
lcd.backlight(); //allume le rétro éclairage
Serial.println("SMS RECU");
lcd.backlight(); //allume le rétro éclairage
lcd.setCursor(0, 0); //choix de la ligne et du pixel de début de la phrase
lcd.print("SMS RECU");
textMessage = "";
}
}
Je vous remercie par avance.