Отправить HTTP get запрос от GSM SIM800c и Arduino

Я пытаюсь отправить запрос Get с моего GSM модуля, но после подключения к серверу он ничего не отвечает

#include <SoftwareSerial.h>
SoftwareSerial myGsm(2,3);
void setup()
{
myGsm.begin(9600);
Serial.begin(9600);
delay(500);
myGsm.println("AT+CGATT=1");
delay(200);
printSerialData();
myGsm.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");//setting the SAPBR,connection type is GPRS
delay(1000);
printSerialData();
myGsm.println("AT+SAPBR=3,1,\"APN\",\"wap.mobilinkworld.com\"");//setting the APN,2nd parameter empty works for all networks
delay(5000);
printSerialData();
myGsm.println();
myGsm.println("AT+SAPBR=1,1");
delay(10000);
printSerialData();
myGsm.println();
myGsm.println("AT+SAPBR=2,1");
delay(10000);
printSerialData();
myGsm.println("AT+HTTPINIT"); 
delay(2000);
printSerialData();
myGsm.println("AT+HTTPPARA=\"URL\",\"http://sensor.somee.com/api/Data/GetData?SensorID=1\"");// setting the httppara,
delay(1000);
printSerialData();
myGsm.println();
delay(10000);//the delay is important if the return datas are very large, the time required longer.
printSerialData();
delay(9000);
printSerialData();
delay(1000);
Serial.println("done ");
printSerialData();
}
void loop()
{
}
void printSerialData()
{
while(myGsm.available()!=0)
Serial.write(myGsm.read());
}

а Выход есть

AT+CGATT=1

OK
AT+SAPBR=3,1,"CONTYPE","GPRS"

OK
AT+SAPBR=3,1,"APN","wap.mobilinkworld.com"

OK

AT+SAPBR=1,1

OK

AT+SAPBR=2,1

+SAPBR: 1,1,"10.209.122.68"

OK
AT+HTTPINIT

OK
AT+HTTPPARA="URL","http://sensor.somee.com/api/Data/GetData?Sen
done 

, 👍1

Обсуждение

Могли бы вы решить эту проблему?, @Patzu


2 ответа


-1

Вы должны поместить код для связи (что является повторяющейся задачей) в цикл (и сделать это без задержки блокировки ()). Использование задержки останавливает процессор, поэтому все, что поступает в буфер, вероятно, не обрабатывается.
Прочитайте о разнице в размещении кода в настройке и цикле в базовой документации Arduino.
Никогда не используйте задержку в сценариях связи (за исключением инициализации оборудования при настройке) см. Пример blinkwithoutdelay в ArduinoIDE

,

Вызов веб-сервиса в цикле :| ?! Что ты имеешь в виду?, @Patzu


1

Вы еще не проинструктировали модуль сделать запрос. С помощью команды AT+HTTPPARA вы просто настраиваете запрос, который хотите сделать. В вашем случае вы просто указали URL, который хотите вызвать. Далее вы должны отправить

AT+HTTPACTION=1 

чтобы сделать фактический запрос с помощью метода HTTP GET, а затем вы можете прочитать ответ HTTP с помощью

AT+HTTPREAD 

Имейте в виду, что после AT+HTTPACTION вы получите незапрошенный код результата в формате

+HTTPACTION: <Method>,<StatusCode>,<DataLen>

это произойдет после того, как модуль фактически выполнит запрос и получит ответ.

,