8 (905) 200-03-37 Владивосток
с 09:00 до 19:00
CHN - 1.14 руб. Сайт - 21.13 руб.

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

Цена: 112руб.    (¥5.3)
Артикул: 543841327075

Вес товара: ~0.7 кг. Указан усредненный вес, который может отличаться от фактического. Не включен в цену, оплачивается при получении.

Этот товар на Таобао Описание товара
Продавец:勇泰发电子
Рейтинг:
Всего отзывов:0
Положительных:0
Добавить в корзину
Другие товары этого продавца
¥5.52117руб.
¥ 19.6 18.6394руб.
¥ 1.5 1.328руб.
¥17.8377руб.

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)