RPI ZERO + PAHO MQTT 没有长时间延迟发送信号
RPI ZERO + PAHO MQTT not sending signal with long delays
我有一个 bme688 传感器(来自 Pimoroni)连接到 RPI ZERO。我有 PAHO MQTT 库,因此我可以将数据发送给代理。
如果你看到下面的代码,在最后一行,我有一个“time.sleep(5)”。下面的代码工作得很好。它获取读数并通过 MQTT 发送它们。我遇到的问题是,如果我将时间从 5 秒更改为 300 秒(10 分钟),MQTT 似乎不会发送数据。 RPI ZERO 安装了 raspbian 桌面,所以我 运行 它使用 Thonny 来查看我是否收到错误,但在 300 秒延迟后一切正常......但它不会将数据发送到经纪人。
有什么想法吗?
import bme680
import time
import pandas as pd
from datetime import datetime
import csv
import paho.mqtt.client as mqtt
#Set client
mqttBroker = "192.168.86.62"
client = mqtt.Client("the-sensor")
client.connect(mqttBroker)
client.subscribe("sensor/temp")
client.subscribe("sensor/pres")
client.subscribe("sensor/humi")
client.subscribe("sensor/gas")
print("connecting...")
time.sleep(5)
#Set bme688 sensor
sensor = bme680.BME680(0x76)
sensor.set_humidity_oversample(bme680.OS_2X)
sensor.set_pressure_oversample(bme680.OS_4X)
sensor.set_temperature_oversample(bme680.OS_8X)
sensor.set_filter(bme680.FILTER_SIZE_3)
sensor.set_gas_status(bme680.ENABLE_GAS_MEAS)
sensor.set_gas_heater_temperature(320)
sensor.set_gas_heater_duration(150)
sensor.select_gas_heater_profile(0)
while True:
if sensor.get_sensor_data() and sensor.data.heat_stable:
print('getting date, temp, press, humi, gas, fed')
now = datetime.now()
date = now.strftime("%d/%m/%Y %H:%M:%S")
data = [date, sensor.data.temperature, sensor.data.pressure, sensor.data.humidity, sensor.data.gas_resistance]
print(data)
temp = sensor.data.temperature
pres = sensor.data.pressure
humi = sensor.data.humidity
gas = sensor.data.gas_resistance
client.publish("sensor/temp", str(temp))
client.publish("sensor/pres", str(pres))
client.publish("sensor/humi", str(humi))
client.publish("sensor/gas", str(gas))
with open('output.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow(data)
csvFile.close()
print("waiting...")
time.sleep(5)
您没有启动客户端网络循环或手动调用它。
https://www.eclipse.org/paho/index.php?page=clients/python/docs/index.php#network-loop
您可能想在 client.connect()
之后添加 client.loop_start()
我有一个 bme688 传感器(来自 Pimoroni)连接到 RPI ZERO。我有 PAHO MQTT 库,因此我可以将数据发送给代理。
如果你看到下面的代码,在最后一行,我有一个“time.sleep(5)”。下面的代码工作得很好。它获取读数并通过 MQTT 发送它们。我遇到的问题是,如果我将时间从 5 秒更改为 300 秒(10 分钟),MQTT 似乎不会发送数据。 RPI ZERO 安装了 raspbian 桌面,所以我 运行 它使用 Thonny 来查看我是否收到错误,但在 300 秒延迟后一切正常......但它不会将数据发送到经纪人。
有什么想法吗?
import bme680
import time
import pandas as pd
from datetime import datetime
import csv
import paho.mqtt.client as mqtt
#Set client
mqttBroker = "192.168.86.62"
client = mqtt.Client("the-sensor")
client.connect(mqttBroker)
client.subscribe("sensor/temp")
client.subscribe("sensor/pres")
client.subscribe("sensor/humi")
client.subscribe("sensor/gas")
print("connecting...")
time.sleep(5)
#Set bme688 sensor
sensor = bme680.BME680(0x76)
sensor.set_humidity_oversample(bme680.OS_2X)
sensor.set_pressure_oversample(bme680.OS_4X)
sensor.set_temperature_oversample(bme680.OS_8X)
sensor.set_filter(bme680.FILTER_SIZE_3)
sensor.set_gas_status(bme680.ENABLE_GAS_MEAS)
sensor.set_gas_heater_temperature(320)
sensor.set_gas_heater_duration(150)
sensor.select_gas_heater_profile(0)
while True:
if sensor.get_sensor_data() and sensor.data.heat_stable:
print('getting date, temp, press, humi, gas, fed')
now = datetime.now()
date = now.strftime("%d/%m/%Y %H:%M:%S")
data = [date, sensor.data.temperature, sensor.data.pressure, sensor.data.humidity, sensor.data.gas_resistance]
print(data)
temp = sensor.data.temperature
pres = sensor.data.pressure
humi = sensor.data.humidity
gas = sensor.data.gas_resistance
client.publish("sensor/temp", str(temp))
client.publish("sensor/pres", str(pres))
client.publish("sensor/humi", str(humi))
client.publish("sensor/gas", str(gas))
with open('output.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow(data)
csvFile.close()
print("waiting...")
time.sleep(5)
您没有启动客户端网络循环或手动调用它。
https://www.eclipse.org/paho/index.php?page=clients/python/docs/index.php#network-loop
您可能想在 client.connect()
client.loop_start()