Arduino Polska Forum

Pełna wersja: Problem z komunikacją pomiędzy arduino a SIM800L
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam,
Proszę Was o pomoc w rozwiązaniu mojego problemu.
Mianowice, chciałem zrobić prosty alarm wysyłający SMS.
Jednak jak się okazało używając różnych skryptów, nawet przykładów z arduino, moduł nic nie robi.
Sim800l ma odrębne zasilanie (widać na foto) napięcie ustawione jest na ok. 4,1V.
Arduino zasilam przez USB.
Próbowałem na Arduino Uno i Arduino Nano i mam wrażenie że jest problem z komunikacją przez RX TX.
Sposób podłączenia widać na zamieszczonych fotkach.
do komunikacji używałem biblioteki <SoftwareSerial.h> i różnych portów 10,11 ; 2,3.
Cały czas się nic nie dzieje

Jeżeli chodzi o przykładowe kody:
Kod:
#include <SoftwareSerial.h>
SoftwareSerial telefon(10, 11); //piny do których podłączamy moduł telefonu TX/RX

char*numery[2]={"+48881946105","+48881946103"};
int i=0;


void setup() {

pinMode(7, INPUT_PULLUP); //przycisk
telefon.begin(9600);

}

void loop(){


//if (digitalRead(7) == LOW){     //jeżeli wciśnięto przycisk

for(i=0;i<2;i++)

telefon.write("AT+CMGF=1\r\n"); //przejście w tryb SMS
delay(150);
telefon.write("AT+CMGS=\"+48881946111"); //nr odbiorcy
delay(150);
telefon.write(numery[i]);
telefon.write("\"\r\n");
delay(150);
telefon.write("ALARM ALARM ALARM\r\n");//treść sms'a
delay(150);
telefon.write((char)26);         //koniec wiadomości
delay(150);
//}

}

Drugi przykład:
Kod:
#include <SoftwareSerial.h>
SoftwareSerial sim(10, 11);

String number = "+48881946904"; // +880 is the country code

void setup() {
  Serial.begin(9600);
  Serial.println("Wait few seconds...");
  delay(5000);
  Serial.println("Sistem Started...");
  sim.begin(9600);
  delay(1000);
  Serial.println("Type c to make a call and s to send an SMS");
}

void loop() {
  if (Serial.available() > 0)
    switch (Serial.read())
    {
      case 'c':
        callNumber();
        break;
      case 's':
        SendMessage();
        break;
    }
  if (sim.available() > 0)
    Serial.write(sim.read());
}

void SendMessage()
{
  sim.println("AT+CMGF=1");
  delay(1000);
  sim.println("AT+CMGS=\"" + number + "\"\r");
  delay(1000);
  String SMS = "Hi Razib, How are you?";
  sim.println(SMS);
  delay(100);
  sim.println((char)26);
  delay(1000);
}

void callNumber() {
  sim.print (F("ATD"));
  sim.print (number);
  sim.print (F(";\r\n"));
}

Zrobiłem już kod do alarmu, ale nie działa.
Kod:
#include <SoftwareSerial.h>
//piny na których jest podłączona komunikacja z modułem GSM
SoftwareSerial gsm800(11, 12);
int czujnik = 2;

void setup() {
  Serial.begin(9600);
  //definiujemy PIN, gdzie podłączamy czuję ruchu - nie wszystkie złącza potrafią wybudzić urządzenie

  pinMode(czujnik, INPUT);

  //definiujemy przerwanie, obsługujące alarm
  //attachInterrupt(digitalPinToInterrupt(2),alarm,RISING);

  while (!Serial);
  gsm800.begin(9600);
  delay(100);
  // Jeśli używasz blokady karty SIM, poniższa komenda ją odblokuje
  // gsm800.println("AT+CPIN=\"xxxx\"");
  // delay(1000);
  gsm800.write("AT+CMGF=1\r\n");
  delay(100);
  //wpisujemy numer telefonu pod który nasze urządzenie ma wysyłaś SMS
  gsm800.write("AT+CMGS=\"+48506380405\"\r\n");
  delay(100);
  //treść wiadomości podczas startu systemu, ma na celu zweryfikowanie czy całość działa poprawnie
  gsm800.write("START SYSTEMU");
  delay(100);
  gsm800.write((char)26);
  delay(100);
}

void alarm() {
  gsm800.write("AT+CMGF=1\r\n");
  delay(1000);
  //wpisujemy numer telefonu pod który nasze urządzenie ma wysyłaś SMS
  gsm800.write("AT+CMGS=\"+48506380405\"\r\n");
  delay(1000);
  //treść wiadomości w przypadku alarmu
  gsm800.write("ALARM W GARAŻU");
  delay(1000);
  gsm800.write((char)26);
  delay(1000);
  gsm800.write("AT+ATD=\"+48506380405\"\r\n");
  delay(15000);
  gsm800.write("AT+ATH");
}

void loop() {
  if (digitalRead(czujnik) == HIGH)
  {
    alarm();
  }
  delay(5000);
}

Powiem szczerze, że jestem już blisko poddania się, próbowałem na rózne sposoby i cały czas nic.
Bardzo proszę o radę.