Tabla de contenido:

Estación meteorológica Inky_pHAT: 5 pasos
Estación meteorológica Inky_pHAT: 5 pasos

Video: Estación meteorológica Inky_pHAT: 5 pasos

Video: Estación meteorológica Inky_pHAT: 5 pasos
Video: ⛅ Estación meteorológica con webserver, esp32 y pantalla e-paper - PCBWay.es 2024, Mes de julio
Anonim
Estación meteorológica Inky_pHAT
Estación meteorológica Inky_pHAT
Estación meteorológica Inky_pHAT
Estación meteorológica Inky_pHAT
Estación meteorológica Inky_pHAT
Estación meteorológica Inky_pHAT
Estación meteorológica Inky_pHAT
Estación meteorológica Inky_pHAT

Aquí me gustaría describir una estación meteorológica basada en Raspberry Pi Zero muy simple y compacta, que muestra los valores medidos por un sensor de temperatura / presión / humedad BME280 en una pantalla de papel electrónico / tinta electrónica Pimoroni Inky pHAT. Para permitir la conexión de sensores y el pHAT al GPIO del Pi, coloqué un pirata informático Pimorini Pico HAT con dos encabezados hembra conectados entre el GPIO y la pantalla. El dispositivo se ha utilizado para conectar varios sensores, por lo que la versión BME280 que se describe aquí es solo un ejemplo.

A diferencia de las pantallas LCD, las pantallas de tinta electrónica conservan la imagen incluso si se ha apagado la alimentación. Por lo tanto, son una muy buena solución si desea mostrar información que se actualiza solo de vez en cuando, especialmente para construir dispositivos de bajo consumo. El principal beneficio de la versión monocromática / negra del Inky pHAT es que la actualización de la pantalla toma aproximadamente un segundo, en lugar de los diez a quince segundos requeridos por las versiones de tres colores. Ver película.

La biblioteca Blinka de Adafruit permite ejecutar el código de Circuit Python en la Raspberry Pi, y Adafruit ofrece muestras de Circuit Python para una amplia variedad de sensores. Puede encontrar una descripción detallada de cómo instalar Blinka y los códigos de Circuit Python en el sitio web de Adafruit. Las bibliotecas que probé hasta ahora (BMP280, BME280, TSL2591, TCS34785, VEML7065,…) funcionaban muy bien, mientras que había problemas menores en algunos de los códigos de ejemplo.

BME280 es un sensor para medir temperatura, humedad y presión atmosférica. Los desgloses de BMP280 están disponibles en muchos proveedores, incluido Adafruit, pero aquí estaba usando una versión china barata. Tenga en cuenta que estos utilizan diferentes direcciones i2c (Adafruit: 0x77, otros: 0x76).

La ruptura está conectada al Pi por i2c, y leer el sensor es muy simple usando la biblioteca y el código de ejemplo.

Paso 1: Materiales utilizados

Materiales usados
Materiales usados
Materiales usados
Materiales usados
Materiales usados
Materiales usados
Materiales usados
Materiales usados

Una Raspberry Pi Zero, con un cabezal macho adjunto. Pero cualquier versión de Raspberry Pi serviría.

Una Pimoroni Inky pHAT, versión negra / monocromática, 25 € | 22 £ | 20US $, en Pimoroni.

Un hacker Pimoroni Pico HAT, 2,50 € | 2 £, con dos encabezados femeninos adjuntos, uno de ellos un encabezado de refuerzo con pines más largos. He construido dos versiones diferentes, consulte la descripción a continuación.

Una ruptura de BME280, AZ Entrega a través de Amazon.de @ 7.50 €, con encabezado adjunto.

Cables de puente de alargamiento

Opcional:

Un paquete de alimentación USB, para aplicaciones móviles

Una carcasa para el Pi o el dispositivo (no se muestra aquí)

Paso 2: Montaje

Montaje
Montaje
Montaje
Montaje
Montaje
Montaje
  • Suelde los encabezados femeninos al pirata informático Pico HAT. Antes de soldar, verifique la orientación correcta. He construido dos versiones de esto, para diferentes propósitos. Uno con el cabezal elevador orientado hacia abajo colocado en la primera fila y un cabezal elevador normal hacia arriba / orientado hacia la fila trasera, y una versión con el cabezal elevador orientado hacia abajo en la fila trasera y un cabezal hembra en ángulo recto en la primera fila.. Ver imágenes. La primera versión permite acoplar e intercambiar sensores y cables de forma muy sencilla, mientras que la versión con cabezal orientado hacia el interior permite encerrar Pi, sensor e Inky pHAT en una carcasa. Alternativamente, puede soldar los cables que conectan GPIO y el sensor directamente al pirata informático Pico HAT y / o soldar el pirata informático Pico HAT directamente a los pines GPIO. En cualquier caso, utilice la mínima cantidad de soldadura necesaria.
  • Suelde el cabezal al sensor, si es necesario.
  • Apile la unidad de hacker Pico HAT modificada en el Pi, luego agregue el Inky pHAT. Si es necesario, inserte algún soporte, p. Ej. Un bloque de espuma o separadores, para Inky pHAT.
  • Conecte los cables y el sensor, utilizando los puertos 3V, GND, SDA y SCL. No todos los sensores sobrevivirán a 5V, así que verifique antes de conectarlos a puertos de 5V.
  • Instale la biblioteca Blinka, luego instale la biblioteca Circuit Python BME280 de Adafruit.
  • Instale la biblioteca Inky pHAT de Pimoroni.
  • Instale el código Python de ejemplo que se describe en un paso posterior y se adjunta a este instructivo.
  • Ejecute el código.

Paso 3: uso del dispositivo

Usando el dispositivo
Usando el dispositivo

Hay dos opciones para usar el dispositivo.

El código como se muestra aquí se iniciará usando una pantalla adjunta, pero luego podría ejecutarse sin ella.

Con pequeñas modificaciones en el código, puede usar crontab para realizar mediciones en puntos de tiempo definidos. Esto permitiría reducir aún más el consumo de energía. Se pueden encontrar excelentes descripciones de cómo usar crontab en otros lugares.

Junto con un paquete de energía, puede construir un dispositivo móvil y usarlo para medir las condiciones dentro o fuera, en la nevera, en la sauna, en su humidor, en la bodega, en un avión,….

Con un Zero W, no solo puede mostrar los valores en la pantalla, sino también enviarlos a un servidor o su sitio web a través de WLAN, como se describe en otra parte.

Paso 4: el script BME280

El guión BME280
El guión BME280

Como se mencionó anteriormente, debe instalar las bibliotecas Adafruit Blinka y Circuit Python BME280, así como la biblioteca Pimoroni Inky pHAT.

El código primero inicializa el sensor y Inky pHAT, luego lee los valores de temperatura, presión y humedad del sensor y los muestra en la pantalla y en la pantalla de tinta electrónica. Usando el comando time.sleep (), se toman medidas cada minuto. Ajuste según sea necesario. Al establecer un parámetro de idioma, puede cambiar el idioma utilizado para mostrar los resultados.

Con la pantalla de tinta electrónica Inky pHAT, primero crea la imagen para que se muestre en la memoria antes de que finalmente se transfiera a la pantalla mediante el comando inkyphat.show (). La biblioteca Inky pHAT está simplificando el proceso, ofreciendo comandos para dibujar y formatear texto, líneas, rectángulos, círculos o usar imágenes de fondo.

Además de los valores medidos, también se muestra el tiempo de medición.

Tenga en cuenta que tanto el script como las bibliotecas están escritos en Python 3, por lo tanto, ábralo y ejecútelo usando Py3 IDLE o equivalente.

# Un script para el sensor de temperatura / presión / humedad bme280 (versión que no es de Adafruit) # y el inky pHAT - versión en negro # # versión Dec 01 2018, Dr H # # Requiere las bibliotecas Adafruit Blinka y Circuit Python BME280 # y Pimoroni Inky pHAT biblioteca importar tiempo importar fecha y hora importar tablero importar busio desde adafruit_bme280 importar Adafruit_BME280 desde adafruit_bme280 importar Adafruit_BME280_I2C importar inkyphat importar sys desde PIL importar ImageFont inkyphat.set_colour ('black') # para b / w inky phat inkyphat (180) # turn display 180 ° font1 = ImageFont.truetype (inkyphat.fonts. FredokaOne, 27) # Seleccionar fuente estándar font2 = ImageFont.truetype (inkyphat.fonts. FredokaOne, 19) # Seleccionar datos de fuente estándar # lang = "DE" # establecer parámetro de idioma, default ("") -> english lang = "EN" i2c = busio. I2C (board. SCL, board. SDA) bmp = Adafruit_BME280_I2C (i2c, address = 0x76) # dirección i2c por defecto (para Adafruit BMP280) 0x77 (por defecto), 0x76 para la ruptura china) #set la presión de referencia # requerida para al titute el cálculo, por favor ajuste. Valor estándar 1013.25 hPa # entrada manual: #reference_hPa = input ("Ingrese la presión de referencia en hPa:") # o # ajuste la presión en el momento de inicio como referencia, p. Ej. para mediciones de altura relativa time.sleep (1) # esperar un segundo antes de la 1a medición j = 0 pres_norm_sum = 0 mientras que j está en el rango (5): # tomar cinco mediciones para definir el valor de referencia pres_norm_sum = pres_norm_sum + bmp.pressure j = j + 1 time.sleep (1) reference_hPa = (pres_norm_sum / j) # establecer la medición inicial como punto de referencia para habilitar las mediciones de altura bmp.sea_level_pressure = float (reference_hPa) print () while True: #run eternamente, modificar para crontab-version # medido valores t = bmp.temperature p = bmp.pressure h = bmp.humidity a = bmp.altitude # calculado por la biblioteca adafruit a partir de la presión #timestamp ts = datetime.datetime.now () # timestamp ts0_EN = '{:% Y-% m-% d} '. format (ts) # timestamp - fecha, formato EN ts0_DE =' {:% d.% m.% Y} '. format (ts) # timestamp - fecha, formato alemán ts1 =' {: % H:% M:% S} '. Formato (ts) # marca de tiempo - tiempo tmp = "{0: 0.1f}". Formato (t) pre = "{0: 0.1f}". Formato (p) hig = "{0: 0.1f}". Format (h) alt="{0: 0.1f}". Format (a) tText = "Temp.:" pText_EN = "Presión:" pText_DE = "Luftdruck:" h Text_EN = "Humedad:" hText_DE = "rel. LF: "aText_EN =" Altitud: "aText_DE =" Höhe üNN: "# exakt: ü. NHN, über Normal Höhen Null if (lang ==" DE "): ts0 = ts0_DE aText = aText_DE pText = pText_DE hText = hText_DE else: # inglés predeterminado ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # imprimir valores para mostrar print (ts) print (tText, tmp, "° C") print (pText, pre, "hPa") print (hText, hig, "%") print (aText, alt, "m") print () # imprime valores a Inky pHAT t1 = 5 # tab 1, primera columna, simplifica la optimización del diseño t2 = 110 # tab 2, segunda columna inkyphat. clear () inkyphat.text ((t1, 0), ts0, inkyphat. BLACK, font2) # escribir fecha de marca de tiempo inkyphat.text ((t2, 0), ts1, inkyphat. BLACK, font2) # escribir tiempo de marca de tiempo inkyphat.line ((t1, 25, 207, 25), 1, 3) # dibuja una línea inkyphat.text ((t1, 30), tText, inkyphat. BLACK, font2) inkyphat.text ((t2, 30), (tmp + "° C"), inkyphat. BLACK, font2) inkyphat.text ((t1, 55), pText, inkyphat. BLACK, font2) inkyphat.text ((t2, 55), (pre + "hPa"), inkyphat. NEGRO, fuente2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text ((t2, 80), (hyg + "%"), inkyphat. BLACK, font2) # alternativamente mostrar la altura calculada # inkyphat.text (((t1, 80), aTexto, inkyphat. BLACK, font2) # inkyphat.text ((t2, 80), (alt + "m"), inkyphat. BLACK, font2) inkyphat.show () time.sleep (51) # espere unos segundos antes de las siguientes mediciones, +19 segundos por ciclo inkyphat.clear () # procedimiento de visualización de Inky pHAT vacío, inkyphat.show () # silencio para la versión crontab

Paso 5: el script BMP280

El BMP280 es muy similar al sensor BME280, pero solo mide la temperatura y la presión. Los scripts son muy similares, pero necesita diferentes bibliotecas de Circuit Python. Aquí, en lugar de la humedad, se muestra una altura calculada, basada en una presión de referencia.

Adjunto encontrará el guión.

Recomendado: