Sim800l und Mysql

Hallo liebes Forum,

kurz zu meinem Vorhaben:
Ich möchte mit einem Sensor Daten aufnehmen, diese an einen Arduino Uno übermitteln und dann über ein Sim800l GSM/GPRS Modul an eine MySQL Datenbank weiterleiten.
Das ganze soll mit einer eigenen Stromversorgung laufen und portabel sein.

Der bisherige Stand ist:

Stromversorgung über 12V Autobatterie, 12-5V Stepdown Wandler mit max. 3A, Arduino Uno, Sim800L Modul und einem Sensor

Der Stepdownwandler ist auf 5V eingestellt und der Arduino läuft wahlweise über die Batterie, oder derzeit halt am Laptop. Die Betriebsspannung für das Sim800l Modul wird über einen Widerstand auf 4.2 Volt begrenzt. Der Sensor kann direkt am Arduino Betrieben werden.

Zur seriellen Kommunikation mit dem Arduino sind die Pins 3,4 (rx,tx) und 7,8 ebenfalls rx,tx vorgesehen.
An dem Sensor und dem Modul sind Rx --- Tx und Tx-----Rx angeschlossen.

Der Sensor kommuniziert mit mir über den Seriellen Monitor auch 1a. Die Werte sind richtig und kommen auch im gewünschten Zeitfenster an. Die Baudrate beträgt 9600.

Bei dem Sim800l Modul ist es leider anders.
Betreibe ich es einzeln (Testsketch der nur das Sim 800Modul anspricht) dann printed es mir zwar alle Anweisungen die es Ausführen soll aus (AT, ATCREG etc.) aber es führt sich nicht aus und antwortet mir auch nicht, wenn ich manuell AT Befehle eingebe.
Im kombinierten Betrieb macht das Sim800l noch nichtmal das,sondern ich bekomme nur die Daten von dem Sensor ausgegeben. Normalerweise läuft das Sim800 auch auf Baudrate 9600, aber auch eine Veränderung auf 19200 oder 4800/2400 hat nichts geändert.

Da ich inzwischen schon beim 4. Sim Modul bin, dass ich teste nervt es langsam, besonders da mir die Nebenbeschäftigungen wie erstellen der Testdatenbank, parsen etc. ausgehen und nur noch das Sim Modul rumbockt.

Deshalb: Kennt wer entweder eine gute Möglichkeit das Sim800l modul zu testen?
Hatte schonmal wer die gleichen Fehler?
Oder kennt wer eine gute Alternative die ich austesten kann um die Daten per GPRS an eine MySQL Datenbank zu übermitteln?

Mit freundlichen Grüßen

Deine Lösung das SIM800L mit einem Vorwiderstand zu betreiben, um die 4,2 Volt zu erreichen, funktioniert nicht.
Normalerweise bucht sich das Modul so noch nicht einmal im Netz ein.
Wenn das Modul sendet, steigt der Strombedarf auf ca. 2 A an und der Spannungsabfall am Vorwiderstand wird dann so groß, dass die Spannung für den SIM800 nicht mehr ausreicht.
Du musst die Spannung von 4,2 V mit einem Spannungsregler erzeugen, dann funktioniert es sicher.

Hallo, danke für die prompte Antwort. Also spannungswandler noch was weiter runter auf 4,2 Volt. Den Widerstand rausgeworfen und direkt betrieben. 4,2 volt gemessen zwischen Vcc und GND vom modul. Es läuft immer noch genauso viel wie vorher.

Dann liegt es wohl an deinem Sketch, den kenne ich nicht.
Oder du hast einen Fehler beim Anschluss gemacht, hier wäre ein Schaltbild nützlich.

Du solltest unbedingt das GSM getrennt von allen anderen Dingen einzeln testen.
Speziell bei der Verwendung von 2 seriell beim Uno habe ich so meine Bedenken. Wie löst du das ?

Edit:
Wenn du den Arduino jetzt auch an den 4,2 V betreibst, bekommst du andere Probleme.
Da läuft der Uno nicht mehr stabil.

Ja das ist noch eine Baustelle, bisher indem ich 2Softwareserials definiert habe und die heißen dann Gsm und Gps.

Zum Sim800l:

Als beispielsketch habe ich das hier probiert.
Weiteren Code stell ich morgen ein, da ich grad nur am Handy bin.

Simson:
Ja das ist noch eine Baustelle, bisher indem ich 2Softwareserials definiert habe und die heißen dann Gsm und Gps.

Zum Sim800l:
SIM800 Arduino GPRS

Als beispielsketch habe ich das hier probiert.
Weiteren Code stell ich morgen ein, da ich grad nur am Handy bin.

Ok, SoftwareSerial ist kritisch wenn du zwei Instanzen laufen lässt.
Ohne deinen eigenen Sketch kann ich nichts weiter dazu sagen.

Bei mir läuft das GSM800L problemlos an SoftwareSerial.
Leider kann ich deine Webadresse nicht öffnen, da kein Hyperlink.

Nochmal zur Stromversorgung. Wie lang ist deine Verkabelung vom Step down bis zum Modul? Ist das Modul "nackt", oder irgend eine Fertigplatine? Es ist immens wichtig, das die Spannung so nahe wie möglich am Modul nochmal gepuffert ist, damit die 2A Spitzen auch sicher abgefangen werden können. Sowohl per Keramikkondensator, als auch mit einem Low ESR Elko. Ich weiß jetzt nicht, was das Dantenblatt da genau vorschreibt, aber ich handele da nach der Devise viel hilft viel. 100µF gibt es bereits als KerKo 1210. Ist zwar SMD, aber noch handhabbar. Dazu noch ca. 1000µF als low ESR Elko und kurze Zuleitungen und die nicht gerade in "Haarstärke" vom Spannungswandler.
Wobei ich in grenzwertigen Fällen auch nicht unbedingt den fertigen Spannungswandlermodulen vertrauen würde. Oft wird da an der Drossel gespart. Wenn man sich das Datenblatt zum zugehörigen Chip ansieht, dann ist meist die gewählte Induktivität an der untersten Grenze und der Sättigungsstrom eventuell sogar kleiner, als der Maximalstrom des Chips. Also auch da am Ein- und Ausgang nochmal großzügig einen low ESR Elko hin. Es sei denn, das Datenblatt wählt mehrere kleine Elkos, weil die Schaltfrequenz sehr hoch ist.
Wegen dem Schnittstellendilema: probiere doch mal eine Arduinoversion mit mindestens 2 echten seriellen Schnittstellen in Hardware. Das wären der Mega, oder auch der ATMEGA 1284. Den gibt es zum einen als IC im DIL Gehäuse, als auch als Arduino Clone. Irgendwas mit Sanguino oder so ähnlich.
Eventuell gibt es inzwischan auch mal Arduino Unterstützung für den Atmel Xplained Mini mit einem ATTiny 817 drauf. Wenn es darauf läuft, dann weißt du, das der Bock in der softwaremäßigen Umsetzung der seriellen Schnittstelle liegt. Auch dafür gibt es andere Libs, die man mal testen kann. Es gibt da auch noch new soft serial usw.

nix_mehr_frei:
Nochmal zur Stromversorgung....

Deine Ausführungen sind sehr aufschlussreich, aber ich befürchte damit überforderst du den TO. :wink:

Es funktioniert mit der Spannung (4,2 Volt) auch mit einem getakteten Spannungsregler und einen normalen Elko => 470 µF. Er darf nur den Uno nicht auch mit 4,2 V betreiben.
Und er sollte das GSM mal solo testen, dann geht es auch an SoftwareSerial. Wenns dann geht kann er erweitern und eine zweite Instanz der seriellen erstellen.

Die dürfen sich nur nicht in die quere kommen.

Also zur Stromversorgung:

Ja ich wollte es eigentlich minimalistisch halten ohne viel "Zwischenzuschalten". Deshalb der 12-5V Stepdown mit 3A. Der liefert auch 4,0 Volt am Sim800l Modul.
Eigentlich sollte das Modul aus der Autobatterie dann seine 2A Peakströme ziehen können oder geh ich falsch in der Annahme?

Sollte es nur daran liegen, ließe sich das ja schnell beheben.

Aber zum Weiteren:

#include <SoftwareSerial.h>
#include <Wire.h>
//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 8

//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
String apn = "internet.eplus.de";                       //APN
String apn_u = "eplus";                     //APN-Username
String apn_p = "gprs";                     //APN-Password
String url = "http://www.findyourthings.de/datensenden.php";  //URL for HTTP-POST-REQUEST
String data1;   //String for the first Paramter (e.g. Sensor1)
String data2;   //String for the second Paramter (e.g. Sensor2)



void setup() {
  // Open serial communications and wait for port to open:
   Serial.begin(9600);
  delay(1000);
}

void loop() { // run over and over

    if(serialSIM800.available()){
    Serial.write(serialSIM800.read());
  }
  //Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
  if(Serial.available()){     
    serialSIM800.write(Serial.read()); 
  }
    data1 = "123";
    data2 = "ABC";
    gsm_sendhttp(); //Start the GSM-Modul and start the transmisson
    delay(60000); //Wait one minute
    
}


void gsm_sendhttp() {
  
  
 
  Serial.println("AT");
  runsl();//Print GSM Status an the Serial Output;
  delay(4000);
  Serial.println("AT+SAPBR=3,1,Contype,GPRS");
  runsl();
  delay(100);
  Serial.println("AT+SAPBR=3,1,APN," + apn);
  runsl();
  delay(100);
  Serial.println("AT+SAPBR=3,1,USER," + apn_u); //Comment out, if you need username
  runsl();
  delay(100);
  Serial.println("AT+SAPBR=3,1,PWD," + apn_p); //Comment out, if you need password
  runsl();
  delay(100);
  Serial.println("AT+SAPBR =1,1");
  runsl();
  delay(100);
  Serial.println("AT+SAPBR=2,1");
  runsl();
  delay(2000);
  Serial.println("AT+HTTPINIT");
  runsl();
  delay(100);
  Serial.println("AT+HTTPPARA=CID,1");
  runsl();
  delay(100);
  Serial.println("AT+HTTPPARA=URL," + url);
  runsl();
  delay(100);
  Serial.println("AT+HTTPPARA=CONTENT,application/x-www-form-urlencoded");
  runsl();
  delay(100);
  Serial.println("AT+HTTPDATA=192,10000");
  runsl();
  delay(100);
  Serial.println("params=" + data1 + "~" + data2);
  runsl();
  delay(10000);
  Serial.println("AT+HTTPACTION=1");
  runsl();
  delay(5000);
  Serial.println("AT+HTTPREAD");
  runsl();
  delay(100);
  Serial.println("AT+HTTPTERM");
  runsl(); 
   delay(100);
  Serial.println("AT+CUSD=1,*101#");
  runsl(); 

  
}

//Print GSM Status
void runsl() {
  while (Serial.available()) {
    Serial.write(Serial.read());
  }

}

Das ist der Testsketch der laufen sollte. Gibt auch ein Video dazu wo der ganz fantastisch läuft in Minimalkonfiguration.

Aber das ist das was ich herausbekomme:

Unbenannt.PNG

Das sind nur die Befehle die du sendest, es kommt kein "OK" vom Modul zurück. Überprüfe mal deine serielle Schnittstelle

Sorry, hier muss ich passen.

Da fehlt mit die "HTTP"-Erfahrung.

Du solltest evtl. mit einer einfachen SMS anfangen, um zu sehen, ob Sketch und Hardware funktionieren.
Wenn das geht auf HTTP umsteigen.

Und wozu hast du die Wire.h eingebunden. Die wird in deinem Sketch nicht gebraucht.
Und RX mit TX mal vertauscht ?

Achja...das wichtigste überhaupt: Bucht sich dein Modul ein ?
Wie blinkt die Led ?

RX und TX Vertauschen hat keinerlei Auswirkungen, komischerweise?!

Die rote LED auf dem Sim800 Modul blinkt alle 3 Sekunden einmal kurz auf.

Die Sim Karte ist entsperrt und besitzt keinen PIN Code mehr.

Das ausprobieren mit SMS hat auch nicht funktioniert. Er sagt zwar SMS Sent aber angekommen ist nichts. Netz habe ich zwar relativ "schlechtes" aber es ist vorhanden.

Auf manuelle AT Commands reagiert es auch nicht, ich sende sie zwar, aber eine Antwort erhalte ich nicht.

Dann liegt es an der seriellen Schnittstelle. Auf ein einfaches "AT" muss schon ein "OK" zurückkommen.
Bist du sicher das die Baudrate 9600 sein muss? Teste mal alle durch bis mindestens 38400

Simson:
Auf manuelle AT Commands reagiert es auch nicht, ich sende sie zwar, aber eine Antwort erhalte ich nicht.

Dann liegt da noch ein grundsätzlicher Fehler vor.

hast du auch GND mit allen Teilen verbunden.

Zeige eine Schaltung oder Foto vom Aufbau.

Jein, der Arduino wird vom USB Port mit Spannung versorgt und das Sim800l Modul wird über den Spannungswandler versorgt. Wenn ich GND auf den Arduino ziehe dann Blinkt das Sim800l Modul nicht mehr.

Simson:
Jein, der Arduino wird vom USB Port mit Spannung versorgt und das Sim800l Modul wird über den Spannungswandler versorgt. Wenn ich GND auf den Arduino ziehe dann Blinkt das Sim800l Modul nicht mehr.

Wo bleib die Schaltung oder das Bild.

GND muss verbunden sein.
Offensichtlich fehlen dir Grundlagen.

Ohne GND geht es nicht, also wie geht es weiter ?

So wird bzw. Ist es verdrahtet.

Ich kenn mich mit den Grundlagen schon ein wenig aus, nur die externe Stromquelle ist nicht gerade mein Freund stell ich fest.

Sorry, aber deine Schaltung ist ganz großer Mist. Wie sollen wir da klar kommen.

  1. Es ist kein Uno
  2. Du verwendest für seriell A2 und A3
  3. Du hast keinen Regler sondern einen Akku
  4. In der TX-Leitung fehlt ein Spannungsteiler.
  5. Externe Stromquelle hat nichts damit zu tun, wenn in einem System grundsätzlich alle GND verbunden sein müssen.

So können wir nicht helfen.

Der dritte Versuch :smiley:

Also du hast natürlich völlig Recht, das Bild sollte auch nicht das sein, welches ich euch zeigen wollte. Aber das Forum schlägt mir grade ein Schnippchen wenn ich es vom Handy aus hochladen möchte.

Du hast mit deinen Anmerkungen natürlich völlig recht und ich hoffe ich kann das richtige jetzt gleich nachreichen.

Sei unbesorgt, den Unterschied zwischen UNO und Nano kenn ich, ich verwende wirklich einen UNO.

Die GND Pins habe ich auch alle verbunden und am Stepdownwandler auf Out- Angeschlossen.

Sobald das richtige Bild von meinem Handy akzeptiert wird reiche ich das natürlich nach.

Simson:
So

:disappointed_relieved: :angry: :smiling_imp:
Ok...alles gut. :wink: