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…

Como evitar perder la sesión cuando navego por un iframe

Recientemente he tenido un proyecto de página web que funcionaba perfectamente cuando se hacía directamente en el navegador, pero cuando intentaba meter el contenido en un iframe para integrarlo con otra parte de la web no conseguía que se mantuviese la sesión. Esto, además de un malestar insidioso, me produjo curiosidad, ya que hacía mucho que no utilizaba iframes y, parece, que la forma en que tratan estos ha cambiado un poco con las últimas versiones de los navegadores.

Aunque podría deciros la solución ya mismo, vamos a darle un poco de dramatismo y os voy a explicar porqué un iframe no se comporta exactamente igual que la navegación en el browser y como eso hace que puedas perder la sesión.

Imagen explicativa

¿Cual es la diferencia?

Un iframe no es más que un marco que se inserta dentro de una página web y cuyo contenido es cargado de una dirección distinta de internet, eso tiene la ventaja de que puedes enriquecer la página con contenido que no tienes que generar desde tu servidor, o que puedes reaprovechar cosas que ya tienes hechas en otros sistemas y el usuario podría no notar que esa parte del contenido proviene de otro sitio. Precisamente por este detalle (que los usuarios no son conscientes de donde viene ese contenido) se abren posibilidades de ataques Cross Site Request Forgery (CSRF), que significa que podrían recuperar una cookie de un dominio distinto desde una iframe, por ejemplo, y secuestrar la sesión original o cualquier credencial de usuario que viaje con las cookies.

Precisamente para evitar estos ataques en 2016 se estableció un atributo para las cookies (SameSite) que prevenía que se pudieran enviar cookies a dominios distintos de los que se estaba navegando (de lo que veíamos en la barra de navegación). Los posibles valores de estos atributos son:

  • None: las cookies se mandan a todos los dominios.
  • Strict: Las cookies solo se enviaran al dominio que coincide con el de la barra de direcciones
  • Lax: Las cookies se enviarán al contexto principal y con las navegaciones de primer nivel.

Antes de tener este atributo todas las cookies eran tratadas como si fuese None y los iframes podían recibir las cookies (entre ellas las de sesión), pero a partir de que los navegadores adoptaron el atributo, la cosa cambió y ahora si la cookie no declaraba el SameSite se consideraba que este era del tipo Lax y esto hace que la navegación dentro de un iframe que está en otro dominio no pase las cookies.

¿Cómo arreglarlo?

Básicamente lo único que tienes que hacer (esto ya depende mucho del framework que tengas) es declarar las cookies con este encabezado:

Set-Cookie: session=your_session; SameSite=None; Secure

Con esto declaramos que las cookies podrán ser retransmitidas, pero además que solo se transmitirán a dominios seguros (con https). Esta pequeña modificación hace que se pueda navegar ya dentro del iframe, pero, ¡cuidado! te añade un potencial problema de seguridad CSRF.

Novaluz, arruinando a las PYMES

Estaba yo tan tranquilo en la oficina haciendo mis cosas cuando me entra una llamada de un número de Málaga, como soy una persona educada y ese número no me había hecho nada me da por cogerlo. Es una señorita que me explica que son una operadora nueva de electricidad, que se centran en las pymes y que si les podría envíar una factura de la luz para que nos hagan un análisis de si nos podrían hacer una oferta para ahorrar dinero.

Ahorrar dinero… Claro, sin duda. Les envío la factura del último mes (estamos hablando de septiembre, ya con los precios de la electricidad en máximos), y quedan en enviarme el análisis y llamarme de nuevo. La empresa se llama Novaluz Energía y me llaman desde Málaga.

El análisis, bueno, choca un poco porque dice que nos pueden ahorrar un 25% con su tarifa, pero que es una tarifa varible, por lo que el ahorro podría ser más cuando la energía baje de precio (si baja). Me dice que, además, nos hacen descuentos por nuevos clientes y nos ponen un techo en el precio de la energía en 164 EUR/MWh. Me parece una apuesta un poco arriesgada, pero dado que me han dicho que hay techo y que me saldrá más barato de todas formas que con mi tarifa fija (de hace más de 10 años), pues me lo creo… Dicho y hecho en un par de días ya soy cliente suyo.

Resumen del conrtrato

Esto es en noviembre. En Enero me pasan la factura por el mes completo de Diciembre y, cual no es mi sorpresa al encontrarme que la factura era un 40% más cara que la última de septiembre (y no es que hubiese consumido más energía). Dejo pasar los días y a finales de enero me llega otra factura un 50% más caro que la más cara que haya pagado nunca con mi anterior proveedor. Veamos los precios:

Madre!!! Vaya precios. Con mi anterior compañía estaba pagando a 0,14€/kWh, con esta me están cobrando a 3 veces ese precio (y eso con un pretendido techo de 164MWh). Después de consultárselo me dicen que es que el techo se aplica sobre una parte solo de la energía y me sueltan (ahora, después de contratado) esta fórmula:

Y así, suponiendo que han puesto el tope solo en el OMIE nos sale que el resto de costes son 439,286-164 = 275,286 €/MWh precios opacos y sobre los que no hay tope que valga. Vamos un negociazo.

Pero lo peor de todo esto es que ese mismo día recibo otro comunicado:

A la compañía, que con el techo de 164 me ha multiplicado el coste de la energía, me dice ahora que no puede mantener el techo y que lo pone en 599… Si aplicamos las mismas cuentas que hicimos antes podríamos tener un precio de 875 €/MW (un 600% más caro que el contrato anterior). Fale, decidido me vuelvo a mi proveedor de toda la vida…

El cambio es sencillo, pero no puedes volver al mismo contrato de antes, esas tarifas ya no existen y tienes que acogerte a precios más «modernos» que, básicamente son el doble de lo que estaba pagando. Grrrrr, el puñetero cambio a Novaluz va a conseguir que tenga que ahorrar energía si no quiero mandar la empresa a la ruina…

Gracias por nada, Novaluz, así no se hacen las cosas… Espero que no piquen muchas pymes o tendremos muchas más empresas arruinadas y en vías de desaparición.