首页 前端知识 【花雕学编程】Arduino JSON 之POST请求接收JSON数据

【花雕学编程】Arduino JSON 之POST请求接收JSON数据

2025-03-20 12:03:57 前端知识 前端哥 895 653 我要收藏

在这里插入图片描述

Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。

Arduino的特点是:
1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。
2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。
3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。
4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。
5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

在这里插入图片描述
Arduino JSON 的全面详细科学解释

  1. Arduino 概述
    Arduino 是一个开源的电子原型平台,基于易用的硬件和软件。它由硬件(各种型号的 Arduino 板)和软件(Arduino IDE)组成,主要用于快速开发交互式项目。

  2. JSON 概述
    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于 JavaScript 的一个子集,但独立于语言,广泛用于 Web 应用和 IoT 设备之间的数据交换。

  3. Arduino JSON 的定义
    Arduino JSON 是指在 Arduino 平台上使用 JSON 格式进行数据交换和处理。通过 Arduino JSON 库,开发者可以轻松地在 Arduino 项目中解析和生成 JSON 数据。Arduino JSON是一个用于处理JSON数据的Arduino库,适用于嵌入式C++项目。它支持JSON的序列化和反序列化,能够在有限的内存环境中高效地解析和生成JSON数据。

  4. 关键特点:
    简单的API:Arduino JSON提供了直观的语法,使开发者能够轻松地处理对象和数组。
    序列化和反序列化:支持将JSON数据转换为字符串(序列化)和将字符串转换为JSON数据(反序列化)。
    输入过滤:可以过滤大型输入,只保留与应用程序相关的字段,从而节省内存。
    流式处理:支持从输入流(如串行端口、以太网连接等)中解析JSON数据。
    缩进输出:可以生成紧凑的JSON文档或美化的JSON文档。
    闪存字符串:可以直接使用存储在程序内存中的字符串(PROGMEM)。
    字符串去重:去重JSON文档中的字符串,减少内存消耗。
    隐式或显式转换:支持两种编码风格,可以选择隐式或显式转换。

  5. 主要功能
    数据解析: 从 JSON 字符串中提取数据。
    数据生成: 将数据转换为 JSON 格式的字符串。
    数据交换: 通过 JSON 格式与外部服务进行数据交换。

  6. 技术实现
    库支持: 使用 Arduino JSON 库(如 ArduinoJson)来解析和生成 JSON 数据。
    数据格式: JSON 数据格式包括对象(用花括号 {} 表示)和数组(用方括号 [] 表示),键值对用冒号 : 分隔。
    数据处理: 在 Arduino 上处理 JSON 数据,执行相应操作。

  7. 应用场景
    物联网(IoT): 与云平台进行数据交换。
    Web 服务: 与 Web API 进行数据交互。
    传感器数据: 处理和传输传感器数据。
    配置文件: 存储和读取配置信息。

  8. 开发工具
    Arduino IDE: 编写和上传代码到 Arduino 板。
    ArduinoJson 库: 提供 JSON 解析和生成的库。
    网络模块: 如 ESP8266、ESP32,用于连接互联网。

  9. 优势与挑战
    优势:
    轻量级: JSON 格式简洁,易于解析和生成。
    跨平台: 独立于语言,适用于多种开发环境。
    灵活性: 支持复杂的数据结构。
    挑战:
    内存限制: Arduino 内存有限,处理大 JSON 数据需优化。
    性能限制: 解析和生成 JSON 数据可能占用较多资源。
    数据安全: 需要确保数据完整性和安全性。

  10. 未来发展方向
    优化性能: 提高 JSON 解析和生成的效率。
    扩展功能: 支持更多的 JSON 特性(如 JSON Schema)。
    增强安全性: 提供数据加密和验证机制。

在这里插入图片描述

一、主要特点
(一)数据传输的标准化与规范性
​统一的数据格式:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有简洁、清晰的结构。在通过POST请求接收JSON数据时,遵循统一的JSON格式规范,使得数据的组织和表示方式标准化。这有助于不同设备、系统之间的数据交互和理解,降低了数据处理的复杂性。例如,一个包含传感器数据的JSON对象可以统一表示为 {“temperature”: 25.5, “humidity”: 60},其中键值对的形式清晰地表明了数据的含义。
​易于解析和处理:由于JSON格式的规范性,Arduino在接收到JSON数据后,可以使用专门的JSON解析库(如ArduinoJson)轻松地将JSON字符串解析为程序中的数据结构(如对象、数组等)。这使得开发者能够方便地访问和操作数据,无需手动解析复杂的字符串格式,提高了开发效率。
(二)支持复杂数据结构的传输
​嵌套结构和数组:JSON允许数据以嵌套的结构和数组形式存在,这使得它可以有效地表示复杂的数据关系。例如,在一个智能家居系统中,接收到的JSON数据可能包含多个房间的信息,每个房间又有多个设备的信息,这种嵌套结构可以通过JSON轻松表示,如:

{
"rooms": [
{
"name": "客厅",
"devices": [
{
"name": "灯",
"status": "开启"
},
{
"name": "电视",
"status": "关闭"
}
]
},
{
"name": "卧室",
"devices": [
{
"name": "空调",
"status": "制冷"
}
]
}
]
}

​丰富的数据类型支持:JSON支持多种数据类型,包括字符串、数字、布尔值、数组和对象等。这使得在传输不同类型的数据时更加灵活,能够满足各种应用场景的需求。例如,传感器数据可以是数字类型,设备状态可以用布尔值表示,设备名称则使用字符串描述。
(三)与网络通信的紧密结合
​基于HTTP协议的传输:POST请求是HTTP协议中的一种常用方法,用于向服务器提交数据。通过POST请求接收JSON数据,意味着可以利用现有的网络通信基础设施和协议栈,实现Arduino设备与其他服务器或设备之间的数据交互。这种紧密结合使得数据的传输更加可靠和高效,并且可以方便地集成到各种网络应用中。
​可扩展性和兼容性:由于HTTP协议的广泛应用和标准化,基于POST请求接收JSON数据的方式具有良好的可扩展性和兼容性。它可以与各种服务器端技术(如Node.js、Python Flask等)以及不同的客户端设备(如手机、电脑等)进行无缝对接,为构建复杂的物联网应用提供了坚实的基础。

二、应用场景
(一)物联网设备数据上传
​传感器数据监测:在物联网应用中,大量的传感器需要将采集到的数据上传到服务器进行分析和处理。通过POST请求发送包含JSON格式数据的请求,可以将传感器数据(如温度、湿度、光照强度等)以及其他相关信息(如设备ID、时间戳等)一并发送给服务器。服务器接收到数据后,可以进行实时监测、数据分析和存储等操作。例如,在一个智能农业系统中,分布在农田中的各种传感器可以通过Arduino设备将采集到的数据以JSON格式通过POST请求发送到服务器,服务器根据这些数据进行农作物生长环境的监测和管理。
​设备状态报告:物联网设备需要定期向服务器报告自身的状态信息,以便用户或管理系统了解设备的运行情况。使用POST请求发送JSON数据可以方便地将设备的状态信息(如工作状态、故障信息等)发送给服务器。例如,在一个智能家居系统中,智能插座、智能灯泡等设备可以通过Arduino定期发送包含自身状态信息的JSON数据到服务器,用户可以通过手机应用查看设备的状态。
(二)远程控制与配置
​设备参数设置:用户可以通过服务器向Arduino设备发送包含配置参数的JSON数据,实现对设备的远程控制和配置。例如,在一个智能灌溉系统中,用户可以通过手机应用或网页界面设置灌溉时间、水量等参数,这些参数以JSON格式通过POST请求发送到Arduino控制器,控制器根据接收到的参数调整灌溉系统的运行。
​固件升级与维护:在进行Arduino设备的固件升级或维护时,也可以利用POST请求接收JSON数据来获取升级包的相关信息或执行特定的维护任务。例如,服务器可以向设备发送包含固件版本号、下载地址等信息的JSON数据,设备接收到后进行固件升级操作。
(三)与第三方服务集成
​数据共享与分析:Arduino设备可以通过POST请求将数据发送到第三方数据分析平台或云服务提供商,利用其强大的数据处理和分析能力挖掘数据的价值。例如,将环境监测数据发送到专业的数据分析平台,进行数据可视化和趋势预测,为用户提供更有价值的信息。
​接入智能家居生态系统:在智能家居领域,不同的设备和系统需要相互协作和互联互通。通过POST请求接收JSON数据,Arduino设备可以接入各种智能家居生态系统,与其他设备进行数据交互和协同工作。例如,与智能音箱、智能门锁等设备进行联动,实现更加智能化的家居控制。

三、需要注意的事项
(一)服务器端配置与接口设计
​正确的URL和端口号:在Arduino代码中,需要确保正确设置服务器的URL和端口号,以便能够准确地发送POST请求。如果URL或端口号错误,请求将无法到达服务器,导致数据传输失败。
​接口兼容性:服务器端的接口需要能够正确处理接收到的POST请求和JSON数据。这包括对请求头的解析、JSON数据的验证和处理等。在设计服务器端接口时,要考虑不同客户端设备发送的数据格式和规范,确保接口的兼容性和稳定性。
(二)JSON数据的构建与发送
​数据格式的正确性:在Arduino中构建JSON数据时,必须严格遵循JSON的语法规则。例如,键值对中的键必须是字符串,并且要用双引号括起来;对象的属性之间要用逗号分隔;数组中的元素也要用逗号分隔等。任何语法错误都可能导致服务器无法正确解析数据。
​数据大小的限制:要注意JSON数据的大小,避免发送过大的数据包。一些服务器或网络环境可能对请求的数据大小有限制,如果数据过大,可能会导致请求失败或被截断。在构建JSON数据时,应尽量精简数据内容,只包含必要的信息。
(三)网络连接与稳定性
​稳定的网络连接:POST请求依赖于网络连接,因此需要确保Arduino设备具有稳定的网络连接。在使用Wi-Fi连接时,要考虑信号强度、网络拥塞等因素,避免因网络问题导致请求失败。可以采取一些措施来提高网络连接的稳定性,如增加重试机制、优化网络配置等。
​处理网络异常情况:在实际应用中,可能会出现网络中断、超时等异常情况。在Arduino代码中,需要对网络异常进行处理,例如在请求失败时进行重试,或者提示用户检查网络连接。同时,要考虑在网络恢复后重新发送未成功发送的请求。
(四)安全性考虑
​数据加密:如果传输的数据涉及到用户的隐私或敏感信息,需要对数据进行加密处理。可以使用SSL/TLS等加密协议对通信进行加密,确保数据在传输过程中的安全性。
​身份验证与授权:为了防止非法访问和恶意攻击,服务器端需要对请求进行身份验证和授权。Arduino设备在发送POST请求时,可能需要提供有效的身份凭证(如API密钥、用户名和密码等),服务器端对凭证进行验证后才会处理请求。

在这里插入图片描述
1、接收并解析POST请求中的JSON数据

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoJson.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  server.on("/post", HTTP_POST, handlePost);
  server.begin();
}

void handlePost() {
  if (server.hasArg("plain") == false) {
    Serial.println("No data received");
    server.send(400, "text/plain", "No data received");
    return;
  }

  String body = server.arg("plain");
  StaticJsonDocument<256> doc;
  DeserializationError error = deserializeJson(doc, body);

  if (error) {
    Serial.print("JSON parsing failed: ");
    Serial.println(error.c_str());
    server.send(400, "text/plain", "JSON parsing failed");
    return;
  }

  const char* name = doc["name"];
  int age = doc["age"];
  Serial.print("Name: ");
  Serial.println(name);
  Serial.print("Age: ");
  Serial.println(age);

  server.send(200, "text/plain", "Data received");
}

void loop() {
  server.handleClient();
}

要点解读:
使用ESP8266连接到WiFi网络,并启动一个Web服务器来接收POST请求。
在handlePost函数中,通过server.arg(“plain”)获取POST请求的原始数据。
使用ArduinoJson库解析JSON数据,提取name和age字段,并通过串口输出。
如果解析失败,返回400错误;如果成功,返回200状态码并确认数据已接收。

2、接收JSON数据并控制设备

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoJson.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

ESP8266WebServer server(80);
const int ledPin = 2; // 使用GPIO2作为LED引脚

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  server.on("/control", HTTP_POST, handleControl);
  server.begin();
}

void handleControl() {
  if (server.hasArg("plain") == false) {
    Serial.println("No data received");
    server.send(400, "text/plain", "No data received");
    return;
  }

  String body = server.arg("plain");
  StaticJsonDocument<128> doc;
  DeserializationError error = deserializeJson(doc, body);

  if (error) {
    Serial.print("JSON parsing failed: ");
    Serial.println(error.c_str());
    server.send(400, "text/plain", "JSON parsing failed");
    return;
  }

  bool ledState = doc["led"];
  digitalWrite(ledPin, ledState ? HIGH : LOW);
  Serial.print("LED State: ");
  Serial.println(ledState ? "ON" : "OFF");

  server.send(200, "text/plain", "Control received");
}

void loop() {
  server.handleClient();
}

要点解读:
接收POST请求中的JSON数据,解析并控制设备(如LED)的状态。
在handleControl函数中,解析JSON数据中的led字段,根据其值控制LED的开关。
通过串口输出LED的状态,并返回200状态码确认控制指令已接收。

3、接收JSON数据并存储

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoJson.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

ESP8266WebServer server(80);
StaticJsonDocument<512> storedData;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  server.on("/store", HTTP_POST, handleStore);
  server.begin();
}

void handleStore() {
  if (server.hasArg("plain") == false) {
    Serial.println("No data received");
    server.send(400, "text/plain", "No data received");
    return;
  }

  String body = server.arg("plain");
  DeserializationError error = deserializeJson(storedData, body);

  if (error) {
    Serial.print("JSON parsing failed: ");
    Serial.println(error.c_str());
    server.send(400, "text/plain", "JSON parsing failed");
    return;
  }

  Serial.println("Data stored:");
  for (JsonPair kv : storedData) {
    Serial.print(kv.key());
    Serial.print(": ");
    Serial.println(kv.value().as<String>());
  }

  server.send(200, "text/plain", "Data stored");
}

void loop() {
  server.handleClient();
}

要点解读:
接收POST请求中的JSON数据,并将其存储在全局变量storedData中。
在handleStore函数中,解析JSON数据并将其存储在StaticJsonDocument中。
通过串口输出存储的数据,并返回200状态码确认数据已存储。

在这里插入图片描述
4、使用 ESP8266 接收 POST 请求的 JSON 数据

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>

// WiFi 信息
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// 创建服务器对象,监听 80 端口
WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  // 连接到 WiFi 网络
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // 启动服务器
  server.begin();
  Serial.println("Server started");
}

void loop() {
  // 检查是否有客户端连接
  WiFiClient client = server.available();
  if (client) {
    Serial.println("New client connected");
    String currentLine = "";
    String jsonPayload = "";

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

        if (c == '\n') {
          if (currentLine.length() == 0) {
            // 空行表示头部结束,接下来可能是 POST 数据
            if (jsonPayload.length() > 0) {
              // 解析 JSON 数据
              DynamicJsonDocument doc(1024);
              DeserializationError error = deserializeJson(doc, jsonPayload);
              if (error) {
                Serial.print(F("deserializeJson() failed: "));
                Serial.println(error.c_str());
              } else {
                // 打印解析后的 JSON 数据
                serializeJsonPretty(doc, Serial);
              }
            }
            // 发送响应给客户端
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.println("<html><body>Received JSON data successfully</body></html>");
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
          if (currentLine.startsWith("Content-Length:")) {
            // 提取 Content-Length 的值
            int contentLength = currentLine.substring(16).toInt();
            jsonPayload.reserve(contentLength);
          }
          if (jsonPayload.length() > 0) {
            jsonPayload += c;
          }
          if (currentLine.endsWith("\r\n\r\n")) {
            // 开始接收 POST 数据
            jsonPayload = "";
          }
        }
      }
    }
    // 关闭客户端连接
    client.stop();
    Serial.println("Client disconnected");
  }
}

要点解读
库的引入:
ESP8266WiFi.h:用于 ESP8266 模块的 WiFi 连接和网络通信。
ArduinoJson.h:用于处理 JSON 数据的解析和生成。
WiFi 连接和服务器启动:
在 setup 函数中,连接到指定的 WiFi 网络,并启动一个 HTTP 服务器监听 80 端口。
客户端连接处理:
在 loop 函数中,检查是否有客户端连接。如果有,开始接收客户端发送的数据。
JSON 数据解析:
当接收到空行表示头部结束后,提取 Content-Length 的值,然后接收 POST 数据。
使用 deserializeJson 函数解析接收到的 JSON 数据,并处理解析结果。
响应客户端:
发送 HTTP 200 响应给客户端,表示数据接收成功。

5、使用以太网盾接收 POST 请求的 JSON 数据

#include <SPI.h>
#include <Ethernet.h>
#include <ArduinoJson.h>

// 以太网 MAC 地址和 IP 地址
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);

// 创建服务器对象,监听 80 端口
EthernetServer server(80);

void setup() {
  Serial.begin(9600);

  // 启动以太网连接
  Ethernet.begin(mac, ip);

  // 启动服务器
  server.begin();
  Serial.println("Server started");
}

void loop() {
  // 检查是否有客户端连接
  EthernetClient client = server.available();
  if (client) {
    Serial.println("New client connected");
    String currentLine = "";
    String jsonPayload = "";

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

        if (c == '\n') {
          if (currentLine.length() == 0) {
            // 空行表示头部结束,接下来可能是 POST 数据
            if (jsonPayload.length() > 0) {
              // 解析 JSON 数据
              DynamicJsonDocument doc(1024);
              DeserializationError error = deserializeJson(doc, jsonPayload);
              if (error) {
                Serial.print(F("deserializeJson() failed: "));
                Serial.println(error.c_str());
              } else {
                // 打印解析后的 JSON 数据
                serializeJsonPretty(doc, Serial);
              }
            }
            // 发送响应给客户端
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.println("<html><body>Received JSON data successfully</body></html>");
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
          if (currentLine.startsWith("Content-Length:")) {
            // 提取 Content-Length 的值
            int contentLength = currentLine.substring(16).toInt();
            jsonPayload.reserve(contentLength);
          }
          if (jsonPayload.length() > 0) {
            jsonPayload += c;
          }
          if (currentLine.endsWith("\r\n\r\n")) {
            // 开始接收 POST 数据
            jsonPayload = "";
          }
        }
      }
    }
    // 关闭客户端连接
    client.stop();
    Serial.println("Client disconnected");
  }
}

要点解读
库的引入:
SPI.h:用于与以太网盾进行 SPI 通信。
Ethernet.h:用于以太网连接和网络通信。
ArduinoJson.h:用于处理 JSON 数据。
以太网连接和服务器启动:
在 setup 函数中,设置以太网的 MAC 地址和 IP 地址,启动以太网连接并开启 HTTP 服务器。
客户端连接和数据处理:
与案例一类似,在 loop 函数中检查客户端连接,接收客户端发送的数据,解析 JSON 数据并处理。
响应客户端:
发送 HTTP 200 响应给客户端,表示数据接收成功。

6、使用 MKR1000 接收 POST 请求的 JSON 数据

#include <WiFi101.h>
#include <ArduinoJson.h>

// WiFi 信息
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// 创建服务器对象,监听 80 端口
WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  // 初始化 WiFi 模块
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while (true);
  }

  // 连接到 WiFi 网络
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // 启动服务器
  server.begin();
  Serial.println("Server started");
}

void loop() {
  // 检查是否有客户端连接
  WiFiClient client = server.available();
  if (client) {
    Serial.println("New client connected");
    String currentLine = "";
    String jsonPayload = "";

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

        if (c == '\n') {
          if (currentLine.length() == 0) {
            // 空行表示头部结束,接下来可能是 POST 数据
            if (jsonPayload.length() > 0) {
              // 解析 JSON 数据
              DynamicJsonDocument doc(1024);
              DeserializationError error = deserializeJson(doc, jsonPayload);
              if (error) {
                Serial.print(F("deserializeJson() failed: "));
                Serial.println(error.c_str());
              } else {
                // 打印解析后的 JSON 数据
                serializeJsonPretty(doc, Serial);
              }
            }
            // 发送响应给客户端
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.println("<html><body>Received JSON data successfully</body></html>");
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
          if (currentLine.startsWith("Content-Length:")) {
            // 提取 Content-Length 的值
            int contentLength = currentLine.substring(16).toInt();
            jsonPayload.reserve(contentLength);
          }
          if (jsonPayload.length() > 0) {
            jsonPayload += c;
          }
          if (currentLine.endsWith("\r\n\r\n")) {
            // 开始接收 POST 数据
            jsonPayload = "";
          }
        }
      }
    }
    // 关闭客户端连接
    client.stop();
    Serial.println("Client disconnected");
  }
}

要点解读
库的引入:
WiFi101.h:用于 MKR1000 开发板的 WiFi 连接和网络通信。
ArduinoJson.h:用于处理 JSON 数据。
WiFi 连接和服务器启动:
在 setup 函数中,检查 WiFi 模块是否存在,然后连接到指定的 WiFi 网络,并启动 HTTP 服务器。
客户端连接和数据处理:
与前两个案例类似,在 loop 函数中处理客户端连接,接收并解析 POST 请求中的 JSON 数据。
响应客户端:
发送 HTTP 200 响应给客户端,表示数据接收成功。
这几个案例展示了不同 Arduino 平台下如何接收 POST 请求中的 JSON 数据,核心步骤包括网络连接、服务器启动、客户端数据接收、JSON 数据解析和响应客户端。

注意,以上案例只是为了拓展思路,仅供参考。它们可能有错误、不适用或者无法编译。您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。实际编程时,您要根据自己的硬件配置、使用场景和具体需求进行调整,并多次实际测试。您还要正确连接硬件,了解所用传感器和设备的规范和特性。涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。

在这里插入图片描述

转载请注明出处或者链接地址:https://www.qianduange.cn//article/24181.html
标签
评论
发布的文章

动态规划感悟1

2025-03-20 12:03:52

华为NAS真实测评!

2025-03-20 12:03:52

Java设计模式之代理模式

2025-03-20 12:03:51

Linux 锁、线程同步

2025-03-20 12:03:48

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!