Нужна помощь с отправкой GET-запроса через sim800
- Войдите на сайт для отправки комментариев
Вс, 27/01/2019 - 02:10
Добрый день!
Второй день бьюсь с отправкой данных через 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
Нигде не смог найти вразумительного ответа что бы это значило.
Попробуйте для теста сократить URL до 125 символов.
Прошу прощения, не посмотрел как вставился код, текстовый редактор обернул урл в ссылку с атрибутами. В коде на самом деле этого нет. Отредактировать код я сейчас не могу. Урл получается длиной около 60 символов.
Хм....что то мне подсказывает что не хватает команд для инициализации модема, но точный список только завтра посмотрю.
Вот отсюда до 108 строки попробуйте в setup при включении прописать команды инициализации
http://arduino.ru/forum/programmirovanie/snova-mqtt-1#comment-411540
Спасибо, попробую.
+COPS: 0,0,"MOTIV"
Свердловская область? Привет, земляк! :-)
Не)
Это симка теле2 так отвечает MOTIV