Руководство для начинающих по MicroPython с Raspberry Pi Pico

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

Основанный на новом чипе RP2040, Raspberry Pi Pico поддерживает как MicroPython, так и C / C ++. С Raspberry Pi Pico новички и энтузиасты могут управлять оборудованием и подключенными устройствами. Контакты GPIO Raspberry Pi Pico можно использовать для затемнения света, считывания состояния переключателей и многого другого.

Что такое MicroPython?

Программирование на микроконтроллерах в основном выполнялось на языке C, который используется в платах разработки Arduino . Затем в 2014 году был опубликован новый язык программирования для микроконтроллеров MicroPython. MicroPython позволяет писать код Python на «голом железе» микроконтроллера. Это означает, что вы можете писать код Python без операционной системы.

Python – это удобный для новичков язык программирования высокого уровня, который позволяет пользователям сосредоточиться на изучении концепций программирования. То же самое и с MicroPython.

Использование светодиода

Для управления оборудованием Pico взаимодействует с рядом контактов по обоим краям. Они называются выводами ввода-вывода общего назначения (GPIO), а встроенный светодиод можно найти на GPIO 25. Чтобы управлять им, сначала импортируйте необходимые библиотеки:

 import machine
 import utime

Затем вызовите функцию Pin, используя машинную библиотеку для обработки контакта GPIO Pin, в этом случае мы устанавливаем Pin на GPIO 25, так что это первый параметр. Второй параметр устанавливает его как выходной контакт, а не как входной контакт, при этом контакт знает, что он должен делать:

 onboard_led = machine.Pin(25, machine.Pin.OUT)

Чтобы продолжить, в следующем коде мы говорим Pico установить значение вывода GPIO 25 на 1 или «включено».

 while True:
onboard_led.value(1)

Однако вы можете понять, что вроде ничего не происходит. Это связано с тем, что Pico работает очень быстро, поэтому светодиод загорается быстрее, чем вы можете воспринимать глазом. Чтобы исправить это, нам нужно замедлить работу программы, используя команду sleep из библиотеки utime . Полный код, в котором светодиод будет включаться и выключаться, можно увидеть ниже:

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
onboard_led.value(1)
utime.sleep(5)
onboard_led.value(0)
utime.sleep(5)

Включение и выключение светодиодов

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

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
led_onboard.toggle()
utime.sleep(5)

В этом примере команда переключения заменяет необходимость установки значения светодиода на 1, а затем на 0. Он все равно будет гореть в течение 5 секунд, а затем погаснет еще на пять, пока выполняется программа.

Создание функций

По мере того, как программы становятся более сложными, это помогает группировать фрагменты кода вместе, чтобы поддерживать согласованность. Для этого MicroPython, как и Python, позволяет использовать функции. Функции – это группа связанных операторов, выполняющих определенную задачу. Например, в следующем коде определена функция с именем printNames :

 def printNames:
print(“Raspberry Pi 1”)
print(“Raspberry Pi 2”)
print(“Raspberry Pi 3”)
print(“Raspberry Pi 4”)
print(“Raspberry Pi Compute Module”)
print(“Raspberry Pi 400”)
print(“Raspberry Pi Pico”)
printNames()

Последняя строка кода вызывает функцию, чтобы она действительно выполнялась.

Петли

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

 i = 17
def printNames():
if i > 15:
print("i is greater than 15!")
else:
print("i is not greater than 15")
printNames()

В следующем примере цикл for используется с функцией диапазона . Эти циклы можно использовать для повторения блока кода несколько раз.

В этом примере команда печати будет выполняться пять раз с задержкой в ​​пять секунд между каждым из них с помощью команды сна :

 import utime
def printNames():
for i in range(5):
print("Raspberry Pi Pico")
utime.sleep(5)
printNames()

Аналого-цифровой преобразователь (АЦП)

Хотя вы не сможете этого увидеть, Raspberry Pi Pico имеет внутренний аналого-цифровой преобразователь. В следующем примере к Raspberry Pi Pico на GPIO 26 подключен потенциометр, который поддерживает функции АЦП:

 import machine
import utime
pot = machine.ADC(26)
while True:
print(pot.read_u16())
utime.sleep(1)

Здесь, прежде чем мы сможем использовать этот вывод, поддерживающий АЦП, его необходимо настроить с помощью функции АЦП. Затем, пока программа работает, значение потенциометра будет печататься каждую секунду. Другие контакты Raspberry Pi Pico, поддерживающие АЦП, включают GPIO27, 28 и 29.

Широтно-импульсная модуляция (ШИМ)

Цифровой выход микроконтроллера может быть только 1 или 0. Для создания аналогового сигнала вам понадобится цифро-аналоговый преобразователь. Однако есть еще один способ – искусственно создать аналоговый сигнал, используя широтно-импульсную модуляцию или, для краткости, ШИМ.

При включении и выключении цифрового сигнала это называется импульсом. Модулируя ширину импульса, это искусственно создает аналоговый сигнал, как показано в следующем примере:

 import machine
import utime
pot = machine.ADC(26
led = machine.PWM(machine.Pin(21))
led.freq(1000)
while True:
led.duty_u16(pot.read_u16())

Сначала были импортированы библиотеки machine и utime . Объект onboard_led создается с активированным выходом ШИМ на выводе 21 GPIO. Затем с помощью команды freq устанавливается частота для модуляции ширины импульса. Представьте, что вы поворачиваете потенциометр, светодиод становится ярче при повороте в одну сторону.

Это происходит потому, что аналоговое значение от потенциометра используется в качестве значения для рабочего цикла ШИМ-сигнала, это значение от 0 до 65535. Однако без преобразования небольшой поворот потенциометра уже может привести к достижению светодиодом максимального уровня яркости. .

Чтобы исправить это, чтобы потенциометр достигал полной яркости только при повороте в самый конец, значение преобразуется с помощью функции duty_u16 . Эта функция превращает его в 16-битное целое число, которое представляет собой значение от 0 до 1024, что соответствует тому же диапазону значений, который вы бы получили от аналогового вывода Pico.

Создавайте больше с Raspberry Pi Pico

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

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