2 способа добавить кнопку в ваш проект Raspberry Pi
Обучение использованию выводов GPIO на вашем Raspberry Pi открывает целый мир возможностей. Основные принципы, усвоенные в проектах для начинающих, прокладывают путь к полезным знаниям в области электроники и программирования DIY.
Этот туториал покажет вам два способа добавить кнопку в ваш проект Raspberry Pi. Кнопка будет использоваться для управления светодиодом. Письменные инструкции доступны под видео.
Тебе понадобится
Для начала убедитесь, что у вас есть следующие компоненты:
- 1 х Raspberry Pi (подойдет любой, в этом уроке используется модель 3B)
- 1 х кнопка
- 1 х светодиод
- 1 х 220 Ом резистор (более высокие значения в порядке, ваш светодиод будет просто тусклее)
- 1 х макет
- Подключить провода
После сбора у вас должны быть компоненты, которые выглядят примерно так:
Вам также понадобится SD-карта с установленной операционной системой Raspbian. Самый быстрый способ сделать это — использовать образ NOOBS (Новое ПО из коробки). Инструкции о том, как это сделать, доступны в этом видео:
Настройка схемы
Вы будете использовать контакты GPIO Pi для создания схемы, и если вы не знакомы с ними, поможет наше руководство по контактам Raspberry Pi GPIO . Схема здесь почти такая же, как в нашем предыдущем проекте Raspberry Pi LED , с добавлением кнопки, которую вы будете использовать сегодня.
Настройте вашу схему в соответствии с этой схемой:
- Контакты 5 В и GND подключаются к силовым шинам платы.
- Контакт 12 (GPIO 18) подключается к положительной ветви светодиода.
- Одна ветвь резистора присоединяется к отрицательной ножке светодиода, а другая ветвь присоединяется к шине заземления макета.
- Штифт 16 (GPIO 23) крепится к одной стороне кнопки, а другая сторона — к шине заземления макета.
Как только это настроено, вот как это должно выглядеть:
Проверьте правильность схемы, а затем включите Raspberry Pi.
Метод 1: Библиотека RPi.GPIO
После загрузки Pi перейдите в меню и выберите « Программирование»> «Thonny Python IDE» . Откроется новый скрипт Python. Если вы абсолютно новичок в Python, это отличный язык для начинающих, и есть много замечательных мест, где можно больше узнать о Python после того, как вы закончите с этим руководством!
Начните с импорта библиотеки RPi.GPIO и установки режима платы.
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD)
Теперь объявите переменные для номеров светодиодов и кнопок.
ledPin = 12 buttonPin = 16
Обратите внимание, что поскольку у нас установлен режим платы BOARD, мы используем номера выводов, а не номера GPIO. Если вас это смущает, распиновка диаграммы Raspberry Pi поможет вам разобраться в этом.
Настройка кнопки
Пришло время настроить выводы GPIO. Установите вывод светодиода на вывод, а вывод кнопки — на вход с подтягивающим резистором
GPIO.setup(ledPin, GPIO.OUT) GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
Текст после GPIO.IN относится к внутреннему подтягивающему резистору Raspberry Pi. Вы должны включить это, чтобы получить чистое чтение с кнопки. Поскольку кнопка идет к выводу заземления, нам нужен подтягивающий резистор, чтобы удерживать входной вывод ВЫСОКИЙ, пока вы не нажмете его.
Прежде чем мы продолжим, давайте посмотрим на подтягивающие и понижающие резисторы.
Интервал: резисторы Pull Up / Pull Down
Когда вы настраиваете вывод GPIO для ввода, он считывает этот вывод, чтобы определить его состояние. В этой схеме вам необходимо прочитать, является ли вывод ВЫСОКИМ или НИЗКИМ, чтобы активировать светодиод при нажатии кнопки. Это было бы просто, если бы это были единственные состояния, которые может иметь булавка, но, к сожалению, существует третье состояние: FLOATING .
Плавающий штифт имеет значение между высоким и низким, что приводит к непредсказуемым действиям входа. Решающие проблемы решают резисторы с повышением / понижением.
Изображение выше представляет собой упрощенную схему кнопки и Raspberry Pi. Вывод GPIO подключается к земле через кнопку. Внутренний подтягивающий резистор присоединяет вывод GPIO к внутреннему источнику питания Pi. Этот ток течет, и штифт безопасно поднимается до ВЫСОКОГО.
Когда вы нажимаете кнопку, вывод GPIO подключается непосредственно к выводу заземления, а кнопка показывает низкий уровень.
Понижающие резисторы предназначены для подключения переключателя к выводу питания. На этот раз внутренний резистор прикрепляет вывод GPIO к земле, удерживая его в НИЗКОМ, пока вы не нажмете кнопку.
Теория резисторов Pull-up и Pull-down на первый взгляд сбивает с толку, но это важные знания при работе с микроконтроллерами. Пока, если вы не совсем понимаете это, не волнуйтесь!
Давайте продолжим там, где остановились.
Цикл программы
Далее настройте цикл программы:
while True: buttonState = GPIO.input(buttonPin) if buttonState == False: GPIO.output(ledPin, GPIO.HIGH) else: GPIO.output(ledPin, GPIO.LOW)
Цикл while True постоянно выполняет код внутри него, пока мы не завершим программу. Каждый раз, когда он зацикливается, он обновляет buttonState , считывая ввод с buttonPin . Пока кнопка не нажата, она остается ВЫСОКОЙ .
Как только кнопка нажата, buttonState становится НИЗКИМ . Это запускает оператор if , поскольку False совпадает с LOW , и светодиод включается. Оператор else отключает светодиод, когда buttonPin не имеет значения False.
Сохраните и запустите ваш скрипт
Сохраните сценарий, нажав « Файл»> «Сохранить как» и выбрав имя файла. Вы можете запустить эскиз, нажав зеленую кнопку воспроизведения на панели инструментов Thonny.
Теперь нажмите кнопку, и ваш светодиод должен загореться! Нажмите красную кнопку Стоп в любое время, чтобы остановить программу
Если у вас возникли трудности, тщательно проверьте код и схему на наличие ошибок и повторите попытку.
Способ 2: нулевая библиотека GPIO
Библиотека RPi.GPIO фантастическая, но в блоке есть новый ребенок. Нулевая библиотека GPIO была создана менеджером сообщества Raspberry Pi Беном Натталлом с целью сделать код проще и удобнее для чтения и записи.
Чтобы проверить новую библиотеку, откройте новый файл Thonny и импортируйте библиотеку.
from gpiozero import LED, Button from signal import pause
Вы заметите, что не импортировали всю библиотеку. Поскольку вы используете только светодиод и кнопку, вам требуются только те модули в сценарии. Мы также импортируем Pause из библиотеки сигналов, которая является библиотекой Python для управления событиями.
Настроить контакты гораздо проще с GPIO Zero:
led = LED(18) button = Button(23)
Поскольку библиотека GPIO Zero имеет модули для светодиода и кнопки, вам не нужно настраивать входы и выходы, как раньше. Вы заметите, что, хотя контакты не изменились, цифры здесь отличаются от приведенных выше. Это связано с тем, что GPIO Zero использует только номера контактов GPIO (также известные как номера Broadcom или BCM).
Остальная часть сценария состоит всего из трех строк:
button.when_pressed = led.on button.when_released = led.off pause()
Здесь вызов pause () просто останавливает выход сценария, когда он достигает дна. События двух кнопок запускаются всякий раз, когда кнопка нажата и отпущена. Сохраните и запустите ваш скрипт, и вы увидите тот же результат, что и раньше!
Два способа добавить кнопку в Raspberry Pi
Из двух способов настройки кнопки, метод GPIO Zero кажется самым простым. О библиотеке RPi.GPIO все еще стоит узнать, так как ее используют большинство начинающих проектов Raspberry Pi . Как бы ни был прост этот проект, знания могут быть использованы для разных целей.
Использование выводов GPIO — отличный способ выучить и изобрести свои собственные устройства, но это далеко не все, что вы можете сделать с Pi. Наше неофициальное руководство по Raspberry Pi неофициальное руководство неофициальное руководство наполнен творческими идеями и учебными пособиями, которые вы можете попробовать сами! В другом учебнике, подобном этому кнопку подключенной к Wi-Fi кнопку подключения
10K, 220 Ом, больше — TOP ADVICE
Содержание
- Общий цвет резистора Коды и их использование
- 330 Цветовой код резистора в Ом
- Цветовой код резистора 1 кОм
- Цветовой код резистора 4,7 кОм
- Цветовой код резистора 10 кОм
- 1 Цветовой код резистора 00 кОм
- Цветовой код резистора 1 МОм
- Калькулятор резистора яркости светодиодов
Скромный резистор — это самый дешевый компонент в нашей коробке производителя, но он также невероятно полезен. Ранее мы показывали как использовать резисторы в проекте, но основное внимание в этом руководстве уделяется пониманию цветных полосы, которые обвивают центр резистора. Эти цветовые коды резисторов точно говорят нам, сколько Ом тока выдерживает каждое устройство.
Как мы читаем цветовой код резистора? Почему некоторые резисторы имеют четырехполосную цветовую маркировку, а другие — пятиполосную? Какой резистор нужен для светодиода? Мы ответим на все эти вопросы и предоставим вам инструменты для быстрого расчета правильного резистора для всех ваших проектов.
Общий цвет резистора Коды и их использование
Чтение цветовых кодов резисторов слева направо У резисторов нет полярности, поэтому их можно использовать в любой ориентации в цепи. Но чтобы определить правильные значения цветового кода резистора, нам нужно понять цветные полосы на резисторе. На типичном четырехдиапазонном резисторе уровня для хобби есть три цвета в группе. Это первая, вторая значащие цифры и множитель. Последняя полоса — это допуск резистора, допустимая погрешность, если хотите. Для большинства любителей допуск 5% (золото) является идеальным и распространенным. Нам нужно только дополнительное точность, если мы создаем чувствительные схемы, например аудио- и видеопроекты.
Мы всегда можем определить полосу допуска, поскольку это единственная полоса, напечатанная на “плече” резистора. Ищите эту полосу, чтобы определить ориентацию резистора.Пятиполосный резистор имеет дополнительную полосу, третью значащую цифру, которая обеспечивает более высокий уровень точности, если этого требует проект. Итак, у нас есть три значащие цифры, множитель и допуск, который напечатан на плече.Как прочитать цветовой код резистораLet’s используйте резистор на 220 Ом, который обычно используется со светодиодными лампами, в качестве примера того, как читать цветовую маркировку резистора.- Первая значащая цифра — красный цвет, и с помощью декодера мы видим, что красный цвет имеет значение 2.
- Вторая значащая цифра также красного цвета, это дает нам 22.
- Множитель коричневый, и это расшифровывается как 10. Если мы умножим 22 на 10, мы получим 220.
- Последняя полоса, допуск, — это золото. Золото составляет 5 %, что означает, что мы может принять сопротивление с погрешностью 5%.
Для производителей, требующих большей точности, есть также пятиполосные резисторы, которые имеют третью значащую цифру. Дополнительный рисунок обеспечивает ясность, которая может быть необходима в цепях, чувствительных к сопротивлению, например, в научных и инженерных приборах. Вот пятидиапазонный резистор 220 Ом и его цветовая маркировка резистора.
- Первая значащая цифра красная, и с помощью декодера мы видим, что красный цвет имеет значение 2.
- Вторая значащая цифра тоже красная, это дает нам 22.
- Третья значащая цифра черного цвета, что означает 0. Теперь у нас есть 220.
- Множитель черный, и это расшифровывается как 1. Если мы умножим 220 на 1, получим 220.
- Последняя полоса, допуск, – золото. Золото составляет 5%, что означает, что мы можем принять сопротивление с погрешностью 5%.
Цветовой код резистора 100 ОмImag e 1 из 2Цветовой код резистора 100 Ом (4-полосный) (Изображение предоставлено Tom’s Hardware) Изображение 1 из 2
Резистор 100 Ом обычно используется для защиты светодиодов. Лучше всего использовать с белыми, синими и зелеными светодиодами на 5В. Резисторы на 100 Ом также можно использовать с другими цветами, но ожидайте, что яркость будет отличаться, поскольку они не являются правильным значением. Резисторы на 100 Ом можно определить по цветовому коду резистора Коричневый -Черный-Коричневый-Золотой и, для пятиполосных резисторов, Коричневый-Черный-Черный-Черный-Золотой. Цветовой код резистора 220 Ом Цветовой код резистора 220 Ом (4-полосный) (Изображение предоставлено Tom’s Hardware)Изображение 1 из 2
Цвет резистора 220 Ом Код (5-диапазонный) (Изображение предоставлено Tom’s Hardware)Изображение 1 из 2
Тип резистора | 4-полосный цветовой код</ th> | 5-полосный цветовой код | Общее использование |
---|---|---|---|
100 Ом | Коричневый-Черный-Коричневый-Золотой | Коричневый-Черный-Черный-Черный-Золотой | Защита от светодиодов |
220 Ом | Красный-Красный-Коричневый-Золотой | Красный-Красный-Черный-Черный-Золотой</ td> | Защита от светодиодов |
330 Ом | Оранжевый-Оранжевый-Коричневый-Золотой | Оранжевый-Оранжевый-Черный-Черный-Золотой | Защита от светодиодов |
1K Ом (1 кОм) | Коричневый-Черный-Красный-Золотой | Коричневый-Черный-Черный-Коричневый-Золотой | LED P защита, делитель напряжения |
4,7 кОм | Желто-фиолетовый-красный-золотой</td > | Желто-фиолетовый-черный-коричневый-золотой | Подтягивающий/понижающий резистор для I2C |
10 кОм | Коричневый-Черный-Оранжевый-Золотой | Коричневый-Черный-Черный-Красный-Золотой | Подтягивающий/понижающий резистор< /td> |
100 кОм | Коричневый-Черный-Желто-Золотой | Коричневый- Black-Black-Orange-Gold | Продувочный резистор для конденсатора |
1 МОм | Коричневый-черный-зеленый-золотой | Коричневый-черный-черный-желтый-золотой | Емкостные сенсорные схемы |
Резистор на 220 Ом — один из самых распространенных, с которыми сталкиваются любители, потому что он часто используется со светодиодами. Без резистора на 220 Ом простые светодиоды потребляли бы слишком большой ток и быстро перегорали. Мы используем резистор для ограничения тока, который может использовать светодиод. («Свет, который горит в два раза ярче, горит в два раза дольше»). Резистор на 220 Ом можно определить по цветовой маркировке резистора Красный-Красный-Коричневый-Золотой или Красный-красный-черный-черный-золотой.
Если бы мы использовали синий светодиод с прямым напряжением 3,2 В (напряжение, необходимое для протекания тока через диод) и прямой ток 10 мА (максимальный безопасный ток, который вы можете непрерывно пропускать через устройство, не вызывая повреждения) при напряжении питания 5 В нам понадобится резистор 180 Ом. Вместо этого мы можем использовать резистор на 220 Ом, что на 40 Ом больше, поэтому наш светодиод не будет таким ярким, но будет хорошо защищен.
330 Цветовой код резистора в Ом
330 Ом резистор также довольно распространен, его можно найти в стартовых комплектах электроники для Arduino и Raspberry Pi Pico. Резистор на 330 Ом также подходит для большинства светодиодов, но некоторые из них будут выглядеть тусклее, чем другие. Мы также можем использовать резистор на 330 Ом с зуммером, чтобы понизить тон зуммера от “раздражающего” чтобы немного меньше раздражать. руководство Adafruit по NeoPixel рекомендует защищать контакт GPIO с помощью резистора (от 300 до 500 Ом) между входом контакта данных и GPIO вашего Raspberry Pi/Arduino.
Резистор 330 Ом можно определить по цветовой маркировке резистора Оранжевый-Оранжевый-Коричневый-Золотой или Оранжевый-оранжевый-черный-черный-золотой.
Цветовой код резистора 1 кОм
Изображение 1 из 2Цветовой код резистора 1 кОм (4-полосный) (Изображение предоставлено Tom’s Hardware)Изображение 1 из 2
Цветовой код резистора 1 кОм (5-диапазонный) (Изображение предоставлено Tom’s Hardware)Изображение 1 из 2
Резистор 1 кОм (1 кОм) обычно является максимальным сопротивлением, используемым для светодиодов. Любой светодиод, в котором используется резистор 1 кОм, будет тусклым, но загорится. Резистор 1 кОм обычно используется для точной настройки схемы или подтягивания вверх/вниз вывода данных. Резистор 1K вместе с резистором 2,2K можно использовать для формирования делитель напряжения , который может понизить 5 В до около 3,4В. Это полезно при использовании компонентов 5 В в Raspberry Pi’s GPIO 3,3 В.
Резистор 1 кОм можно идентифицировать по цветовой маркировке резистора Коричневый-Черный-Красный-Золотой или Коричневый-Черный-Черный-Коричневый-Золотой.
Цветовой код резистора 4,7 кОм
Резистор 4,7 кОм полезен для добавления подтягивающего резистора к контактам SDA и SCL устройства I2C. На платах Adafruit Stemma QT это встроено, но если мы будем использовать другую марку платы, нам потребуется добавить резистор 4,7 кОм к обоим контактам. Делая это, мы гарантируем, что данные I2C правильно и последовательно отправляются на наше устройство.
Резистор 4,7 кОм можно идентифицировать по цветовым кодам резистора желтый-фиолетовый-красный- Золото или желто-фиолетовый-черный-коричневый-золотой.
Цветовой код резистора 10 кОм
Изображение 1 из 2Цветовой код резистора 10 кОм (4-полосный) (Изображение предоставлено : Tom’s Hardware)Изображение 1 из 2
Цветовой код резистора 10 кОм (5-диапазонный) (Изображение предоставлено Tom’s Hardware)Изображение 1 из 2
Часто используется резистор 10 кОм как подтягивающий резистор для входного контакта. Например, на Arduino мы можем использовать резистор 10 кОм, чтобы подтягивает входной контакт, так что при нажатии кнопки он подтягивает вход на контакте 5 В, вызывающем действие в нашем коде. Мы использовали резистор 10 кОм, чтобы подтянуть контакт данных на датчике температуры DHT22 в нашем предыдущий номер резистора.
Резистор на 10 кОм может быть идентифицирован по цветовой маркировке резистора Коричневый-Черный-Оранжевый-Золотой или Коричневый-Черный-Черный-Красный-Золотой.
1 Цветовой код резистора 00 кОм
100 кОм резисторы находятся на самом верхнем пределе того, что нужно большинству производителей. Это большое сопротивление в небольшом корпусе, но оно имеет свое применение. Обычно они используются в качестве стабилизирующих резисторов на конденсаторе, чтобы уменьшить риск неприятного разряда или для настройки чувствительной аудио/видео цепи.
Резистор на 100 кОм можно определить по цветовому коду Коричневый-черный-желтый-золотой или коричневый-черный-черный-оранжевый-золотой для пятиполосного резистора.
Цветовой код резистора 1 МОм
Это большое сопротивление, и большинству любителей/производителей оно никогда не понадобится. Мы использовали резистор 1 МОм с Arduino для создания емкостного сенсорного интерфейса (наш собственный Makey Makey). Но большинству людей он никогда не понадобится. Однако резистор на 1 МОм имеет цветовую маркировку: коричневый-черный-зеленый-золотой или коричневый-черный-черный-желтый-золотой.
Резистор на 1 МОм можно идентифицировать по цветовой маркировке резистора Коричневый-черный-зеленый-золотой или Коричневый-черный-черный-желтый-золотой.
Калькулятор резистора яркости светодиодов
У нас есть коробка, полная светодиодов, но какие резисторы подходят для каждого цвета? Чтобы решить это, нам нужно немного посчитать, и, к счастью, есть вычисление, которое мы можем использовать.
R – номинал резистора, необходимый для нашего светодиода, и для его расчета нам нужно знать напряжение питания. (Vs), прямое напряжение (Vf) и прямой ток (If) светодиода. Мы можем узнать Vf и If светодиода b, обратившись к его техническому описанию. Если нет, вот таблица приблизительных значений, которые можно использовать для обычных схем для любителей.
@top-advice.ru
Использование резисторов PullUp и PullDown в схеме Raspberry Pi
| Raspberry Pi | резистор
Грант Винни
8 мин
Когда вы начинаете создавать схемы с помощью Raspberry Pi и его выводов GPIO, возникает неожиданная, но важная для понимания концепция, называемая «плавающим». Чтобы настроить его, вам нужно понять, как использовать подтягивающие и подтягивающие резисторы.
Когда вы начинаете создавать схемы с помощью Raspberry Pi и его выводов GPIO, возникает неожиданная, но важная для понимания концепция, называемая «плавающим».
Что вам понадобится
Если все, что у вас есть сейчас, это Raspberry Pi, вам понадобится комплект со всеми основными функциями, который поможет вам приступить к работе с простыми проектами — при условии, что это вписывается в ваш бюджет. Есть много вариантов, но я рекомендую проверить Vilros или CanaKit (доступен на Amazon). Я купил комплекты обоих производителей и мне повезло с ними.
Если у вас ограниченный бюджет, вам понадобится как минимум:
- Raspberry Pi с адаптером micro USB 2,5 А (~ 50 долларов США)
- Несколько резисторов, провода и кнопка. Поищите на Amazon или приобретите CamJam EduKit — 5 фунтов стерлингов (~ 7 долларов США)
- Макет и либо несколько проводов для его подключения к Pi, либо T-Cobbler и шлейф (для гораздо более простого и чистого соединения) — 5–15 долларов США.
- …. приличный комплект намного меньше головной боли в первый раз!
Простая схема
Представьте, что вы создаете схему с помощью макетной платы. Что-то очень простое… кнопка, провод и источник питания (например, контакт 3,3 В на Pi). Вы просто хотите иметь возможность нажать кнопку, чтобы завершить цепь. Может быть, это выглядит как-то так.
Приведенная выше схема подключает 3,3 В через переключатель и резистор 220 Ом к контакту № 6.
ПРИМЕЧАНИЕ. Один посетитель оставил комментарий о моем использовании резистора 220 Ом со ссылкой на авторитетный сайт, на котором есть статья о .0030 электрические характеристики для контактов GPIO Pi. В нем автор заявляет, что «никогда не следует подавать или подавать на входной контакт более 0,5 мА», хотя они не объясняют, почему. Согласно электрическому калькулятору , вам понадобится резистор не менее 7 кОм, чтобы снизить рекомендуемый ток 0,5 мА. Резистор на 10 кОм тоже должен работать нормально, что я видел в других примерах. (Спасибо, Рэндалл Стивенс.)
Это не будет очень полезно, без скрипта, который считывает состояние схемы и предпринимает какие-то действия, даже если он просто отображает сообщение. Итак, вот небольшой скрипт Python, который делает именно это. Он определяет, когда цепь открыта или закрыта, и отображает сообщение с отметкой времени.
# кодировка=utf-8 импортировать RPi.GPIO как GPIO импорт даты и времени Def my_callback (канал): если GPIO.input(канал) == GPIO.HIGH: print('\n▼ at ' + str(datetime.datetime.now())) еще: print('\n ▲ at ' + str(datetime.datetime.now())) пытаться: GPIO.setmode(GPIO. BCM) GPIO.setup(6, GPIO.IN) GPIO.add_event_detect(6, GPIO.BOTH, callback=my_callback) message = raw_input('\nНажмите любую клавишу для выхода.\n') окончательно: GPIO.очистка() print("До свидания!")
Краткое объяснение того, что делает приведенный выше скрипт, для тех, у кого мало опыта в Python/GPIO.
Указывает систему нумерации плат, а затем устанавливает вывод для чтения ввода. Затем мы прикрепляем к выводу функцию (здесь она называется «my_callback»), чтобы некоторый код выполнялся всякий раз, когда цепь закрывается или открывается (кнопка нажата или отпущена). Код просто отображает простое сообщение с текущей датой/временем.
Запустив вышеприведенный скрипт, я ожидаю увидеть подобный шаблон вывода, показывающий отметку времени каждого нажатия и отпускания кнопки.
▼ в 2016-04-30 12:26:44.124712 ▲ в 2016-04-30 12:26:44.399541 ▼ в 2016-04-30 12:26:44.857414 ▲ в 2016-04-30 12:26:45.032816 ▼ в 2016-04-30 12:26:45.397896 ▲ в 2016-04-30 12:26:45. 666379 ▼ at 2016-04-30 12:26:46.015800
Вместо я вижу это, с еще 10 такими же экранами, примерно за 5 секунд. Цепь продолжает подпрыгивать вверх и вниз, повсюду, останавливаясь только тогда, когда я нажимаю кнопку и замыкаю цепь.
У приведенного выше поведения есть имя. Когда цепь не замкнута, она не просто «выключена». Вместо этого говорят, что он «плавающий». Когда цепь разомкнута, контакт GPIO по-прежнему принимает входные данные и улавливает все, что находится в окружающей среде, даже статическое электричество. Если вы используете провода в своей цепи, они действуют как антенны, усиливая то, что контакт улавливает сам по себе.
Может быть, будет лучше, если я сначала дам определение нескольким понятиям.
Определение некоторых терминов
Схема
Ваша схема представляет собой совокупность всех выполненных вами соединений с использованием проводов, резисторов, светодиодов, кнопок, GPIO и других контактов и т. д.
Ее можно замкнуть ( например, когда вы нажимаете кнопку, и сигнал может пройти с одного конца на другой), или он может быть разомкнут (кнопка не нажата, или есть какой-то другой разрыв в цепи).
Разомкнутая цепь похожа на длинную цепочку костяшек домино, где вы убрали 4 или 5 из середины. Вы можете попробовать послать сигнал с одного конца, но это никогда не поможет преодолеть разрыв.
Высокий/Низкий
Каждый контакт GPIO имеет два состояния. Вы можете вызывать их включенными или выключенными, высокими или низкими, 1 или 0 и т. д. Штырь устанавливается на «высокий», когда он выдает 3,3 В или считывает 3,3 В, и «низкий», когда он выключен. Библиотека GPIO называет эти два состояния GPIO.HIGH
и GPIO.LOW
, и библиотека также помогает определить, в каком состоянии находится контакт. состояние.
Спадающий фронт
Момент перехода контакта GPIO в состояние LOW.
Bouncetime
Вы можете указать время, в течение которого повторяющиеся события будут игнорироваться. Например, вы можете указать bouncetime 500 мс. Это означает, что если вы нажимаете кнопку несколько раз менее чем за полсекунды (или, может быть, кнопка немного ослаблена и регистрирует нажатие несколько раз), последующие нажатия после первого будут игнорироваться.
Выход
Контакты могут быть настроены на чтение ввода или отправку вывода, но не на то и другое одновременно. Если контакт настроен на выход, Pi может либо отправить 3,3 вольта ( HIGH
), или нет ( LOW
или 0 вольт).
Вход
Если контакт установлен на вход, то цепь должна быть замкнута, чтобы считать этот вход. В моем случае это означает нажатие кнопки, чтобы прочитать HIGH
или 1
(поскольку я подключен к 3,3 В… если бы мой контакт был подключен к земле, он читал бы LOW
или ). 0
при закрытии).
Но что делать, если я не нажимаю кнопку в приведенной выше схеме? Должно быть LOW
или 0
, правильно? Вот где проблема. Поскольку цепь разомкнута, вывод GPIO может считывать все, что угодно из окружающей среды, и он довольно чувствителен. Нам нужен способ принудительно перевести контакт в состояние LOW
(также известное как «подтягивание»), когда цепь разомкнута (или в HIGH
, если исходная цепь была подключена к земле, также известное как «подтягивание») .
Плавающий
Когда вы должны использовать подтягивающий или подтягивающий резистор, но это не так, состояние называется “плавающим”. То есть штифт и любые подключенные к нему провода улавливают случайное излучение и электромагнитные сигналы из окружающей среды. Когда цепь разомкнута, это не ВЫСОКИЙ или НИЗКИЙ уровень, а где-то посередине.
Pull Down
Если у вас есть схема, которая подключает 3,3 В к контакту GPIO, она будет отображаться как ВЫСОКИЙ, когда цепь замкнута. Когда он открыт, он может прочитать что угодно. Вам нужен «подтягивающий» резистор, соединяющий вашу цепь с землей, чтобы он считывал НИЗКИЙ уровень, когда цепь разомкнута. (я покажу это в действии позже.)
Pull Up
Точно так же, если у вас есть схема, соединяющая контакт GPIO с землей, когда он замкнут, он будет читать НИЗКИЙ
. Вам нужен «подтягивающий» резистор, чтобы, когда он разомкнут, он по умолчанию находился в состоянии HIGH
.
В обоих случаях кнопка не имеет сопротивления (или, по крайней мере, меньше сопротивления), поэтому, когда цепь замкнута, происходит короткое замыкание вокруг подтягивающего или подтягивающего резистора и считывается другое значение. Надеюсь, это будет иметь больше смысла с парой демонстраций.
Сильный
Сильные резисторы против слабых резисторов имеют значение только по отношению друг к другу. Резистор с меньшим значением будет сильнее, поскольку он пропускает больший ток.
Слабый
Более слабый резистор будет иметь большее значение, что позволит протекать через него меньшему току.
Внутренние резисторы
В моей схеме я добавил к макетной плате резистор 10 кОм, чтобы я мог видеть схему. Однако у Pi есть собственные внутренние резисторы на 1,8 кОм, которые вы можете использовать, и я покажу вам, как использовать оба.
Исправление простой схемы
Вариант 1. Добавление на макетную плату подтягивающего резистора
Вот снова схема, и она была изменена. Я немного сдвинул все вправо, чтобы освободить место для двух вещей — резистора на 10 кОм и провода, который эффективно закорачивает контакт № 6 на землю. Это вынуждает (опускает) схему в состояние «выключено» или 0, когда кнопка не нажата, предотвращая взлеты и падения, которые мы видели ранее.
Во всех примерах, которые я видел в других местах, используется 10 кОм, и согласно по крайней мере одному авторитетному источнику вы должны придерживаться этого (согласно моему комментарию в разделе «Простая схема»). Резистор с более высоким значением пропускает меньший ток.
Вариант 2: включение внутреннего подтягивающего резистора в коде
Другой вариант — оставить нашу схему такой, какой она была изначально, но включить один из внутренних резисторов, находящихся на самом Pi.
Это делается путем передачи значения pull_up_down
в функцию GPIO.setup()
, как показано ниже. Указав значение GPIO.PUD_DOWN
, мы эффективно добавляем в нашу схему подтягивающий резистор.
# кодировка=utf-8 импортировать RPi.GPIO как GPIO импорт даты и времени Def my_callback (канал): если GPIO.input(канал) == GPIO.HIGH: print('\n▼ at ' + str(datetime.datetime.now())) еще: print('\n ▲ at ' + str(datetime.datetime.now())) пытаться: GPIO.setmode(GPIO.BCM) GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.add_event_detect(6, GPIO.BOTH, callback=my_callback) message = raw_input('\nНажмите любую клавишу для выхода.\n') окончательно: GPIO.очистка() print("До свидания!")
Демо
Вот короткое видео, показывающее, что я вижу (с и без) подтягивающего резистора.
А вот лучшее видео, в котором Джеймс Льюис объясняет ту же концепцию, за исключением того, что он использует TI LaunchPad вместо Raspberry Pi.
Ресурсы
- Как работает параметр bouncetime GPIO python?
- GPIO: модели Raspberry Pi A и B
- GPIO: модели Raspberry Pi A+, B+, 2B и 3B
- Учебное пособие: контакты Raspberry Pi GPIO и Python
- Многопоточные прерывания обратного вызова в Python
- Обновление RPi.GPIO и обнаружение ОБОИХ нарастающих и спадающих фронтов
- RasPi.TV RPi.GPIO Краткий справочник «шпаргалка»
- Основы RPi.GPIO 6 — Использование входов и выходов вместе с RPi .GPIO — подтягивающие и подтягивающие резисторы
- Использование подтягивающего и подтягивающего резистора на входных или выходных контактах MCU
- Электрические характеристики GPIO, напряжение и ток на входных и выходных контактах Raspberry Pi
Трехчастный рассказ Алекса на RasPi. TV под названием «Как использовать прерывания с Python на Raspberry Pi и RPi.GPIO».
- Как использовать прерывания… Часть 1
- Как использовать прерывания… Часть 2
- Как использовать прерывания… Часть 3
И если вы просто не можете наполниться Pi , , посмотрите этот пост, который я написал в День числа Pi:
- 314 (или около того) Потрясающие ресурсы Raspberry Pi в день Pi
gpio — Что такое подтягивающий резистор? Что оно делает? И зачем это нужно?
спросил
Изменено 4 года, 11 месяцев назад
Просмотрено 57 тысяч раз
Я встречал много простых схем, которые показывают, как включить светодиод или что-то еще. Часто упоминаются подтягивающие резисторы. Что они делают? Для некоторых контактов GPIO требуются подтягивающие резисторы, а для других нет, в чем разница?
3
С веб-сайта Arduino:
Часто полезно перевести входной контакт в известное состояние, если вход отсутствует. Это можно сделать, добавив подтягивающий резистор (к +5 В) или подтягивающий резистор (резистор к земле) на входе, обычно 10 кОм.
НО : это с сайта Arduino. Помните, что контакты Raspberry GPIO рассчитаны только на 3,3 В (поэтому сделайте подтяжку до 3,3 В, , а не 5 В на Raspberry Pi)!!!
Вот пример схемы подтягивающего резистора.
Подтяжка гарантирует, что штифт поднят, не потребляя слишком много тока. Ворота имеют три возможных состояния: ON, OFF и FLOATING.
Состояние FLOATING не очень полезно, так как его нельзя преобразовать в логическое значение. Следовательно, подтягивающие и подтягивающие резисторы: они предназначены для устранения плавающего состояния.
2
Подтягивающий или подтягивающий резистор используется на входных контактах для определения состояния в случае, если к входу ничего не подключено или подключенная часть находится в состоянии высокого импеданса (Z). У входов без определенного состояния есть проблема, заключающаяся в том, что входное значение может быть любым (0 или 1), называемым плавающим.
Более подробно это объясняется в статье в Википедии (которую Дживингс добавил к комментариям к вашему вопросу) и немного более наглядно в этой статье на SparkFun.
1
Следует помнить (поначалу меня это немного смутило), что подтягивающий или подтягивающий резистор — это просто стандартный резистор, выполняющий определенную роль. Не один человек пытался купить подтягивающие резисторы только для того, чтобы обнаружить, что их не существует. В противном случае это так же, как это звучит, стандартный резистор, увеличивающий напряжение до 5 В / 3,3 В или до 0 В в нормальном состоянии.
1
Термин pull-up или pull-down — это термин, используемый для описания роли резистора. Он подтягивает сигнальную линию, к которой он подключен на одной клемме, к напряжению питания/земли/опорному напряжению, которое присутствует на другой клемме. Предыдущий ответ неверен, говоря, что «он увеличивает импеданс», а уменьшает сопротивление/импеданс в цепи, чтобы линия принимала известное состояние, когда она не будет иначе, например. входной контакт на интегральной схеме, который иначе не подключен. Так как это будет противодействовать эффектам, когда что-то внешнее подключен к , величина сопротивления должна быть низкой достаточной для эффективного вытягивания , если контакт случайно или преднамеренно оставлен разомкнутой цепью, но высоким достаточно, чтобы любая внешняя цепь не подвергалась чрезмерной нагрузке преодолеть эффект, когда он хочет вести линию в другом направлении.
Контакты GPIO на Pi имеют управляемые внутренние, которые, как я понимаю, в основном могут быть сделаны для того, чтобы линии принимали логический низкий или высокий уровень или оставляли разомкнутую цепь — последнее из которых нормально, если пользователь предоставил потяните вверх/вниз резистор , чтобы выполнить работу (в любом случае, возможно, как часть внешней схемы). Конструкция последнего особенно важна, если внешняя цепь работает от шин питания выше 3,3 В, поскольку в этом случае подтягивающий элемент не должен пытаться поднять напряжение на линии выше 3,3 В. – последовательный резистор ( скажем, 4K7) и диод Шоттки (например, BAT85) с его анодом на стороне последовательного резистора, подключенного к контакту GPIO, а его катод к шине питания 3,3 В – один из способов предотвратить это – низкий (<0,2 В) Прямое падение напряжения на диоде этого типа не позволяет поднять сигнальную линию достаточно высоко, чтобы повредить Pi, за счет немного увеличенного времени распространения сигналов в Pi.
Я только начинаю с Pi, так как вчера купил два подержанных {хотя я занимаюсь электроникой более 35 лет}, и я ищу информацию о распиновке Pi именно по этой причине. – и за лучшее место, чтобы получить два блока питания, поскольку они не поставлялись с ними. 8-P
Словарь по электронике определяет подтяжку следующим образом:
pull-up: описание используемой цепи или компонента. повысить значение (например, импеданс) цепи до которым он подключен.
Если светодиод подключен к источнику питания +5 В и управляется (включение и выключение светодиода) микроконтроллером/микропроцессором или каким-либо другим способом, во включенном состоянии источник питания может подавать большой ток, в свою очередь, большой ток может повредить светодиод.
К ограничивает большой ток от источника питания, подтягивающий резистор, подтягивает импеданс и ограничивает ток питания светодиода от источника питания (+5 В).