Arduino UNO R3 mit GSM Shield SIM 900 geht nicht auf Sendung

Bernd Langner

Moderator
Teammitglied
Hallo

Ich habe mir diese Teile gekauft.
GSM.jpg
Nun möchte ich über das GSM Shield SMS versenden.
Eine freigeschaltete Prepaidkarte ist im Slot und wenn ich das GSM Board über
den Taster einschalte loggt es sich auch ein.

Nur ich bekomme keine Befehle vom Arduino zum Shield.
Auf dem Shield sind Jumper hiermit kann ich TX/RX auf D0 und D1 legen
oder wechseln auf D7/D8

Es geht um diesen Quellcode
#include <GSM.h>

#define PINNUMMER "xxxx"
#define TELEFONNUMMER "01234567890"
#define WARTEZEIT 60*60*1000
#define IRSENSORPIN A0
#define DEBUG true

GSM gsmAccess;
GSM_SMS sms;

void InitGSM()
{
Serial.println("GSM wird initialisiert");
if (!DEBUG) {
boolean KeineVerbindung = true;

while (KeineVerbindung)
{
if (gsmAccess.begin(PINNUMMER) == GSM_READY)
KeineVerbindung = false;
else
{
Serial.println("GSM-Fehler: keine Verbindung");
delay(1000);
}
}
}
Serial.println("GSM wurde erfolgreich gestartet");
}

void SendSMS(char* SMSText, char* Telefonnummer)
{
Serial.print("SMS senden an ");
Serial.println(Telefonnummer);
if (!DEBUG) {
sms.beginSMS(Telefonnummer);
sms.print(SMSText);
sms.endSMS();
}
Serial.println("SMS gesendet");
}

bool PruefeBewegungssensor()
{
return digitalRead(IRSENSORPIN);
}

void setup()
{
pinMode(IRSENSORPIN, INPUT);
Serial.begin(9600);
Serial.println("Arduino Alarmanlage");
InitGSM();
}

long LetzterAlarm = -WARTEZEIT; //

void loop()
{
if ( PruefeBewegungssensor() ) {
if ((millis() - LetzterAlarm) >= WARTEZEIT)
{
Serial.println("Alarm! Sende SMS");
LetzterAlarm = millis();
SendSMS("Alarm! Es wird bei Ihnen gerade eingebrochen!", TELEFONNUMMER);
}
else {
Serial.println("Alarm! Aber SMS wurde bereits gesendet.");
}
}
else {
Serial.println("Alles Ruhig");
}
delay(500);
}
der Code stammt aus dem Arduinohandbuch von Caroli
ich sehe im Montitor das seriell gesendet wird aber es passiert nichts.

Eventuell kann mich jemand dabei unterstützen. Hauptproblem ist
das ich erst gekauft habe und dann Unterlagen gesucht habe und zum Shield finde ich nix:cry:

Über den Pin D9 soll das Shield eingeschaltet werden wie finde ich das raus ob
das geht?

Gruß Bernd
 

ta-uli

User
Hallo,

versuche mal, die Zeile

#define DEBUG true

durch

#define DEBUG false

zu ersetzen.
Sonst werden ein paar wichtige(!) Codezeilen nicht ausgeführt.



Uli
 

Bernd Langner

Moderator
Teammitglied
Hallo
Warum den Code wegschmeißen der IR Sensor gibt auch nur 3,3 /5V auf den Eingang
Das kann ich im Serial Monitor sehen wenn ich den Pegel ändere.

Passt den die GSM Biblothek oder gibt es eine speziell für das Sim 900

Das mit den verlegen der Seriellen Schnittstelle ist ok da ja der Atmega 16 auf dem
Uno über USB die serielle Schnittstelle des Arduino/Atmega 328 bedient.
Dazu nutzt er die Port PDo und PD1.

Ich werde mir den Rest mal anschauen/durcharbeiten

Gruß Bernd
 

Bernd Langner

Moderator
Teammitglied
Hallo Eckehard

Die brücke aus deinem link verbindet den Pin D9 mit Power On/Off
des Sim900.

Der Sketch von der Seite funzt leider nicht er bricht beim compilieren mit "stray 342 " ab
da muss ein Grundlegender Fehler drinne sein.
/****************************************************************************************/
/*** Declaration of global constants and initialization of variables. Add includes. ***/
/****************************************************************************************/
/*** Software release and date ***/
const char* sketchname = „SIM900Call“;
const char* revision = „R.0.1“;
const char* author = „Olaf Meier“;
const char* date = „2014/04/19“;

/****************************************************************************************/
/*** Declare constants and variables for the SIM900 GSM shield. Dial a number ***/
#include <SoftwareSerial.h>
# define GSMONOffPIN 9 // On/Off-pin of the GSM shield

const unsigned int baudRate = 9600; // Baud rate for the serial monitor
const unsigned int GSM900baudRate = 19200; // Default baud rate for SIM900

SoftwareSerial GSM900(7, 8); // GSM serial port to Pin 7 and 8

/****************************************************************************************/
/****************************************************************************************/
void setup() {
Serial.begin(baudRate); // …set up the serial output
Serial.println(sketchname); // Print the sketch name to serial out
GSM900.begin(GSM900baudRate);
Serial.print(„SIM900 GSM Shield Power „);
GSM900PowerOnOff(); // Power on GSM shield
Serial.println(„is on now!“);
delay(30000); // 30s left to log onto the GSM network
Serial.println(„Logged into a GSM network“);
} // End of void setup()
/****************************************************************************************/
/****************************************************************************************/
void loop() {
Serial.println(„Start dialing number“);
dialNumber(); // Function to dial a phone number
Serial.println(„Switch off power of the GSM Shield“);
GSM900PowerOnOff(); // Power off GSM shield
do {} while (1); // Run while loop endless
} // End of void loop()
/****************************************************************************************/
/****************************************************************************************/
/*** Function to switch GSM shield on and off via software ***/
void GSM900PowerOnOff()
{
digitalWrite(GSMONOffPIN, HIGH);
delay(1000); // 1s HIGH switch SIM900 ON or OFF
digitalWrite(GSMONOffPIN, LOW);
delay(3000); // Wait 3s until chip is initialized
}
/****************************************************************************************/
/*** Function to dial a phone number ***/
void dialNumber()
{
GSM900.println(„ATD + +4915212345678;“); // Send command to dial the number
delay(15000); // Wait for 15 seconds before hang up
Serial.println(„Hang up“);
GSM900.println(„ATH“); // Send command to hang up
}
/****************************************************************************************/

Hier ist auch der Pin definiert wo die Brücke fehlt
#define GSMONOffPIN 9
über ein Hi oder Low Signal
startet das Sim 900.

Ich bin absoluter Anfänger was die Programmierung des Arduino betrifft.
Deshalb bitte die Hilfe etwas ausführlicher.

Gruß und Danke Bernd
 
So ungefähr kannst du "zu Fuß" eine SMS senden.



//Test :
Serial.println("AT")

delay(1000);

//Echo abschalten:
Serial.println("ATE0")

delay(1000);

//SMS TEXT modus aktivieren:
Serial.println("AT+CMGF=1")

delay(1000);

//eine SMS Senden

Serial.print("AT+CMGS="");
Serial.print("0123456789");
Serial.println(""");
delay(1000);
Serial.print("TOLLER SMS TEXT");
Serial.print((char)26);
delay(1000);
 

Eckehard

User
Hallo Bernd,

ich kann hier leider nicht "praktisch" helfen, ich hab ewede reinen UNO noch ein SIM900 shield....

Aus den Antworten kann ich nicht genau schließen, oder ich hab es überlesen, ob bei Deinem shield die Verbindung Arduino -> shield durchgängig verbunden ist....

Ich bezog mich auf folgenden Absatz:

Nach einigen Untersuchungen stellte sich dann heraus, dass meine Revision des Shields noch eine offene Lötbrücke hat, welche erst geschlossen werden muss, damit der Pin 9 des Arduino überhaupt mit dem Shield verbunden ist! Nach dem Zulöten der Lötbrücke war aber auch dieses Problem behoben.

Quelle: https://arduino-hannover.de/2014/04/...smgprs-shield/

Hast Du einmal geprüft, ob vielleicht bei Deinem shield -auch- die Steuerleitung "unterbrochen" ist?

Sorry....

Eckehard
 

Bernd Langner

Moderator
Teammitglied
Hallo Eckehard

Also wichtig ist das schon und auf meinem Shield ist auch diese Lötbrücke zu setzen.
Wichtig ist auch die richtige Bibliothek einzubinden sonst wird das Shiel auch nicht
richtig angesprochen.

Gruß Bernd
 
Der Sketch von der Seite funzt leider nicht er bricht beim compilieren mit "stray 342 " ab
da muss ein Grundlegender Fehler drinne sein.

Da ist kein grundlegender Fehler drinne, sondern ein (unsichtbares) Zeichen aus einem anderen Zeichensatz, das der Compiler nicht versteht. Sowas kommt häufiger vor, wenn man Code aus Webseiten herauskopiert.

Mal mit einem anderen Editor öffnen und speichern. Wenn gar nichts hilft, abtippen...

Oliver
 

Bernd Langner

Moderator
Teammitglied
Wählt

Wählt

Hallo

So nach langen probieren ob das Shield überhaupt sendet habe
ich ein funktonierenden Sketch gefunden.

Hier auf der Seite https://create.arduino.cc/projecthub/Tiobel/gsm-home-alarm-v1-0-41e4dc
wird alles haarklein erklärt und mit Bildern geschmückt
Auch das anpassen der Bibliothekseinträge wird erklärt.

Ich habe den Sketch kopiert und in die IDE eingefügt compiliert
und hochgeladen.
Das Shield telefoniert dann zu meinem Handy :cool:
Damit habe ich jetzt ein Basis um weiter zu machen.
Ich wollte ja SMS und kein Voicecall

Aber dazu muss ich noch etliches nachlesen und probieren.
Ich brauche im Endeffekt ein Kontakt wenn der betätigt wird dann soll eine
SMS gesendet werden

Gruß Bernd
 

Bernd Langner

Moderator
Teammitglied
Hallo

Also es ist so das der Pin 9 an diesem Modul zum einschalten benötigt wird.
Um das zu aktivieren muss eine Lötbrücke gesetzt werden.
Das geht aber auch manuell durch den Taster
Auf dem Modul kann man mit zwei Jumpern entweder D0 /D1 als Serialport
setzen oder D7/8.
Wie Matze aber geschrieben hat geht D0/D1 nicht da ich damit den Serialport
des Arduino blockiere deshalb Softserial auf D7/8.

Lade ich dann diesen Sketch auf das Board
//Serial Relay - Arduino will patch a
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART

#include <SoftwareSerial.h>

SoftwareSerial GPRS(7, 8);

unsigned char buffer[64]; // buffer array for data receive over serial port
int count=0; // counter for buffer array

void setup()
{
GPRS.begin(19200);
Serial.begin(19200);
}

void loop()
{
if (GPRS.available())
{
while(GPRS.available())
{
buffer[count++]=GPRS.read();
if(count == 64)break;
}
Serial.write(buffer,count);
clearBufferArray();
count = 0;
}
if (Serial.available())
GPRS.write(Serial.read());
}

void clearBufferArray()
{
for (int i=0; i<count;i++)
{
buffer=NULL;
}
}

kann ich per AT Befehlssatz das GSM Shield ansprechen.
Im Serial Monitor sollte 19200 Baud eingestellt sein und
NL sowie Cr aktiviert sein.

Zum versenden einer SMS geht dann dieser Sketch
#include <SoftwareSerial.h>

SoftwareSerial SIM900(7, 8);

String outMessage = "Falle zu!";
String destinationNumber = "+49xxxxxxxxxx";

void setup()
{
SIM900.begin(19200);
delay(20000); // give time to log on to network.
SIM900.print("AT+CMGF=1\r");
delay(1000);
SIM900.println("AT + CMGS = "" + destinationNumber +""");
delay(1000);
SIM900.print(outMessage);
delay(1000);
SIM900.write((char)26); //ctrl+z
delay(1000);
}

void loop()
{
}

Möchte ich eien SMS per Tasterdruck versenden geht dieser Sketch.
Der digital Pin 4 liegt mit 10K gegen Masse und wird bei High Pegel aktiviert.
#include <SerialGSM.h>
#include <SoftwareSerial.h>
SerialGSM cell(7,8);
void setup()
{
pinMode(4, INPUT);
delay(30000); //warte auf das GSM Modul
cell.begin(19200);

}
void textSomeone()
{
cell.Verbose(true); //dient zum debuggen
cell.Boot();
cell.FwdSMS2Serial();
cell.Rcpt("+49xxxxxxxx");
cell.Message("Taster betätigt");
cell.SendSMS();
}

void loop()
{
if (digitalRead(4) == HIGH)
{
textSomeone();
}
if (cell.ReceiveSMS())
{
Serial.println(cell.Message());
cell.DeleteAllSMS();
}

}
Das Beispiel habe ich aus einem Buch. Hier muß noch die Bibliothek SerialGsm eingebunden werden.
In allen Beispielen habe ich das Shield per Taster eingeschaltet.


Das Shield funktoniert also und ich kann es einsetzen.
Muß aber noch viel dazu lernen was das proggen betrifft und
den Einsatz von Bibliotheken.

Gruß Bernd
 
Ansicht hell / dunkel umschalten
Oben Unten