Сообщение HTTP через GPRS (SIM808) в приложении логики конечной точки HTTP Azure не работает.
Я использую SIM808 с atmega2560.
Я настроил конечную точку в Azure, и это работает, когда я пытаюсь отправить сообщение http через почтальона и/или онлайн-инструмент публикации HTTP (в результате я получаю 202 и вижу данные, поступающие в Azure)
Я хочу отправить пакет json в конечную точку HTTP Azure (умное приложение) с помощью функции httpPOST в библиотеке SIMCom от itead.
Я подключаюсь к сети:
логи (все что написано в GSM я распечатал):
AT+CIFSR
DB:STARTING NEW CONNECTION
AT+CIPSHUT
DB:SHUTTED OK
AT+CSTT="provider.net","","" DB:APN OK
AT+CIICR
DB:CONNECTION OK
AT+CIFSR
DB:ASSIGNED AN IP
GPRS status=ATTACHED
AT+CIPSTART="TCP","prod-13.westeurope.logic.azure.com",443
DB:RECVD CMD
DB:OK TCP
Затем вызовите функцию httpPost из библиотеки со следующими переменными:
const char server[35] = "prod-13.westeurope.logic.azure.com";
const int port = 443;
const char path[200] = "/workflows/someazureID/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=someazuretoken";
const char parameters[100] = "{\"device\":\"alive\",\"timestamp\":\"09270845\"}";
Часть функции httpPost из библиотеки для отправки данных
int InetGSM::httpPOST(const char* server, int port, const char* path, const char* parameters, char* result, int resultlength)
....
gsm.SimpleWrite("POST ");
gsm.SimpleWrite(path);
gsm.SimpleWrite(" HTTP/1.1\r\nHost: ");
gsm.SimpleWrite(server);
gsm.SimpleWrite("\r\n");
gsm.SimpleWrite("User-Agent: Arduino\r\n");
gsm.SimpleWrite("Content-Type: application/json\r\n");
gsm.SimpleWrite("Content-Length: ");
itoa(strlen(parameters),itoaBuffer,10);
gsm.SimpleWrite(itoaBuffer);
gsm.SimpleWrite("\r\n\r\n");
gsm.SimpleWrite(parameters);
gsm.SimpleWrite("\r\n\r\n");
gsm.SimpleWrite(end_c);
....
Что дает такой вывод на последовательном мониторе (все что написано в GSM я распечатал):
AT+CIPSEND
DB:>
POST /workflows/someazureID/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=someazuretoken HTTP/1.1
Host: prod-13.westeurope.logic.azure.com
User-Agent: Arduino
Content-Type: application/json
Content-Length: 55
{"device":"alive","timestamp":"09270845"}
DB:SENT
И затем он ждет ответа:
Starting read..
Waiting for Data............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
CLOSED
Done..
response:
10
CLOSED
Какой тайм-аут, я думаю.
И я не вижу, чтобы в Azure ничего появилось.
(Я получаю данные, когда пытаюсь выполнить httpGet на случайном сайте. Значит, оборудование, SIM-карта и сеть работают нормально, я думаю)
Есть идеи? спасибо!
@Jeroen, 👍0
Обсуждение1 ответ
Комментарии Юрая направили меня на правильный путь: для SSL вам нужно сделать больше, чем просто выбрать порт.
Я немного поискал и заставил его работать, используя другую библиотеку GSM, которая также поддерживает SSL: tinyGSM
в сочетании с ArduinoHttpClient
Йерун
РЕДАКТИРОВАТЬ: Это работает, но есть большой недостаток. Похоже, есть большие накладные расходы: каждое сообщение использует 13 КБ данных...? Я подозреваю, что это происходит из данных, возвращаемых конечной точкой. Это слишком сильно по сравнению с GPRS, поэтому теперь изучаем MQTT.
- Как публиковать запросы HTTP POST на моем веб-сайте?
- Почтовый запрос HTTP в формате JSON с использованием модуля SIM900
- Как правильно отправлять данные через http с помощью sim908?
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Как составить URL-адрес HTTP-запроса GET с параметрами ключ/значение
- ESP8266 Ошибка неверного запроса 400
- GSM-модуль Sim800l не может подключить данные gprs
- Более быстрый способ анализа HTTP-ответа в Arduino
разве Azure не использует https?, @Juraj
да, я подключаюсь к порту 443 'const char server[35] = "prod-13.westeurope.logic.azure.com"; const int порт = 443;' Но, честно говоря, я никогда этого не делал, возможно, я что-то забыл/упустил., @Jeroen
Я не знаю AT-команд для модуля GSM, но не похоже, что вы справитесь с SSL., @Juraj