как с помощью модуля SIM800l отправить ПОСТ запрос по нужному адрес
- Войдите на сайт для отправки комментариев
Чт, 16/02/2017 - 23:44
Добрый день. Собственно в название темы и задал вопрос.
А именно: как имея модуль SIM800l послать пост запросс?
С ГЕТ запроссом вроде бы разобрался. А вот как передать переменную методом ГЕТ запроса?
Заранее благодарен (учитывая что в ВЕБ части я немного туговат то простите если не коректно задал вопрос)
Вот мой скетч которым я посылаю ГЕТ запрос. В нем я передаю некую data=TEST1 методом GET
А нужно сделать тоже самое только методом POST.
Помогите пожалуйста :)
#include <SoftwareSerial.h> int char_; int SensorPin = 10; int SensorState; int SensorLastState = HIGH; void setup() { delay(3000); //дадим время на инициализацию GSM модулю pinMode(SensorPin, INPUT); digitalWrite(SensorPin, HIGH); //вкл. подтягивающий резистор 20ом Serial.begin(9600); //скорость порта Serial2.begin(9600); Serial.println("GPRS test"); gprs_init(); } void loop() { gprs_send(String(1)); if (Serial2.available()) { //если GSM модуль что-то послал нам, то Serial.println(ReadGSM()); //печатаем в монитор порта пришедшую строку } delay(6000); } void gprs_init() { //Процедура начальной инициализации GSM модуля int d = 500; int ATsCount = 7; String ATs[] = { //массив АТ команд "AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", //Установка настроек подключения "AT+SAPBR=3,1,\"APN\",\"ainternet.tele2.ru\"", "AT+SAPBR=3,1,\"USER\",\"tele2\"", "AT+SAPBR=3,1,\"PWD\",\"tele2\"", "AT+SAPBR=1,1", //Устанавливаем GPRS соединение "AT+HTTPINIT", //Инициализация http сервиса "AT+HTTPPARA=\"CID\",1" //Установка CID параметра для http сессии }; int ATsDelays[] = {6, 1, 1, 1, 3, 3, 1}; //массив задержек Serial.println("GPRG init start"); for (int i = 0; i < ATsCount; i++) { Serial.println(ATs[i]); //посылаем в монитор порта Serial2.println(ATs[i]); //посылаем в GSM модуль delay(d * ATsDelays[i]); Serial.println(ReadGSM()); //показываем ответ от GSM модуля delay(d); } Serial.println("GPRG init complete"); } void gprs_send(String data) { //Процедура отправки данных на сервер //отправка данных на сайт int d = 400; Serial.println("Send start"); Serial.println("setup url"); // сейчас я посылаю TEST1 методом GET. Как мне послать значение TEST1 методом POST? Serial2.println("AT+HTTPPARA=\"URL\",\"moysaytnew.ru/gsm/insert/?data=TEST1" "\""); delay(d * 2); Serial.println(ReadGSM()); delay(d); Serial.println("GET url"); Serial2.println("AT+HTTPACTION=1"); delay(d * 2); Serial.println(ReadGSM()); delay(d); Serial.println("Send done"); } String ReadGSM() { //функция чтения данных от GSM модуля int c; String v; while (Serial2.available()) { //сохраняем входную строку в переменную v c = Serial2.read(); v += char(c); delay(10); } return v; }
Практически также. Разница в том, что при POST передаётся адрес, потом отдельной строкой длина параметров (строка выглядит как Content-Length: 100500), где 100500 - длина параметров. Потом, через пустую строку (обязательно!) сами параметры также, как они передаются в строке адреса в GET.
Вот здесь всё подробно и с примерами написано.
Мммм. Спасибо за статью. Но в еравно не смог реализовать. Через браузер понял можно написать на php (или html) что бы через форму вводить пост запрос (а форма с параметром ПОСТ). А вот как это сделать ардуинкой и данным модулем SIM800l. Можно пример скетча где то глянуть? Или может на основе моего скетча правки внести.
Заранее благодарен.
Знаете как сделайте. Создайте нужную форму (с нужными именами полей и т.п.) и поставьте в ней (в форме) метод GET.
Нажмите сабмит. Все памраметры, введённые в форму появятся в командной строке после ?
Так вот Вам нжну именно эти параметры и именно в таком виде. хапомните эту строку (после ?).
Теперь на ардуине Вы пишете всё как положено для POST. В поле Content-length укажите длину запоменой строки. А после пусто строчки (где должны быть параметры) выдавайте как раз запоменную строку! Вот Вы и передали эти параметры методом POST
Попробуйте.
Потом Вы сможете формировать правильную строку параметров в ардуине динамически. Пока же попробуйте скопировать её из GET и просто передать POST'ом.
Спасибо. Попробую. Отпишусь как прошли эксперименты.
Добрый день еще раз. А можно все же помочь кодом для ARDUINO IDE. Так и не вышло отправить ГЕТ запрос через ардуиновский код :(
Зарание благодарен.
Странно, раньше Вы писали
С ГЕТ запроссом вроде бы разобрался.
а теперь
Так и не вышло отправить ГЕТ запрос через ардуиновский код :(
Так, что Вам нужно-то?
можно все же помочь кодом для ARDUINO IDE.
Код есть в примерах библиотеки. Чем он Вас не устраивает? Не работает, что ли?
В примере библиотеки ГЕТ запрос. Там принцип с точки зрения НТМЛ кода через форму то одинаковый а вот с точки зрения АРДУИНО ИДЕ не так. Точнее не выходит отправить так как в примере мы посылаем строчку в веб браузер грубоговоря а вот ПОСТ запрос через строчку адреса браузера не выйдет
Так и не понял, Вы не можете GET отправить или POST? Или оба сразу? Ну, я же дал Вам статью. Напишите вместо
Serial.print - в остальном ничего не отличается.
Тот код который я выслал посылает ГЕТ запрос (все работает). А мне нужно послать ГЕТ запрос. Где что написать для этого? Где вместо пхп написать эхо? Та статья про то как через форму вhtml послать Гёт и пост запрос. Пока я могу через ардуино просто Аля написать в строке браузера путь и нажать энтер. Пост запрос так не посылается (он в примерах и статье посылается кодом прописанных в самом файле например index.html (ну или где форма сама). У меня грубо говоря есть переменная - как мне её послать ГЕТ запросом именно через ардуину и модуль sim800l по указанному адресу? Может кто то скинуть пример кода именно для ARDUINO IDE (а не браузера или кусок кода с файла html а именно с ардуино IDE).
Заранее блпагодарен .
Опечатки написал. Вот заново
Тот код который я выслал посылает ГЕТ запрос (все работает). А мне нужно послать ПОСТ запрос. Где что написать для этого? Где вместо пхп написать эхо? Та статья про то как через форму вhtml послать Гёт и пост запрос. Пока я могу через ардуино просто Аля написать в строке браузера путь и нажать энтер. Пост запрос так не посылается (он в примерах и статье посылается кодом прописанных в самом файле например index.html (ну или где форма сама). У меня грубо говоря есть переменная - как мне её послать ПОСТ запросом именно через ардуину и модуль sim800l по указанному адресу? Может кто то скинуть пример кода именно для ARDUINO IDE (а не браузера или кусок кода с файла html а именно с ардуино IDE).
Заранее блпагодарен .