这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【Arduino_UNO_Q】空气质量显示器

共1条 1/1 1 跳转至

【Arduino_UNO_Q】空气质量显示器

工程师
2026-06-06 16:24:52     打赏

【Arduino UNO Q】空气质量显示器

本文介绍了 Arduino UNO Q 开发板结合 Arduino App Lab 实现联网获取空气质量并LED矩阵显示的项目设计,包括硬件连接、软件安装、工程创建、流程图、工程代码、效果演示等。

项目介绍

  • 准备工作:硬件连接、Arduino App Lab 安装、软件包更新、空气质量 API 令牌获取等;

  • 工程加载:目标检测例程、工程代码、流程图等;

  • 调试运行:编译上传、运行程序、效果演示等。

air_quality_block.jpg

硬件连接

  • 连接显示屏(或 SSH 远程登录、数据线 ADB 登录);

  • 连接鼠标键盘;

  • WiFi 连接无线网;

  • 使用 PD 电源供电;

hardware_connect.jpg

环境搭建

下载并安装最新版 Arduino APP Lab 软件;

arduino_app_lab_download.jpg

获取天气

air_quality_data_sign-up.jpg

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

air_quality_api.jpg

工程创建

  • 运行 Arduino App Lab 软件;

  • 识别到开发板,点击连接设备;

  • 进入 Examples 标签页;

  • 打开 Air quality on LED matrix 示例工程;

  • 点击右上角复制示例工程;

air_quality_py_api_run.jpg

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

air_quality_emoji.jpg

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 表情显示。

数据流:

air_quality_data_stream.jpg

矩阵 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 显示空气状态;

air_quality_led.jpg


总结

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






关键词: Arduino     空气质量     显示器     python         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]