Специальные аксессуары для Raspberry Pi B+ Плата расширения GPIO T-типа T-Cobbler Plus

Вес товара: ~0.7 кг. Указан усредненный вес, который может отличаться от фактического. Не включен в цену, оплачивается при получении.
Описание товара
- Информация о товаре
- Фотографии
Raspberry Pi B+ Специальные аксессуары T-Cobbler Plus
Модуль RPi.GPIO можно импортировать с помощью следующего кода.
импортRPi.GPIOasGPIO
После внедрения вы можете использовать функции модуля GPIO.Если вы хотите проверить, успешно ли импортировался модуль, вы также можете написать так:
попробуйте:
импортRPi.GPIOasGPIO
кроме RuntimeError:
распечатать(“вносить ошибки”)
Пин код
В RPi.GPIO поддерживаются оба номера контактов GPIO на Raspberry Pi. Первое число — это номер ПЛАТЫ, который соответствует физическому номеру контакта на плате Raspberry Pi. Преимущество использования этого номера заключается в том, что ваше оборудование всегда будет доступно, и вам не придется беспокоиться о версии Raspberry Pi. Таким образом, вам не нужно переписывать разъемы или код после обновления платы.
Второй тип нумерации — это правило BCM, которое представляет собой рабочий метод более низкого уровня. Это соответствует нумерации каналов в встроенной системе Broadcom. При использовании пина необходимо найти соответствие между номером канала и физическим номером пина. Для разных версий Raspberry Pi написанные файлы сценариев могут не быть универсальными.
Вы можете (обязательно) указать схему нумерации, используя следующий код:
GPIO.setmode(GPIO.BOARD)
#или
GPIO.setmode(GPIO.BCM)
Следующий код вернет установленную последовательность нумерации
режим = GPIO.getmode()
предупреждать
Если RPi.GRIO обнаружит, что для контакта установлено значение, отличное от значения по умолчанию, вы увидите предупреждающее сообщение. Вы можете отключить предупреждение с помощью следующего кода:
GPIO.setwarnings(ложь)
Настройки закрепления
Прежде чем использовать вывод, вам необходимо установить, является ли вывод входом или выходом. Код для настройки вывода выглядит следующим образом:
#Установить контакт в режим ввода
GPIO.setup(канал, GPIO.IN)
#Установим вывод в режим вывода
GPIO.setup(канал, GPIO.OUT)
#Устанавливаем значение по умолчанию для выходного контакта
GPIO.setup(канал, GPIO.OUT, начальный=GPIO.HIGH)
освобожденный
Вообще говоря, ресурсы должны быть освобождены в конце программы. Эта хорошая привычка поможет избежать случайного повреждения Raspberry Pi. Освободите используемые пины в скрипте:
GPIO.очистка()
Обратите внимание, что GPIO.cleanup() освободит только контакты GPIO, используемые в сценарии, и очистит установленные правила нумерации контактов.
Установите порт в состояние вывода:
Если вы хотите зажечь светодиодный фонарь или привести в действие определенное устройство, вам необходимо подать на них ток и напряжение. Этот шаг также очень прост. Просто установите выходное состояние контакта. Код выглядит следующим образом:
GPIO.output(канал, состояние)
Статус может быть установлен на 0/GPIO.LOW/False/1/GPIO.HIGH/True. Если правило кодирования — GPIO.BOARD, то канал — это номер соответствующего вывода.
Если вы хотите установить несколько контактов одновременно, используйте следующий код:
chan_list=[11,12]
GPIO.output(список_каналов, GPIO.LOW)
GPIO.output(список_каналов, (GPIO.HIGH, GPIO.LOW))
Вы также можете использовать функцию Input(), чтобы прочитать состояние выходного контакта и использовать его в качестве выходного значения, например:
GPIO.output(12, notGPIO.input(12))
Читать
Нам также часто необходимо прочитать входной статус вывода.Код для получения статуса входа контакта следующий:
GPIO.вход(канал)
Низкий уровень возвращает 0/GPIO.LOW/False, высокий уровень возвращает 1/GPIO.HIGH/True.
Если входной контакт оставить плавающим, его значение будет дрейфовать. Другими словами, считанное значение неизвестно, поскольку оно не связано ни с каким сигналом до тех пор, пока не будет нажата кнопка или переключатель. Из-за влияния помех входное значение может неоднократно меняться.Используйте следующий код для решения проблемы:
GPIO.setup(канал, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#или
GPIO.setup(канал, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
Следует отметить, что приведенный выше код чтения получает только входной сигнал вывода в текущий момент.
Если вам необходимо отслеживать изменения состояния пинов в режиме реального времени, есть два метода.Самый простой и примитивный способ — время от времени проверять значение входного сигнала, что называется опросом. Если ваша программа читает в неподходящее время, вы, скорее всего, потеряете входной сигнал. Опрос выполняется в цикле, что потребляет больше ресурсов процессора.Другой способ реагировать на входы GPIO — использовать прерывания (обнаружение фронта), где фронт — это переход сигнала от высокого к низкому (спадающий фронт) или от низкого к высокому (нарастающий фронт).
Режим опроса
whileGPIO.input(канал)==GPIO.LOW:
time.sleep(0.01) #wait10mstogiveCPUchancetodootherthings
Обнаружение края
Фронт означает изменение состояния сигнала с низкого на высокий (нарастающий фронт) или с высокого на низкий (спадающий фронт). Обычно нас больше волнует сторона входного состояния, а не значение входного сигнала. Граница этого состояния называется событием. Давайте сначала представим две функции:
функция wait_for_edge(). wait_for_edge() используется для предотвращения продолжения работы программы до тех пор, пока не будет обнаружен край. Другими словами, приведенный выше пример ожидания нажатия кнопки можно переписать так: Channel=GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)
ifchannelisNone:
распечатать(‘Timeoutoccurred’)
еще:
распечатать(‘Edgedetectedonchannel’, канал)
Функция add_event_detect() Эта функция контролирует вывод. Как только состояние входа контакта изменится, вызов функции event_detected() вернет значение true, как показано в следующем коде: GPIO.add_event_detect(channel, GPIO.RISING) #addrisingedgedetectiononachannel
сделать_что-то()
//Следующий код выполняется в цикле потока.
ifGPIO.event_detected(канал):
распечатать(‘Buttonpressed’)
Приведенный выше код требует от вас создания нового потока для цикла и определения значения event_detected(), что довольно затруднительно.
Однако есть другой способ легко определить статус — напрямую передать функцию обратного вызова:
defmy_callback (канал):
распечатать(‘Это функция обратного вызова краевого события!’)
распечатать(‘Edgedetectedonchannel%s’%канал)
распечатать(‘Это запуск в другом потоке вашей основной программы’)
GPIO.add_event_detect(канал, GPIO.RISING, обратный вызов=my_callback)
Если вы хотите настроить несколько функций обратного вызова, вы можете сделать это:
defmy_callback_one (канал):
распечатать(‘Callbackone’)
defmy_callback_two (канал):
распечатать(‘Callbacktwo’)
GPIO.add_event_detect(канал, GPIO.RISING)
GPIO.add_event_callback(канал, my_callback_one)
GPIO.add_event_callback(канал, my_callback_two)
Примечание. При запуске обратного вызова функции обратного вызова не будут выполняться одновременно, а будут вызываться в соответствии с установленным порядком.
Комплексный пример: включение светодиодных фонарей
Вышеупомянутое объясняет использование множества библиотек функций, поэтому теперь пришло время провести простой эксперимент. Этот эксперимент очень простой: зажгите светодиодную лампу.
Прежде чем писать код, сначала необходимо соединить контакты светодиодной подсветки с контактами Raspberry Pi через провода Dupont.Например, вы можете подключиться к контакту 11.
Создайте новый файл main.py и напишите следующий код:
importRPi.GPIOasGPIO//Знакомство с библиотекой функций
время импорта
RPi.GPIO.setmode (GPIO.BOARD) //Устанавливаем правило нумерации контактов
RPi.GPIO.setup(11, RPi.GPIO.OUT) //Устанавливаем вывод 11 в режим вывода
покаTrue
GPIO.output(channel, 1) //Устанавливаем статус вывода на высокий уровень, затем загорается светодиод
time.sleep(1)//Программа переходит в режим сна на 1 секунду и позволяет светодиоду загореться на 1 секунду
GPIO.output(channel, 0) //Устанавливаем состояние контакта на низкий уровень, затем светодиод гаснет
time.sleep(1)//Программа спит на 1 секунду и выключает светодиод на 1 секунду
GPIO.cleanup()//Не забудьте очистить все ресурсы в конце программы
Сохраните и выйдите из файла.Запустите python3main.py, чтобы увидеть эффект.Ctrl+C может закрыть программу.
Кроме того, вы можете попробовать другие функции, чтобы улучшить свое впечатление.
Используйте ШИМ
Эта библиотека функций Python также поддерживает вывод в режиме ШИМ. Мы можем использовать ШИМ для создания эффектов дышащего света. Подробности смотрите в коде:
время импорта
importRPi.GPIOasGPIO//Вводная библиотека
GPIO.setmode (GPIO.BOARD) //Устанавливаем режим нумерации
GPIO.setup (12, GPIO.OUT) //Устанавливаем вывод 12 в режим вывода
p=GPIO.PWM(12,50) //Инициализируем вывод 12 как экземпляр ШИМ с частотой 50 Гц
p.start(0) //Запуск широтно-импульсной модуляции, диапазон параметров: (0.0《=dc》=100.0)
попробуйте:
пока1:
fordcinrange(0, 101, 5):
p.ChangeDutyCycle(dc)//Измените диапазон параметров рабочего цикла на: (0.0《=dc》=100.0)
время.сон(0.1)
fordcinrange(100,-1,-5):
p.ChangeDutyCycle(DC)
время.сон(0.1)
кромеKeyboardInterrupt:
проходить
p.stop()//Остановить вывод ШИМ-волны
GPIO.cleanup()//Очистить
Заключение
В статье в основном объясняется концепция GPIO и то, как использовать Python для работы с GPIO.Но если вы хотите полностью понять программирование gpio на Raspberry Pi, вам все равно придется сделать это самостоятельно, проанализировать и обобщить.
Ниже приведена тестовая программа
# -*- coding: utf-8 -*- #Китайский язык можно записать в программе через объявление
import RPi.GPIO as GPIO #Представляем библиотечную функцию RPi.GPIO с именем GPIO
import time #Внедряем функцию измерения времени
# Метод нумерации BOARD, основанный на нумерации контактов разъема
GPIO.setmode(GPIO.BOARD) #Установите метод программирования GPIO в режим BOARD.
# Режим вывода
GPIO.setup(11, GPIO.OUT) #Установим контакт 11 GPIO как выходной контакт
while True: # Если условие истинно, следующая программа будет выполняться в цикле
GPIO.output(11, GPIO.HIGH) #Установите высокое напряжение на контакте 11, чтобы загорелся светодиод.
time.sleep(1) #Задержка 1 секунда
GPIO.output(11, GPIO.LOW) #Установите низкое напряжение на контакте 11, чтобы выключить светодиод.
time.sleep(1)











