Raspberry pico, implementando hotreload y leyendo logs con vscode.
Entorno
Actualmente esto se trabaja en entorno de windows 11, aunque seguramente lo mismo funciona en linux o en mac, ya que la mayoría de la configuración la da el propio vscode.
Vscode y la extensión para raspberry.
Se debe instalar la extensión de vscode llamada "Raspberry Pi Pico", esta extensión da muchas facilidades para trabajar con la raspberry pico, crea entornos de desarrollo con make y cmake, además de buildear, permitiendo centrarte en el código y no en la configuración.

Código sample
En el siguiente código se encienden 3 pines, uno seguido del otro, cada 100ms, es usable en el modulo semaforo para encneder un led para cada semnaforo.
Lo importante de este código es la función stdio_init_all(), ya que ayuda a establecer la conexión USB entre la raspberry pico y el ordenador, permitiendo que se puedan leer los logs desde el terminal de vscode.
También el sleep_ms(2000) es importante, ya que da tiempo a que se establezca la conexión USB antes de empezar a enviar logs.
#include
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "hardware/adc.h"
void initPin(uint pin){
gpio_init(pin);
gpio_set_dir(pin, GPIO_OUT);
}
int main() {
stdio_init_all();
// Dar tiempo para que se establezca la conexión USB
sleep_ms(2000);
const uint ledPin = 25;
const uint pin1 = 12;
const uint pin2 = 13;
const uint pin3 = 15;
initPin(ledPin);
gpio_put(ledPin, true); // Encender el LED
const int arrayPins[] = {pin1, pin2, pin3};
int numPins = sizeof(arrayPins) / sizeof(arrayPins[0]);
for (int i = 0; i < numPins; i++) {
initPin(arrayPins[i]);
}
printf("Starting GPIO control...\n");
int index = 0;
while (1) {
// 12-bit conversion, assume max value == ADC_VREF == 3.3 V
for (int i = 0; i < numPins; i++) {
if (index == i) {
gpio_put(arrayPins[i], true); // Set current pin high
} else {
gpio_put(arrayPins[i], false); // Set other pins low
}
}
printf("Pin %d is HIGH\n", arrayPins[index]);
index++;
if (index >= numPins){
index = 0;
}
sleep_ms(100);
}
}
Modificando CmakeLists.txt
Lo anterior funciona bien, pero para cualquier cambio se debe desconectar y volver a conectar la raspberry pico, lo que es un poco tedioso.
Por eso se debe modificar el archivo CMakeLists.txt, quedando como sigue.
# Generated Cmake Pico project file
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Initialise pico_sdk from installed location
# (note this can come from environment, CMake cache etc)
# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
if(WIN32)
set(USERHOME $ENV{USERPROFILE})
else()
set(USERHOME $ENV{HOME})
endif()
set(sdkVersion 2.1.1)
set(toolchainVersion 14_2_Rel1)
set(picotoolVersion 2.1.1)
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
if (EXISTS ${picoVscode})
include(${picoVscode})
endif()
# ====================================================================================
set(PICO_BOARD pico CACHE STRING "Board type")
# Pull in Raspberry Pi Pico SDK (must be before project)
include(pico_sdk_import.cmake)
project(hello_adc C CXX ASM)
# Define el soporte de salida USB antes de iniciar el SDK
add_compile_definitions(PICO_STDIO_USB=1)
# Si no usarás UART, también puedes desactivarlo:
# add_compile_definitions(PICO_STDIO_UART=0)
# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()
# Add executable. Default name is the project name, version 0.1
add_executable(hello_adc
hello_adc.c
)
target_link_libraries(hello_adc pico_stdlib hardware_adc)
# create map/bin/hex file etc.
pico_add_extra_outputs(hello_adc)
# add url via pico_set_program_url
pico_enable_stdio_usb(hello_adc 1)
El código es casi igual como es creado por defecto, pero se debe agregar las siguientes lineas
- add_compile_definitions(PICO_STDIO_USB=1)
- pico_enable_stdio_usb(hello_adc 1)
Con esas cambios, en especial el pico_enable_stdio_usb, se logra el objetivo. Ahora en dispositivos de windows debiese estar
reconocido en com el puerto de la raspberry pico.
hello_adc es el nombre de entrada de codigo, por lo que debe cambiar
Probando
Ahora para aplicar los cambios hechos en el código, ejecutas el comando picotool reboot -f -u para desconectar la raspberry y que entre en modo boot sin desconectar, luego solo das click en Run en vscode y debiese subir los cambios.
Si quieres ver los logs, entonces en la terminal, en el apartado "SERIAL MONITOR", te conectas al com donde está la raspberry, y puedes empezar
a ver los prints y logs que se envían desde la raspberry pico.
