Cómo usar raspberry pi pico con PlatformIO

Hace tiempo que trasteo con varias placas de desarrollo que intento integrar en distintos proyectos de IoT, la mayoría relacionados con nomorekeys, el caso es que generalmente he utilizado arduino (el pro micro es mi favorito) o el ESP32 cuando necesito wifi (antes el ESP8266). Hay muchos otros por ahi, como el seeeduino xiao y muchos de Nordic.

Raspberry pi pico pinout

El caso es que tengo mucho código escrito en C/C++ para el entorno Arduino y, resulta, que puedo reutilizarlo en distintos procesadores utilizando un plugin para visual studio code llamado PlatformIO, lo que he ido haciendo para los distintos arduino, ESP y Seeeduino, Hace relativamente poco tiempo me decidí a probar el nuevo MCU de Raspberry, el Raspberry Pi Pico, pero me centre en usarlo con CircuitPython, teniendo unos resultados excelentes y que os recomiendo probar.

Llegado el caso necesité más memoria para un proyecto que inicialmente estaba codificado para arduino pro micro ya que este solo posee 2,5k de memoria RAM y se quedaba muy corta. Revisando lo que tenía por casa me di cuenta que tenía un par de rpi pico por ahí de las pruebas con python y me di cuenta que tenían 264k de memoria (x100 lo que tiene un arduino), tampoco andan mal de precio y tienen todos los pines de entrada salida que necesitaba, así que, manos a la obra… Vamos a ver si podemos adaptar el código de arduino a la pico… Usando PlatformIO.

No voy a entrar ahora mismo ni en cómo instalar platformio ni en como crear un proyecto, eso os lo dejo para vosotros o si me lo pedís lo esccribo más adelante, por ahora partiremos de que eso ya lo has hecho.

Si ya tienes un proyecto hecho con platformio, enhorabuena, todos los cambios que tendrás que hacer es incluir esto en tu platformio.ini:

[env:pico]
platform = raspberrypi
board = pico
framework = arduino

Recuerda poner el #include <Arduino.h> si estás importando un sketch del ide de arduino y ya estaría…

La primera vez que quieras subir el código a la placa tendrás que copiar el archivo firmware.uf2 después de haber puesto en modo boot la placa (enchufala al ordenador pulsando el botón de la misma), yo lo hago con este comando (uso linux)

cp .pio/build/pico/firmware.uf2 /media/$USER/RPI-RP2/

Las siguientes veces ya no hará falta, puedes dar al botón upload directamente y el código compilado se subirá a la placa.

Happy coding!

Cómo dar de alta tu propia librería en el gestor de librerías de Arduino

De un tiempo a esta parte he estado haciendo cositas con microcontroladores y Ardunio (ultimamente con platformio), y el caso es que he querido dejar como librerías libres algunos de los códigos que he generado (o mejorado), como por ejemplo la librería para generar códigos QR en displays OLED o TFT (https://github.com/yoprogramo/QRcodeDisplay). La gestión de librerías en Arduino es una de las cosas que hacen el entorno interesante (en platformio mejor todavía) y es muy interesante tener disponible tu librería en el gestor de librerías de arduino.

Hasta hace poco el hacer que tu librería estuviese disponible para todo el mundo en el gestor de librerías de Arduino IDE era una tarea muy «manual», básicamente poner un mensaje en los foros de soporte de Arduino y esperar por la respuesta… Esto ha cambiado un poquito y podemos encontrar un nuevo método aquí:

https://github.com/arduino/library-registry#readme

Os lo resumo para los que seais impacientes. Los pasos una vez que tengáis el código de la librería en github son los siguientes:

  • Crear una release en github y darle un número
  • Crear un archivo llamado library.properties con el número de versión y los datos correspondientes de las plataformas y dependencias
  • Abrir este enlace para hacer un fork del repositorio: https://github.com/arduino/library-registry/edit/main/repositories.txt
  • Hacer fork del repositorio
  • Editar el archivo repositories.txt añadiendo la url de github del repositorio
  • Hacer click en «Proponer cambios»
  • Crear un pull request

El pull request genera una petición para que un bot revise los cambios, si todo está ok la librería aparecerá al día siguiente en el gestor de arduino, si hay algún problema se puede poner un comentario mencionando a @ArduinoBot o hacer un commit con las modificaciones en el archivo (en la rama de nuestro fork).

Nuestra librería en el gestor de librerías de Arduino

¿Qué hacer cuando Autofirma no te muestra ningún certificado?

En mi día a día, y en el de cada vez más personas, el uso de la firma digital se ha convertido en algo habitual. No solo es la obligación legal de las administraciones al relacionarnos con ellas, sino que también abre un nuevo abanico de posibilidades para usos particulares de lo más variopinto.

Una de las cosas que la administración lleva haciendo, digamos, bien, estos años es proporcionarnos herramientas para que nuestras penas burocráticas sean un poco menores (ojo, esto que digo es muuuuuy discutible), o al menos debería serlo. Para mi, que uso Linux en mi día a día y que solo arranco Windows por obligación, tener una manera de hacer firma digital era fundamental. Y resulta que la administración creó una aplicación en Java que podemos utilizar también los de LInux ¡Bien!

La herramienta se llama AutoFirma y podéis descargarla del enlace que os he pasado antes. No es que sea una maravilla de la técnica, pero puedes usarla de manera bastante sencilla ya que te coge los certificados del almacén de Firefox… O lo hacía.

El caso es que, de un tiempo a esta parte el diálogo para escoger el certificado me aparecía vacío y tenía que cargar el archivo .p12 donde tengo la copia de seguridad del certificado que quería utilizar… Y eso era muy penoso dada la cantidad de archivos que tengo habitualmente. La verdad es que me sorprendió que dejase de funcionar, pero creí que sería algo pasajero… Pero no lo fue.

Si a vosotros os pasa algo similar, os doy la receta para que vuelva a funcionar:

Revisad los perfiles de firefox

Si tenéis más de un perfil en firefox (en mi caso tenía tres porque instalé versiones beta de Firefox 100) AutoFirma se confunde y no coge el correcto… Podéis ver los perfiles que tenéis escribiendo about:profiles en Firefox.

En mi caso, y dado que no usaba los otros perfiles para nada, me bastó ir al directorio .mozilla/firefox de mi máquina y eliminar los directorios que no eran mi perfil principal y luego editar el archivo profiles.ini para eliminar todo rastro de esos perfiles.

Una vez hecho esto (no es necesario reiniciar Firefox si no queréis) ya tendréis disponibles de nuevo los certificados para hacer la firma…

Cerrando el 2021

Dentro de dos meses hará 15 años que llevo manteniendo este blog, una eternidad en cuestión de tiempo tecnológico y una eternidad también en tiempo biológico. Generalmente se usa este último día del año para hacer un resumen de lo que se ha hecho y se ha dejado de hacer en el año saliente y dar la bienvenida a los nuevos planes y deseos para el año que entra… Bien, hoy no estoy de humor para ello (que eso no quita que no lo haga en algún momento), mi retrospectiva será más de estos 15 años de blog que de este año de pandemia continuada. Es más, se cumplen ya 20 desde que se publicó algo bajo este dominio… Y eso requiere un poco de historia.

Compré el dominio yoprogramo.com allá por 2001 poco después de haber contratado mi adsl con terra y con el ánimo de poner una web informativa sobre temas de programación. Yo, como muchos sabréis, me defino como programador, un programador con vocación empresarial y con muchas ganas de hacer cosas útiles por todo el mundo. De hecho, si sentís curiosidad, hay entradas de la web en Internet Archive (os muestro la primera de todas de Agosto de 2001):

En aquel momento firmaba como JaeSoft (Jose Antonio Espinosa) ya que lo que más deseaba era crear mi propia compañía de desarrollo de software, aunque por aquel año yo estaba en otra empresa (Sema Group – SlumbergerSema – Atos) haciendo cosas muy complicadas y muy interesantes para la época.

Intenté reunir personas interesadas en programar y en escribir, muy pocas se apuntaron y mi interés por mantener tantas secciones, incluyendo noticias, trucos y demás cosas que podrían servir para configurar un portal se resintió un tanto cuando perdí parte de los contenidos (aquí una imagen para que veáis como era la cosa en 2004 después de recuperar algunos):

A partir de ese año cambié mi rumbo laboral, abandoné la multinacional en la que había trabajado y me puse por mi cuenta. La web sufrió un hackeo en que, afortunadamente, no perdimos nada (pero publicamos el artículo) y la web pasó a estar patrocinada por la nueva empresa que acababa de fundar (Digimate Computer)… Incluso patrocinaba la web más loca que nunca he publicado, una que se llamaba «quiero mi wii» que me ayudo a conseguir una consola wii en un momento en el que había una escased tremenda de ellas. Fue tanta gente la que quería la wii que tuvimos una avalancha de visitas el poco tiempo que estuvo activa:

Hasta que un día de 2007 decidí cambiar de formato, abandonar el portal para el programador que, aparentemente, no usaban demasiados programadores y me daba muchísimo trabajo mantener y creé (utilizando un wordpress que había aparecido el año pasado) mi blog personal.

Y si hace 15 años que llevo escribiendo en este mi blog, puedo seguir escribiendo algunos más… Intentaré estirar lo más posible mi dedicación al mismo durante este año entrante y, finalmente, os deseo a todos que el año 2022 os sea propicio. Desear es gratis, pero es una buena cosa para variar…

Feliz 2022

Gestión de versiones de Flutter

Flutter es un framework que me está gustando bastante, es muy consistente en cuanto a las distintas versiones, se ve muy similar en todas las plataformas y Dart como lenguaje es bastante interesante y nada esotérico (por eso de que usa cosas que ya manejamos y no se dedica a reinventar la rueda).

Flutter Version Management

Tanto es así que empezamos hace unos meses un proyecto de aplicación móvil con Flutter, coincidiendo con la llegada de la versión 2.0 y las cosas empezaron a ir «demasiado deprisa». La comunidad y los mantenedores del sdk parece que se han puesto las pilas y han decidido incluir mejoras a un ritmo trepidante, cuando escribo estas líneas ya vamos por la versión 2.8.1.

Nosotros estabilizamos la app en un contenedor docker usando la versión 2.5.2 de Flutter y nos encontramos ahora que no hay manera de instalar desde cero esa versión con los sistemas que proporciona Flutter. Todos aquellos sistemas en los que hicimos un upgrade ya no los podemos utilizar para desarrollo porque, entre otras cosas, han cambiado librerías y ya no son compatibles algunas partes de nuestro código.

Pero no soy el único con ese problema. Varios de los desarrolladores de Flutter se han encontrado con la misma situación y, afortunadamente, han desarrollado una manera de poder disponer de una versión propia de flutter para cada proyecto… Mediante FVM.

Os cuento los pasos básicos para tener FVM funcionando (partiendo de que has instalado flutter en tu sistema) y cómo usarlo para cada proyecto:

1. Instalar FVM

dart pub global activate fvm

Esto te instala el paquete, pero tendrás que cambiar el entorno para poder acceder al comando fvm cada vez, en mi caso es algo como:

export PATH="$PATH":"$HOME/.pub-cache/bin"

Añadiendo esta línea al final del ~/.bashrc conseguiréis meter en el path el comando FVM

2. Instalar una versión de flutter para su uso posterior

En mi caso quería instalar la versión 2.5.2 y tuve que ejecutar esto:

fvm install 2.5.2

Puedes instalar tantas como quieras (o necesites), puedes conseguir la lista de todas las instaladas con el comando fvm list

3. Usar una versión concreta en tu proyecto

Dentro del directorio del proyecto en el que quieras usar esta versión puedes sustituir el uso del comando flutter por el comando fvm flutter que te ejecutará la versión correspondiente, para indicar qué versión quieres usar debes escribir:

fvm use 2.5.2

Esto te genera un directorio .fvm en donde se almacenarán los enlaces correspondientes, no olvides incluir en tu .gitignore el directorio .fvm/flutter_sdk

Con esto y algunas cosillas más (os dejo consultar la documentación) ya podréis desarrollar y depurar con la versión de flutter que queráis.