![]() | |
|


![]() |
| Original a la derecha Vs clones |
![]() | |
|


![]() |
| Original a la derecha Vs clones |
i2c = machine.I2C(id = -1 , * , scl , sda , frecuencia = 400000)
Se construye el objeto I2C usando los siguientes parámetros:
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].
# ----------------------------------------------------------------------------
# (| " 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:
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
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
Nuevo Microcontrolador Raspberry Pi Pico
Nueva Raspberry Pi 4 con 8 GB de RAM
Descarga Aquí Tus Wallpaper Raspberry Pi para PC
Compra Aquí tu Raspberry Pi 4 Modelo B 8GB
|
| Dimensiones Reales de la Raspberry Pi Pico en mm |
Características Técnicas Principales:
Test Point - Puntos de prueba
La Raspberry Pi Pico y Pico W, tienen seis puntos de prueba (TP1-TP6) en la parte posterior a los que se puede acceder si es necesario, como cuando se usa la placa como módulo de montaje superficial.
Estos son:
TP1 – Tierra (tierra estrechamente acoplada para señales USB diferenciales)
TP2 – DM USB
TP3 – USB DP
TP4 – Pin WL_GPIO1/SMPS PS (no usar)
TP5 – WL_GPIO0/LED (no se recomienda su uso)
TP6 – BOTASEL
Los ingenieros de Raspberry Pi también utilizan estos puntos de prueba para comprobar rápidamente que el Pico W funciona después de haber sido ensamblado en fábrica.
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 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.
Podemos alimentar la Raspberry Pi Pico a través del puerto micro USB, o podemos usar el pin VSYS GPIO para proporcionar energía entre un rango de +1.8V a +5.5Vcc
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 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.
Esta pequeña placa hace uso de un GPIO de +3,3V que la habilita para trabajar con muchos otros componentes que trabajan a voltajes de 3 y 5V, y destaca por una eficiencia fantástica: para pequeños proyectos es mucho mejor candidata que una Raspberry Pi convencional, que consume bastante más energía, y que probablemente está sobredimensionada para esos escenarios.
Su pequeño tamaño y su reducido precio actual hacen que NO contemos con conectividad inalámbrica en este modelo en comparación con familias como la esp32 de Espressif System, la cual ya cuenta con wifi y bluetooth integrados. Así que esperamos que estas características sean adicionadas en futuras versiones como Raspberry Pi Pico W. Tampoco cuenta con un botón de reset físico como estamos acostumbrados en Arduino, ya que el botón que posee la pico es simplemente para cargar el bootloader, si deseas hacer un reset deberías utilizar un pulsador entre GND y el pin RUN.
Recordar que ya hay placas entrenadoras o tarjetas de desarrollo para Raspberry Pi Pico y se espera que los makers desarrollen mas, para experimentación y aprendizaje universitario:
|
|
https://01001000.xyz/2021-02-13-Raspberry-Pi-Pico-dev-board-Kiwikit/ |
La Raspberry Pi Pico puede emular por software un puerto I2S mediante el pin 31 (DIN) pin 32 (BCK_PWM1) y pin 34 (LRCLK_PWM0), I2S conocido también como Inter-IC Sound, Integrated Interchip Sound, o IIS, es un estándar de interfaz eléctrica de bus serial usado para interconectar circuitos de audio digital. El bus I2S separa las señales de datos seriales y de reloj independientes, lo que resulta en menores cantidades de fluctuación (jitter en inglés) de la señal, que en sistemas que recuperan el reloj de la señal de datos.
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í).
|
| Compra tu Raspberry Pi Pico AQUI |
Una de las grandes ventajas que tendremos al trabajar esta placa Raspberry Pi Pico con MicroPython, será que el código que generemos, nos funcionará tanto en esp32, como en la pico, además desde este sitio web podremos descargar la última versión de firmware actualizada.
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 |
Finalmente observemos un "Hola Mundo" o "Blynk" de encender y apagar un led con Raspberry Pi Pico con Micropython, cortesía del simulador online gratuito Wokwi:
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.
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:
Nueva Placa Arduino Nano RP2040 Connect
Nueva Raspberry Pi 4 con 8 GB de RAM
Descarga Aquí Tus Wallpaper Raspberry Pi para PC
Compra Aquí tu Raspberry Pi 4 Modelo B 8GB