как с помощью модуля 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).
Заранее блпагодарен .