Leer Primero

Como se utiliza este blog?

Mostrando las entradas con la etiqueta raspberry. Mostrar todas las entradas
Mostrando las entradas con la etiqueta raspberry. Mostrar todas las entradas

martes, 14 de marzo de 2023

Bluetooth en la Raspberry Pi Pico W

Bienvenido a mi blog, hoy hablaremos un poco de la utilización de la funcionalidad Bluetooth en la Raspberry Pi Pico W, como habíamos dicho en el último post "Nuevos Microcontroladores Raspberry Pi Pico W, H y WH" el bluetooth venia desactivado por defecto, por cuestiones de licencias, certificados o legislaciones, pero ya se ha lanzado la versión 1.5.1 del SDK para la Pi Pico W, para programar en C++ y la última compilación de MicroPython, ahora su Pico W actual ha adquirido la capacidad de comunicarse con dispositivos Bluetooth y Bluetooth LE. Específicamente, se admite Bluetooth Classic, con la excepción temporal de ACL/SCO, junto con las funciones BLE Central y Peripheral. Las cosas también se pueden configurar para que pueda habilitar Bluetooth Classic y BLE individualmente o tener ambos disponibles al mismo tiempo. Los detalles completos de  los protocolos y perfiles de Bluetooth compatibles  están disponibles en GitHub.

SDK = “Software Development Kit”


Bibliotecas de Bluetooth para la Raspberry Pi Pico W

BTstack proporciona la API de Bluetooth y viene con las siguientes bibliotecas:

  • pico_btstack_ble- Agrega compatibilidad con Bluetooth Low Energy (LE).
  • pico_btstack_classic- Agrega compatibilidad con Bluetooth Classic.
  • pico_btstack_sbc_encoder- Agrega compatibilidad con el codificador de codificación de subbanda (SBC) de Bluetooth.
  • pico_btstack_sbc_decoder- Agrega compatibilidad con el decodificador de codificación de subbanda (SBC) de Bluetooth.
  • pico_btstack_bnep_lwip- Agrega compatibilidad con el protocolo de encapsulación de red Bluetooth (BNEP) mediante LwIP.
  • pico_btstack_bnep_lwip_sys_freertos- Agrega compatibilidad con el protocolo de encapsulación de red Bluetooth (BNEP) mediante LwIP con FreeRTOS para NO_SYS=0

Para obtener más información, consulte las notas del SDK 1.5.1 en el GitHub de Raspberry Pi.

Raspberry Pi Pico W Bluetooth Ejemplos

La biblioteca de ejemplos de Raspberry Pi GitHub se actualizó con algunos programas de muestra que puede ejecutar en el Bluetooth de la Pi Pico W. Incluyen funciones como el uso de Pi Pico W para fines de audio, incluida la transmisión, el control de reproducción y la alternancia de volumen. También hay una variedad de ejemplos de dispositivos de interacción humana que le permitirán imitar un teclado, un mouse o un joystick (algo así como tipo Rubber Ducky).


Primeros pasos con Bluetooth en la Pi Pico W

La forma más rápida de comenzar con Bluetooth en la Pi Pico W es ejecutar uno de los ejemplos usando las instrucciones de inicio rápido de Pi Pico SDK. Luego, en lugar de ejecutar <hello_world.c> como se muestra en el paso 3 de instrucciones, ejecute uno de los ejemplos de Pico Bluetooth en la página de GitHub.

Enrutar el tráfico de Wi-Fi y Bluetooth a través del único bus SPI de tres pines entre RP2040 y CYW43439 ha sido un desafío de ingeniería sustancial. La biblioteca BTstack de BlueKitchen proporciona compatibilidad con Bluetooth Classic y BLE en el SDK.

Ten en cuenta consultar el libro Conexión a Internet con Raspberry Pi Pico W, que lo guiará para comenzar a usar Bluetooth LE usando C++ SDK y con MicroPython.


Interesante opción para Raspberry Pi Pico W con soporte para BASIC y wifi https://geoffg.net/webmite.html


Instalación del SDK v1.5.1 en Windows 11 x64


PREGUNTAS FRECUENTES


¿Puedo utilizar Bluetooth Classic con la Pico W?

Por supuesto, Pico W es compatible con Bluetooth Classic y BLE.

¿Puedo conectar varios dispositivos a la Pico W simultáneamente?

Sí, Pico W puede actuar como dispositivo central y conectarse a varios periféricos Bluetooth simultáneamente. También puede utilizar Bluetooth Classic y BLE simultáneamente. Así que puedes crear sistemas ultracomplejos en los que Pico W se comunique con muchos sensores o controle varios dispositivos a la vez.

¿Cuál es el alcance Bluetooth de la Pico W?

Normalmente, hasta 30 metros en espacios abiertos. Sin embargo, el alcance puede variar en función de factores ambientales como obstáculos, interferencias e intensidad de la señal.

¿Puedo utilizar el Pico W como periférico Bluetooth?

La Pico W puede funcionar como dispositivo central o periférico. Así, permite que otros dispositivos centrales Bluetooth (como smartphones, tabletas u ordenadores) se conecten a ella.

¿Cómo programo la funcionalidad Bluetooth en la Pico W?

Puede programar la funcionalidad Bluetooth en la Pico W utilizando el Raspberry Pi Pico SDK versión 1.5.1. El SDK proporciona bibliotecas y ejemplos específicos para el desarrollo de Bluetooth. Le permite implementar servicios Bluetooth, características y manejar protocolos de comunicación.

¿Cuáles son los requisitos de alimentación para Bluetooth en la Pico W?

Bluetooth está diseñado para ahorrar energía. Por tanto, Pico W consume un mínimo de energía durante los periodos de inactividad y puedes optimizar aún más tu código utilizando técnicas como los modos de suspensión y los estados de bajo consumo. Obviamente, los requisitos específicos de consumo dependen de la aplicación y de los escenarios de uso.


"La palabra 'Raspberry Pi' y los logotipos oficiales son marcas comerciales con copyright © de la Raspberry Pi Foundation. El software utilizado en los productos Raspberry Pi es propiedad de sus respectivos autores y está sujeto a diversas licencias de código abierto, como la Licencia Pública General de GNU (GPL) y otras. Todos los derechos están reservados por sus respectivos propietarios y licencias correspondientes."



Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Finalmente recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.



También te puede interesar:


jueves, 11 de agosto de 2022

Simulador Wokwi - Generalidades

Bienvenido a mi blog, hoy hablaremos un poco del Simulador gratuito y online Wokwi, durante el primer semestre del año 2021 se generó bastante información sobre la Raspberry Pi Pico y su nuevo microcontrolador, el RP2040; uno de los recursos que se vio en ese momento fue un curso de HackadayU dictado por Uri Shaked, Maker y Google Developer Expert Israelí, en el curso, el señor Uri discute la arquitectura del microcontrolador, el set de instrucciones, así como algunas funciones del RP2040, su programación y depuración. Aunque el curso es muy interesante, lo que llamó especialmente la atención fue la herramienta que el señor Uri estaba usando para mostrar los ejemplos en sus clases, un simulador electrónico en línea, que le permitía escribir y correr el código en una tarjeta Raspberry Pi Pico emulada.



Debido a que el simulador wokwi funciona online, mediante la world wide web, puede correr en Windows, MAC, Linux y Android.

¿Qué significa Wokwi?

Wokwi no tiene ningún significado especial, tampoco es un acrónimo, simplemente es una palabra que sus creadores eligieron, por ser una palabra corta y fácil de pronunciar.

¿Cómo conocimos Wokwi?

Wokwi fue conocido inicialmente por la creación de placas compatibles con Arduino UNO Rev3, llamadas Arduino Wokwi, bueno, solamente Wokwi, ya que el nombre Arduino y su logo, como sabemos, son marcas registradas, estas placas Wokwi presentan la particularidad de usar un conector de entrada USB Tipo C (en lugar del USB Hembra Tipo B) y una bonita combinación de headers de colores (recordemos que estas placas actualmente aún están a la venta en Tindie):




Arduino Wokwi


Este fantástico simulador Wokwi, gratuito, online y de código abierto en JavaScript, fue desarrollado por el mismo señor Uri Shaked y otros colaboradores. El simulador permite trabajar con algunas de las versiones más populares de las tarjetas Arduino (como UNO, NANO y Mega2560), con la Raspberry Pi Pico, ESP32, en C++, Micropython y Rust, y algunos miembros de la familia ATtiny y hasta otros microcontroladores de la familia STMicroelectronics.. Además, cuenta con un buen grupo de periféricos comúnmente usados en los proyectos de electrónica, a esto se suma la ventaja de no tener que esperar a tener todo el hardware en las manos para comenzar las pruebas y que no vamos a poder dañar nada durante las pruebas, al trabajar con un hardware virtual.



Home Page Wokwi


El simulador es muy fácil de usar, tiene un área para agregar el código y otra con el diagrama del circuito electrónico simulado. En el área del código se puede escribir el programa, conectar las librerías del proyecto y editar el archivo diagram.json que describe la estructura y conexiones del circuito simulado. En el área del circuito se agregan los componentes y se hacen las conexiones necesarias entre los elementos y/o el hardware.

El sitio web del simulador tiene varios circuitos y programas de ejemplo, así como la opción de permitirnos publicar nuestros propios proyectos. Un dato importante es que, en este momento, el simulador es de uso gratuito, aunque hay algunas opciones de pago al estilo de una membresía premium y que permiten hacer sugerencias sobre el desarrollo del simulador y acceder a funciones avanzadas, las cuales comprenden:

  • Cargar cualquier biblioteca de Arduino seleccionando una carpeta de su computadora.
  • Cargar archivos binarios personalizados (por ejemplo, mapas de bits, sonidos, etc.) al sistema de archivos de la tarjeta microSD emulada.
  • Conectar el ESP32 WiFi a tu red local.
  • Conocer a miembros del Club Wokwi con ideas afines en el canal de Discord.

Ojo, recordemos que estas funciones avanzadas solo están habilitadas para usuarios de pago, los cuales pueden pagar solo un mes, si lo desean, o todo un año completo con el 20% de descuento. Actualmente al momento de escribir este post, el mes esta a 7 dólares, los cuales se pueden pagar, o vía paypal o con tarjeta de crédito.



Librerías Arduino Integradas Standard, embebidas en Wokwi.


De forma predeterminada, Wokwi compila su código con las bibliotecas Arduino integradas estándar, (como Wire.h y SPI.h) si desea trabajar con alguna librería que no sea estándar, como por ejemplo <OLED_I2C.h> deberá ser usuario premium para poder exportarla.



Wokwi Enviroment

¿Por qué Wokwi?


Comience ahora mismo. No hay que esperar por los componentes ni descargar pesados software de simulación. Con solo su navegador de internet o browser, tiene todo lo que necesita para comenzar a codificar su próximo proyecto electrónico microcontrolado o de IoT, en segundos.

Los errores están bien. No se puede destruir el hardware virtual. Así que no te preocupes por freír tus preciados componentes. Y a diferencia del hardware real, siempre puedes deshacer.

Fácil de obtener ayuda y comentarios. Compartir un enlace a su proyecto Wokwi es todo lo que necesita.

Gana confianza en tu código. Problemas de hardware y software separados.



Comunidad amigable con los creadores. Un lugar para que compartas tus proyectos, pidas ayuda y te inspires. 
Comunidad Wokwi Discord


Funciones únicas:


  • Simulación WiFi: conecte su proyecto simulado a Internet. Puede usar MQTT, HTTP, NTP y muchos otros protocolos de red.
  • Analizador lógico virtual: capture señales digitales en su simulación (por ejemplo, UART, I2C, SPI) y analícelas en su computadora.
  • Depuración avanzada con GDB: potente depurador Arduino y Raspberry Pi Pico para usuarios avanzados.
  • Simulación de tarjeta SD: almacene y recupere archivos y directorios de su código. Los miembros del club también pueden cargar archivos binarios (como imágenes).

Veamos ahora en el siguiente video de YouTube, un ejemplo básico de como usar el simulador wokwi:


Extensión Wokwi para Visual Studio Code


Wokwi para Visual Studio Code proporciona una solución de simulación para ingenieros, de sistemas integrados y de IoT. La extensión se integra con su entorno de desarrollo existente, lo que le permite simular sus proyectos directamente desde su editor de código. Puede usar Wokwi para VS Code con Zehpyr Project, PlatformIO, ESP-IDF, Pi Pico SDK, NuttX, Rust, Arduino CLI y otros marcos de desarrollo integrados y cadenas de herramientas.


Instalación



Primero, instale la extensión Wokwi for VS Code. Luego, presione y seleccione "Wokwi: Solicitar una nueva licencia". VS Code le pedirá que abra el sitio web de Wokwi en su navegador. Confirme haciendo clic en "Abrir" F1. Luego haga clic en el botón púrpura que dice "OBTENGA SU LICENCIA". Es posible que se le pida que inicie sesión en su cuenta de Wokwi. Si no tiene una cuenta, puede crear una de forma gratuita.

El navegador le pedirá una confirmación para enviar la licencia a VS Code. Confirmar (es posible que tenga que confirmar dos veces, una vez en el navegador y una vez en VS Code). Verá un mensaje en VS Code que dice "Licencia activada para [su nombre]". ¡Felicidades!.

Cabe destacar que para poder trabajar con la extension Wokwi para Visual Studio Code se necesita minimo la versión 1.72.0 ó superior.

Finalmente antes de simular cualquier proyecto, debes compilar el código y generar el archivo de firmware/ELF. La extensión Arduino de VS Code requiere Arduino IDE 1.8 o Arduino CLI instalado. No funciona (todavía) con Arduino IDE 2.0.


Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Bibliografía:

https://docs.wokwi.com/


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.



También te puede interesar:


Nuevos Microcontroladores Raspberry Pi Pico W, H y WH

Las 10 formas más fáciles de averiar tu Arduino

Arduino UNO Rev3

Arduino NANO v3

Arduino UNO WiFi Rev2

Nueva Placa Arduino Nano RP2040 Connect

Nuevo Microcontrolador Raspberry Pi Pico

Convierte fácilmente una Fuente ATX de PC en una Fuente para alimentar tus proyectos Arduino y/o Raspberry Pi

USB a Serial en Arduino - Generalidades

Como Grabar el Bootloader de Arduino

Cómo Detectar un Arduino Falsificado

domingo, 3 de julio de 2022

Nuevos Microcontroladores Raspberry Pi Pico W, H y WH

Bienvenido a mi blog, hoy hablaremos un poco de las nuevas Raspberry Pi Pico W, H y WH. Raspberry Foundation, la institución encargada del popular miniordenador que ha ayudado a expandir GNU/Linux por el mundo, ha anunciado la comercialización de nuevas variantes, las nuevas Raspberry Pi Pico W, H y WH, las cuales son soluciones que nos permitirán trabajar en sistemas embebidos de todo tipo y aplicarlas a desarrollos tan ambiciosos como dispositivos médicos o coches autónomos, la RPi Foundation esta iniciando a fabricar sus propios procesadores, están gobernadas por un pequeño SoC que ha sido diseñado por los propios responsables de este proyecto en Reino Unido (UK). Se trata del Microcontrolador RP2040, que cuenta con un procesador dual core ARM Cortex M0+ de 32 bits funcionando a máx 133 MHz, acompañado de 264KB de RAM y 2MB de almacenamiento integrado (expandible hasta 16 MB). Ese SoC representa el nuevo papel de The Raspberry Pi Foundation como fabricante de semiconductores, y, en concreto, de SoC.

Dimensiones Reales de la Raspberry Pi Pico W en mm


Primero que todo aclarar que desde un punto de vista meramente técnico no se trata de nuevos Microcontroladores, sino de nuevas versiones de placa, que añaden mas funcionalidades, ya que el microcontrolador sigue siendo el mismo, el RP2040.


La llegada de la Raspberry Pi Pico W, presenta la novedad de contar con WiFi, capaz de potenciar todo tipo de sistemas microcontrolados, manteniendo el bajo consumo, tamaño y casi el mismo precio de la original. La Raspberry Pi Pico W añade soporte integrado para redes inalámbricas Wi-Fi mediante el chip combo Infineon CYW43439 que permite conectividad WiFi 4 y seguridad WPA 3, a través de SPI y tiene una antena ABRACON integrada. Las capacidades inalámbricas están limitadas a conexiones 802.11/b/g/n de banda única de 2,4 GHz Canales de 20 MHz, tasa de datos PHY de hasta 96 Mbps, DPP para Wi-Fi Easy Connect™, Soft AP mejorado hasta 4 clientes e interfaz de host SDIO compartida para Wi-Fi + Bluetooth. El interruptor PA, LNA y T/R interno integrado admite una sola antena compartida entre Wi-Fi y Bluetooth. De esta forma es un gran paso adelante con respecto al modelo inicial original, que necesitaba hardware adicional para conectarse a Internet.









Además de estas versiones, la fundación comercializa una versión 'H' y 'WH' que añaden un header montado y un conector de depuración de 3 pines, es decir, el Pico H y el Pico WH cuentan con cabeceras precargadas, así como con el mencionado conector de depuración, un conector JST 'SH' de 3 pines y paso de 1,0 mm.

El puerto SWD

A medida que los dispositivos se volvieron más complejos, aumentó la dificultad para hacerles debug o depuración, es decir, leer las señales internas de los microcontroladores. En consecuencia se tuvo que estandarizar las señales de prueba y se creó el Joint Tag Action Group (JTAG) Grupo de Acción de Etiqueta Conjunta.

Esto permitió establecer estándares que pueden detectar errores utilizando solo unos cuantos pines. No todos los microcontroladores implementan JTAG; por ejemplo el ATMEGA328P del Arduino no lo tiene, pero la Raspberry Pi Pico y el ESP32 sí. Los tres pines en el borde inferior de la Pico, o en el medio, según la versión,  son para conectar un depurador. El Serial Wire Debug (SWD Depuración de cables serie) es una interfaz JTAG alternativa de 3 pines (SWDIO/GND/SWCLK). SWD utiliza un protocolo de cable bidireccional estándar de CPU ARM, definido en la interfaz de depuración de ARM v5. Esto permite que el depurador se convierta en otro maestro de bus AMBA para el acceso a la memoria del sistema y a los registros periféricos o de depuración.

Esta pequeña placa no cuenta con un sistema operativo como tal que la gobierne: simplemente ejecuta los programas que pidamos que ejecute, y que pueden estar programados en lenguajes como MicroPython, C o C++ y que podemos lanzar desde un ordenador host como una PC o una Mac, por ejemplo. Junto con el nuevo dispositivo, la fundación ha hecho público un SDK basado en C, accesible desde cualquiera de los principales entornos de desarrollo, como puede ser Visual Studio Code; además de otro basado en Python 3, recordemos que MicroPython es una versión reducida de Python hecha especialmente para microcontroladores.

Un gran detalle es que la nueva versión de Raspberry Pi Pico W cuenta con Bluetooth 5.2 BLE embebido, pero NO esta activo por defecto, por cuestiones de licencias, certificados o legislaciones, afirman que mas adelante cuando resuelvan este tema, se podrá activar dicha función, tal vez mediante una actualización de firmware (al momento de escribir este post aún no se ha lanzado oficialmente la activación del Bluetooth en la Raspberry Pi Pico W / WH).

A destacar que la RPi Foundation ha iniciado en la fabricación de sus propios SoC, su propio silicio personalizado y esto augura un gran futuro tecnológico. También resaltar que Raspberry Pi ha iniciado las ventas de unidades individuales y por carrete de su SoC RP2040 y ahora están disponibles a través de los revendedores aprobados por Raspberry Pi (compra tu chip RP2040 Aquí).




Documents:


También algunas empresas y maker's han lanzado los primeros clones de la Raspberry Pi Pico, los cuales tienen conector USB Type C, 16 MB de memoria flash y botón de reset, más que clones, son nuevas mejoras (obviamente no veremos el nombre Raspberry, ni el logo, ya que son marcas registradas):

Original a la derecha Vs clones


Interesante opción para Raspberry Pi Pico W con soporte para BASIC y wifi https://geoffg.net/webmite.html


Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Finalmente recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.



Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.




También te puede interesar:




domingo, 25 de abril de 2021

Manejo básico de un modulo I2C LCD 2x16 con Raspberry Pi Pico

Bienvenido a mi blog, hoy hablaremos un poco de como realizar un manejo básico de un modulo I2C LCD, de 2 filas por 16 columnas, con nuestra Raspberry Pi Pico usando MicroPython. Inicialmente, debemos conocer las funciones del I2C con Micropython para poder determinar la dirección I2C del componente y posteriormente, conectar la Raspberry Pi Pico al LCD 16×2 I2C. A partir de la documentación oficial de MicroPython podemos determinar:

i2c = machine.I2C(id = -1 , * , scl , sda , frecuencia = 400000)

Se construye el objeto I2C usando los siguientes parámetros:

  • id identifica un periférico I2C en particular. El valor predeterminado de -1 selecciona una implementación de software de I2C que puede funcionar (en la mayoría de los casos) con pines arbitrarios para SCL y SDA. Si id es -1, entonces se deben especificar los pines scl y sda . Otros valores permitidos para id dependen del puerto/placa en particular, dado que hay placas que poseen varios puertos I2C y la especificación de scl y sda puede o no ser requerida o permitida en este caso.
  • scl debe ser un objeto tipo pin que especifique el pin que se utilizará para SCL.
  • sda debe ser un objeto tipo pin que especifique el pin que se utilizará para SDA.
  • freq debe ser un número entero que establezca la frecuencia máxima para SCL.
"Construir un objeto en Micropython significa crear una instancia de una clase. Una clase es un modelo o plantilla para crear objetos con atributos y métodos específicos. Para construir un objeto, primero se define la clase y luego se crea una instancia de esa clase utilizando paréntesis".

Para esta publicación asumo que el usuario ya ha cargado previamente el firmware de Micropython en su Raspberry Pi Pico y que ya tiene instalado el IDE de Thonny, además de que ya tenga bases de manejo de LCD en otras plataformas como Arduino o PIC.

No es el objetivo de este articulo abordar toda la teoría y la historia de las pantallas lcd, así que hare un breve resumen acotando que la LCD (Liquid Crystal Display) o pantalla de cristal líquido, es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos. La pantalla LCD de 16×2 esta basada en el controlador HD44780 de Hitachi, dicha pantalla es un periférico que se utiliza ampliamente en proyectos con microcontroladores y el modulo I2C está gobernado internamente por un controlador PCF8574, el cúal es un expansor de Entradas y Salidas digitales controlado por I2C que dirige todo su funcionamiento. En este caso vamos a emplear una LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. En la siguiente imagen se puede observar la estructura de sus pines. La podemos dividir en, los pines de alimentación, los pines de control y los pines del bus de datos bidireccional. Por lo general podemos encontrar además, en su estructura, los pines de Ánodo (+) de led backlight y cátodo (-) de led backlight [Los pines 15 y 16 de backligth se deben manejar de manera pulsante con una frecuencia de 60Hz, también se puede utilizar una resistencia fija de 10 ohmios 1/2 watio para alimentar el positivo del backligth en caso de hacerlo manualmente sin modulo I2C].


Si estamos empleando en nuestro proyecto una LCD con la Raspberry Pi Pico, necesitamos determinar la dirección del dispositivo. Podemos usar el siguiente código estándar con MicroPython para averiguar cúal es la dirección del Módulo I2C, para ello utilizaremos el IDE de Thonny (recuerda que este scanner es general para cualquier dispositivo I2C que conectes a tu Raspberry Pi Pico respetando el conexionado de sus pines):

# ----------------------------------------------------------------------------
# (| " I2C_Scan.py                                                         "|)
# (| " Este es un sencillo sketch para escanear buscando un dispositivo    "|)
# (| " I2C conectado en I2C cero, localizandolo e imprimiendo la dirección "|)
# (| " encontrada en hexadecimal, en la shell o consola, con una raspberry "|)
# (| " pi pico y MicroPython.                                              "|)
# (| "                                                                     "|)
# (| " Usaremos los valores predeterminados de I2C0, para el dispositivo   "|)
# (| " I2C: SCL= Pin GP9, SDA= Pin GP8 Vcc= VBUS GND= GND de la raspberry  "|)
# (| " pi pico.                                                            "|)
# (| "                                                                     "|)
# (| " Este código de ejemplo es de dominio público.                       "|)
# (| "                                                                     "|)
# (| " Maker: jorgechac©                                                   "|)
# (| " Visita  https://jorgechac.blogspot.com                              "|)
# (| "                                                                     "|)
# (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32                 "|)
# (| " Whatsapp y Ventas NEQUI +573177295861                               "|)
# (| " Bucaramanga - Colombia                                              "|)
# (| " Simulaciön https://wokwi.com/projects/339117994278912596            "|)
# (| " Descarga gratis este sketch desde el Repositorio de GitHub:         "|)
# (| " https://github.com/jorgechacblogspot/micropython_pico               "|)
# (| " https://jorgechac.blogspot.com/2021/04/raspberry-pi-pico-pin-mapping.html "|)
# ----------------------------------------------------------------------------------

from machine import Pin                  # importamos la funcion pin del
										 # modulo machine
from machine import I2C                  # importamos la funcion I2C del
										 # modulo machine
import utime

sda = Pin(8)                             # objeto tipo pin que especifica
										 # el pin que se utilizará para SDA,
                                         # en este caso utilizaremos GP8
                                         # como sda

scl = Pin(9)                             # objeto tipo pin que especifica
										 # el pin que se utilizará para SCL,
                                         # en este caso utilizaremos GP9
                                         # como scl
                                            
i2c = I2C(0,sda=sda,scl=scl,freq=400000) # le decimos que vamos a usar
										 # I2C cero y frecuencia max de
                                         # 400k para scl
direccion = hex(i2c.scan()[0])           # primera posicion que entrega
										 # i2c.scan
print('I2C Scanner')
print('Scanning...')
print('Dispositivo I2C encontrado en la direccion hexadecimal', direccion,'!')

Figura 1

👉Simulación Wokwi del I2C Scan👈

Utilizaremos el pin 40 VBUS de la pico para alimentar la LCD con los +5 voltios del puerto USB de la PC, el pin 38 que es GND de la pico irá a GND de la LCD, el pin GP8 de la pico irá a SDA de la LCD y el pin GP9 de la pico irá a SCL de la LCD, como vimos en el simulador wokwi y como podemos ver en el siguiente esquemático hecho con Fritzing (aquí podemos ver el pin mapping de la pico):


Después de montado el circuito y programado el I2C Scan en Thonny, podremos ver en la shell o consola que nos muestra la sesión del interprete de python, la dirección hexadecimal de nuestro dispositivo, la cual utilizaremos para crear ahora un pequeño sketch que maneje nuestra lcd, inicialmente deberemos descargar alguna librería que sea capaz de controlar la LCD vía I2C directamente con MicroPython, para este caso usaremos las librerías "lcd_api.py" y "pico_i2c_lcd.py" que podemos descargar gratis desde este repositorio en github.

Para que funcionen estas librerías, debemos pasar los archivos lcd_api.py y pico_i2c_lcd.py a la memoria interna de la Raspberry Pi Pico. Eso lo podemos hacer con el IDE de Thonny, dando click en VIEW/FILES, se abrirá la ventana de archivos, donde en la parte superior te muestra los archivos que tiene tu computador y en la parte inferior los archivos de tu raspberry pi pico, debemos dar click derecho sobre los archivos que deseamos pasar a la memoria de la pico y dar click donde dice "Upload to/"

Finalmente verificamos que los archivos se encuentren dentro de la Flash de la PICO inspeccionando la parte inferior izquierda de la Figura 1.

Funciones de la librería:

  • lcd.putstr (“¡El texto va aquí!”) – Envía una cadena de caracteres a la pantalla. IMPORTANTE: para imprimir una variable puedes usar la siguiente instrucción: lcd.putstr (str (Variable)) [Convierte la variable en una cadena]
  • lcd.show_cursor() / lcd.hide_cursor() – Mostrar / Ocultar el cursor de la pantalla lcd (barra blanca)
  • lcd.blink_cursor_on() / lcd.blink_cursor_off() – Enciende / apaga el cursor parpadeante al imprimir
  • lcd.backlight_on() / lcd.backlight_off() – Enciende / apaga la luz de fondo de la pantalla LCD (controlada por un pequeño transistor en la biblioteca)
  • lcd.display_on() / lcd.display_off() – Enciende / apaga la pantalla (no la retroiluminación sino todo el chip)
  • lcd.clear() - borra todos los caracteres o cualquier cosa escrita en la pantalla
  • lcd.move_to(Col, Row) – Mover a la posición según los valores de fila y col (Y, X)
  • lcd.custom_char(Num, bytearray ([caracteres HEX]))) – Num puede ser cualquier número entero 0 – 8 (escribiendo en ubicaciones CGRAM) simplemente utilizado para numerar. Los caracteres HEX pueden ser creados usando este enlace: https://maxpromer.github.io/LCD-Character-Creator/ . El cual proporciona una cadena de caracteres hexadecimales que pueden reemplazar los “caracteres HEX” en el comando de ejemplo.

Código en MicroPython Display LCD – I2C

El siguiente código puede ser usado con la Raspberry Pi Pico a modo de ejemplo, si se desea modificar basta solo configurar los pines empleados para la comunicación I2C:

from time import sleep_ms

from machine import I2C, Pin

from pico_i2c_lcd import I2cLcd

DEFAULT_I2C_ADDR = 0x27

def test_main():

    print("Running test_main")

    i2c = I2C(0,scl=Pin(9), sda=Pin(8), freq=400000)

    lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)

    lcd.putstr("PROTOCOLO I2C\nLCD 2x16")

    sleep_ms(3000)

    lcd.clear()

    count = 0

while True:

        lcd.move_to(0, 0)

        lcd.putstr("  SUBSCRIBETE!  ")

        sleep_ms(1000)

        lcd.clear()

        sleep_ms(1000)

test_main()


Finalmente vamos a visualizar un mensaje inicial y lanzaremos una animación de números en esquinas, efecto backspace y uso de la función backlight on y off por 3 segundos como ejemplo:

# ------------------------------------------------------------------------------------------------------------------

# pico_i2c_lcd_test2.py Sketch que implementa una pantalla LCD 2x16 HD44780

# conectada a través de PCF8574 via I2C.

# Se utiliza I2C 0 y SDA GP8 (pin 11) y SCL GP9 (pin 12).

# Visita https://jorgechac.blogspot.com Venta de accesorios Arduino/Raspberry Pi Pico

# ------------------------------------------------------------------------------------------------------------------

import utime

from machine import I2C,Pin

from lcd_api import LcdApi

from pico_i2c_lcd import I2cLcd


# El PCF8574 tiene una dirección seleccionable por jumper: 0x20 a 0x27

# la direccion de la LCD puede cambiar, utilice el I2C_Scan.py primero por favor!


I2C_ADDR  =  0x27

I2C_NUM_ROWS = 2    # numero de filas de la lcd

I2C_NUM_COLS = 16   # numero de columnas de la lcd


i2c = I2C(0, sda=Pin(8), scl=Pin(9), freq=400000) 

lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)


def lcd_str(message, col, row):

      lcd.move_to(col, row)

      lcd.putstr(message)

    

def main():

    

    while True:       

            lcd.clear()

            lcd.move_to(0,0)

            lcd.putstr("PROTOCOLO I2C   ")

            utime.sleep(2)

            lcd.move_to(0,1)

            lcd.putstr("LCD 2x16        ")

            utime.sleep(2)

            lcd.clear()

            lcd_str(" MicroPython by ", 0, 0)

            utime.sleep(2)

            lcd_str(" Raspberry Pico ", 0, 1)

            utime.sleep(3)

    

            lcd.clear()

            lcd_str("Numeros en", 3,0)

            lcd_str("Esquinas", 4,1)

            utime.sleep(1)

    

            lcd_str("1", 0,0)

            utime.sleep(1)

            lcd_str("2", 15,0)

            utime.sleep(1)

            lcd_str("3", 0,1)

            utime.sleep(1)

            lcd_str("4", 15,1)

            utime.sleep(1)

    

            lcd.clear()

            lcd_str("Suscribete", 0, 0)

            lcd_str("Activa: CAMPANA", 0, 1)

            lcd.blink_cursor_on()

            utime.sleep(2)

    

            #Efecto Backspace

            for j in range(1, -1, -1):      # iterador J objeto que permite recorrer un contenedor

                for i in range(15, -1, -1): # contador decremental

                     lcd.move_to(i, j)

                     lcd.putstr(' ')

                     utime.sleep_ms(100)

            utime.sleep(1)

            lcd.hide_cursor()


            #BackLight OFF por 3 segundos

            lcd.clear()

            lcd.backlight_off()

            lcd_str("BackLight OFF", 0, 0)

            utime.sleep(3)


            #BackLight ON por 3 segundos

            lcd.clear()

            lcd.backlight_on()

            lcd_str("BackLight ON", 0, 0)

            utime.sleep(3)


if __name__ == '__main__':

    main()

Las librerías y los códigos .py de los ejemplos anteriores los puedes descargar gratis del repositorio de github que mencione mas arriba. Finalmente recordemos que con las pantallas OLED estos módulos lcd irán descontinuándose poco a poco.


Quieres aportar algo que complemente este articulo? crees que hay algo que se deba corregir? Escríbenos este blog es para todos.

Recuerda que en https://jorgechac.blogspot.com nos dedicamos a construir una electrónica mejor! y apoyamos el proyecto CTC GO! (Creative Technologies in the Classroom) que es un programa de educación steam personalizable.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.



También te puede interesar:


Nuevo Microcontrolador Raspberry Pi Pico

Convierte fácilmente una Fuente ATX de PC en una Fuente para alimentar tus proyectos Arduino y/o Raspberry Pi

Como Grabar el Bootloader de Arduino

Bootloader USB para Microcontroladores PIC 18F2550 y PIC18F4550

Diseño y fabricación de PCB profesionales con Fritzing

Conociendo La Familia de los Módulos WiFi para Arduino ESP8266

Cómo Detectar un Arduino Falsificado

ChipKIT™ Max32™ El Arduino de Microchip