树莓派家用空气质量监测脚本Adafruit IO请求404失败如何修复
Adafruit IO 404报错排查与修复方案
核心报错原因:aio.send()方法的第一个参数必须传入Adafruit IO平台上预先创建的Feed(数据馈送)键名,你当前代码里传入的是本地脚本执行命令、脚本文件名,平台找不到对应的数据上传路径,直接返回404状态码。
排查修复步骤
- 核对账号鉴权参数
代码中Client()初始化的两个参数分别对应你的Adafruit IO用户名、平台生成的Active API Key,先登录平台后台确认这两个值填写准确,鉴权参数错误也可能导致路径匹配失败。 - 提前创建对应数据Feed
在Adafruit IO后台新建两个独立Feed,分别用于存储PM2.5、PM10的监测数据,Feed键名建议使用纯小写字母、数字、短横线组合,不要带空格、点号、文件后缀等特殊字符,比如可命名为pm25、pm10。 - 修正代码逻辑
原代码缺少必要的模块导入语句,同时send()方法参数传值错误,修正后的可运行参考代码如下:
import serial import time from Adafruit_IO import Client # 替换为个人账号对应的真实用户名、API Key AIO_USERNAME = '你的用户名' AIO_KEY = '你的API密钥' aio = Client(AIO_USERNAME, AIO_KEY) # 若串口打开失败可补充波特率参数,比如serial.Serial('/dev/ttyUSB0', 9600) ser = serial.Serial('/dev/ttyUSB0') while True: data = [] for index in range(0, 10): datum = ser.read() data.append(datum) pmtwofive = int.from_bytes(b''.join(data[2:4]), byteorder='little') / 10 # 替换为自己创建的PM2.5对应Feed键名 aio.send('pm25', pmtwofive) pmten = int.from_bytes(b''.join(data[4:6]), byteorder='little') / 10 # 替换为自己创建的PM10对应Feed键名 aio.send('pm10', pmten) time.sleep(10)
- 运行前环境检查
先安装必要依赖:pip3 install adafruit-io pyserial
给树莓派当前用户开放串口操作权限,执行sudo usermod -aG dialout $USER后重启设备生效,避免串口读数据权限报错。 - 可选优化
当前串口读取逻辑没有做数据帧校验,若遇到串口传输干扰容易解析出异常数值,可根据你用的颗粒物传感器协议补充帧头校验逻辑,确认读取到完整有效数据帧后再做数值解析上传。
内容的提问来源于stack exchange,提问作者Fritz Irmscher
相关产品推荐
相关产品推荐

