Отправка переменной в IFTTT через ESP32 с помощью Асинхронного веб-сервера
Я пытался отправить три переменные в IFTTT с моего ESP32, используя асинхронный веб-сервер. Однако я не мог установить "URL", который должен был быть ответом, который вызовет мой IFTTT. Вот мой код:
server.on("/ifttt", HTTP_GET, [](AsyncWebServerRequest *request){
String jsonObject = "{\"value1\":\"" + Global_T + "\"" + ",\"value2\":\"" + Global_H + "\"" + ",\"value3\":\"" + Global_K + "\"}";
AsyncWebServerResponse *response = request->beginResponse(200, "application/json", jsonObject);
response ->addHeader("Host", server_ifttt);
request ->send(response);
});
Он должен срабатывать каждый фиксированный интервал, который я установил, и войти сюда, чтобы отправить его в IFTTT, но это так выглядит. Я не уверен, где я должен добавить в "URL", чтобы ответ мог быть направлен на IFTTT.
@Kai Liang Chng, 👍2
Обсуждение1 ответ
Как уже было сказано в комментариях, вам нужен код клиента - Вот готовы использовать блоки для вашего сценария - никогда не использовать класс String , если вы хотите иметь стабильную работу устройств Интернета вещей, поэтому определение глобальных массивах char (составлена для прошивки) и сохранить фрагментации кучи, как минимум, код прокомментирован, чтобы вы начали меняться с вашими потребностями:
/* Ваши константы */
#define READ_THIS_PIN 4
const char MakerIFTTT_Key[] = "r8X-blahblahYourKeyGoesHere";
const char MakerIFTTT_Event[] = "stack_exchange_example";
/* Определите глобальные массивы символов, чтобы избавиться от класса string */
char numBuf[20]; // We "just know" this is big enough for (un)signed longs
char postRequest[256]; // Hand-calculated to be big enough (size to your needs)
/* Вспомогательные функции для построения данных POST
добавьте строку или int в буфер, верните результирующий конец строки */
char *appendStr(char *tempChr, char *s) {
while ((*tempChr++ = *s++))
;
return tempChr-1;
}
char *appendUl(char *tempChr, unsigned long u) {
return appendStr(tempChr, ultoa(u, numBuf, 10));
}
/*
Это вызывается один раз за итерацию, чтобы прочитать pin
и отправить сообщение для запуска события IFTTT/Maker
*/
void updateEvent() {
WiFiClient client;
/* Подключение к серверу событий Maker */
client.connect("maker.ifttt.com", 80);
/* Создать запрос на публикацию */
postRequest[0] = {'\0'}; /* Reset char array */
char *p = postRequest;
p = appendStr(p, "POST /trigger/");
p = appendStr(p, "MakerIFTTT_Event");
p = appendStr(p, "/with/key/");
p = appendStr(p, "MakerIFTTT_Key");
p = appendStr(p, " HTTP/1.1\r\n");
p = appendStr(p, "Host: maker.ifttt.com\r\n");
p = appendStr(p, "Content-Type: application/json\r\n");
p = appendStr(p, "Content-Length: ");
/* Нам нужно помнить, куда будет идти длина контента, которая: */
char *contentLengthHere = p;
/* Это всегда две цифры, поэтому зарезервируйте для них место (NN) */
p = appendStr(p, "NN\r\n");
/* Конец заголовков */
p = appendStr(p, "\r\n");
/* Создайте JSON; запомните, с чего мы начали, чтобы мы знали длину */
char *jsonStart = p;
// В этом примере сообщается, что pin, время безотказной работы и "стек приветствий" изменяются в соответствии с вашими потребностями */
p = appendStr(p, "{\"value1\":\"");
p = appendUl(p, 12); //analogRead(READ_THIS_PIN));
p = appendStr(p, "\",\"value2\":\"");
p = appendUl(p, millis());
p = appendStr(p, "\",\"value3\":\"");
p = appendStr(p, "hello, stack!");
p = appendStr(p, "\"}");
/* Вернитесь и заполните длину JSON
мы просто знаем, что это не более 2 цифр (и нужно заполнить обе цифры) */
uint8_t i = strlen(jsonStart);
contentLengthHere[0] = '0' + (i/10);
contentLengthHere[1] = '0' + (i%10);
// наконец, мы готовы отправить СООБЩЕНИЕ на сервер!
client.print(postRequest);
client.stop();
}
- Точка доступа ESP32 и веб сервер HTTP, как отправить несколько параметров?
- EspAsyncWebServer обрабатывает HTTPS в HTTP
- Использование ESPAsyncWebServer.h с ArduinoJson версии 6 для транзакций мастер-клиент
- HTTP_GET не уточняется в области применения
- ESP32 в Arduino-IDE с FS.h и SPIFFS
- Почему функция server.on() из "ESPAsyncWebServer.h" выполняется на стороне setup(), а не на стороне loop()?
- Интернет-сервер Arduino IDE + ESP32 — как перенаправить на root после нажатия кнопки
- Автоматическая веб-страница ESP32 AP
разве вы не должны использовать веб-клиент для отправки данных в IFTTT?, @jsotola
Извини, я был немного новичком в этом деле. Это означает, что я не могу отправлять данные в IFTTT, если использую асинхронный веб-сервер?, @Kai Liang Chng
нет, это не то, что я имею в виду ... у вас может быть код веб-сервера, но вам также нужен код веб-клиента для подключения к серверу IFTTT, @jsotola