您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何用Python自制微信远程智能温湿度计

## 前言
在物联网和智能家居蓬勃发展的今天,远程环境监测已成为许多人的需求。本文将手把手教你用Python语言,结合常见硬件和微信平台,打造一个低成本、高可用的远程温湿度监测系统。这个项目不仅适合DIY爱好者,也是学习物联网开发的绝佳入门案例。
---
## 一、项目概述
### 1.1 核心功能
- 实时采集环境温湿度数据
- 通过微信远程查询当前数据
- 异常数值自动预警推送
- 历史数据存储与可视化
### 1.2 技术栈组成
| 组件 | 技术选型 |
|-------|----------|
| 硬件 | DHT22传感器 + Raspberry Pi |
| 通信 | HTTP协议 + 微信公众平台 |
| 后端 | Flask框架 + SQLite数据库 |
| 可视化 | Matplotlib/Pyecharts |
---
## 二、硬件准备与连接
### 2.1 所需材料清单
- 树莓派(任一型号,推荐Pi 4B)
- DHT22温湿度传感器(约$5)
- 10KΩ电阻
- 面包板及杜邦线若干
- 可选:防水外壳
### 2.2 电路连接示意图
```python
# 接线示意图(GPIO模式)
DHT22 VCC -> Pi 3.3V (Pin 1)
DHT22 DATA -> GPIO4 (Pin 7)
DHT22 GND -> GND (Pin 6)
└─ 10KΩ上拉电阻
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
pin = 4
def read_sensor():
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
return round(temperature, 1), round(humidity, 1)
return None, None
sequenceDiagram
用户->>微信服务器: 发送查询指令
微信服务器->>我们的服务器: POST XML消息
我们的服务器->>传感器: 读取数据
传感器-->>我们的服务器: 返回数据
我们的服务器->>微信服务器: 回复XML
微信服务器->>用户: 显示温湿度信息
from flask import Flask, request
import hashlib
app = Flask(__name__)
WECHAT_TOKEN = "your_token"
@app.route('/wechat', methods=['GET','POST'])
def wechat():
if request.method == 'GET':
# 验证签名
signature = request.args.get('signature')
timestamp = request.args.get('timestamp')
nonce = request.args.get('nonce')
echostr = request.args.get('echostr')
tmp_list = sorted([WECHAT_TOKEN, timestamp, nonce])
tmp_str = hashlib.sha1("".join(tmp_list).encode()).hexdigest()
if tmp_str == signature:
return echostr
return "验证失败"
else:
# 处理用户消息
xml_data = request.data
# 解析XML并返回响应...
CREATE TABLE sensor_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
temperature REAL NOT NULL,
humidity REAL NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
import sqlite3
from datetime import datetime
def save_to_db(temp, humi):
conn = sqlite3.connect('sensor.db')
c = conn.cursor()
c.execute("INSERT INTO sensor_data (temperature, humidity) VALUES (?,?)",
(temp, humi))
conn.commit()
conn.close()
def check_abnormal(temp, humi):
alert = ""
if temp > 30:
alert += "高温警告!"
elif temp < 10:
alert += "低温警告!"
if humi > 80:
alert += "湿度过高!"
return alert
import schedule
import time
def job():
temp, humi = read_sensor()
alert = check_abnormal(temp, humi)
if alert:
send_wechat_msg(alert)
schedule.every(1).hours.do(job)
while True:
schedule.run_pending()
time.sleep(1)
import matplotlib.pyplot as plt
import pandas as pd
def generate_chart():
df = pd.read_sql("SELECT * FROM sensor_data", conn)
plt.figure(figsize=(10,5))
plt.plot(df['timestamp'], df['temperature'], label='温度')
plt.plot(df['timestamp'], df['humidity'], label='湿度')
plt.savefig('trend.png')
user_states = {} # 保存用户会话状态
@app.route('/wechat', methods=['POST'])
def handle_msg():
from_user = xml_data.find('FromUserName').text
if from_user not in user_states:
user_states[from_user] = {'last_cmd': None}
# 根据状态机处理不同指令...
创建/etc/systemd/system/sensor.service
:
[Unit]
Description=Temperature Monitor
[Service]
ExecStart=/usr/bin/python3 /home/pi/app/main.py
Restart=always
[Install]
WantedBy=multi-user.target
# 监控内存使用
watch -n 1 free -m
# 查看网络连接
sudo netstat -tulnp
通过本项目,我们实现了: ✅ 硬件数据采集 ✅ 微信远程交互 ✅ 数据持久化存储 ✅ 异常状态预警
升级方向建议: - 增加多传感器支持 - 开发小程序控制界面 - 接入第三方天气API对比数据
完整项目代码已开源在GitHub:项目地址
注意事项: 1. DHT22需避免结露环境 2. 微信公众号API有调用频率限制 3. 长期运行建议使用UPS电源
希望这个项目能帮助你开启物联网开发的大门!如有任何问题,欢迎在评论区交流。 “`
注:实际部署时请根据具体硬件型号调整代码,本文示例基于Raspberry Pi 4B + DHT22传感器组合。微信接口部分需要替换真实的Token和API密钥。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。