Hi!
Würde gerne mit einem SMS800L SMS versenden, habe dabei jedoch Probleme die Verbindung aufzubauen.
Arduino Uno WIFI Rev2
SIM800L
Congstar Prepaid SIM ohne Pin
DC DC Konverter LM2596
Status Quo:
Hab zunächst einen DC-DC Konverter vor das SIM800L geschaltet und die Spannung auf 4,2V
runtergeregelt. Es kommen auch jene 4,2V am SIM800 an, Lötstellen sollten daher passen.
SIM800 blinkt alle 3Sek, scheint daher bereit zu sein.
Aufbau: siehe Anhang. Passt da alles?
Wenn ich nun einen Code uploade geht der erste print (Initialize...) noch durch und danach geht nichts mehr. Tippe ich AT Befehle in den Monitor, passiert gar nichts? Er verschiwndet Monitor?
Das einzige was ich bekomme sind Werte die ich nicht interpretieren kann:
<code>#include <SoftwareSerial.h>
//Create software serial object to communicate with SIM800L
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2
void setup()
{
//Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
//Begin serial communication with Arduino and SIM800L
mySerial.begin(9600);
Serial.println("Initializing...");
delay(1000);
mySerial.println("AT"); //Once the handshake test is successful, it will back to OK
updateSerial();
mySerial.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
updateSerial();
mySerial.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
updateSerial();
mySerial.println("AT+CREG?"); //Check whether it has registered in the network
updateSerial();
}
void loop()
{
updateSerial();
}
void updateSerial()
{
delay(2000);
while (Serial.available())
{
mySerial.println(Serial.read());//Forward what Serial received to Software Serial Port
}
while(mySerial.available())
{
Serial.println(mySerial.read());//Forward what Software Serial received to Serial Port
}
}
yologamero:
....
Wie kann ich die Dezimalzahlen aus dem Monitor interpretieren?
Weshalb "verschwinden" meine AT Befehle einfach und zeigen keine Reaktion?
....
Vermutlich ist dein Aufbau nicht korrekt oder dein GSM defekt.
// Arduino UNO
#include <SoftwareSerial.h>
SoftwareSerial GSM_Serial(10, 11); // RX, TX
// -------------------------------------------------------------------
void setup(void)
{
Serial.begin(74880);
GSM_Serial.begin(19200); // GSM-Port
Serial.println("Terminal von Serial 1 nach Serial 2 ");
Serial.println("RX SIM800 auf DIGITAL 11 (mit Spannungsteiler auf ca. 3 V), TX auf DIGITAL 10");
Serial.println("Achtung, unten <Sowohl NL als auch CR> einstellen.....");
Serial.println("für CTRL+Z # senden.....");
GSM_Serial.write("AT\r\n");
delay(1000);
GSM_Serial.write("AT + CBC\r\n");
delay(1000);
GSM_Serial.write("AT+CSQ\r\n");
delay(1000);
GSM_Serial.write("AT+COPS?\r\n");
}
// -------------------------------------------------------------------
void loop() // Schleife Serial <-> GSM-Serial zum testen der AT-Befehle
{
//Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
if (GSM_Serial.available()) {
Serial.write(GSM_Serial.read());
}
//Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
if (Serial.available()) {
char c = (char)Serial.read();
delay(20);
if (c == '#')
GSM_Serial.write((char)26);
else
GSM_Serial.write(c);
}
}
// -------------------------------------------------------------------
Ein Screenshot vom Monitor hänge ich mal an.
Zuerst kommt AT mit OK
dann AT + CBC für die Versorgungsspannung des SIM800 (hier 4339 mV)
dann der Provider
dann die Version.
Das mit der Raute habe ich mal reingebastelt wegen CTRL+Z senden.
Dann kannst mal mit AT + diverse Befehle testen.
Viel Erfolg.
wenn ich deinen Code mit meinem UNO laufen lasse kommt das heraus:
Initializing...
0
65
84
13
13
10
79
75
usw...
ASCII Code für AT CR CR NL O K usw. Das ist ja eigentlich in Ordnung.
Wenn in der vor-vorletzten Zeile statt Serial.print Serial.write schreibst kann man es schön lesen....
Und noch etwas weiter oben mySerial.write reinnehmen, dann geht auch das Befehle reinschreiben.
Mit mySerial.println schickst du ja bei jeden Zeichen noch ein CR und NL an das SIM800-Modul mit, ist vielleicht nicht so gut. Und das delay (2000) ist auch nicht allzu günstig an dieser Stelle; der ist da ja nur mit Warten beschäftigt...
ach ja... wieso bei dir so andere Zahlen kommen weiß ich jetzt auch nicht. Stimmen die Pegel an RX und TX? Das SIM800 ist nicht unbedingt 5-V-tolerant....
Deltaflyer: @uk1408:
Im Eröffnungspost schreibt der TO, dass er das SIM800L über einen DC-DC konverter mit 4,2V betreibt.
LG Stefan
Ja - das ist ja dann die Betriebsspannung für das Modul.
Das hat aber nicht viel damit zu tun was die Eingänge vertragen. In Beitrag 5 ist ein Link zum Datenblatt, da steht bei Tabelle 9 auf Seite 30 für den seriellen Port (und Seite 58 allgemein):
Spannung für low min 0 bis max 0,3 V
Spannung für high 2,5 2,8 V
Wenn jetzt der UNO 5V für high liefert ist das zumindest für die Hardware nicht gut .
Serial.println("Terminal von Serial 1 nach Serial 2 ");
Serial.println("RX SIM800 auf DIGITAL 11 (mit Spannungsteiler auf ca. 3 V), TX auf DIGITAL 10");
Serial.println("Achtung, unten einstellen.....");
Serial.println("für CTRL+Z # senden.....");
GSM_Serial.write("AT\r\n");
delay(1000);
GSM_Serial.write("AT + CBC\r\n");
delay(1000);
GSM_Serial.write("AT+CSQ\r\n");
delay(1000);
GSM_Serial.write("AT+COPS?\r\n");
}
// -------------------------------------------------------------------
void loop() // Schleife Serial <-> GSM-Serial zum testen der AT-Befehle
{
//Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
if (GSM_Serial.available()) {
Serial.write(GSM_Serial.read());
}
//Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
if (Serial.available()) {
char c = (char)Serial.read();
delay(20);
if (c == '#')
GSM_Serial.write((char)26);
else
GSM_Serial.write(c);
}
}
// -------------------------------------------------------------------
Ein Screenshot vom Monitor hänge ich mal an.
Zuerst kommt AT mit OK
dann AT + CBC für die Versorgungsspannung des SIM800 (hier 4339 mV)
dann der Provider
dann die Version.
Das mit der Raute habe ich mal reingebastelt wegen CTRL+Z senden.
Dann kannst mal mit AT + diverse Befehle testen.
Viel Erfolg.
Danke! Habe es getestet, leider ohne Erfolg.
Frage zum Sketch: Ist TX auf Pin 11 oder 10? In Zeile 3 entnehme ich 11, in Zeile 12 ist es 10.
Wenn ich TX 11 wähle (RX 10) sieht mein Monitor wie folgt aus:
⸮Terminal von Serial 1 nach Serial 2
23:36:42.801 -> RX SIM800 auf DIGITAL 11 (mit Spannungsteiler auf ca. 3 V), TX auf DIGITAL 10
23:36:42.801 -> Achtung, unten einstellen.....
23:36:42.801 -> für CTRL+Z # senden.....
Drehe ich TX und RX um, sieht es gleich aus. Es kommt lediglich am Ende noch eine Zeile hinzu die sich unendlich fortsetzt:
23:38:11.548 -> RX SIM800 auf DIGITAL 11 (mit Spannungsteiler auf ca. 3 V), TX auf DIGITAL 10
23:38:11.582 -> Achtung, unten einstellen.....
23:38:11.582 -> für CTRL+Z # senden.....
Vor dem ersten AT Befehl geht nichts mehr.., ab da ists vorbei.
Grüße!
uk1408:
Ja - das ist ja dann die Betriebsspannung für das Modul.
Das hat aber nicht viel damit zu tun was die Eingänge vertragen. In Beitrag 5 ist ein Link zum Datenblatt, da steht bei Tabelle 9 auf Seite 30 für den seriellen Port (und Seite 58 allgemein):
Spannung für low min 0 bis max 0,3 V
Spannung für high 2,5 2,8 V
Wenn jetzt der UNO 5V für high liefert ist das zumindest für die Hardware nicht gut .
HotSystems:
Vermutlich ist dein Aufbau nicht korrekt oder dein GSM defekt.
Kann ich den Defekt iwie feststellen?
Hast du eine Verbesserung für meinen Aufbau?
10 vom Arduino ist dessen RX, der muss an TX des SIM800.
11 ist TX, zum RX siM800. Hier musst du auf die max 3 V aufpassen.
Zum testen: Nimm eine LED mit Vorwiderstand (ca 100 Ohm bis ca. 4 kOhm, unkritisch) und mache die mal von Pin 11 bzw. 10 über LED und Widerstand nach plus Arduino.
Dann mach 11 und 10 als Ausgang und setze sie auf high und nach delay(2000) auf low und schaue ob sie an und ausgeht....
Wenn das geht 10 und 11 als Input mit diesen Widerständen gegen Masse und schauen ob die LOW sind, dann mit einem Draht auf + 5 V und schauen ob sie HIGH werden....