Skip to content
This repository has been archived by the owner on Oct 15, 2024. It is now read-only.

data transmission stops after few days #42

Closed
Basi0815 opened this issue Feb 7, 2019 · 1 comment
Closed

data transmission stops after few days #42

Basi0815 opened this issue Feb 7, 2019 · 1 comment

Comments

@Basi0815
Copy link

Basi0815 commented Feb 7, 2019

Hello all,
i am using an arduino uno an a sim 900 modul, for sending water level to ThingSpeak. But after a few days of perfect data connection, it stops working. After reconnecting the power supply it starts again.

I think the network connection ist being lost and because of this the Arduino cannot send data any more. How can i check if the connection is still doning fine, in the loop. And maybe start reconnection again?

Thanks

//Einbindung der erforderlichen Bibliotheken
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>

//Pins und Geschwindigkeit der Verbindungs-
//Kommunikation mit der SIM900 - Modul
//Serielle Verbindung, TX und RX PINS 7 und 8
//Power on Pin 9, Einschalten des Sim Moduls
#define pinTX 7
#define pinRX 8
#define pinPower 9
#define BaudrateSim 9600

//Paramenter fuer die Verbindung zu Thingspeak
//Setze den Namen des Servers, mit dem wir uns verbinden wollen
char gprsServer[] = "api.thingspeak.com";
//Setze Speicher-API für ThingSpeak
String API = "VZZ****";
//Die Variable, die verwendet wird, um die Boolean Server Response Dump- Anweisung auszuloesen
boolean vypis = 0;

//Initialisierung des SIM900-Moduls aus der GPRS- Bibliothek
GPRS sim900(pinTX, pinRX, BaudrateSim);

//Variablen initailisieren
int pegel = 0.0;

//Setup wird nur einmal durchlaufen
void setup() {

// Kommunikation über die serielle Leitung initiieren
Serial.begin(9600);

// die Stromversorgung des SIM900-Moduls überprüfen, wenn das Modul ausgeschaltet ist
if (!sim900.checkPowerUp()) {
sim900.powerUpDown(pinPower);
}
// Warten zum Initialisieren des SIM-Moduls
while (!sim900.init()) {
Serial.println( "Initialisierungsfehler!" );
delay(4000);

// Zusaetzliche Prüfung ob Sim-Modul eingeschaltet ist,
// falls Arduino Stromversorgung vor der des Sim-Moduls einschaltet
    if (!sim900.checkPowerUp()) {
    sim900.powerUpDown(pinPower);
  } 

}
delay(15000);
Serial.println("Initialisierung erfolgreich");
Serial.println("");

//Zugangsdaten für Internetverbindung, abhaenig vom Provider
//Siehe: https://praxistipps.chip.de/apn-einstellungen-mobiles-internet-richtig-einrichten_46068
//Standardparameter ist der APN-Name, der zweite Anmeldename und das dritte Kennwort
//("")bedeutet dieses Feld bleibt leer
//Beispiel: sim900.join (F ("apn"), F ( "user"), F ( "Passwort"))

//Für Vodafone
while (!sim900.join(F("web.vodafone.de"),F(""),F(""))) {

Serial.println("Fehler beim Verbinden mit GPRS!");
Serial.println("");
Serial.println("Starte SIM Modul neu!");

    // Modul neustarten wenn Verbindung scheitert
    // Modul ausschalten
    digitalWrite(9, HIGH);
    delay(3000);
    digitalWrite(9, LOW);
    delay(3000);
    //Modul einschalten
    digitalWrite(9, HIGH);
    delay(3000);

Serial.println("SIM Modul neugestartet!");
delay(20000);
}

// Die zugewiesene oeffentliche IP Adresse abrufen
Serial.print("Oeffentliche IP Adresse: ");
Serial.println(sim900.getIPAddress());
}

//Programmschleife
void loop() {

// TCP - Verbindung zu einem definierten Server auf Port 80,
// wenn ein Problem auftritt, Fehlermeldung über die serielle Leitung
// und nach einer Pause 2 Sekunden versuchen , die Verbindung wieder aufzubauen
if (!sim900.connect(TCP, gprsServer, 80)) {
Serial.println("Fehler bei TCP - Verbindung");
delay(2000);
}
// Bei erfolgreicher Verbindung folgende Meldung
else {
Serial.print("Verbindung mit dem Server " );
Serial.print(gprsServer);
Serial.println(" gelungen!");
Serial.println("");

// Nachricht für Thingspeak erstellen    
//h0 = Hoehe Beckenboden bis Sensorkopf
float h0 = 3.95;
//Analogeingang einlesen
int pegel = analogRead(A1);
Serial.println(pegel);
//Messhoehe (Sensorkopf bis Wasseroberflaeche) aus 0-5V Eingangssignal 
//Umrechnungsfaktor ADC = 5m/1023
//+0,35m für Blindzone Sensor
float hmess = ((pegel*0.004887585)+0.35); 
Serial.println(hmess);
//Messhoehe - absoluten Sensorhoehe, um Wasserstand zu erhalten
float hwasser = (h0 - hmess); 
//Korrekturfaktor nach manueller Messung
hwasser = hwasser + 0.06;
Serial.println("Berechneter Pegel:");
Serial.println(hwasser);
float fuellstand = ((hwasser/3.2)*100);
Serial.println("Berechneter Fuellstand [%]:");
Serial.println(fuellstand);

// Erstellen Sie eine gesamte Nachricht, die gesendet werden soll. 
String str = "GET /update?api_key=";
str += API;
str += "&field1=";
str += hwasser;
str += "&field2=";
str += fuellstand;
str += " HTTP/1.0\r\n\r\n";
// Erstelle ein Zeichenfeld der Groesse 
// Nachricht + 1, um alle Zeichen 
char strChar[str.length() + 1];
// Konvertiere eine Nachricht von String in das richtige Groessenfeld 
str.toCharArray(strChar, str.length() + 1);
// Die erstellte Nachricht über die TCP-Verbindung senden
sim900.send(strChar, str.length());
// in der Schleife, während wir die gesamte Antwort abrufen, 
// vom Server, wenn der Daten-Dump aktiviert ist 
// empfangene Nachricht nach der seriellen Leitung 
char Antwort[512];
while (true) {
// Erstelle ein Zeichenfeld der Groesse 
// Nachricht + 1, um alle Zeichen
  int Zeichen = sim900.recv(Antwort, sizeof(Antwort) - 1);
// Konvertiere eine Nachricht von String in das richtige Groessenfeld
  if (Zeichen <= 0) {
    if (vypis) {
      Serial.println("-> Ende der Antwort.");
    }
    break;
  }
  Antwort[Zeichen] = '\0';
  if (vypis) {
    Serial.print("Received: ");
    Serial.print(Zeichen);
    Serial.print( "byte: " );
    Serial.println(Antwort);
  }
}
// Aktuelle Verbindung beenden und TCP Sim900 trennen
sim900.close();
sim900.disconnect();
Serial.println( "-> Verbindung der Datenverbindung trennen ." );
Serial.println(""); 

// pausiert , bevor die neuen Daten zu senden an Thingspeak 
// erforderlich , minimale Verzögerung von 15 Sekunden bei kostenloser Nutzung 
Serial.println("Pause 30s");
Serial.println("");
delay(30000);

}
}

@Pillar1989
Copy link
Member

I will close this issue first. If you still need to discuss it, you can open it again

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants