From c3f82379616a15911a44b73cc7c7bb0957a6d8cf Mon Sep 17 00:00:00 2001 From: robmarkcole Date: Fri, 15 Dec 2017 10:02:01 +0000 Subject: [PATCH] Adds MQTT example --- README.md | 2 +- lib/main.py | 40 ++++++++++++++++++++++++++++++++++++++++ main.py | 18 +++++++++++++++++- simple-readout/main.py | 31 +++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100755 lib/main.py create mode 100755 simple-readout/main.py diff --git a/README.md b/README.md index 8f91381..aecacd2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # bme680-mqtt-micropython Publish data from the bme680 sensor over MQTT using micropython. Makes use of https://github.com/gkluoe/bme680/blob/master/library/bme680/i2c.py -and https://github.com/pimoroni/bme680. +and https://github.com/pimoroni/bme680. Note that I init my wifi connection in a boot.py. diff --git a/lib/main.py b/lib/main.py new file mode 100755 index 0000000..ec3370e --- /dev/null +++ b/lib/main.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python +import bme680 +from i2c import I2CAdapter +from mqtt import MQTTClient +import time + +def settimeout(duration): + pass + +client = MQTTClient("wipy", "192.168.0.30", port=1883) +client.settimeout = settimeout +client.connect() + +i2c_dev = I2CAdapter() +sensor = bme680.BME680(i2c_device=i2c_dev) + +# These oversampling settings can be tweaked to +# change the balance between accuracy and noise in +# the data. +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) + +print("Polling:") +try: + while True: + if sensor.get_sensor_data(): + + output = "{} C, {} hPa, {} RH, {} RES,".format( + sensor.data.temperature, + sensor.data.pressure, + sensor.data.humidity, + sensor.data.gas_resistance) + + print(output) + client.publish("test", output) + time.sleep(1) +except KeyboardInterrupt: + pass diff --git a/main.py b/main.py index 9204e58..59c6447 100755 --- a/main.py +++ b/main.py @@ -1,8 +1,17 @@ #!/usr/bin/env python import bme680 from i2c import I2CAdapter +from mqtt import MQTTClient import time +def settimeout(duration): + pass + +client = MQTTClient("wipy", "192.168.0.30", port=1883) +client.settimeout = settimeout +client.connect() +mqtt_topic = "bme680" + i2c_dev = I2CAdapter() sensor = bme680.BME680(i2c_device=i2c_dev) @@ -26,6 +35,13 @@ sensor.data.gas_resistance) print(output) - time.sleep(1) + client.publish(mqtt_topic, output) + # Publish on individual topics for consistency with rpi repo. + client.publish('bme680-humidity', str(sensor.data.humidity)) + client.publish('bme680-temperature', str(sensor.data.temperature)) + client.publish('bme680-pressure', str(sensor.data.pressure)) + client.publish('bme680-air_qual', str(sensor.data.gas_resistance)) + time.sleep(5) + except KeyboardInterrupt: pass diff --git a/simple-readout/main.py b/simple-readout/main.py new file mode 100755 index 0000000..9204e58 --- /dev/null +++ b/simple-readout/main.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +import bme680 +from i2c import I2CAdapter +import time + +i2c_dev = I2CAdapter() +sensor = bme680.BME680(i2c_device=i2c_dev) + +# These oversampling settings can be tweaked to +# change the balance between accuracy and noise in +# the data. +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) + +print("Polling:") +try: + while True: + if sensor.get_sensor_data(): + + output = "{} C, {} hPa, {} RH, {} RES,".format( + sensor.data.temperature, + sensor.data.pressure, + sensor.data.humidity, + sensor.data.gas_resistance) + + print(output) + time.sleep(1) +except KeyboardInterrupt: + pass