【Arduino UNO Q】空气质量显示器
本文介绍了 Arduino UNO Q 开发板结合 Arduino App Lab 实现联网获取空气质量并LED矩阵显示的项目设计,包括硬件连接、软件安装、工程创建、流程图、工程代码、效果演示等。
项目介绍
准备工作:硬件连接、Arduino App Lab 安装、软件包更新、空气质量 API 令牌获取等;
工程加载:目标检测例程、工程代码、流程图等;
调试运行:编译上传、运行程序、效果演示等。


硬件连接
连接显示屏(或 SSH 远程登录、数据线 ADB 登录);
连接鼠标键盘;
WiFi 连接无线网;
使用 PD 电源供电;


环境搭建
下载并安装最新版 Arduino APP Lab 软件;


获取天气
注册并登录 空气质量开放数据平台 ;


登录邮箱,点击验证邮件链接,打开网页并获取 API 令牌;


工程创建
运行 Arduino App Lab 软件;
识别到开发板,点击连接设备;
进入 Examples 标签页;
打开 Air quality on LED matrix 示例工程;
点击右上角复制示例工程;


该应用从 AQICN API 获取指定城市的空气质量数据。它将数值 AQI 值转换为 8 x 13 LED 矩阵上的视觉图案。当空气质量发生变化时,显示会更新为代表不同污染等级的相应表情图标。


Python 脚本处理 API 通信和数据处理,而 Arduino 代码管理 LED 矩阵显示和轮询。Router Bridge 在 Python 环境和微控制器之间实现通信。
详见:app-bricks-examples/examples/air-quality-monitoring .
工程代码
展开左侧文件列表,打开 python/main.py 文件,代码如下
from arduino.app_utils import *
import requests
# Insert your API token here
API_TOKEN = "9efd1ccc87ce104ca89e14285e348de44ba2****"
# Edit this variable to see your city data
city = "Shanghai"
# Endpoint for AQICN API
endpoint = f"https://api.waqi.info/feed/{city}/?token={API_TOKEN}"
# AQI levels mapping as a list of dictionaries
AQI_LEVELS = [
{"min": 0, "max": 50, "description": "Good"},
{"min": 51, "max": 100, "description": "Moderate"},
{"min": 101, "max": 150, "description": "Unhealthy for Sensitive Groups"},
{"min": 151, "max": 200, "description": "Unhealthy"},
{"min": 201, "max": 300, "description": "Very Unhealthy"},
{"min": 301, "max": 500, "description": "Hazardous"},
]
def map_aqi_level(aqi_value: int) -> str:
"""Return AQI level description for a given AQI integer value."""
for level in AQI_LEVELS:
if level["min"] <= aqi_value <= level["max"]:
return level["description"]
return "N/A" # Return "N/A" if no level matches
def get_air_quality():
"""Fetch air quality data from AQICN API and return AQI level."""
response = requests.get(endpoint)
response_json = response.json()
status = response_json.get("status", None)
data = response_json.get("data", None)
if status != 'ok' or not data:
print(f"API Error: {response_json}")
return
aqi = data.get("aqi", -1)
aqi_level = map_aqi_level(aqi)
return aqi_level
# Allow the microcontroller to call the "get_air_quality" function to show AQI level on led matrix
Bridge.provide("get_air_quality", get_air_quality)
App.run()将获取到的空气质量 API 令牌填写至对应变量定义位置;
修改目标城市,如 city = "Shanghai" ;
保存代码。
Arduino 程序每秒调用一次 Python 函数,更新数据并保持同步。
Arduino 程序代码如下
#include <Arduino_LED_Matrix.h>
#include <Arduino_RouterBridge.h>
#include "air_quality_frames.h"
Arduino_LED_Matrix matrix;
void setup() {
matrix.begin();
matrix.clear();
Bridge.begin();
}
void loop() {
String airQuality;
bool ok = Bridge.call("get_air_quality").result(airQuality);
if (ok) {
if (airQuality == "Good") {
matrix.loadFrame(good);
} else if (airQuality == "Moderate") {
matrix.loadFrame(moderate);
} else if (airQuality == "Unhealthy for Sensitive Groups") {
matrix.loadFrame(unhealthy_for_sensitive_groups);
} else if (airQuality == "Unhealthy") {
matrix.loadFrame(unhealthy);
} else if (airQuality == "Very Unhealthy") {
matrix.loadFrame(very_unhealthy);
} else if (airQuality == "Hazardous") {
matrix.loadFrame(hazardous);
} else {
matrix.loadFrame(unknown);
}
}
delay(1000);
}Arduino 程序将空气质量结果映射到矩阵 LED 表情显示。
数据流:


矩阵 LED 表情数组 air_quality_frames.h 定义
const uint32_t good[] = {
0x0f808209,
0x484042fa,
0x14509c82,
0x08000000,
};
const uint32_t moderate[] = {
0x0f808209,
0x4840428a,
0x13904101,
0xf0000000,
};
const uint32_t unhealthy_for_sensitive_groups[] = {
0x0f808209,
0x484042fa,
0x10104101,
0xf0000000,
};
const uint32_t unhealthy[] = {
0x0f808209,
0x48404272,
0x14508083,
0xf8000000,
};
const uint32_t very_unhealthy[] = {
0x0f808209,
0x485b4202,
0x13904101,
0xf0000000,
};
const uint32_t hazardous[] = {
0x0f80820b,
0x68514222,
0x08202a01,
0x50000000,
};
const uint32_t unknown[] = {
0x00003002,
0x40020020,
0x02000000,
0x80000000,
};保存代码。
编译运行
点击右上角 RUN 按钮,自动编译、上传并运行程序;
板载矩阵 LED 显示空气状态;


总结
本文介绍了 Arduino UNO Q 开发板结合 Arduino App Lab 实现联网获取空气质量并LED矩阵显示的项目设计,包括硬件连接、软件安装、工程创建、流程图、工程代码、效果演示等,为相关产品在物联网领域的快速开发和应用设计提供了参考。
我要赚赏金
