New
#471
This "should" work on the PICO Explorer Base, if I didn't miss something.
Code:# This example lets you plug a BME280 breakout into your Pico Explorer to make a little indoor weather station, with barometer style descriptions. import utime from breakout_bme280 import BreakoutBME280 from pimoroni_i2c import PimoroniI2C # Pico Explorer boilerplate import picoexplorer as display width = display.get_width() height = display.get_height() display_buffer = bytearray(width * height * 2) display.init(display_buffer) PINS_BREAKOUT_GARDEN = {"sda": 4, "scl": 5} PINS_PICO_EXPLORER = {"sda": 20, "scl": 21} i2c = PimoroniI2C(**PINS_PICO_EXPLORER) bme = BreakoutBME280(i2c) # lets set up some pen colours to make drawing easier tempcolour = display.create_pen(255, 255, 255) # this colour will get changed in a bit humidcolour = display.create_pen(255, 255, 255) # this colour will get changed in a bit presscolour = display.create_pen(255, 255, 255) # this colour will get changed in a bit white = display.create_pen(255, 255, 255) black = display.create_pen(0, 0, 0) red = display.create_pen(255, 0, 0) # converts the temperature into a barometer-type description and pen colour def describe_temperature(temperature): global tempcolour if temperature < 0: description = "very cold" tempcolour = display.create_pen(0, 0, 255) elif 0 <= temperature < 20: description = "cold" tempcolour = display.create_pen(255, 255, 0) elif 13 <= temperature < 25: description = "temperate" tempcolour = display.create_pen(0, 255, 0) elif 25 <= temperature < 30: description = "hot" tempcolour = display.create_pen(255, 140, 0) elif temperature >= 30: description = "very hot" tempcolour = display.create_pen(255, 0, 0) else: description = "" tempcolour = display.create_pen(0, 0, 0) return description # converts pressure into barometer-type description def describe_pressure(pressure): global presscolour if pressure < 982: description = "storm" presscolour = display.create_pen(255, 0, 0) elif 982 <= pressure < 1004: description = "rain" presscolour = display.create_pen(255, 255, 0) elif 1004 <= pressure < 1026: description = "change" presscolour = display.create_pen(0, 255, 0) elif 1026 <= pressure < 1048: description = "fair" presscolour = display.create_pen(0, 0, 255) elif pressure >= 1048: description = "dry" presscolour = display.create_pen(255, 140, 0) else: description = "" presscolour = display.create_pen(0, 0, 0) return description # converts humidity into good/bad description def describe_humidity(humidity): global humidcolour if humidity < 30: description = "dry" humidcolour = display.create_pen(255, 140, 0) elif 30 <= humidity <= 60: description = "good" humidcolour = display.create_pen(0, 255, 0) elif 60 < humidity < 80: description = "humid" humidcolour = display.create_pen(255, 255, 0) elif humidity >= 80: description = "humid" humidcolour = display.create_pen(255, 0, 0) return description while True: # read the sensors temperature, pressure, humidity = bme.read() # pressure comes in pascals which is a reight long number, lets convert it to the more manageable hPa pressurehpa = pressure / 100 # draw a thermometer/barometer thingy display.set_pen(125, 125, 125) display.circle(190, 190, 40) display.rectangle(180, 45, 20, 140) # switch to red to draw the 'mercury' display.set_pen(red) display.circle(190, 190, 30) thermometerheight = int(120 / 30 * temperature) if thermometerheight > 120: thermometerheight = 120 if thermometerheight < 1: thermometerheight = 1 display.rectangle(186, 50 + 120 - thermometerheight, 10, thermometerheight) # drawing the temperature text display.set_pen(white) display.text("temperature:", 10, 10, 240, 3) display.set_pen(tempcolour) display.text('{:.1f}'.format(temperature) + 'C', 10, 30, 240, 5) display.set_pen(white) display.text(describe_temperature(temperature), 10, 60, 240, 3) # and the pressure text display.set_pen(white) display.text("pressure:", 10, 90, 240, 3) display.set_pen(presscolour) display.text('{:.0f}'.format(pressurehpa) + 'mb', 10, 110, 240, 5) display.set_pen(white) display.text(describe_pressure(pressurehpa), 10, 140, 240, 3) # and the humidity text display.set_pen(white) display.text("humidity:", 10, 170, 240, 3) display.set_pen(humidcolour) display.text('{:.0f}'.format(humidity) + '%', 10, 190, 240, 5) display.set_pen(white) display.text(describe_humidity(humidity), 10, 220, 240, 3) # time to update the display display.update() # waits for 1 second and clears to black utime.sleep(1) display.set_pen(black) display.clear()
Last edited by alphanumeric; 12 Oct 2021 at 13:39.