Raspberry Pi Pico: чтение встроенного датчика температуры (MicroPython)
Raspberry Pi Pico оснащен встроенным датчиком температуры, подключенным к ADC4. В этом кратком руководстве вы узнаете, как получить данные о температуре с этого датчика. Мы покажем два различных метода получения температуры: через аналоговое чтение (ADC) и через модуль picozero.
Впервые работаете с Raspberry Pi Pico? Прочитайте следующее руководство: Начало работы с Raspberry Pi Pico (и Pico W).
Содержание:
В этом руководстве мы рассмотрим следующие темы:
Прошивка 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, вам также могут быть интересны следующие руководства: