Raspberry Pi Pico: управление цифровыми выходами и чтение цифровых входов (Arduino IDE)
Узнайте, как настроить GPIO Raspberry Pi Pico в качестве цифровых входов и цифровых выходов с помощью Arduino IDE. Вы научитесь считывать цифровые входы, такие как кнопка, и управлять цифровым выходом, таким как светодиод.
Впервые работаете с Raspberry Pi Pico? Прочитайте следующее руководство: Начало работы с Raspberry Pi Pico (и Pico W).
Если вы привыкли программировать Arduino, ESP32 и/или ESP8266 с помощью Arduino IDE, вы обнаружите, что программирование Raspberry Pi Pico очень похоже.
Необходимые условия
Вам необходимо установить платы Raspberry Pi Pico в Arduino IDE и знать, как загружать код на плату. Ознакомьтесь сначала со следующим руководством, если вы ещё этого не сделали:
Обзор проекта
Чтобы показать вам, как использовать цифровые входы и цифровые выходы, мы создадим простой пример проекта с кнопкой и светодиодом. Мы будем считывать состояние кнопки и зажигать светодиод соответствующим образом, как показано на следующем рисунке.
GPIO Raspberry Pi Pico
Raspberry Pi Pico имеет 40 контактов, 26 из которых являются программируемыми GPIO, которые вы можете использовать для подключения периферийных устройств.
Вы можете использовать следующие распиновки в качестве справочника для определения и нахождения каждого GPIO на вашей плате. Распиновка немного отличается для Pico и Pico W.
На следующем рисунке показана распиновка Raspberry Pi Pico (какие функции поддерживает каждый контакт).
Источник изображения: raspberrypi.com
Контакты, отмеченные красным цветом, являются контактами питания, которые выдают 3,3 В. Чёрные контакты — это контакты GND. Все контакты светло-зелёного цвета могут использоваться как «обычные» GPIO (вход и выход).
Цифровые входы
Чтобы настроить GPIO как цифровой вход или выход, используйте функцию pinMode(), которая принимает в качестве аргументов GPIO и его режим.
pinMode(GPIO, MODE);
Raspberry Pi Pico поддерживает три режима входа:
INPUT: обычный вход;INPUT_PULLUP: вход с внутренним подтягивающим резистором к питанию;INPUT_PULLDOWN: вход с внутренним подтягивающим резистором к земле.
Например, чтобы создать вход для кнопки на GPIO 21 (для кнопок очень удобно использовать внутренний подтягивающий резистор к земле, потому что вам не нужно добавлять его в вашу схему):
pinMode(21, INPUT_PULLDOWN);
digitalRead()
Для чтения цифрового входа, например кнопки, используйте функцию digitalRead(). Эта функция принимает в качестве аргумента GPIO, к которому вы обращаетесь. Всё настолько просто.
digitalRead(GPIO);
Эта функция возвращает HIGH (или True, или 1) или LOW (или False, или 0).
Цифровые выходы
Чтобы настроить GPIO как цифровой выход, используйте функцию pinMode() следующим образом:
pinMode(GPIO, OUTPUT);
digitalWrite()
Для управления цифровым выходом вам нужно использовать функцию digitalWrite(). Эта функция принимает в качестве аргументов GPIO, к которому вы обращаетесь, и состояние — HIGH или LOW.
digitalWrite(GPIO, STATE);
Схема подключения
Для данного примера мы подключим светодиод к GPIO 20 и кнопку к GPIO 21. Вы можете использовать любые другие GPIO-контакты, если соответствующим образом измените код.
Необходимые компоненты
Вот список компонентов, которые вам понадобятся для сборки схемы:
Raspberry Pi Pico
Светодиод 5 мм
Резистор 330 Ом
Кнопка (тактовая)
Резистор 10 кОм
Макетная плата (breadboard)
Соединительные провода
Схема подключения – Raspberry Pi Pico
Вы можете использовать следующую диаграмму в качестве справочника для подключения кнопки и светодиода к плате Raspberry Pi Pico.
Светодиод >> GPIO 20
Кнопка >> GPIO 21
Самый простой способ собрать схему — использовать макетную плату. Raspberry Pi Pico идеально помещается на обычную макетную плату.
Raspberry Pi Pico – пример кода для цифровых входов и выходов
Следующий код считывает состояние кнопки и зажигает светодиод соответствующим образом.
/*********
Rui Santos
Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-outputs-inputs-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
// set pin numbers
const int buttonPin = 21; // the number of the pushbutton pin
const int ledPin = 20; // the number of the LED pin
// variable for storing the pushbutton status
int buttonState = 0;
void setup() {
Serial.begin(115200);
// initialize the pushbutton pin as an input
pinMode(buttonPin, INPUT_PULLDOWN);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
}
void loop() {
// read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin, HIGH);
} else {
// turn LED off
digitalWrite(ledPin, LOW);
}
}
Как работает код
Давайте быстро рассмотрим, как работает код. Продолжайте чтение или перейдите к разделу Демонстрация.
В следующих двух строках вы создаёте переменные для назначения контактов:
const int buttonPin = 21;
const int ledPin = 20;
Кнопка подключена к GPIO 21, а светодиод подключен к GPIO 20.
Далее вы создаёте переменную для хранения состояния кнопки.
int buttonState = 0;
В функции setup() вы инициализируете кнопку как INPUT_PULLDOWN, а светодиод как OUTPUT. Для этого вы используете функцию pinMode(), которая принимает контакт, к которому вы обращаетесь, и режим, как мы видели ранее.
pinMode(buttonPin, INPUT_PULLDOWN);
pinMode(ledPin, OUTPUT);
В функции loop() вы размещаете строки кода, которые будут выполняться бесконечно. Именно здесь мы будем считывать состояние кнопки и соответственно управлять светодиодом.
В следующей строке вы считываете состояние кнопки и сохраняете его в переменную buttonState. Как мы видели ранее, для этого используется функция digitalRead().
buttonState = digitalRead(buttonPin);
Следующий оператор if проверяет, является ли состояние кнопки HIGH. Если да, он включает светодиод с помощью функции digitalWrite(), которая принимает в качестве аргументов ledPin и состояние HIGH.
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
Если состояние кнопки не HIGH, вы выключаете светодиод, передавая LOW в качестве второго аргумента функции digitalWrite().
else {
digitalWrite(ledPin, LOW);
}
Загрузка кода в Raspberry Pi Pico
Чтобы загрузить код в Raspberry Pi Pico, плата должна находиться в режиме загрузчика (bootloader mode).
Если Raspberry Pi Pico в данный момент работает с прошивкой MicroPython, вам нужно вручную перевести его в режим загрузчика. Для этого подключите Raspberry Pi Pico к компьютеру, одновременно удерживая кнопку BOOTSEL.
Для последующих загрузок с помощью Arduino IDE плата должна автоматически переходить в режим загрузчика без необходимости нажимать кнопку BOOTSEL.
Теперь выберите ваш COM-порт в меню Tools > Port. Может быть так, что COM-порт отображается серым цветом. Если это так, не беспокойтесь — порт будет найден автоматически, как только вы нажмёте кнопку загрузки.
Загрузите код.
Вы должны увидеть сообщение об успешной загрузке.
Демонстрация
После загрузки кода проверьте вашу схему. Светодиод должен загораться при нажатии на кнопку. И гаснуть, когда вы её отпускаете.
Заключение
Подводя итог, чтобы настроить GPIO как цифровой вход или как цифровой выход, вам нужно использовать функцию pinMode(). После этого вы можете использовать функцию digitalRead() для чтения состояния входа или функцию digitalWrite() для управления состоянием выхода.
В качестве примера вы научились считывать состояние кнопки и управлять светодиодом. То, что вы изучили, может быть применено к любому цифровому входу или выходу.
Мы надеемся, что это руководство оказалось для вас полезным. Если вы только начинаете работу с Raspberry Pi Pico, обязательно ознакомьтесь с нашими руководствами по началу работы: