监控温度传感器的脚本如何写

wen 实用脚本 1

从零到实战的完整指南

目录导读

  1. 什么是温度传感器监控脚本?
  2. 监控脚本的核心功能与设计思路
  3. 主流传感器类型与通信协议
  4. 脚本开发环境搭建(Python + 树莓派/PC)
  5. 实战案例:基于DS18B20的温度监控脚本
  6. 如何实现数据记录与报警通知?
  7. 常见问题与故障排除
  8. Q&A环节:你关心的脚本问题

什么是温度传感器监控脚本?

温度传感器监控脚本是一种通过编程语言(如Python、Shell、C等)编写的自动化程序,用于实时读取温度传感器数据、记录历史变化、触发阈值报警,甚至将数据上传至云端或本地数据库,它广泛应用于智能家居、工业控制、农业大棚、数据中心等场景。

监控温度传感器的脚本如何写

脚本就是你的“温度管家”,它不知疲倦地监听传感器信号,一旦温度异常,立刻通知你。


监控脚本的核心功能与设计思路

一个完善的温度监控脚本通常包含以下模块:

  • 数据采集模块:通过I2C、GPIO、串口等协议读取传感器原始值
  • 数据解析模块:将原始电信号转换为摄氏度/华氏度
  • 存储模块:写入CSV、数据库(SQLite/MySQL)或直接打印
  • 报警模块:当温度超过设定阈值时,发送邮件、短信或微信通知
  • 日志模块:记录脚本运行状态与异常

设计思路建议:优先考虑可靠性(异常重试)、低延迟(非阻塞IO)、可扩展性(模块化函数)。


主流传感器类型与通信协议

传感器型号 通信协议 精度 适用场景
DS18B20 1-Wire ±0.5°C 工业、环境监测
DHT11/DHT22 单总线 ±2°C 室内温湿度
SHT30 I2C ±0.3°C 高精度实验室
LM35 模拟电压 ±0.5°C 低成本开发
热敏电阻 模拟输入 非线性 定制化需求

推荐新手优先使用DS18B20,它只需一根数据线,且支持多点级联。


脚本开发环境搭建

假设你在Linux系统(如树莓派或Ubuntu)上操作:

# 安装Python环境
sudo apt update
sudo apt install python3 python3-pip
# 安装传感器驱动库
pip3 install w1thermsensor  # 用于DS18B20
pip3 install Adafruit_DHT    # 用于DHT系列
pip3 install smbus2          # 用于I2C传感器

如果你使用Windows,可以尝试模拟GPIO(如使用com0com虚拟串口进行测试)。


实战案例:基于DS18B20的温度监控脚本

以下是一个完整的Python脚本,读取DS18B20温度并带报警功能:

#!/usr/bin/env python3
# 文件名:temp_monitor.py
import time
import os
import glob
import sys
# 启用1-Wire模块
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
# 查找传感器设备
base_dir = '/sys/bus/w1/devices/'
device_folders = glob.glob(base_dir + '28*')
if len(device_folders) == 0:
    print("错误:未检测到温度传感器,请检查连接。")
    sys.exit(1)
device_file = device_folders[0] + '/w1_slave'
def read_temp_raw():
    with open(device_file, 'r') as f:
        return f.readlines()
def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c
    return None
# 主循环
threshold_high = 50.0  # 高温报警阈值
threshold_low = -10.0  # 低温报警阈值
print("温度监控脚本启动,每5秒采样一次...")
while True:
    temp = read_temp()
    if temp is None:
        print("温度读取失败,跳过此轮")
        continue
    timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
    print(f"{timestamp} - 当前温度: {temp:.2f}°C")
    if temp > threshold_high:
        print(f"⚠️ 高温报警!温度 {temp:.2f}°C 超过阈值 {threshold_high}°C")
        # 这里可添加发送通知函数
    elif temp < threshold_low:
        print(f"❄️ 低温报警!温度 {temp:.2f}°C 低于阈值 {threshold_low}°C")
    # 写入日志文件
    with open('temperature_log.csv', 'a') as log:
        log.write(f"{timestamp},{temp:.2f}\n")
    time.sleep(5)

运行方式python3 temp_monitor.py


如何实现数据记录与报警通知?

数据记录扩展

  • 使用SQLite数据库存储:cursor.execute("INSERT INTO temps VALUES (?,?)", (timestamp, temp))
  • 上传至云端:通过MQTT协议发送到如腾讯云IoT Hub或阿里云物联网平台

报警通知方式

  • 邮件:使用smtplib库发送SMTP邮件
  • 短信:调用阿里云短信API或Twilio
  • 微信:通过企业微信机器人Webhook或Server酱推送

示例:发送邮件通知(需先开启SMTP服务)

import smtplib
from email.mime.text import MIMEText
def send_alert(temp):
    msg = MIMEText(f"温度异常!当前温度:{temp:. .2f}°C")
    msg['Subject'] = '温度报警'
    msg['From'] = 'your_email@xxx.com'
    msg['To'] = 'recipient@xxx.com'
    with smtplib.SMTP('smtp.xx.com', 587) as server:
        server.starttls()
        server.login('your_email@xxx.com', 'password')
        server.send_message(msg)

常见问题与故障排除

问题现象 可能原因 解决方法
读取到-127°C或85°C 传感器驱动未加载 使用modprobe w1-therm手动加载
找不到设备文件28* 接线错误或GPIO引脚不对 检查VCC/GND/Data连接,确保4.7kΩ上拉电阻
温度数据不更新 主循环卡死 添加超时机制或改用多线程
报警不触发 阈值设置错误 打印当前温度,确认单位是摄氏度

Q&A环节:你关心的脚本问题

Q1:监控脚本必须用Python吗? A:不一定,你还可以用Bash脚本(直接读/sys/bus/w1/devices/28-*/w1_slave)、C语言或Node.js,但Python因其丰富的库和简洁语法,最适合快速开发。

Q2:如何让脚本开机自启? A:将脚本路径添加到/etc/rc.local,或使用systemd服务单元文件。

Q3:我需要监控多个温度传感器,脚本要改吗? A:只需修改device_folders的遍历方式,用循环读取所有28*设备,每个传感器有独立ID,可分别命名。

Q4:能远程通过网页查看温度吗? A:可以!使用Flask或Django搭建轻量级Web服务器,将温度数据通过HTTP接口暴露,配合ECharts展示曲线图。

Q5:脚本占用资源大吗? A:非常小,树莓派上运行功耗仅几毫瓦,CPU占用不到1%,适合7×24小时运行。

抱歉,评论功能暂时关闭!