Raspberry Pi Pico: чтение встроенного датчика температуры (MicroPython)
Raspberry Pi Pico оснащен встроенным датчиком температуры, подключенным к ADC4. В этом кратком руководстве вы узнаете, как получить данные о температуре с этого датчика. Мы покажем два различных метода получения температуры: через аналоговое чтение (ADC) и через модуль picozero.
Впервые работаете с Raspberry Pi Pico? Прочитайте следующее руководство: Начало работы с Raspberry Pi Pico (и Pico W).
Содержание:
В этом руководстве мы рассмотрим следующие темы:
Встроенный датчик температуры Raspberry Pi Pico
Прошивка MicroPython
Для выполнения этого руководства вам необходимо, чтобы прошивка MicroPython была установлена на вашу плату Raspberry Pi Pico. Также вам понадобится IDE для написания и загрузки кода на плату.
Рекомендуемая IDE для MicroPython на Raspberry Pi Pico — Thonny IDE. Следуйте следующему руководству, чтобы узнать, как установить Thonny IDE, прошить прошивку MicroPython и загрузить код на плату.
В качестве альтернативы, если вам нравится программировать в VS Code, вы можете начать со следующего руководства:
Встроенный датчик температуры
Встроенный датчик температуры Raspberry Pi Pico работает путем проверки напряжения специального диода, подключенного к ADC4 на Raspberry Pi Pico.
Согласно техническому описанию (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 (Запуск).
Температура датчика будет выведена в Shell (оболочке) как в градусах Цельсия, так и в градусах Фаренгейта.
Чтение температуры с помощью picozero
Существует более простой способ получить показания со встроенного датчика температуры с помощью модуля picozero. Модуль picozero — это дружественная для начинающих библиотека с простыми «рецептами» для использования наиболее распространенных датчиков. Если вы хотите узнать больше о библиотеке picozero, вы можете ознакомиться с документацией picozero.
Библиотека picozero содержит класс pico_temp_sensor, который позволяет легко получить температуру без необходимости каких-либо вычислений (все делается в фоновом режиме).
Установка пакета picozero
Перед продолжением необходимо установить пакет picozero.
Перейдите в Tools > Manage Packages.
Найдите picozero.
Нажмите на первый вариант picozero @ PyPi.
Наконец, нажмите Install.
Через несколько секунд пакет будет установлен.
Код
Следующий код делает то же самое, что и предыдущий пример, но использует библиотеку 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 оснащен встроенным датчиком температуры, который дает вам общее представление о внутренней температуре Pico.
Чтение температуры настолько просто, как считать напряжение на ADC4 и затем выполнить необходимые вычисления. В качестве альтернативы вы также можете использовать пакет picozero.
Мы надеемся, что это руководство оказалось полезным для вас. Если вы только начинаете работу с Raspberry Pi Pico, вам также могут быть интересны следующие руководства: