Overleaf Community Edition Server: Latex editor | Luciano's tech see the web in desktop mode to better experience | 468 OS | 303 OS Pi 4B | 72 OS Pi5
Name
T-Pico C3
MCU
RP2040+ESP32-C3
Screen (LCD)
1.14-inch ST7789V
Resolution
135X240
Flash
4MB
Mode
Plug directly into USB
Flip to plug into USB
Wireless
2.4 GHz Wi-Fi
Bluetooth V5.0+BLE
En USB TYPE-C, se puede determinar si la conexión actual es PICO [PicoArduino o Raspberry Pi Pico si actualizas su firmware] o ESP32C3 [unidad de depuración serie USB JTAG] a través del acceso positivo y negativo. Al conectarse, el LED integrado indicará de acuerdo con el chip conectado (debido a problemas con el cable, es posible que la luz indicadora sea opuesta al chip conectado real, o incluso dos luces LED al mismo tiempo, reemplace otro cable cuando se enciendan dos LED al mismo tiempo), el objetivo principal es que el dispositivo conectado actualmente se muestra en el nombre del puerto serie.
In TYPE-C, you can determine whether the current connection is PICO[PicoArduino or Raspberry Pi Pico if update yourself firmware] or ESP32C3[USB JTAG Serial debug unit] through positive and negative access. When connecting, the onboard LED lamp will be indicated according to the connected chip (due to cable problems, it is possible that the indicator light is opposite to the actual connected chip, or even two LED lights at the same time, please replace another cable when two led lights up at the same time), the main judgment is that the currently connected device is displayed in the serial port name.
ESP_AT Library:
Arduino ESP_AT_Lib
ESP32 C3 ESP_AT old Firmwares.
Arduino IDE ESP_AT Examples Codes.
OneButton Library:
Arduino OneButton Lib
Arduino IDE OneButton Examples Codes.
TFT_eSPI Library:
Arduino TFT_eSPI Lib
Arduino User_Setup Display File.
Arduino IDE TFT_eSPI Examples Codes.
WiFiEspAT Library:
Arduino WiFiEspAT Lib
Arduino IDE WiFiEspAT Examples Codes.
Pico-ESP01-MP library:
MicroPython Pico-ESP01-MP Module.
Pico Arduino Factory.
Pico Arduino Firmware UF2.
ESP32C3 AT Factory Firmware.
ESP32C3 AT User Guide upload Firmware PDF.
ESP32 C3 ESP_AT Current Firmware by espressif.
MicroPython Pico UF2
MicroPython+ST7789+fonts+tft files+TPicoESPC3 Raspberry Pi Buenos Aires Build UF2
Arduino I2C Scanner code.
Arduino blink code.
Arduino lvgl code.
Arduino lvgl UF2.
MicroPython factory tft_config.py.
MicroPython ESP32C3 AT Port.
MicroPython Pico ST7789_mpy factory examples.
MicroPython Pico TPicoESPC3 examples.
Necesitamos instalar estas dependencias--Install dependencies:
sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi libssl-dev python3 python3-pip python3-venv build-essential libffi-dev git pkg-config
Clone ST7789 Display Driver:
git clone https://github.com/russhughes/st7789_mpy.git
Clone MicroPython:
git clone --recurse-submodules https://github.com/micropython/micropython.git
Clone TPicoESPC3 Module:
https://github.com/PIBSAS/TPicoESPC3.git
Copiar--Copy tft_config.py and tft_buttons.py and fonts:
In this step you can add the modules you want to modules folder so will compile, the fonts are a lot, so just choose few, or loaded later to the flash storage.
cd st7789_mpy
cp examples/configs/t-picoc3/tft_config.py $HOME/micropython/ports/rp2/modules/
cp examples/configs/tdisplay_rp2040/tft_buttons.py $HOME/micropython/ports/rp2/modules/
cp examples/chango/*.py $HOME/micropython/ports/rp2/modules/
cp fonts/*.py $HOME/micropython/ports/rp2/modules/
Extra, copiamos el módulo TPicoESPC3 para comunicarnos desde la Pico al ESP32C3 con comandos AT y así conectarnos a Wifi:
Extra, copy TPicoESPC3 Module for talk from Pico to ESP32 C3 with AT and connect Pico to Wifi:
cd TPicoESPC3
cp TPicoESPC3.py $HOME/micropython/ports/rp2/modules/
Build MicroPython+ST7789:
cd micropython
make -C mpy-cross
cd ports/rp2
make USER_C_MODULES=$HOME/st7789_mpy/st7789/micropython.cmake
make submodules
make
El firmware estará en -- The results Firmware will be in:
micropython/ports/rp2/build-RPI_PICO/firmare.uf2
Ejemplos--Examples:
Usamos los de la carpeta examples del repo st7789_mpy y del repo TPicoESPC3.
Please use the examples located in the examples folder of the st7789_mpy repository and in TPicoESPC3.
1. Copy the firmware.uf2 file from the build-RPI_PICO folder.
2. Press and hold the BOOT button on the RP2040 and press RESET button or connect it to your computer via USB.
3. Release the RESET button. The RP2040 will appear as a removable drive.
4. Drag and drop the .uf2 file onto the drive..
5. The RP2040 will reboot and run MicroPython..
La librería define varias constantes de color que puedes usar al dibujar texto, formas, o gráficos en la pantalla. Estas constantes están predefinidas en st7789 y son comunes para manejar pantallas de este tipo.
st7789.BLACK
st7789.WHITE
st7789.RED
st7789.GREEN
st7789.BLUE
st7789.CYAN
st7789.MAGENTA
st7789.YELLOW
Cuando creamos un objeto tft con tft_config.config(), obtenemos una instancia de la clase ST7789. Este objeto tiene varios métodos que podemos usar para interactuar con la pantalla, como dibujar texto, formas, rellenar áreas, desplazar la pantalla, etc. Aquí hay algunos métodos clave:
tft.init():
Inicializa el controlador de la pantalla.
tft.off():
Apaga la pantalla.
tft.on():
Enciende la pantalla.
tft.width():
Devuelve el ancho de la pantalla.
tft.rotation(r):
Establece la rotación de la pantalla lógica en dirección contraria a las agujas del reloj.
r:
Un entero que determina la rotación de la pantalla:
0: Retrato (0 grados)
1: Paisaje (90 grados)
2: Retrato invertido (180 grados)
3: Paisaje invertido (270 grados)
Ejemplo:
Requiere from tft_config import config, import vga1_16x16 as font
tft = config(0)
tft.init()
tft.rotation(1)
tft.text(font,"hola",0,0)
tft.rotation(2)
tft.text(font,"hola",0,0)
tft.rotation(3)
tft.text(font,"hola",0,0)
tft.rotation(0)
tft.text(font,"hola",0,0)
tft.height():
Devuelve el alto de la pantalla.
tft.pixel(x, y, color):
Dibuja un solo píxel en la posición (x, y) con el color especificado.
Ejemplo: tft.pixel(10, 10, st7789.YELLOW)
tft.fill(color):
Llena toda la pantalla con el color especificado.
Ejemplo: tft.fill(st7789.BLACK)
tft.text(font, text, x, y, color):
Dibuja texto en la pantalla usando una fuente específica, coordenadas (x, y), y un color.
Ejemplo: tft.text(font, "Raspberry Pi Buenos Aires", 0, 0, st7789.WHITE)
write(bitmap_font, s, x, y, fg, bg, background_tuple, fill_flag):
Permite mostrar texto en la pantalla utilizando un módulo de fuente de tipo bitmap.
Parámetros:
bitmap_font: Requiere import chango_16 as bitmap_font por ejemplo.
El módulo de fuente bitmap que deseas utilizar para el texto. Este puede ser un módulo creado con la utilidad font2bitmap.
s:
La cadena de texto que deseas mostrar en la pantalla. Asegúrate de que esté codificada en UTF-8.
x:
La coordenada x para el punto superior izquierdo donde se dibujará el texto.
y:
La coordenada y para el punto superior izquierdo donde se dibujará el texto.
fg (opcional):
Color del primer plano (texto). Por defecto, es blanco.
bg (opcional):
Color del fondo. Por defecto, es negro.
background_tuple (opcional):
Una tupla que contiene un buffer de bitmap, ancho y alto para simular transparencia.
fill_flag (opcional):
Este parámetro permite definir cómo se maneja el fondo del texto.
Ejemplo:
tft.write(bitmap_font, "Raspberry Pi Buenos Aires", 5, 5, st7789.BLACK, st7789.WHITE)
tft.draw(vector_font, s, x, y, fg, scale):
Dibuja algo en las coordenadas (x, y) usando los datos proporcionados.
Parámetros:
vector_font: Requiere import music as vector_font por ejemplo.
El módulo de fuente vectorial que deseas utilizar para el texto. Este módulo debe ser compatible y se puede crear usando utilidades específicas para fuentes.
s:
La cadena de texto que deseas mostrar en la pantalla. Este texto se mostrará en la ubicación especificada.
x:
La coordenada X para el punto inferior izquierdo donde se dibujará el texto.
y:
La coordenada Y para el punto inferior izquierdo donde se dibujará el texto.
fg (opcional):
Color del primer plano (texto). Si no se proporciona, el color predeterminado es blanco.
scale (opcional):
Valor que determina el tamaño del texto. Este valor debe ser mayor que 0 y puede ser un valor de punto flotante o un entero. El valor predeterminado es 1.0.
Ejemplo:
tft.draw(vector_font, "Raspberry Pi Buenos Aires", 0, 10, st7789.WHITE, 0.5)
tft.draw_len(vector_font, s, scale):
Define la longitud de los datos que deseas dibujar.
tft.hline(x, y, width, color):
Dibuja una línea horizontal en la posición (x, y) con el ancho y color especificado.
Ejemplo:
tft.hline(10, 20, 100, st7789.RED)
tft.vline(x, y, height, color):
Dibuja una línea vertical en la posición (x, y) con la altura y color especificado.
Ejemplo:
tft.vline(10, 10, 100, st7789.GREEN)
tft.rect(x, y, width, height, color):
Dibuja un rectángulo en las coordenadas (x, y) con dimensiones width x , height y sin rellenar.
Ejemplo:
tft.rect(10, 10, 50, 50, st7789.BLUE)
tft.fill_rect(x, y, width, height, color):
Llena un rectángulo en las coordenadas (x, y) con dimensiones y un color específico.
Ejemplo:
tft.fill_rect(10, 10, 50, 50, st7789.BLUE)
tft.circle(x, y, r, color):
Dibuja un círculo centrado en (x, y) con radio r y un color determinado.
Ejemplo:
tft.circle(60, 60, 30, st7789.RED)
tft.fill_circle(x, y, r, color):
Llena un círculo con color, centrado en (x, y) con radio r.
Ejemplo:
tft.fill_circle(60, 60, 30, st7789.GREEN)
tft.polygon(polygon, x, y, color, angle, center_x, center_y):
Dibuja un polígono en la pantalla en función de los parámetros especificados.
Parámetros:
polygon:
Una lista de tuplas que representan las coordenadas de los vértices del polígono. Por ejemplo, [(x1, y1), (x2, y2), (x3, y3), (x1, y1)].
x:
La coordenada X en la que se dibujará el polígono. Esto puede ser el desplazamiento inicial en el eje X.
y:
La coordenada Y en la que se dibujará el polígono. Esto puede ser el desplazamiento inicial en el eje Y.
color:
El color con de los lados del polígono.
angle:
El ángulo de rotación del polígono, en grados. Esto permite rotar el polígono en torno a su centro.
center_x:
La coordenada X del punto central alrededor del cual se rotará el polígono.
center_y:
La coordenada Y del punto central alrededor del cual se rotará el polígono.
Ejemplo:
Definir los vértices de un triángulo, repitiendo el punto de origen y luego el polígono.
vertices = [(10, 10), (20, 30), (30, 10), (10, 10)].
tft.polygon(vertices, 0, 0, st7789.BLUE, 45, 15, 15).
tft.fill_polygon([(x, y)], x, y, color, angle, center_x, center_y):
Dibuja y rellena un polígono con los puntos proporcionados.
Parámetros:
polygon:
Una lista de tuplas que representan las coordenadas de los vértices del polígono. Por ejemplo, [(x1, y1), (x2, y2), (x3, y3), (x1, y1)].
x:
La coordenada X en la que se dibujará el polígono. Esto puede ser el desplazamiento inicial en el eje X.
y:
La coordenada Y en la que se dibujará el polígono. Esto puede ser el desplazamiento inicial en el eje Y.
color:
El color con el que se rellenará el polígono.
angle: Requiere import math
El ángulo de rotación del polígono, en radian [grados * (math.pi/180)]. Esto permite rotar el polígono en torno a su centro.
center_x (opcional):
La coordenada X del punto central alrededor del cual se rotará el polígono.
center_y (opcional):
La coordenada Y del punto central alrededor del cual se rotará el polígono.
Ejemplo:
tft.fill_polygon([(10, 10), (50, 50), (10, 50), (10, 10)], 0, 0, st7789.MAGENTA)
Ejemplo con rotación:
tft.fill_polygon([(10, 10), (50, 50), (10, 50), (10, 10)], 0, 0, st7789.YELLOW,45*(math.pi/180),50,80)
tft.blit_buffer(buffer, x, y, width, height):
Copia un buffer de píxeles directamente en la pantalla.
tft.bitmap(x, y, index):
Dibuja un bitmap desde un archivo en las coordenadas (x, y). index o file Requiere ser convertido por imgtobitmap.py o monofont2bitmap.py.
Ejemplo:
tft.bitmap(0, 0, 'imagen.bmp')
tft.bounding():
Define un área limitante (bounding box) para gráficos. (Uso específico puede variar).
tft.blit_buffer(buffer, x, y, width, height): Copia un buffer de píxeles directamente en la pantalla.
El "buffer protocol" en MicroPython se refiere a objetos que exponen su memoria como una secuencia continua de bytes. Los tipos de datos que cumplen con este protocolo son:
bytes
bytearray
array (Del módulo array de MicroPython)
Para usar tft.blit_buffer(), el buffer debe ser uno de estos tipos, donde cada píxel está representado en el formato de color requerido (probablemente RGB565 o RGB888).
Debemos crear un buffer en el formato correcto. Normalmente, esto sería un bytearray que contiene los datos de los píxeles que deseas "blitear" a la pantalla.
Al ser una pantalla, que mejor que simule un blink con colores, en vez del Led que trae la placa, además conocemos como iniciar la pantalla y cuáles son los colores que incluye por defecto el módulo st7789. Posee otra forma para elegir cualquier color con RGB, pero estos son constantes predefinidas.
Since it is a screen, it is better to simulate a blink with colors, instead of the LED that comes with the board. We also know how to start the screen and what colors are included by default in the st7789 module. There is another way to choose any color with RGB, but these are predefined constants.
Escribir en pantalla.
Write on screen.
Método--Method:
text(font, s, x, y[, fg, bg])
font: Fuente elegida.
s: Int, bytes o String entre comillas.
x: Posición x [pixel]
y: Posición y [pixel]
fg: Color de texto.
bg: Color de fondo del texto.
Escriba s (int, string o bytes) en la pantalla utilizando la fuente de mapa de bits especificada con las coordenadas como la esquina superior izquierda del texto. Los argumentos opcionales fg y bg pueden establecer los colores de primer plano y de fondo del texto; de lo contrario, el color de primer plano será BLANCO de forma predeterminada y el color de fondo será NEGRO.
Write s (integer, string or bytes) to the display using the specified bitmap font with the coordinates as the upper-left corner of the text. The optional arguments fg and bg can set the foreground and background colors of the text; otherwise, the foreground color defaults to WHITE, and the background color defaults to BLACK.
Método--Method:
draw(vector_font, s, x, y[, fg, scale])
vector_font: Fuente vectorial elegida.
s: String entre comillas.
x: Posición x [pixel]
y: Posición y [pixel]
fg: Color de texto.
scale: Escala debe ser mayor a cero, int/float
Dibujamos texto en la pantalla utilizando la fuente vectorial Hershey especificada con las coordenadas como la esquina inferior izquierda del texto. El color de primer plano del texto se puede establecer mediante el argumento opcional fg. De lo contrario, el color de primer plano por defecto será BLANCO. El tamaño del texto se puede escalar especificando un valor de escala. El valor de escala debe ser mayor que 0 y puede ser un valor de float o int. El valor de escala por defecto es 1,0. Consulte README.md en el directorio vector/fonts, por ejemplos de fuentes y el directorio utils para un programa de conversión de fuentes.
Draw text to the display using the specified Hershey vector font with the coordinates as the lower-left corner of the text. The foreground color of the text can be set by the optional argument fg. Otherwise, the foreground color defaults to WHITE. The size of the text can be scaled by specifying a scale value. The scale value must be larger than 0 and can be a floating-point or an integer value. The scale value defaults to 1.0. See the README.md in the vector/fonts directory, for example fonts and the utils directory for a font conversion program.
Método--Method:
write(bitmap_font, s, x, y[, fg, bg, background_tuple, fill_flag])
bitmap_font: Fuente bitmap elegida.
s: String entre comillas.
x: Posición x [pixel]
y: Posición y [pixel]
fg: Color de texto.
bg: Color de fondo del texto.
background_tuple: Conteniendo bitmap_buffer, width, height.
fill_flag: Este parámetro controla si el área de fondo debe ser rellenada con el color de fondo. Es opcional y generalmente no se usa a menos que quieras manejar la manera en que se renderiza el texto.
Escribimos texto en la pantalla utilizando el módulo de fuente de mapa de bits Monospace o proporcional especificado con las coordenadas como la esquina superior izquierda del texto. Los colores de primer plano y de fondo del texto se pueden establecer mediante los argumentos opcionales fg y bg; de lo contrario, el color de primer plano será BLANCO por defecto y el color de fondo será NEGRO.
La transparencia se puede emular proporcionando un background_tuple que contenga (bitmap_buffer, ancho, alto). Este es el mismo formato utilizado por el método jpg_decode. Consulte examples/T-DISPLAY/clock/clock.py para ver un ejemplo.
Consulte README.md en el directorio truetype/fonts para ver fuentes de ejemplo. Devuelve el ancho de la cadena impresa en píxeles. Acepta cadenas codificadas en UTF8.
La utilidad font2bitmap crea módulos de mapa de bits compatibles de 1 bit por píxel a partir de fuentes True Type proporcionales o Monospace. El tamaño de los caracteres, los colores de primer plano y de fondo y los caracteres del módulo de mapa de bits se pueden especificar como parámetros. Utilice la opción -h para obtener más detalles. Si se especifica un buffer_size durante la inicialización de la pantalla, debe ser lo suficientemente grande como para contener el carácter más ancho (HEIGHT * MAX_WIDTH * 2).
Write text to the display using the specified proportional or Monospace bitmap font module with the coordinates as the upper-left corner of the text. The foreground and background colors of the text can be set by the optional arguments fg and bg, otherwise the foreground color defaults to WHITE and the background color defaults to BLACK.
Transparency can be emulated by providing a background_tuple containing (bitmap_buffer, width, height). This is the same format used by the jpg_decode method. See examples/T-DISPLAY/clock/clock.py for an example.
See the README.md in the truetype/fonts directory for example fonts. Returns the width of the string as printed in pixels. Accepts UTF8 encoded strings.
The font2bitmap utility creates compatible 1 bit per pixel bitmap modules from Proportional or Monospaced True Type fonts. The character size, foreground, background colors, and characters in the bitmap module may be specified as parameters. Use the -h option for details. If you specify a buffer_size during the display initialization, it must be large enough to hold the widest character (HEIGHT * MAX_WIDTH * 2).
Escaneamos las redes disponibles y las mostramos en pantalla, junto con todos los detalles que nos devuelve el comando AT+CWLAP, no podemos ver los datos.
We scan the available networks and display them on the screen, along with all the details that are returned to us from AT+CWLAP command. We cannot see the data.
De esta forma podemos mostrar todos los datos obtenidos por el comando AT+CWLAP, de a un resultado a la vez.
In this way we can display all the data obtained by the AT+CWLAP command, one result at a time.
Se muestran todos los resultados al mismo tiempo y se desplazan para mostrar todos los resultados que envía AT+CWLAP.
All results are displayed at the same time and scroll to show all results sent by AT+CWLAP.
Para evitar un poco el parpadeo.
To avoid flickering a little.