为什么我的树莓派部署的Telegram天气查询机器人无法回复消息?
代码问题分析
- 死循环阻塞主进程:雨水检测部分的
while True是无限死循环,代码执行到这会一直停在这里循环检测雨水状态,后面的Telegram机器人初始化、消息监听逻辑永远不会被执行,这是机器人无法工作的核心原因。 - 传感器数据仅读取一次:BME680的温湿度、气压等数据是在脚本启动阶段计算赋值的,后续用户请求
/data时返回的永远是脚本启动时的旧数据,不是实时监测值。 - 换行符语法错误:拼接
messdaten变量时使用了硬换行,正确的字符串换行应该用转义字符\n,否则会触发语法错误。 - 雨水状态未实时读取:原逻辑里雨水状态的判断要么卡死在死循环里,要么也是固定值,无法返回实时降雨状态。
修正后可运行代码
#!/usr/bin/python3 #coding: utf8 # 依赖导入 import time, datetime import telepot from telepot.loop import MessageLoop import board from busio import I2C import adafruit_bme680 from gpiozero import InputDevice # 初始化BME680传感器 i2c = I2C(board.SCL, board.SDA) bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, debug = False) bme680.sea_level_pressure = 971.91 temperature_offset = 0 # 初始化雨水传感器 rain = InputDevice(18) # 初始化Telegram机器人 替换为你自己的bot token telegram_bot = telepot.Bot('XXX:XXXXXXX') print (telegram_bot.getMe()) # 读取BME680实时数据的函数 def get_bme680_data(): temperatur = "Temperatur: %0.1f C" % (bme680.temperature + temperature_offset) gas = "Gas: %d ohm" % bme680.gas luftfeuchtigkeit = "Luftfeuchtigkeit: %0.1f %%" % bme680.relative_humidity luftdruck = "Luftdruck: %0.3f hPa" % bme680.pressure messdaten = temperatur + "\n" + gas + "\n" + luftfeuchtigkeit + "\n" + luftdruck return messdaten # 读取雨水实时状态的函数 def get_rain_status(): if rain.is_active: return "Es regnet. Fenster zu!" else: return "Es regnet nicht" # 消息处理逻辑 def action(msg): chat_id=msg['chat']['id'] command = msg['text'] print ('Received: %s' % command) if command == '/hi': telegram_bot.sendMessage(chat_id, "Kuckuck") elif command == '/data': # 请求时才读取实时数据 realtime_data = get_bme680_data() telegram_bot.sendMessage(chat_id, realtime_data) elif command == '/rain': # 请求时才读取实时降雨状态 realtime_rain = get_rain_status() telegram_bot.sendMessage(chat_id, realtime_rain) # 启动消息监听 MessageLoop(telegram_bot, action).run_as_thread() print ('Up and Running...') # 保持程序运行 while 1: time.sleep(10)
额外注意事项
- 替换代码中
XXX:XXXXXXX为你自己的Telegram机器人Token - 确认树莓派已经开启I2C功能,否则BME680会初始化失败
- 确认雨水传感器的接线引脚和代码中设置的
18号BCM引脚一致
内容的提问来源于stack exchange,提问作者Marie03
相关产品推荐
相关产品推荐

