• 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
GSM SIM900A - internet PLAY
#1
Cześć,

Próbuję ogarnąć komunikację modułu SIM900A z internetem.
Kartę SIM w nim mam zainstalowaną z sieci PLAY.

Napisałem prosty kawałek programu do obsługi klienta WEB wzorując się na przykładach z sieci.
Niestety nie mogę przebrnąć przez zalogowanie się do sieci.

Poniżej kod:
Kod:
// GSM Web Client

#include <GSM.h>

#define PINNUMBER ""

#define GPRS_APN       "Internet"
#define GPRS_LOGIN     ""        
#define GPRS_PASSWORD  ""        

GSMClient client;
GPRS gprs;
GSM gsmAccess;

void setup()
{
 Serial.begin(9600);
 while (!Serial)
 {
   ;
 }

 Serial.println("Starting Arduino web client...");
 boolean notConnected = true;

 while(notConnected)
 {
   if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
     (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
     notConnected = false;
   else
   {
     Serial.println("Not connected!");
     delay(1000);
   }
 }

 Serial.println("Connecting...");
}

void loop()
{
}

Obrazek z działania programu w monitorze szeregowym:
[Obrazek: gsm_web_client.gif]

Proszę o pomoc Smile
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#2
Najlepiej zacząć od klepania komend AT z terminala i obserwować co modem odpowiada, jak już wiesz co się dzieje, łatwiej się domyśleć jaki jest problem w programie.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Tutaj nie jest problem z wklepywaniem komend AT.
Stworzyłem do tego celu mały program, który sprawdza połączenie i odczytuje adres IP komendami AT.
Moduł łączy się ale za każdym razem jest podawane inne IP - czy to tak ma być?

Tutaj kod programu:
Kod:
// GSM Adres IP

#include<SoftwareSerial.h>
SoftwareSerial GPRS(2, 3); //RX, TX

void setup()
{
 Serial.begin (9600);
 GPRS.begin(9600);
 delay(1000);

 GPRS.println("AT");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT + CPIN?");  
 delay(1000);  
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT + CGREG?");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT + COPS?");  
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT + CSQ");
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT + CGATT = 1");
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT + CGDCONT = 1, \"IP\", \"internet\"");  
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT + CGACT = 1, 1");
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());
 
 GPRS.println("AT + CGPADDR = 1");
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());
}

void loop()
{
}

Obraz z monitora szeregowego:
[Obrazek: gsm_adres_ip.gif]

Wracając do tematu z pierwszego mojego posta to podałem w programie następujące paramnetry z sieci PLAY:

APN ---> internet
login ---> nic
hasło ---> nic

Może tutaj jest jakiś problem z zalogowaniem?
Wpisane dane znalazłem na forum strony PLAY.

Co dalej z tym fantem?

Chciałbym uzyskać taki efekt jak na tym filmie:
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#4
No ale widzisz teraz o co mi chodziło, porównaj sobie drukowanie linijki NOT CONNECTED z drugim postem.
Zaczynam od sprawdzenia AT+CREG? , jak odpowiedź jest 1,1 to można włączyć tryb GPRS, inaczej u mnie nie działa, np. w roamingu miedzy sieciami - ja używałem karty Virgin działającej w PLAY.
Potem AT+CGATT=1, AT+CGDCONT=1,"IP","internet", potem używałem komend w zależności od potrzeb (ale już nie pamiętam co do czego potrzebne, doczytaj w PDF):
AT+CIPSHUT
AT+CIPMUX=0
AT+CGACT=1,1
AT+CIICR
AT+CIFSR
Przykładowe połączenie:
AT+CIPSTART="TCP","184.106.153.149",80 - to do thinkspeak
AT+CIPSEND
teraz wklepanie komunikatu do serwera
GET https://api.thingspeak.com/update?api_ke...ield4=16.9
AT+CIPCLOSE
AT+CGATT=0 i koniec trybu GPRS
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Dzięki kaczakat za cenne informacje.
Będę to analizował i kombinował dalej Big Grin

Póki co, to udało mi się ustanowić połączenie TCP do PLAY'a Smile

Dla potomnych zamieszczam program:
Kod:
// GSM połączenie TCP

#include<SoftwareSerial.h>
SoftwareSerial GPRS(2, 3); //RX, TX

void setup()
{
 Serial.begin (9600);
 GPRS.begin(9600);
 delay(1000);

 //Moduł SIM900 jest na starcie ustawiany komendami:

 GPRS.println("AT");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+IPR=9600");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 //GPRS.println("ATE=0");    
 //delay(1000);
 //while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CREG=0");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CMGF=1");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CMGDA=\"DEL ALL\"");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CNMI=1,1,0,0,0");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+GSMBUSY=1");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CLIP=1");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 //GPRS.println("AT+CLIPSHUT");    
 //delay(1000);
 //while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CIPMUX=0");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 //Potem następuje sekwencja połączenia:

 GPRS.println("AT+CSTT=\"internet\",\"\",\"\"");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CIICR");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CIFSR ");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());

 GPRS.println("AT+CIPSTART=TCP,\"google.pl\",80");    
 delay(1000);
 while(GPRS.available()) Serial.write(GPRS.read());
}

void loop()
{
}


Oraz widok połączenia w monitorze szeregowym:
[Obrazek: gsm_tcip.gif]
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości