как с помощью модуля SIM800l отправить ПОСТ запрос по нужному адрес

Mitasss
Offline
Зарегистрирован: 16.02.2017

Добрый день. Собственно в название темы и задал вопрос.

А именно: как имея модуль 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;
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Практически также. Разница в том, что при POST передаётся адрес, потом отдельной строкой длина параметров (строка выглядит как Content-Length: 100500), где 100500 - длина параметров. Потом, через пустую строку (обязательно!) сами параметры также, как они передаются в строке адреса в GET.

Вот здесь всё подробно и с примерами написано.

Mitasss
Offline
Зарегистрирован: 16.02.2017

Мммм. Спасибо за статью. Но в еравно не смог реализовать. Через браузер понял можно написать на php (или html) что бы через форму вводить пост запрос (а форма с параметром ПОСТ). А вот как это сделать ардуинкой и данным модулем SIM800l. Можно пример скетча где то глянуть? Или может на основе моего скетча правки внести. 

Заранее благодарен.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Знаете как сделайте. Создайте нужную форму (с нужными именами полей и т.п.) и поставьте в ней (в форме) метод GET.

Нажмите сабмит. Все памраметры, введённые в форму появятся в командной строке после ?

Так вот Вам нжну именно эти параметры и именно в таком виде. хапомните эту строку (после ?).

Теперь на ардуине Вы пишете всё как положено для POST. В поле Content-length укажите длину запоменой строки. А после пусто строчки (где должны быть параметры) выдавайте как раз запоменную строку! Вот Вы и передали эти параметры методом POST

Попробуйте.

Потом Вы сможете формировать правильную строку параметров в ардуине динамически. Пока же попробуйте скопировать её из GET и просто передать POST'ом.

Mitasss
Offline
Зарегистрирован: 16.02.2017

Спасибо. Попробую. Отпишусь как прошли эксперименты.

Mitasss
Offline
Зарегистрирован: 16.02.2017

Добрый день еще раз. А можно все же помочь кодом для ARDUINO IDE. Так и не вышло отправить ГЕТ запрос через ардуиновский код :(

Зарание благодарен.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Странно, раньше Вы писали

Mitasss пишет:

С ГЕТ запроссом вроде бы разобрался. 

а теперь

Mitasss пишет:

Так и не вышло отправить ГЕТ запрос через ардуиновский код :(

Так, что Вам нужно-то?

Mitasss пишет:

можно все же помочь кодом для ARDUINO IDE.

Код есть в примерах библиотеки. Чем он Вас не устраивает? Не работает, что ли?

Mitasss
Offline
Зарегистрирован: 16.02.2017

В примере библиотеки ГЕТ запрос. Там принцип с точки зрения НТМЛ кода через форму то одинаковый а вот с точки зрения АРДУИНО ИДЕ не так. Точнее не выходит отправить так как в примере мы посылаем строчку в веб браузер грубоговоря а вот ПОСТ запрос через строчку адреса браузера не выйдет

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так и не понял, Вы не можете GET отправить или POST? Или оба сразу? Ну, я же дал Вам статью. Напишите вместо 

<?php
  echo

Serial.print - в остальном ничего не отличается.

Mitasss
Offline
Зарегистрирован: 16.02.2017

Тот код который я выслал посылает ГЕТ запрос (все работает). А мне нужно послать ГЕТ запрос. Где что написать для этого? Где вместо пхп написать эхо? Та статья про то как через форму вhtml послать Гёт и пост запрос. Пока я могу через ардуино просто Аля написать в строке браузера путь и нажать энтер. Пост запрос так не посылается (он в примерах и статье посылается кодом прописанных в самом файле например index.html (ну или где форма сама). У меня грубо говоря есть переменная - как мне её послать ГЕТ запросом именно через ардуину и модуль sim800l по указанному адресу? Может кто то скинуть пример кода именно для ARDUINO IDE (а не браузера или кусок кода с файла html а именно с ардуино IDE). 

Заранее блпагодарен . 

Mitasss
Offline
Зарегистрирован: 16.02.2017

Опечатки написал. Вот заново

Тот код который я выслал посылает ГЕТ запрос (все работает). А мне нужно послать ПОСТ запрос. Где что написать для этого? Где вместо пхп написать эхо? Та статья про то как через форму вhtml послать Гёт и пост запрос. Пока я могу через ардуино просто Аля написать в строке браузера путь и нажать энтер. Пост запрос так не посылается (он в примерах и статье посылается кодом прописанных в самом файле например index.html (ну или где форма сама). У меня грубо говоря есть переменная - как мне её послать ПОСТ запросом именно через ардуину и модуль sim800l по указанному адресу? Может кто то скинуть пример кода именно для ARDUINO IDE (а не браузера или кусок кода с файла html а именно с ардуино IDE). 

Заранее блпагодарен .