La mini pantalla del primer artículo era más adecuada para dispositivos más pequeños. Este artículo pretende mostrar cómo se puede implementar una pantalla a gran escala con conocimiento de Python. En este caso, los medios de elección son elementos de matriz de LED, cada uno con 8 x 8 = 64 LED individuales. Al unir varias unidades, se pueden configurar pantallas de tamaño casi ilimitado. Estos son adecuados, por ejemplo, como un "ticker en vivo" para los precios del mercado de valores o como indicadores de resultados en el campo de deportes en casa. Con solo unas pocas instrucciones de Python, se pueden crear pantallas de tiempo o temperatura a gran escala, que se pueden usar de manera muy efectiva en publicidad en muchas ocasiones.
Pantallas de matriz de puntos
Las pantallas de matriz de puntos permiten mostrar números y letras, así como cualquier símbolo y gráfico simple. Esto los hace superiores a los clásicos displays de siete segmentos, que solo permiten mostrar los dígitos del 0 al 9. Además, las pantallas de siete segmentos están limitadas a los tamaños que se han determinado una vez, mientras que las matrices de puntos se pueden escalar como se desee.Además, se pueden lograr niveles de brillo significativamente mayores en comparación con las pantallas OLED. Con matrices LED, se pueden lograr áreas de visualización de varios metros de largo y ancho. Por lo tanto, esta variante de exhibición se usa a menudo para exhibiciones a gran escala o paneles publicitarios en plazas concurridas, estaciones de tren o aeropuertos, en autobuses y trenes públicos, etc. En las bolsas de valores de todo el mundo, muestran los precios actuales de las acciones como los llamados "tickers en vivo". Por cierto, las matrices de puntos son particularmente populares en Asia, ya que también se pueden usar para mostrar caracteres del Lejano Oriente sin ningún problema, como se muestra en la Figura 1.
Controlar
Las matrices de LED con 5 x 7 = 35 LED son muy utilizadas. Pero también hay disponible una amplia variedad de otros diseños. A menudo se pueden encontrar elementos con LED de 8 x 8. Conducir directamente 8 x 8 puntos requeriría 65 líneas ya que se tendrían que conectar 64 terminales de ánodo y un cátodo común. Con una matriz puede arreglárselas con muchas menos conexiones. Aquí 8 LED están interconectados en una columna y una fila. Solo se requieren 8 + 8 = 16 conexiones. La figura 2 muestra el principio de una matriz de 3 x 4. En lugar de 13 conexiones para el control individual de los LED, aquí solo se requieren 7 conexiones.
Por ejemplo, para activar el segundo LED en la segunda fila de una matriz, todas las conexiones excepto la segunda fila deben establecerse en ALTO. La segunda conexión, por otro lado, debe tener potencial GND. En el caso de las columnas, el alto potencial sólo puede estar presente en la segunda columna El control directo de las matrices puntuales inmoviliza una gran parte de los recursos del controlador. Si también se deben registrar los valores de los sensores o controlar los actuadores, incluso un potente controlador ESP32 alcanza rápidamente sus límites. El control de pantallas más grandes con cientos o más LED también se convertiría rápidamente en un problema, por un lado debido a la potencia informática requerida y por otro lado debido a la cantidad limitada de pines disponibles en un controlador. Además, la velocidad de ejecución relativamente baja del código Python también tendría un efecto negativo aquí, por lo que es recomendable utilizar controladores de pantalla económicos como el MAX7219. Estos componentes tienen una interfaz compatible con SPI y, por lo tanto, pueden controlar pantallas con hasta 8 x 8 = 64 elementos de matriz con solo tres pines digitales. La interfaz SPI (Serial Peripheral Interface) se ha generalizado y se utiliza con especial frecuencia en la electrónica de entretenimiento. El sistema de bus y, en particular, su uso bajo MicroPython se describen detalladamente en un libro de Elektor del autor. Los controladores están disponibles junto con el elemento de matriz real como módulos completos. La imagen 3 muestra un ejemplo.
Conectar los componentes del controlador al ESP32 es muy simple. Solo los tres pines SPI deben conectarse a la placa del controlador:
MAX7219_puerto de datos (DIN) D02
MAX7219_carga (CS) puerto D05
MAX7219_reloj (CLK) puerto D04
MAX7219_GND ESP32 TIERRA
Debido al consumo de energía relativamente alto, es recomendable proporcionar la fuente de alimentación externa. Cabe señalar que la tensión de alimentación de los módulos debe rondar los 3,3 V a 4 V para garantizar la compatibilidad con el ESP32. De esta forma, los módulos siguen recibiendo la tensión de alimentación mínima permitida según la hoja de datos. Por otro lado, se evita una sobrecarga de las entradas del controlador. Alternativamente, también se puede utilizar un convertidor de nivel bidireccional de 3,3/5 V. También se deben proporcionar suficientes condensadores de bloqueo. Las líneas VCC y de tierra de baja impedancia también son esenciales. Si se tienen en cuenta estas instrucciones, se pueden configurar pantallas de casi cualquier tamaño. Apenas hay carga en el controlador, ya que solo se deben enviar comandos individuales a través del bus SPI. Además, quedan suficientes pines libres para operar sensores externos u otros periféricos. Nada se interpone en el camino de la realización de pantallas a gran escala con fines publicitarios o en eventos deportivos La figura 4 muestra el diagrama de circuito completo para configurar una pantalla de matriz de 6 dígitos con un módulo controlador ESP32.
Éxito con la biblioteca adecuada
En el paquete de descarga se puede encontrar un enlace a una biblioteca de Python adecuada para controlar los circuitos integrados de Maxim. Después de cargar el archivo del controlador Max7219.py en el controlador, están disponibles las siguientes instrucciones:
spi = SPI(1, velocidad en baudios=10000000, polaridad=1, fase=0, sck=Pin(CLK), mosi=Pin(DIN))
ss = Pin (CS, Pin.SALIDA)
Para el pinout dado arriba:
CLK = 4
DIN = 2
CS = 5
para configurar. Entonces se puede crear un objeto de visualización:
pantalla = max7219.Matrix8x8(spi, ss, MN)
donde MN es el número de elementos de matriz utilizados. Luego puede usar los comandos del Listado 1 para diseñar texto y gráficos, lo que le permite crear anuncios efectivos que se pueden leer bien desde una distancia de varios metros.
Matriz LED en acción
El siguiente código muestra un ejemplo de aplicación para una pantalla con seis elementos de matriz de 8x8:
# LED_matrix_test.py
importar max7219
del pin de importación de la máquina, SPI
spi = SPI(1, tasa de baudios=10000000, polaridad=1, fase=0, sck=pin(4), mosi=pin(2))
ss = Pin(5, Pin.SALIDA)
pantalla = max7219.Matrix8x8(spi, ss, 6)
mostrar.texto('Python',0,0,1)
mostrar.mostrar()
Después de cargar el programa en el controlador ESP, el texto se muestra en la pantalla (Figura 5).
La pantalla se puede ampliar fácilmente con módulos de matriz adicionales. La Figura 6 muestra una matriz con 12 elementos. Sin embargo, no solo se pueden mostrar pantallas estáticas y textos. Los gráficos en movimiento también se pueden implementar fácilmente en Python. La siguiente sección muestra un ejemplo correspondiente.
Marquesina y tablero de cotizaciones
La función de desplazamiento se puede utilizar para crear tickers y similares. Esto significa que los textos más largos también se pueden mostrar en pantallas pequeñas o cortas. El programa del Listado 2 desplaza las letras "Python" de derecha a izquierda en una pantalla de matriz de puntos.
Se acabaron las cartas individuales
mostrar.texto('...',40,0,1)
creado en el borde derecho de la pantalla. Luego se desplazan a la izquierda por el valor pixelDistance usando la función moveLeft:
para i en el rango (8):
pantalla.desplazamiento(-1,0)
dormir(factor de velocidad)
La velocidad de ejecución se puede cambiar a través del valor de speedFactor. La pantalla se puede ver en vivo en acción en un video de YouTube.
Pantalla de temperatura de gran formato
Muchas farmacias, bancos o minoristas intentan atraer la atención de clientes potenciales publicitando con pantallas de temperatura u hora a gran escala. Estas pantallas también son siempre un punto de atracción en eventos deportivos, ferias comerciales, exposiciones o para FabLabs. Para implementar una pantalla de temperatura, por ejemplo, solo tiene que agregar un sensor apropiado a la estructura presentada anteriormente. Una variante especialmente adecuada es la DS18x20 de Maxim Integrated (anteriormente Dallas). Con la biblioteca Python adecuada, el sensor se puede leer sin ningún problema.Estos sensores se comunican a través del bus de un cable y, por lo tanto, solo ocupan un pin de E/S del ESP32. También está disponible una biblioteca Python lista para usar para esta serie de sensores. Además del propio sensor, solo se requiere una resistencia pull-up de 4,7 kΩ. Cuando se utiliza el pull-up interno ESP32, incluso esto se puede omitir. El sensor tiene las siguientes características de rendimiento:
Tensión de alimentación: 3,0 V a 5,5 V
Rango de temperatura: - 55 °C a +125 °C
Precisión de la medición: ±0,5 °C (-10 °C a +85 °C)
Resolución: 9 bits, correspondiente a aproximadamente 1/10 °C
Duración del período de medición: 750 ms (máx.)
No solo se puede evaluar un solo sensor por pin a través de One-Wire-Bus. Gracias al protocolo especial del sistema de bus de un cable, casi cualquier número de sensores de temperatura se pueden consultar en paralelo a través de un solo pin del controlador. A continuación, sin embargo, sólo se utilizará un único sensor.
La imagen 7 muestra la conexión del DS18x20 al ESP32.
Un programa de evaluación para el DS18x20 muestra los valores de temperatura registrados en la consola:
#DS18x20_TempSens_demo.py
del pin de importación de la máquina
importar un cable
importar ds18x20
tiempo de importación
ow = onewire.OneWire(Pin(25)) # iniciar bus de un cable
ow.escanear()
ds=ds18x20.DS18X20(ow) # crea el objeto ds18x20 mientras que es Verdadero: units=ds.scan() # busca unidades ds18x20 ds.convert_temp() # convierte la temperatura de la unidad en unidades: print(ds.read_temp(unit )) #mostrar tiempo.dormir(1) imprimir()
Los módulos para leer el sensor están nuevamente disponibles por defecto en el firmware de MicroPython.
El programa se puede expandir para incluir la pantalla de matriz de LED en solo unas pocas líneas, consulte el Listado 3.
La imagen 8 muestra el resultado. En el libro se pueden encontrar más detalles sobre la conexión de varios sensores para la intensidad de la luz, la humedad o los campos magnéticos, entre otras cosas.
Gráficos animados
Además de letras y datos numéricos, también se pueden presentar gráficos e incluso animaciones en la matriz LED. El programa del Listado 4 evoca cualquier gráfico de píxeles en la pantalla.
El gráfico se crea utilizando el icono de mapa de bits. Los puntos que deberían encenderse más tarde se marcarán con un "1". Los puntos oscuros obtienen un "0":
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 1, 1, 0],
[0, 1, 1, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 0, 1, 1, 1, 1, 0, 0],
De esta forma, se puede crear cualquier icono. La función enumerar convierte el mapa de bits en un gráfico visualizable:
para y, fila en enumerar(icono):
para x, c en enumerar (fila):
pantalla.píxeles(x, y, c)
Esto da como resultado la figura 9 en la matriz LED. Con la función de desplazamiento en el bucle principal, la imagen generada de esta manera se puede mover a través de la unidad de visualización (ver también el video de YouTube).
Resumen y perspectiva
Después de que se presentaran los comandos elementales en el primer artículo de la serie [1], ahora podrían usarse en diversas aplicaciones prácticas en la segunda parte. Las poderosas bibliotecas hacen posible implementar proyectos impresionantes con solo unas pocas líneas de código. Esto confirma también el notable rendimiento de MicroPython para aplicaciones de controlador. Puede encontrar más información y muchos proyectos prácticos en el libro "MicroPython para microcontroladores". Entre otras cosas, se analizan en detalle el control de servos, la transmisión inalámbrica de datos a través de RFID, el protocolo MQTT y la transmisión de valores de sensores a Internet.La combinación de Python con el campo de rápido crecimiento del aprendizaje automático y la inteligencia artificial. También se habla de aplicaciones que antes eran impensables y que serán posibles en un futuro próximo. Junto con los algoritmos de procesamiento de imágenes basados en Python, el desarrollador tiene abierta una amplia gama de opciones orientadas al futuro. 210179-B-02
¿Alguna pregunta o comentario?
¿Tiene preguntas técnicas o comentarios sobre este artículo? ¡Escríbanos a redaktion@elektor.de!