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 秒发送一次请求
}
代码解释
- WiFi 连接:首先,我们连接到 Wi-Fi 网络。
- HTTP 请求:使用
HTTPClient
对象发送 GET 请求到指定的 API 端点。 - 处理响应:如果请求成功(
httpCode > 0
),我们将获取响应内容并打印到串口监视器。
备注
确保将 your_SSID
和 your_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);
}
代码解释
- JSON 解析:使用
ArduinoJson
库解析 JSON 字符串。 - 提取数据:从解析后的 JSON 对象中提取所需的数据字段。
提示
ArduinoJson
库需要预先安装。你可以通过 Arduino IDE 的库管理器搜索并安装它。
实际应用案例
假设我们正在开发一个智能家居系统,Arduino 设备需要从天气 API 获取当前的温度数据,并根据温度控制家中的加热器。
场景描述
- 获取温度数据:Arduino 每隔 5 分钟从天气 API 获取当前温度。
- 控制加热器:如果温度低于某个阈值,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");
}
}