跳到主要内容

Arduino API 交互

介绍

在现代物联网(IoT)应用中,Arduino 设备通常需要与外部服务进行交互,以获取数据或发送指令。API(应用程序编程接口)是实现这种交互的关键工具。通过 API,Arduino 可以访问远程服务器上的数据,或者将本地数据发送到云端进行处理。

本文将介绍如何使用 Arduino 与 API 进行交互,包括如何发送 HTTP 请求、解析 JSON 数据以及处理 API 响应。我们将通过一个简单的示例来演示这些概念,并展示如何在实际应用中使用这些技术。

准备工作

在开始之前,确保你已经具备以下条件:

  • 一个 Arduino 开发板(如 Arduino Uno 或 ESP8266/ESP32)。
  • 安装了 Arduino IDE。
  • 一个可用的 Wi-Fi 网络(如果使用 ESP8266/ESP32)。
  • 一个 API 端点(例如,天气 API 或 IoT 平台 API)。

发送 HTTP 请求

Arduino 可以通过 HTTP 协议与 API 进行通信。我们将使用 HTTPClient 库(适用于 ESP8266/ESP32)来发送 GET 请求并获取 API 的响应。

示例代码

cpp
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>

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

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");
}

void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://api.example.com/data"); // API 端点
int httpCode = http.GET();

if (httpCode > 0) {
String payload = http.getString();
Serial.println(payload);
} else {
Serial.println("Error on HTTP request");
}
http.end();
}
delay(5000); // 每 5 秒发送一次请求
}

代码解释

  1. WiFi 连接:首先,我们连接到 Wi-Fi 网络。
  2. HTTP 请求:使用 HTTPClient 对象发送 GET 请求到指定的 API 端点。
  3. 处理响应:如果请求成功(httpCode > 0),我们将获取响应内容并打印到串口监视器。
备注

确保将 your_SSIDyour_PASSWORD 替换为你的 Wi-Fi 网络的 SSID 和密码。

解析 JSON 数据

大多数 API 返回的数据格式为 JSON。为了在 Arduino 中处理这些数据,我们可以使用 ArduinoJson 库来解析 JSON 字符串。

示例代码

cpp
#include <ArduinoJson.h>

void parseJSON(String json) {
StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, json);

if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}

const char* sensor = doc["sensor"];
float value = doc["value"];
Serial.print("Sensor: ");
Serial.println(sensor);
Serial.print("Value: ");
Serial.println(value);
}

代码解释

  1. JSON 解析:使用 ArduinoJson 库解析 JSON 字符串。
  2. 提取数据:从解析后的 JSON 对象中提取所需的数据字段。
提示

ArduinoJson 库需要预先安装。你可以通过 Arduino IDE 的库管理器搜索并安装它。

实际应用案例

假设我们正在开发一个智能家居系统,Arduino 设备需要从天气 API 获取当前的温度数据,并根据温度控制家中的加热器。

场景描述

  1. 获取温度数据:Arduino 每隔 5 分钟从天气 API 获取当前温度。
  2. 控制加热器:如果温度低于某个阈值,Arduino 将打开加热器;否则,关闭加热器。

示例代码

cpp
void controlHeater(float temperature) {
if (temperature < 20.0) {
digitalWrite(HEATER_PIN, HIGH); // 打开加热器
Serial.println("Heater ON");
} else {
digitalWrite(HEATER_PIN, LOW); // 关闭加热器
Serial.println("Heater OFF");
}
}