Нужна помощь с отправкой GET-запроса через sim800

kost82
Offline
Зарегистрирован: 30.11.2015

Добрый день!

Второй день бьюсь с отправкой данных через sim800l, пару раз они все-таки отправлялись, но нестабильно, а сейчас вообще перестали. Смысл в том, чтобы модем просыпался только для передачи данных, а все оставшееся время спал (в дальнейшем буду усыплять и ардуину, но после того как налажу передачу данных). Кто работал с этой железкой, подскажите что я делаю не так? Вот скетч:

#include <SoftwareSerial.h>

#define DTR_PIN 4 //пин для включения GSM-передатчика

SoftwareSerial sim800Serial(5, 6); // RX | TX

void readSerial() {
  while (sim800Serial.available()) {
    Serial.write(sim800Serial.read());
  }
}

void startSim800() {
  delay(7000);
  Serial.write("Lets start");
  sim800Serial.println("AT+IPR=9600");//скорость обмена
  sim800Serial.println("AT+CLTS=1");//получение времени по сети
  sim800Serial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); //CONTYPE – тип подключения GPRS или CSD
  readSerial();
  delay(3000);
  sim800Serial.println("AT+SAPBR=3,1,\"APN\",\"internet.yota\""); //APN – точка подключения
  readSerial();
delay(500);
  sim800Serial.println("AT+SAPBR=3,1,\"USER\",\"\"");
  readSerial();
delay(500);
  sim800Serial.println("AT+SAPBR=3,1,\"PWD\",\"\"");
  readSerial();
delay(500);
  sim800Serial.println("AT+CSCLK=1"); // включение режима энергосбережения
  sim800Serial.println("AT&W");//сохранение настроек
}

void setup() {
  pinMode(DTR_PIN, OUTPUT);
  digitalWrite(DTR_PIN, LOW);
  Serial.begin(9600);
  sim800Serial.begin(9600);
  startSim800();
}

void loop() {
  Serial.println("Begin");
  digitalWrite(DTR_PIN, LOW);
  delay(150);
  sim800Serial.println("AT+SAPBR=1,1"); //установка GPRS связи
  readSerial();
  delay(2000);
  sim800Serial.println("AT+SAPBR=2,1"); //IP-адрес
  readSerial();
  delay(1000);
  sim800Serial.println("AT+HTTPINIT"); //Инициализация http сервиса
  readSerial();
  delay(500);
  sim800Serial.println("AT+HTTPPARA=\"CID\",1"); //Установка CID параметра для http сессии
  readSerial();
  delay(500);
  sim800Serial.print("AT+HTTPPARA=\"URL\",\"http://xxx.yyy/save.php?gl=123&st=456&bl=789&id=2019\""); //get-запрос
  delay(500);
  readSerial();
  sim800Serial.println("AT+HTTPACTION=0"); //старт сессии (передача запроса)
  readSerial();
  delay(1000);
  sim800Serial.println("AT+HTTPREAD");
  readSerial();
  delay(3000);
  sim800Serial.println("AT+HTTPTERM"); //завершение сессии
  readSerial();
  delay(3000);
  sim800Serial.println("AT+SAPBR=0,1"); //завершение GPRS соединения
  readSerial();
  delay(1000);
  digitalWrite(DTR_PIN, HIGH);
  Serial.println("End");
  delay(60000);
}

Судя по выводу в монитор порта - железка в сети регистрируется, получает ip-адрес (каждый раз разный), но выдает ошибку при отправке

AT+HTTPACTION=0  
+CME ERROR: invalid index

Нигде не смог найти вразумительного ответа что бы это значило.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Попробуйте для теста сократить URL до 125 символов.

kost82
Offline
Зарегистрирован: 30.11.2015

Прошу прощения, не посмотрел как вставился код, текстовый редактор обернул урл в ссылку с атрибутами. В коде на самом деле этого нет. Отредактировать код я сейчас не могу. Урл получается длиной около 60 символов.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Хм....что то мне подсказывает что не хватает команд для инициализации модема, но точный список только завтра посмотрю.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Вот отсюда до 108 строки попробуйте в setup при включении прописать команды инициализации

http://arduino.ru/forum/programmirovanie/snova-mqtt-1#comment-411540

kost82
Offline
Зарегистрирован: 30.11.2015

Спасибо, попробую.

andycat пишет:
смотрим кто оператор
+COPS: 0,0,"MOTIV"

Свердловская область? Привет, земляк! :-)

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Не)
Это симка теле2 так отвечает MOTIV