У вас есть мои симпатии, мне потребовались недели, чтобы заставить моего Arduino говорить с net. Я думаю, что ваша проблема происходит в строке, содержащей «CSTT», которую я не думаю, что SIM800L распознает.
Попробуйте использовать приведенную ниже настройку с «SAPBR» вместо:
SoftwareSerial gprsSerial(7, 8); // working here with Arduino ports 7 and 8
void setup() {
gprsSerial.begin(19200);
Serial.begin(19200);
Serial.println("connect to GPRS");
gprsSerial.println("AT");
toSerial();
gprsSerial.println("AT+CREG?");
toSerial();
gprsSerial.println("AT+CGATT?");
toSerial();
gprsSerial.println("AT+CSQ ");
toSerial();
gprsSerial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
delay(2000);
toSerial();
gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"" + String(APN) + "\"");
delay(300);
gprsSerial.println("AT+SAPBR=3,1,\"USER\",\"" + String(USER) + "\"");
delay(300);
gprsSerial.println("AT+SAPBR=3,1,\"PWD\",\"" + String(PWD) + "\"");
delay(1000);
toSerial();
gprsSerial.println("AT+SAPBR=1,1");
delay(2000);
toSerial();
gprsSerial.println("AT+SAPBR=2,1");
delay(2000);
toSerial();
}
Ваш прогон l oop:
void loop(){
// Do your stuff
}
И ваша функция toSerial:
void toSerial()
{
delay(200);
if(gprsSerial.available()>0){
textMessage = gprsSerial.readString();
delay(100);
Serial.print(textMessage);
}
}
Ваша функция сервера вызовов должна быть такой:
void callServer() {
Serial.println("Calling server");
gprsSerial.println("AT+CCLK?");
toSerial();
gprsSerial.println("AT+HTTPINIT");
toSerial();
gprsSerial.println("AT+HTTPPARA=\"CID\",1");
toSerial();
gprsSerial.println("AT+HTTPPARA=\"URL\",\"http:[YOURURL]") // NOTE: NOT HTTPS!
delay(1000);
toSerial();
gprsSerial.println("AT+HTTPACTION=0");
delay(3000);
toSerial();
gprsSerial.println("AT+HTTPREAD");
delay(3000);
toSerial();
}