Raspberry Pi Pico: чтение встроенного датчика температуры (MicroPython)

Raspberry Pi Pico оснащен встроенным датчиком температуры, подключенным к ADC4. В этом кратком руководстве вы узнаете, как получить данные о температуре с этого датчика. Мы покажем два различных метода получения температуры: через аналоговое чтение (ADC) и через модуль picozero.

Raspberry Pi Pico чтение встроенного датчика температуры MicroPython

Впервые работаете с Raspberry Pi Pico? Прочитайте следующее руководство: Начало работы с Raspberry Pi Pico (и Pico W).

Содержание:

В этом руководстве мы рассмотрим следующие темы:

Прошивка MicroPython

Для выполнения этого руководства вам необходимо, чтобы прошивка MicroPython была установлена на вашу плату Raspberry Pi Pico. Также вам понадобится IDE для написания и загрузки кода на плату.

Логотип MicroPython

Рекомендуемая IDE для MicroPython на Raspberry Pi Pico — Thonny IDE. Следуйте следующему руководству, чтобы узнать, как установить Thonny IDE, прошить прошивку MicroPython и загрузить код на плату.

В качестве альтернативы, если вам нравится программировать в VS Code, вы можете начать со следующего руководства:

Встроенный датчик температуры

Встроенный датчик температуры Raspberry Pi Pico работает путем проверки напряжения специального диода, подключенного к ADC4 на Raspberry Pi Pico.

Raspberry Pi Pico GPIO выводы

Согласно техническому описанию (datasheet), при температуре 27 градусов Цельсия напряжение составляет около 0,706 В, и при каждом изменении температуры на один градус напряжение уменьшается примерно на 1,721 мВ.

Чтобы определить температуру в градусах Цельсия по напряжению, можно использовать следующую формулу:

T = 27 - (ADC_voltage - 0.706)/0.001721

Точные измерения температуры с помощью этого датчика могут быть затруднены из-за различий в напряжении и наклоне характеристики между устройствами. Рассматривайте его скорее как справочный инструмент, а не как прибор для точных измерений. Вам может потребоваться выполнить калибровку для повышения точности.

Чтение температуры с помощью ADC

Для получения температуры со встроенного датчика температуры вы можете использовать следующий код.

# 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")

Рекомендуемое чтение: Raspberry Pi Pico: чтение аналоговых входов (MicroPython).

Как работает код

Давайте кратко рассмотрим, как работает код.

Создание объекта ADC

Вы начинаете с импорта класса ADC из модуля machine для чтения аналоговых сигналов.

from machine import ADC

Встроенный датчик температуры подключен к ADC4. Поэтому мы создаем объект ADC на этом выводе под названием temp_sensor.

temp_sensor = ADC(4)

Чтение встроенного датчика температуры

Затем мы создаем функцию для чтения встроенного датчика температуры под названием read_internal_temperature().

def read_internal_temperature():

Мы получаем показание АЦП с помощью функции read_u16(). Узнайте, как читать аналоговые сигналы с Raspberry Pi Pico, из этого руководства.

adc_value = temp_sensor.read_u16()

Затем нам нужно преобразовать это число в значение напряжения. Мы знаем, что 3,3 В соответствует значению 65535, поэтому можем вычислить его следующим образом.

voltage = adc_value * (3.3 / 65535.0)

Наконец, мы можем использовать формулу, предоставленную в техническом описании, для получения температуры в градусах Цельсия.

temperature_celsius = 27 - (voltage - 0.706) / 0.001721

Функция возвращает температуру в градусах Цельсия.

return temperature_celsius

Преобразование в градусы Фаренгейта

Мы также включили функцию celsius_to_fahrenheit() для преобразования температуры из градусов Цельсия в градусы Фаренгейта.

def celsius_to_fahrenheit(temp_celsius):
    temp_fahrenheit = temp_celsius * (9/5) + 32
    return temp_fahrenheit

Получение и вывод показаний температуры

Мы вызываем функцию read_internal_temperature() для получения температуры в градусах Цельсия и сохраняем ее в переменной temperatureC.

temperatureC = read_internal_temperature()

Затем мы вызываем функцию celsius_to_fahrenheit() и передаем в качестве аргумента temperatureC для получения температуры в градусах Фаренгейта.

temperatureF = celsius_to_fahrenheit(temperatureC)

Наконец, мы выводим показания в оболочку (Shell).

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

Тестирование кода

Скопируйте предоставленный код в Thonny IDE. Нажмите зеленую кнопку Run (Запуск).

Тестирование кода Raspberry Pi Pico в Thonny IDE

Температура датчика будет выведена в Shell (оболочке) как в градусах Цельсия, так и в градусах Фаренгейта.

Raspberry Pi Pico, чтение встроенного датчика температуры

Чтение температуры с помощью picozero

Существует более простой способ получить показания со встроенного датчика температуры с помощью модуля picozero. Модуль picozero — это дружественная для начинающих библиотека с простыми «рецептами» для использования наиболее распространенных датчиков. Если вы хотите узнать больше о библиотеке picozero, вы можете ознакомиться с документацией picozero.

Библиотека picozero содержит класс pico_temp_sensor, который позволяет легко получить температуру без необходимости каких-либо вычислений (все делается в фоновом режиме).

Установка пакета picozero

Перед продолжением необходимо установить пакет picozero.

  1. Перейдите в Tools > Manage Packages.

  2. Найдите picozero.

  3. Нажмите на первый вариант picozero @ PyPi.

  4. Наконец, нажмите Install.

Через несколько секунд пакет будет установлен.

Raspberry Pi Pico установка пакета picozero

Код

Следующий код делает то же самое, что и предыдущий пример, но использует библиотеку 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")

Сначала нам нужно импортировать класс pico_temp_sensor из модуля picozero.

from picozero import pico_temp_sensor

Затем мы получаем температуру с помощью pico_temp_sensor.temp. Мы сохраняем температуру в градусах Цельсия в переменной temperatureC.

temperatureC = pico_temp_sensor.temp

Если вы запустите этот код на вашем Raspberry Pi Pico, вы получите тот же результат, что и в предыдущем примере.

Непрерывное чтение температуры

Если вы хотите непрерывно получать новые показания температуры, вы можете читать и выводить показания внутри цикла while. В этом случае код будет выглядеть следующим образом:

# 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)

В этом примере новые показания температуры будут выводиться в оболочку MicroPython каждую секунду, пока вы не остановите программу.

Raspberry Pi Pico чтение встроенного датчика температуры в цикле

Заключение

Raspberry Pi Pico оснащен встроенным датчиком температуры, который дает вам общее представление о внутренней температуре Pico.

Чтение температуры настолько просто, как считать напряжение на ADC4 и затем выполнить необходимые вычисления. В качестве альтернативы вы также можете использовать пакет picozero.

Мы надеемся, что это руководство оказалось полезным для вас. Если вы только начинаете работу с Raspberry Pi Pico, вам также могут быть интересны следующие руководства: