Correo: [email protected] - Teléfono: +56979962128

La Raspberry Pi Pico viene con un sensor de temperatura incorporado, conectado al ADC4.
En esta guía rápida, aprenderás a obtener los datos de temperatura de ese sensor.
Te mostraremos dos métodos diferentes para hacerlo: usando lectura analógica y usando el módulo picozero.
Raspberry Pi Pico Read the Internal Temperature Sensor MicroPython
 

Firmware de MicroPython
Para seguir este tutorial, necesitas tener el firmware de MicroPython instalado en tu placa Raspberry Pi Pico.
También necesitas un IDE para escribir y cargar el código en tu placa.

El IDE de MicroPython recomendado para la Raspberry Pi Pico es Thonny IDE.

El sensor de temperatura interna

El sensor de temperatura interno 

de Raspberry Pi Pico

 funciona verificando el voltaje de un diodo especial conectado al 

ADC4

 en Raspberry Pi Pico.

Frambuesa Pico
   

Según la hoja de datos, cuando la temperatura es de 27 grados Celsius, el voltaje es de alrededor de 0,706 V, y por cada grado que cambia la temperatura, el voltaje disminuye aproximadamente 1,721 mV.

Para encontrar la temperatura en Celsius usando el voltaje, puedes usar esta fórmula:

T = 27 - (ADC_voltage - 0.706)/0.001721

Medir la temperatura con precisión con este sensor puede ser complicado debido a las variaciones de voltaje y pendiente entre dispositivos. Considérelo más como una herramienta de referencia que como un dispositivo de medición preciso. Es posible que deba realizar ajustes para mayor precisión.

Lectura de la temperatura mediante ADC

Para obtener la temperatura del sensor de temperatura interno, puede utilizar el siguiente código.

# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-internal-temperature-micropython/
from machine import ADC
# Internal temperature sensor is connected to ADC channel 4
temp_sensor = ADC(4)
def read_internal_temperature():
    # Read the raw ADC value
    adc_value = temp_sensor.read_u16()
    # Convert ADC value to voltage
    voltage = adc_value * (3.3 / 65535.0)
    # Temperature calculation based on sensor characteristics
    temperature_celsius = 27 - (voltage - 0.706) / 0.001721
    return temperature_celsius
def celsius_to_fahrenheit(temp_celsius): 
    temp_fahrenheit = temp_celsius * (9/5) + 32 
    return temp_fahrenheit
# Reading and printing the internal temperature
temperatureC = read_internal_temperature()
temperatureF = celsius_to_fahrenheit(temperatureC)
print("Internal Temperature:", temperatureC, "°C")
print("Internal Temperature:", temperatureF, "°F")
   

Cómo funciona el código

Echemos un vistazo rápido a cómo funciona el código.

Creación de un objeto ADC

Comienza importando la clase ADC

del módulo machine

 para leer señales analógicas.

from machine import ADC
El sensor de temperatura interno está conectado al ADC4. Por lo tanto, creamos un objeto ADC en ese pin llamado temp_sensor.
temp_sensor = ADC(4)
 

Lectura del sensor de temperatura interno

Luego, creamos una función para leer el sensor de temperatura interno llamada read_internal_temperature().

def read_internal_temperature():
Obtenemos la lectura del ADC usando la función read_u16(). Aprende cómo leer señales analógicas con la Raspberry Pi Pico en esta guía.
adc_value = temp_sensor.read_u16()
  Después, necesitamos convertir ese número en un valor de voltaje. Sabemos que 3.3V corresponde a 65535, por lo que podemos calcularlo así:
voltage = adc_value * (3.3 / 65535.0)
  Finalmente, podemos usar la fórmula proporcionada por la hoja de datos para obtener la temperatura en grados Celsius:  
temperature_celsius = 27 - (voltage - 0.706) / 0.001721

La función devuelve la temperatura en Celsius:

return temperature_celsius

Conversión a Fahrenheit

  También incluimos la función celsius_to_fahrenheit() para convertir la temperatura en Celsius a Fahrenheit:  
def celsius_to_fahrenheit(temp_celsius):
temp_fahrenheit = temp_celsius * (9/5) + 32
return temp_fahrenheit
  Obteniendo e imprimiendo las lecturas de temperatura
Llamamos a la función read_internal_temperature() para obtener la temperatura en Celsius y guardarla en la variable temperatureC:  
temperatureC = read_internal_temperature()
  Luego, llamamos a la función celsius_to_fahrenheit() y le pasamos como argumento temperatureC para obtener la temperatura en Fahrenheit:  
temperatureF = celsius_to_fahrenheit(temperatureC)
 

Finalmente, imprimimos las lecturas en la consola:

print("Internal Temperature:", temperatureC, "°C")
print("Internal Temperature:", temperatureF, "°F")

Testeamos el código

Copia el código en Thonny IDE. Haz clic en el botón verde Run (Ejecutar).  
Testing the Raspberry Pi Pico Code on Thonny IDE
  La temperatura del sensor se imprimirá en la consola (Shell) tanto en grados Celsius como en Fahrenheit.
Raspberry Pi Pico, read internal temperature sensor

Leyendo la temperatura usando picozero

Hay una forma más sencilla de obtener la lectura del sensor de temperatura interno usando el módulo picozero. Este módulo es una biblioteca amigable para principiantes, con “recetas” fáciles para usar los sensores más comunes. Si quieres profundizar, puedes revisar la documentación oficial de picozero.

La biblioteca picozero incluye una clase llamada pico_temp_sensor que te permite obtener la temperatura fácilmente, sin necesidad de hacer cálculos (todo se hace en segundo plano).

Instalando el paquete picozero

Antes de seguir, debes instalar el paquete picozero:

  1. Ve a Tools > Manage Packages (Herramientas > Administrar paquetes).

  2. Busca picozero.

  3. Haz clic en la primera opción picozero @ PyPi.

  4. Finalmente, haz clic en Install (Instalar).

Después de unos segundos, el paquete estará instalado y listo para usar.

Raspberry Pi Pico installing the picozero package

Código

El siguiente código hace lo mismo que el ejemplo anterior, pero usando la biblioteca picozero

 
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-internal-temperature-micropython/

from picozero import pico_temp_sensor

# Convert from celsius to fahrenheit
def celsius_to_fahrenheit(temp_celsius): 
    temp_fahrenheit = temp_celsius * (9/5) + 32 
    return temp_fahrenheit

# Reading and printing the internal temperature
temperatureC = pico_temp_sensor.temp
temperatureF = celsius_to_fahrenheit(temperatureC)

print("Internal Temperature:", temperatureC, "°C")
print("Internal Temperature:", temperatureF, "°F")
 

Primero, necesitamos importar la clase pico_temp_sensor desde el módulo picozero:

from picozero import pico_temp_sensor
Luego, obtenemos la temperatura usando pico_temp_sensor.temp y guardamos el valor en grados Celsius en la variable temperatureC:
 
temperatureC = pico_temp_sensor.temp
 

Si ejecutas este código en tu Raspberry Pi Pico, obtendrás el mismo resultado que en el ejemplo anterior.

Lecturas continuas de temperatura

 

Si quieres obtener lecturas de temperatura de forma continua, puedes leer e imprimir las temperaturas dentro de un bucle while. El código quedaría así:

# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-internal-temperature-micropython/

from time import sleep
from picozero import pico_temp_sensor

# Convert from celsius to fahrenheit
def celsius_to_fahrenheit(temp_celsius): 
    temp_fahrenheit = temp_celsius * (9/5) + 32 
    return temp_fahrenheit

while True:
    # Reading and printing the internal temperature
    temperatureC = pico_temp_sensor.temp
    temperatureF = celsius_to_fahrenheit(temperatureC)

    print("Internal Temperature:", temperatureC, "°C")
    print("Internal Temperature:", temperatureF, "°F")
    
    # Wait one second between each reading
    sleep(1)
  Con este ejemplo, obtendrás nuevas lecturas de temperatura impresas en la consola de MicroPython cada segundo, hasta que detengas el programa.  

Para cerrar

  La Raspberry Pi Pico incluye un sensor de temperatura interno que te da una idea general de la temperatura interna de la placa. Leer la temperatura es tan simple como medir el voltaje en el ADC4 y luego hacer los cálculos necesarios.

Como alternativa, también puedes usar el paquete picozero.

Aprende esto en un curso

Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial: