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?
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.
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.
Deine Ausführungen sind sehr aufschlussreich, aber ich befürchte damit überforderst du den TO.
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.
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.
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
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.
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.