GSM SIM900A - internet PLAY - ANT - 07-03-2019
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:
Proszę o pomoc
RE: GSM SIM900A - internet PLAY - kaczakat - 07-03-2019
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.
RE: GSM SIM900A - internet PLAY - ANT - 07-03-2019
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:
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:
RE: GSM SIM900A - internet PLAY - kaczakat - 07-03-2019
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_key=KLUCZ&field1=16.6&field2=16.7&field3=16.8&field4=16.9
AT+CIPCLOSE
AT+CGATT=0 i koniec trybu GPRS
RE: GSM SIM900A - internet PLAY - ANT - 07-03-2019
Dzięki kaczakat za cenne informacje.
Będę to analizował i kombinował dalej
Póki co, to udało mi się ustanowić połączenie TCP do PLAY'a
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:
|