Как отправить int массив с запросом ESP8266 http post?
Я читаю UID RFID-карт с помощью ESP8266 и пытаюсь отправить эту информацию на мой веб-сервер, размещенный на Raspberry Pi. В настоящее время я храню
UID
в массиве int, но функция http.POST();
принимает строковый ввод. Я попытался сложить каждую цифру UID вместе, но это тоже не работает.
Как бы вы отправили uid в запросе?
Мой код:
/*
Created by TheCircuit
*/
#define SS_PIN 4 //D2
#define RST_PIN 5 //D1
#include <SPI.h>
#include <MFRC522.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
const char* ssid = "****";
const char* password = "****";
const char* serverName = "****";
int RELAY = 2; //D6
int UIDs[1][4] = {
{83, 111, 39, 47}
};
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создать экземпляр MFRC522.
void setup()
{
Serial.begin(9600); // Инициировать последовательную связь
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, HIGH);
WiFi.begin(ssid, password);
Serial.println("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
}
boolean compareUIDs(int a[4], int b[4]) {
for (int i = 0; i < 4; i++) {
if (a[i] != b[i]) return false;
}
return true;
}
void loop()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
// mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
int UID[4];
for (int i = 0; i < 4; i++) {
UID[i] = mfrc522.uid.uidByte[i];
}
Serial.print(UID[0]);
Serial.print(" ");
Serial.print(UID[1]);
Serial.print(" ");
Serial.print(UID[2]);
Serial.print(" ");
Serial.print(UID[3]);
Serial.println();
for (int i = 0; i < sizeof(UIDs); i++) {
boolean success = compareUIDs(UIDs[i], UID);
if (success) {
Serial.println("ACCESS GRANTED");
digitalWrite(RELAY, LOW);
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// Ваше доменное имя с URL-адресом или IP-адрес с путем
http.begin(serverName);
// заголовок content-type
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST("UID GOES HERE");
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
// Free resources
http.end();
}
delay(2000);
digitalWrite(RELAY, HIGH);
return;
}
}
}
@leventecsoba, 👍0
Обсуждение1 ответ
Вы могли бы использовать (потрясающую) библиотеку ArduinoJson, но, скорее всего, это перебор для этого приложения. Я нашел более полезным разбор JSON, чем его построение.
Вы можете просто распечатать в буфер и СООБЩЕНИЕ, которое:
char payload[MAX_PAYLOAD];
sprintf(payload, "{\"uid1\":%d,\"uid2\":%d,\"uid3\":%d,\"uid4\":%d}", UID[0], UID[1], UID[2], UID[3]);
http.POST(payload);
Вы бы #определили MAX_PAYLOAD
со значением, которое будет достаточным для хранения всей информации.
Обратите внимание, что sprintf
позволяет использовать любые параметры форматирования (например, шестнадцатеричный и т. Д.).
Если вы хотите отправить его в виде массива:
sprintf(payload, "{\"uid\":[%d,%d,%d,%d]}", UID[0], UID[1], UID[2], UID[3]);
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Как составить URL-адрес HTTP-запроса GET с параметрами ключ/значение
- Как добавить в массив из String в ардуино?
- ESP8266 Ошибка неверного запроса 400
- Отправка данных из ESP8266 в PHP
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Проанализировать большой ответ json с помощью ESP8266
- Проблема «Не найдена плата PN53x» Считыватель карт Arduino NFC
Вы кодируете его в некотором строковом формате, который ожидает веб-сайт на удаленном конце. Либо в виде списка параметров HTTP, либо в виде строки массива JSON, либо как угодно., @Majenko
@Majenko не могли бы вы дать мне ссылку или краткое объяснение, чтобы начать работу над этим?, @leventecsoba
Похоже, что вы уже решили (или наложили на вас) JSON. Поэтому самый простой метод-использовать ArduinoJson (https://arduinojson.org/) чтобы создать для вас строку JSON., @Majenko
мой StreamLib имеет CStringBuilder для "печати" в строку так же, как вы печатаете в Serial, @Juraj
вы можете отправить его как целое число ... этот UID в вашем коде-536f272f, @jsotola