# 如何用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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。