树莓派4B+DHT22传感器极速上云指南:从硬件连接到OneNET物模型实战

在智能家居和物联网原型开发中,快速验证想法往往比完美实现更重要。本文将带你用树莓派4B和DHT22温湿度传感器,在5分钟内完成从物理连接到OneNET物联网平台数据可视化的全流程。不同于传统教程冗长的环境配置,我们采用最小必要步骤设计,即使没有任何Linux或Python基础的开发者也能立即看到传感器数据在云端跳动。

1. 硬件准备与连接

1.1 物料清单检查

确保手边有以下设备(型号必须完全匹配):

  • 树莓派4B(任何内存版本均可,建议安装Raspberry Pi OS Lite系统)
  • DHT22传感器(AM2302型号,注意是3引脚封装版)
  • 母对母杜邦线3条(颜色建议:红、黑、黄)
  • 5V/3A USB-C电源(为树莓派供电)

注意:DHT22有裸板和三线封装两种版本,本文使用带塑料外壳的三线版(VCC/GND/DATA),若使用四针版本需要额外接电阻。

1.2 物理连接图解

按照以下引脚对应关系连接:

树莓派GPIO引脚 DHT22引脚 线色建议
GPIO4 (Pin7) DATA 黄色
5V (Pin2) VCC 红色
GND (Pin6) GND 黑色

连接完成后,树莓派通电启动。可通过lsmod | grep dht命令检查内核是否自动加载了dht11驱动(虽然DHT22需要用户态驱动,但内核模块存在表示硬件正常)。

2. 软件环境一键配置

2.1 依赖安装

在树莓派终端执行以下命令(全部复制粘贴运行):

#!/bin/bash
# 一键安装脚本
sudo apt update && sudo apt install -y python3-pip git
sudo pip3 install Adafruit_DHT
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT && sudo python3 setup.py install

2.2 传感器测试代码

创建dht22_test.py文件:

import Adafruit_DHT
import time

sensor = Adafruit_DHT.DHT22
pin = 4  # GPIO4

while True:
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    if humidity is not None and temperature is not None:
        print(f"Temp={temperature:.1f}°C Humidity={humidity:.1f}%")
    else:
        print("Failed to read data")
    time.sleep(2)

运行测试:python3 dht22_test.py,正常应每2秒输出一次温湿度数据。若持续报错,检查硬件连接是否松动。

3. OneNET物模型快速接入

3.1 控制台配置三步骤

  1. 创建产品:登录OneNET控制台 → 物联网平台 → 创建产品 → 选择"物模型"接入方式 → 自定义品类(如"环境监测")
  2. 定义物模型:在产品详情页添加两个属性:
    • 温度(float类型,单位℃)
    • 湿度(float类型,单位%RH)
  3. 添加设备:记录自动生成的设备ID和API Key

3.2 Python上传脚本

创建onenet_upload.py

import requests
import json
import Adafruit_DHT
from time import sleep

DEVICE_ID = "你的设备ID"
API_KEY = "你的API_Key"
sensor = Adafruit_DHT.DHT22
pin = 4

def upload_to_onenet(temp, humi):
    url = f"http://api.heclouds.com/devices/{DEVICE_ID}/datapoints"
    headers = {"api-key": API_KEY}
    payload = {"datastreams": [
        {"id": "temperature", "datapoints": [{"value": temp}]},
        {"id": "humidity", "datapoints": [{"value": humi}]}
    ]}
    r = requests.post(url, headers=headers, data=json.dumps(payload))
    return r.status_code == 200

while True:
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    if None not in (humidity, temperature):
        if upload_to_onenet(temperature, humidity):
            print(f"Uploaded: {temperature}°C, {humidity}%")
    sleep(30)  # 每30秒上传一次

后台运行:nohup python3 onenet_upload.py &,此时OneNET控制台应能看到实时数据曲线。

4. 微信小程序实时展示(可选)

对于需要移动端查看的场景,可通过微信小程序调用OneNET API。在小程序的app.js中添加:

const fetchSensorData = () => {
  wx.request({
    url: 'https://api.heclouds.com/devices/设备ID/datapoints',
    header: {'api-key': '你的API_Key'},
    success(res) {
      console.log('最新数据:', res.data.data)
    }
  })
}

页面布局建议使用<canvas>绘制温湿度曲线,或简单显示数值:

<view class="container">
  <text>当前温度:{{temp}}℃</text>
  <text>当前湿度:{{humi}}%RH</text>
</view>

常见问题速查表

现象 可能原因 解决方案
持续输出"Failed to read" 1. 引脚接错 2. 电源不足 1. 检查GPIO4连接 2. 换5V电源
API返回401错误 API Key填写错误 检查控制台-设备详情页的Key
数据上传但曲线不动 物模型ID未匹配 确保脚本中id与物模型定义一致

硬件方面,若在潮湿环境使用,建议给DHT22加装防水透气膜;软件层面,生产环境应考虑添加本地数据缓存,防止网络中断导致数据丢失。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐