Sun. Dec 4th, 2022

El Raspberry Pi Pico ciertamente puso al gato entre las palomas en 2021, pero le faltaba una característica clave, Wi-Fi. Claro que podemos piratear nuestra propia solución, pero tuvimos que esperar hasta mediados de 2022 para que Raspberry Pi anunciara Raspberry Pi Pico W para obtener soporte oficial. Raspberry Pi Pico W se lanzó con un firmware MicroPython robusto, pero CircuitPython, nuestro favorito. lanzamiento del microcontrolador Python, lamentablemente le faltaba soporte. Puede haber tomado algunos meses, pero gracias al arduo trabajo de @jeffepler ahora tenemos CircuitPython 8 Beta 2 que ofrece compatibilidad Wi-Fi para Pico W, al tiempo que conserva el ecosistema familiar de CircuitPython. Para celebrar este hito, elaboramos un proyecto para resaltar CircuitPython en Raspberry Pi Pico W. Trabajaremos con datos en vivo de una fuente de noticias RSS, convertidos a JSON y luego mostrados en una pequeña pantalla OLED.

Construyendo el circuito

(Crédito de la imagen: Tom’s Hardware) Para este proyecto necesitará El circuito es esencialmente solo la pantalla OLED conectada a Raspberry Pi Pico a través de una conexión I2C. La única adición al circuito son dos resistencias de 4,7 K ohmios que se conectan al riel + y los pines SDA y SCL del Pico. Este riel está conectado a 3,3 V y las resistencias se usan para subir los pines, listos para enviar y recibir datos. Las conexiones son las siguientes Color del cableRaspberry Pi Pico WBreadboardOLED DisplayGreenGP0 (SDA)N/ASDAYellowGP1 (SCL)N/ASCLRed3V3 Out +VINNegroGNDN/AGND

Configuración de CircuitPython

1. Vaya a la página oficial de CircuitPython para Raspberry Pi Pico W y descargue la última versión de la imagen del firmware UF2. Al momento de escribir esto, esto era CircuitPython 8 Beta 2.2. Mientras mantiene presionado el botón BOOTSEL, conecte el Raspberry Pi Pico W a su computadora. Aparecerá una nueva unidad, RPI-RP23. Copie el archivo CircuitPython UF2 descargado a RPI-RP2. Esto escribirá CircuitPython en el almacenamiento flash interno del Pico W. Aparecerá una nueva unidad, CIRCUITPY. Necesitamos varias bibliotecas de CircuitPython antes de poder continuar. Estas bibliotecas de código preescrito agregan características adicionales a un proyecto.1. Descargar el paquete de bibliotecas para la misma versión de CircuitPython instalada en el Pico W. Instalamos CircuitPython 8, así que descargamos el paquete para la versión 8.x.2. Extraiga el paquete a su escritorio y luego abre la carpeta lib contenida dentro de.Cómo obtener las noticias con Raspberry Pi(Crédito de la imagen: Hardware de Tom)3. Copie los siguientes archivos/carpetas de esta carpeta lib a la carpeta lib en la unidad CIRCUITPY.adafruit_bitmap_fontadafruit_display_textadafruit_displayio_ssd1306.mpyadafruit_requests.mpyCómo obtener las noticias con Raspberry Pi(Crédito de la imagen: Hardware de Tom)

Trabajando con CircuitPython

1. Descargar e instalar Thonny si no lo tienes ya. Thonny es un editor de Python que cubre Python 3, MicroPython y CircuitPython.2. Abra Thonny y vaya a Herramientas >> Opciones.Cómo obtener las noticias con Raspberry Pi(Crédito de la imagen: Hardware de Tom)3. Seleccione Intérprete, luego configure el intérprete como CircuitPython, transfiéralo a automático y haga clic en Aceptar. Thonny ahora se conectará al Pico W con CircuitPython. El código de nuestro proyecto se compone de dos archivos, secrets.py y code.py. El archivo secrets.py es esencialmente un módulo de Python con dos variables que contendrá el SSID de nuestro punto de acceso Wi-Fi y la contraseña. Es una buena práctica guardar los detalles de su Wi-Fi en un archivo separado llamado secrets.py, esto reduce el riesgo de compartir accidentalmente sus credenciales. Este proceso funciona para CircuitPython y MicroPython.1. Crear un nuevo archivo y allí crear dos objetos, ssid y contraseña.2. Para el objeto ssid, asígnele el nombre de su punto de acceso/enrutador Wi-Fi.ssid = “SU NOMBRE DE WI-FI AP AQUÍ”3. Para la contraseña, asigne la contraseña de Wi-Fi.contraseña = “TU CONTRASEÑA SECRETA”4. Guarde el archivo en la unidad CIRCUITPY como secrets.py.

Listado de códigos de Secrets.py

ssid = “SU NOMBRE DE WI-FI AP AQUÍ” contraseña = “SU CONTRASEÑA SECRETA” El código para este proyecto está contenido en un archivo llamado code.py. Este archivo se ejecutará automáticamente cuando se encienda el Pico W, esta es una característica de CircuitPython. En MicroPython nombraríamos el archivo main.py para lograr el mismo resultado. Ahora comenzamos el proceso de escritura del código que compondrá nuestro proyecto.1. Haga clic en Archivo >> Abrir y seleccione el dispositivo CircuitPython. Abra code.py en la unidad CIRCUITPY. Elimine cualquier código en el archivo.Cómo obtener las noticias con Raspberry Pi(Crédito de la imagen: Hardware de Tom)2. Importar módulos de código preescrito para manejar pausar (tiempo) nuestro código, establecer una dirección IP, usar el chip Wi-Fi de Pico W y crear sockets web. importar tiempo importar ipaddress importar wifi importar socketpool3. Importa cuatro módulos más para conexiones seguras, para realizar solicitudes web, un módulo con nuestros datos de inicio de sesión Wi-Fi y un módulo para interactuar con el tablero de importación de GPIO.import ssl import adafruit_requests import secrets4. Importar el grupo final de módulos para acceso de bus acelerado, una biblioteca de visualización, un módulo de texto estilo terminal, texto desplazable y un controlador para la pantalla OLED.5. Suelte la pantalla para CircuitPython para usarlo y luego especifique los pines GPIO utilizados para I2C.displayio.release_displays() i2c = busio.I2C(tablero.GP1, tablero.GP0)6. Especifique la interfaz I2C y la dirección I2C para la pantalla OLED en el bus de pantalla y luego utilícelo para crear un objeto de visualización. No olvide configurar el ancho y el alto para que coincidan con su pantalla OLED. Para encontrar la dirección I2C de la pantalla OLED, consulte su hoja de datos o utilice un escáner I2C para buscarla.display_bus = displayio.I2CDisplay(i2c, device_address=0x3C) display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=32 )7. Conéctate a la red wifi utilizando el ssid y la contraseña almacenados en el módulo de secretos.wifi.radio.connect(ssid=secrets.ssid,password=secrets.password)8. Crea un grupo de sockets que podemos usar para conexiones y luego crea una nueva sesión HTTP para ser utilizado al realizar solicitudes web.pool = socketpool.SocketPool(wifi.radio) request = adafruit_requests.Session(pool, ssl.create_default_context())9. Crea un ciclo while True para ejecutar el código principal del proyecto. Este ciclo continuará mientras el Pico W esté encendido. Mientras sea verdadero:10. Cree un banner y guárdelo en el objeto toms.El banner es una cadena de * seguida de “Noticias de hardware de Tom” y luego otras 10 más *.toms = “*”*10+” Noticias de hardware de Tom”+”*”*1011. Cree un objeto para manejar el desplazamiento del texto almacenado en el objeto toms. El tiempo animado maneja la velocidad de desplazamiento, la escala se usa para aumentar el tamaño del texto, siendo 3 el más grande disponible para nuestra pantalla de 128×32. 3)12. Establecer la posición del texto (horizontal, x y vertical, y).my_scrolling_label.x = 10 my_scrolling_label.y = 1013. Muestra el texto en la pantalla OLED.display.show(mi_etiqueta_de_desplazamiento)14. Usa un bucle for para desplazarte por el banner a través de la pantalla. Usamos la longitud del texto almacenado en el objeto toms, menos seis, para crear un desplazamiento agradable. Esto deberá modificarse para adaptarse al texto de su banner. para i en el rango (len (toms) -6): my_scrolling_label.update() time.sleep (0.1)
15. Crea un objeto, alimenta a almacenar la URL del feed JSON que contiene los titulares de las noticias. Utilizamos rss2json.com para convertir la fuente RSS de Tom’s Hardware en JSON, con la que se puede trabajar fácilmente en CircuitPython.feed = request.get(“https://api.rss2json.com/v1/api.json?rss_url=https %3A%2F%2Fwww.tomshardware.com%2Ffeeds%2Fall”)16. Use un ciclo for para recuperar las primeras cinco historias de la historia feed.for en el rango (5):17. Imprime el titular de la historia al shell de Python.print(feed.json()[‘items’][story][‘title’])18. Actualiza el texto desplazable para desplazar el títulocon un buffer de 20 espacios en blanco antes del texto y una escala (tamaño de texto) de 2.my_scrolling_label = ScrollingLabel(terminalio.FONT, text=” “*20+str(feed.json()[‘items’][story][‘title’]), max_characters=20, animate_time=0.1, scale=2)19. Establecer la posición del texto (horizontal, x y vertical, y).my_scrolling_label.x = 10 my_scrolling_label.y = 1020. Muestra el texto en la pantalla OLED.display.show(mi_etiqueta_de_desplazamiento)21. Usa otro bucle for para desplazarte por el texto del título. Las iteraciones en el bucle se establecen por la longitud del título, más 21 caracteres para crear un búfer. para i en el rango (len (feed.json ())[‘items’][story][‘title’])+21): my_scrolling_label.update() time.sleep(0.1)22. Finalmente agregue un sueño de 30 minutos, (1800 segundos) para configurar el Pico W para buscar nuevos titulares cada media hora.time.sleep(1800)23. Guarda el proyecto como código.py a CIRCUITPY y haga clic en Ejecutar para probar el inicio del código.Cómo obtener las noticias con Raspberry Pi(Crédito de la imagen: Tom’s Hardware) Debería ver que la pantalla OLED cobra vida y se desplaza un banner, luego los titulares de las noticias. Como guardamos el proyecto en el archivo code.py, este código se ejecutará automáticamente cuando se encienda el Pico W.

Listado completo de códigos

importar tiempo importar ipaddress importar wifi importar socketpool importar ssl importar adafruit_requests importar secretos importar tablero importar busio importar displayio importar terminalio de adafruit_display_text.scrolling_label importar ScrollingLabel importar adafruit_displayio_ssd1306 # Configurar la pantalla displayio.release_displays() i2c = busio.I2C(board.GP1, board .GP0) display_bus = displayio.I2CDisplay(i2c, device_address=0x3C) display = adafruit_displayio_ssd1306.SSD1306(display_bus, ancho=128, alto=32) wifi.radio.connect(ssid=secrets.ssid,password=secrets.password) pool = socketpool.SocketPool(wifi.radio) request = adafruit_requests.Session(pool, ssl.create_default_context()) while True: toms = “*”*10+” Tom’s Hardware News”+”*”*10 my_scrolling_label = ScrollingLabel(terminalio .FONT, text=toms, max_characters=20, animate_time=0.1, scale=3) my_scrolling_label.x = 10 my_scrolling_label.y = 10 display.show(my_scrolling_label) for i in range(len(toms)-6): my_scrolling_label. actualizar () tiempo.dormir (0.1) f eed = request.get(“https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fwww.tomshardware.com%2Ffeeds%2Fall”) para la historia en el rango (5): imprimir(alimentar.json()[‘items’][story][‘title’]) my_scrolling_label = ScrollingLabel(terminalio.FONT, text=” “*20+str(feed.json()[‘items’][story][‘title’]), max_characters=20, animate_time=0.1, scale=2) my_scrolling_label.x = 10 my_scrolling_label.y = 10 display.show(my_scrolling_label) for i in range(len(feed.json()[‘items’][story][‘title’])+21): my_scrolling_label.update() time.sleep(0.1) time.sleep(1800)