"""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) wlan.active(True) 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(): machine.idle() # save power while waiting 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) client = MQTTClient(client_id=config.CLIENT_ID, server=config.MQTT_HOST, user=config.MQTT_USERNAME, password=config.MQTT_PASSWD, port=config.MQTT_PORT) client.connect() client.publish("test/bme280/humidity/unit", "%", retain=True, qos=0) client.publish("test/bme280/humidity/desc", "Capteur Bosch BME280", retain=True, qos=0) time.sleep_ms(100) client.publish("test/bme280/pressure/unit", "hPa", retain=True, qos=0) client.publish("test/bme280/pressure/desc", "Capteur Bosch BME280", retain=True, qos=0) time.sleep_ms(100) client.publish("test/bme280/temperature/unit", "degC", retain=True, qos=0) client.publish("test/bme280/temperature/desc", "Capteur Bosch BME280", retain=True, qos=0) time.sleep_ms(100) client.publish("test/esp8266_0/wifi/ssid", config.WIFI_SSID, retain=True, qos=0) client.publish("test/esp8266_0/wifi/ip", wlan.ifconfig()[0], retain=True, qos=0) time.sleep_ms(1000) # For each nature, a list describe: # - mqtt topic # - string format # - factor (multiplier) topics = {"humidity" : ["test/esp8266_0/humidity/value", "{:.0f}", 1], "pressure" : ["test/esp8266_0/pressure/value", "{:.2f}", 0.01], "temperature" : ["test/esp8266_0/temperature/value", "{:.1f}", 1]} while 1: bme_data = bme.get_measurement() print(bme_data) for nature, param in topics.items(): client.publish(param[0], param[1].format(bme_data[nature]*param[2])) client.publish("test/esp8266_0/wifi/rssi", "{:.0f}".format(wlan.status('rssi'))) time.sleep_ms(1000)