在Python中获取温度数据的方法取决于你的传感器类型和连接方式。以下是几种常见的实现方式:
如果你只是测试代码逻辑,可以用随机数生成模拟温度:
import random
def read_temperature():
# 模拟20-30℃之间的温度数据,带1位小数
return round(random.uniform(20, 30), 1)
如果传感器通过串口(如USB转TTL)连接到电脑,可以使用pyserial
库:
import serial
import time
def read_temperature():
try:
# 打开串口(根据实际情况修改端口和波特率)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2) # 等待传感器初始化
# 发送读取命令(如果需要)
ser.write(b'GET_TEMP\n')
# 读取响应数据
data = ser.readline().decode('utf-8').strip()
# 关闭串口
ser.close()
# 解析温度值(假设格式为"25.3")
return float(data)
except Exception as e:
print(f"传感器读取失败: {e}")
return None
对于树莓派等单板计算机,可以通过GPIO引脚连接传感器(如DHT11/DHT22/DS18B20):
需要安装Adafruit_DHT
库:
import Adafruit_DHT
def read_temperature():
sensor = Adafruit_DHT.DHT22 # 或DHT11
pin = 4 # 连接到GPIO4
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if temperature is not None:
return round(temperature, 1)
else:
print("无法获取温度数据")
return None
需要启用树莓派的1-Wire接口,并安装w1thermsensor
库:
from w1thermsensor import W1ThermSensor
def read_temperature():
try:
sensor = W1ThermSensor()
temperature = sensor.get_temperature()
return round(temperature, 1)
except Exception as e:
print(f"读取温度失败: {e}")
return None
如果传感器连接到网络并提供API接口,可以使用requests
库:
import requests
def read_temperature():
try:
# 替换为实际的API地址
response = requests.get('http://sensor-api.local/temperature')
data = response.json()
return data['temperature'] # 根据API返回格式调整
except Exception as e:
print(f"API请求失败: {e}")
return None
如果传感器数据通过MQTT协议传输,可以使用paho-mqtt
库:
import paho.mqtt.client as mqtt
import json
temperature = None
def on_connect(client, userdata, flags, rc):
client.subscribe("sensors/temperature")
def on_message(client, userdata, msg):
global temperature
try:
data = json.loads(msg.payload.decode())
temperature = data['value']
except:
pass
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("mqtt.broker.address", 1883, 60)
client.loop_start() # 启动MQTT客户端循环
def read_temperature():
return temperature # 返回最新接收到的温度值
根据硬件环境选择合适的实现方式,并将read_temperature()
函数集成到之前的数据库写入代码中。