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

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

Аналоговые показания Raspberry Pi Pico с MicroPython

Примечание

У нас есть аналогичное руководство с использованием Arduino IDE: Raspberry Pi Pico: чтение аналоговых входов (Arduino IDE).

Если вы привыкли программировать Arduino, ESP32 и/или ESP8266 с помощью MicroPython, то обнаружите, что программирование Raspberry Pi Pico довольно похоже.

Необходимые условия

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

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

Аналоговые показания – Raspberry Pi Pico

В этом руководстве вы узнаете, как считывать аналоговый вход с Raspberry Pi Pico. Это полезно для считывания значений с переменных резисторов, таких как потенциометры, или аналоговых датчиков.

Raspberry Pi Pico с потенциометром

Raspberry Pi Pico имеет 12-битный АЦП с четырьмя каналами на фиксированном наборе выводов (плюс дополнительный внутренний датчик температуры). Это означает, что он может преобразовать аналоговый сигнал в цифровой сигнал в виде числа в диапазоне от 0 до 4095.

Однако затем это обрабатывается в MicroPython и преобразуется в 16-битное число в диапазоне от 0 до 65535, чтобы поведение было одинаковым с АЦП на других микроконтроллерах с MicroPython.

Он имеет пять каналов АЦП, но только четыре доступны на GPIO: GPIO26, GPIO27, GPIO28 и GPIO29.

Первые три GPIO (26, 27 и 28) можно использовать для считывания напряжения с периферийных устройств, а GPIO29 можно использовать для измерения уровня напряжения питания VSYS на плате Raspberry Pi Pico (VSYS – это входное напряжение, которое питает плату).

Пятый канал АЦП подключен к встроенному датчику температуры.

Подводя итог, вот основные характеристики аналоговых выводов платы Raspberry Pi Pico:

  • 12-битное разрешение – преобразует аналоговый сигнал в значение от 0 до 4095 – затем MicroPython преобразует это число в диапазон от 0 до 65535;

  • 4 канала АЦП на внешних GPIO;

  • GPIO 26, 27 и 28 можно использовать для считывания выходного напряжения с периферийных устройств;

  • GPIO29 может измерять входное напряжение, питающее плату (VSYS);

  • Есть пятый канал АЦП, который подключен к внутреннему датчику температуры.

Найдите выводы АЦП на вашей плате Raspberry Pi Pico. Они выделены темно-зеленым цветом.

Распиновка Raspberry Pi Pico W Распиновка Raspberry Pi Pico

Чтобы узнать больше о распиновке Pico, прочитайте следующее руководство: Raspberry Pi Pico и Pico W: руководство по распиновке GPIO.

Схема

Перед тем как продолжить, подключите потенциометр к плате Raspberry Pi Pico. Вы можете подключить вывод данных к любому выводу АЦП. Мы будем использовать ADC0 на GPIO 26.

Впервые работаете с потенциометрами? Узнайте, как работают потенциометры.

Необходимые компоненты

Вот список компонентов, необходимых для сборки схемы:

Схема подключения – Raspberry Pi Pico

Вы можете использовать следующую схему в качестве справки для подключения потенциометра к плате Raspberry Pi Pico.

Схема подключения потенциометра к Raspberry Pi Pico (Fritzing)

В этом примере мы используем GPIO26 для считывания аналоговых значений с потенциометра, но вы можете выбрать любой другой GPIO, поддерживающий АЦП.

Скрипт – Raspberry Pi Pico: чтение аналоговых входов

Следующий код для Raspberry Pi Pico считывает аналоговые значения с GPIO 26 и выводит результаты в Shell.

from machine import Pin, ADC
from time import sleep

pot = ADC(Pin(26))

while True:
  pot_value = pot.read_u16() # read value, 0-65535 across voltage range 0.0v - 3.3v
  print(pot_value)
  sleep(0.1)

Просмотреть исходный код

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

Этот код просто считывает значения с потенциометра и выводит эти значения в оболочку MicroPython Shell.

Для считывания аналоговых входов импортируйте класс ADC в дополнение к классу Pin из модуля machine. Мы также импортируем метод sleep.

from machine import Pin, ADC
from time import sleep

Затем создайте объект ADC с именем pot на GPIO 26 – GPIO, к которому подключен потенциометр.

pot = ADC(Pin(26))

В цикле while считайте значение потенциометра и сохраните его в переменной pot_value. Чтобы прочитать значение с потенциометра, просто используйте метод read_u16() для объекта pot. Это даст значение в диапазоне 0-65535 при диапазоне напряжения 0-3.3 В.

pot_value = pot.read_u16() # read value, 0-65535 across voltage range 0.0v - 3.3v

Затем выведите значение потенциометра.

print(pot_value)

В конце добавьте задержку в 100 мс.

sleep(0.1)

Демонстрация

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

Следуйте приведенным ниже инструкциям, если вы используете Thonny IDE.

Скопируйте предоставленный код в безымянный файл Thonny IDE.

Thonny IDE Raspberry Pi Pico чтение аналоговых значений

Скопировав код в файл, нажмите на значок Сохранить. Затем выберите Raspberry Pi Pico.

Сохранение файлов на Raspberry Pi Pico в Thonny IDE

Сохраните файл с именем: main.py. Перезапишите любые существующие файлы с таким же именем.

MicroPython сохранение файла main.py в Thonny IDE

Примечание

Когда вы называете файл main.py, Raspberry Pi Pico будет запускать этот файл автоматически при загрузке. Если вы дадите ему другое имя, он все равно будет сохранен в файловой системе платы, но не будет запускаться автоматически при загрузке.

Перезагрузите плату (отключите и снова подключите её к компьютеру). Нажмите маленькую зеленую кнопку «Run Current Script» или нажмите F5.

Запуск кода в Thonny IDE

Поворачивайте потенциометр и наблюдайте, как меняются значения в оболочке MicroPython.

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

Максимальное значение, которое вы можете получить – 65535, а минимальное – 0.

Raspberry Pi Pico чтение аналоговых значений в оболочке MicroPython

Заключение

В этом руководстве вы узнали об аналоговом чтении с Raspberry Pi Pico. Он имеет пять 12-битных каналов АЦП, четыре из которых доступны на его GPIO, а пятый канал подключен к внутреннему датчику температуры.

Считывание напряжения на GPIO с использованием прошивки MicroPython так же просто, как использование функции read_u16() для объекта ADC. Это даст вам значение в диапазоне 0-65535 при диапазоне напряжения от 0.0 В до 3.3 В.