2019-06-30 20:57:20 +02:00
|
|
|
"""Station météo connectée au service Adafruit IO
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
import time
|
|
|
|
import machine
|
|
|
|
import network
|
|
|
|
import bme280_i2c
|
|
|
|
from mqtt import MQTTClient
|
|
|
|
import config
|
|
|
|
|
|
|
|
# connect to WLAN
|
|
|
|
wlan = network.WLAN(network.STA_IF)
|
2020-03-24 22:49:37 +01:00
|
|
|
wlan.active(True)
|
2019-06-30 20:57:20 +02:00
|
|
|
nets = wlan.scan()
|
|
|
|
for net in nets:
|
|
|
|
net_ssid = net[0].decode()
|
|
|
|
if net_ssid == config.WIFI_SSID:
|
|
|
|
print('Network found!')
|
|
|
|
wlan.connect(net_ssid, config.WIFI_PSK)
|
|
|
|
while not wlan.isconnected():
|
2020-03-24 22:49:37 +01:00
|
|
|
machine.idle() # save power while waiting
|
2019-06-30 20:57:20 +02:00
|
|
|
print('WLAN connection succeeded!')
|
|
|
|
break
|
|
|
|
if not wlan.isconnected():
|
|
|
|
print("WLAN not found/not connected")
|
|
|
|
|
|
|
|
# Create a micropython I2C object with the appropriate device pins
|
|
|
|
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
|
|
|
|
|
|
|
|
# Create a sensor object to represent the BME280
|
|
|
|
# Note that this will error if the device can't be reached over I2C.
|
|
|
|
bme = bme280_i2c.BME280_I2C(address=bme280_i2c.BME280_I2C_ADDR_SEC, i2c=i2c)
|
|
|
|
|
|
|
|
# Configure the sensor for the application in question.
|
|
|
|
bme.set_measurement_settings({
|
|
|
|
'filter': bme280_i2c.BME280_FILTER_COEFF_16,
|
|
|
|
'standby_time': bme280_i2c.BME280_STANDBY_TIME_500_US,
|
|
|
|
'osr_h': bme280_i2c.BME280_OVERSAMPLING_1X,
|
|
|
|
'osr_p': bme280_i2c.BME280_OVERSAMPLING_16X,
|
|
|
|
'osr_t': bme280_i2c.BME280_OVERSAMPLING_2X})
|
|
|
|
|
|
|
|
# Start the sensor automatically sensing
|
|
|
|
bme.set_power_mode(bme280_i2c.BME280_NORMAL_MODE)
|
|
|
|
|
|
|
|
|
2020-03-24 22:49:37 +01:00
|
|
|
client = MQTTClient(client_id=config.CLIENT_ID,
|
|
|
|
server=config.MQTT_HOST,
|
|
|
|
user=config.MQTT_USERNAME,
|
|
|
|
password=config.MQTT_PASSWD,
|
|
|
|
port=config.MQTT_PORT)
|
2019-06-30 20:57:20 +02:00
|
|
|
client.connect()
|
|
|
|
|
2020-03-24 22:49:37 +01:00
|
|
|
client.publish("test/bme280/humidity/unit", "%", retain=True, qos=0)
|
|
|
|
time.sleep_ms(100)
|
|
|
|
client.publish("test/bme280/pressure/unit", "hPa", retain=True, qos=0)
|
|
|
|
time.sleep_ms(100)
|
|
|
|
client.publish("test/bme280/temperature/unit", "oC", retain=True, qos=0)
|
|
|
|
time.sleep_ms(1000)
|
|
|
|
|
2019-06-30 20:57:20 +02:00
|
|
|
while 1:
|
|
|
|
bme_data = bme.get_measurement()
|
|
|
|
print(bme_data)
|
2020-03-24 22:49:37 +01:00
|
|
|
client.publish("test/bme280/humidity/value",
|
|
|
|
"{:.0f}".format(bme_data["humidity"]))
|
|
|
|
client.publish("test/bme280/pressure/value",
|
|
|
|
"{:.2f}".format(bme_data["pressure"]/100))
|
|
|
|
client.publish("test/bme280/temperature/value",
|
|
|
|
"{:.1f}".format(bme_data["temperature"]))
|
|
|
|
time.sleep_ms(1000)
|