• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino + GSM powiadomienie o zdarzeniu
#1
Witam wszystkich

Chciałbym skonstruować moduł który powiadamia o różnych zdarzeniach składający się z mikrokontrolera Arduino Leonardo + GSM Simcom sim900A (moduł po wgranym nowym flashu, działa!)

Jak na razie skleiłem takie coś:

Kod:
#include <SoftwareSerial.h>
SoftwareSerial GSM(7, 8);
int sms = 0 ;
void setup()
{
 GSM.begin(9600);
 delay(1000);
 pinMode(2, INPUT_PULLUP);
 pinMode(3, INPUT_PULLUP);
 pinMode(4, INPUT_PULLUP);  
}
void loop()
{
 if ( digitalRead(2) == LOW ){sms = 1;sendSMS();} // LOW / HIGH -zmiana stanu wejścia
 if ( digitalRead(3) == LOW ){sms = 3;sendSMS();} // LOW / HIGH -zmiana stanu wejścia
 if ( digitalRead(4) == LOW ){sms = 5;sendSMS();} // LOW / HIGH -zmiana stanu wejścia
}
void sendSMS()
{
 GSM.print("AT+CMGF=1\r");  
 delay(500);
 GSM.println("AT + CMGS = \"+48XXXXXXXXX\""); // X = nr. telefonu
 delay(500);
if (sms == 1)GSM.println("XX1"); // XX1 = treść wiadomości dla PinMode 2
if (sms == 3)GSM.println("XX2"); // XX2 = treść wiadomości dla PinMode 3
if (sms == 5)GSM.println("XX3"); // XX3 = treść wiadomości dla PinMode 4
if (sms == 7)GSM.println("XX4"); // XX4 = treść wiadomości dla PinMode 5
 delay(500);
GSM.println((char)26);
 delay(500);
GSM.println();
 delay(1000);
}

Problem polega na tym że stan wejścia (wiadomość sms) jest transmitowany tylko po zamknięciu, brak informacji sms o otwarciu wejścia.

Znalazłem jeden dobrze działający przykład z tym że nie mam pojęcia jak sklonować pinMode i wysyłać różne wiadomości np. z kilku czujników temperatury
Kod:
#include <SoftwareSerial.h>

SoftwareSerial GPRS(7, 8);
boolean state, lastState;

void setup()
{
 pinMode(2, INPUT_PULLUP);
 state = digitalRead(2);
 lastState = state;
 
 GPRS.begin(9600);
 Serial.begin(9600);
 
 GPRS.println("AT+CMGF=1");
 
 delay(1000);
}

void loop()
{
 while(GPRS.available()) {
   Serial.write(GPRS.read());
 }

 lastState = state;
 state = digitalRead(2);
 
 if ( state != lastState ) {
   sendSMS();
 }
 
 delay(500);
}

void sendSMS() {
 Serial.print("Switch was turned ");
 Serial.println(state ? "on" : "off");
 
 GPRS.println("AT+CMGS=\"+64123456789\"");
 
 delay(500);
 
 GPRS.print("Switch was turned ");
 GPRS.println(state ? "on" : "off");
 GPRS.write( 0x1a ); // ctrl+Z character
 
 delay(500);
}
 
Odpowiedź
#2
Witam
Kilka dni temu poskładałem podobny zestaw jak Twój, dla sprawdzenia wkleiłem Twój program na mój zestaw, ale coś mi to nie hula. Napisz mi jak ustawić te dwie zworki, które znajdują sie na płytce z SIM900A i jak wysłać sms z danego pinu (zwarcie do masy, do napięcia ? ) U mnie jak na te chwilę na Leonardo świeci L i ON a na SIM PWR, obok włącznika coś na czerwono i mryga zielona dioda, po próbach zwierania pinów do masy zero reakcji. Pisałes coś o flashu, gdzie go można zdobyć i jak załadowac ?
Bawiąc się drugim programem, przy zwarciu pinu 2 do masy pojawiają mi się komunikaty w monitorze off i on oraz mrygnie dioda TX, ale SMS'ów moduł nie posyla pod wskazany nr. Nie wiem w czym leży problem. Karta jest aktywna, ale dzwoniąc na moduł uruchamia się tylko poczta.
Potrzebuję tak zaprogramować moduł by działał podobnie jak działają gotowe modułu GPRS wykorzystywane w systemach alarmowych, około 4 wejść, które po zwarciu do masy wyślą różne komunikaty oraz 1 lub 2 wyjścia, które po otrzymaniu konkretnego sms'a podadzą napięcie.
 
Odpowiedź
#3
Witam
Zmień flasha w sim900a i powinno działać
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości