Python library raspberry

GPIO Programming on the Raspberry Pi: Python Libraries

The Raspberry Pi is single board computer with now four revisions and a minimalistic zero variant. It is a popular choice for different projects because of its small size, efficient power consumption, processing speed and by being a full Linux based computer.

When you want to connect several microcontrollers with each other, several protocols exist: I2C, SIP, and UART. In my last two articles, I explained these protocols and showed examples for C++ libraries with Arduino and with the Raspberry Pi.

This article now presents general GPIO libraries for working with the Raspberry Pi. The libraries are Wiring Pi, Pigpio, Gpiozero, Rpi.GPIO. Each library is explained with a description, its main features, a code example on Python, and a code example in C if supported by the library. I assume you have a general understanding of GPIO programming, and will therefore not explicitly detail each source code line in the examples.

This article originally appeared at my blog admantium.com.

Wiring Pi

The WiringPi library is an often used, functional rich library that supports I2C and SPI connections. It is written in C and provides Python bindings. The library is unfortunately deprecated as the original author stated. Decide yourself if you want to use the library: On one hand, you find several examples on the internet, on the other hand, members from the Raspberry Pi community start to move to new libraries.

The libraries latest version can be accessed on Github: See the WiringPi C and WiringPi Python.

Python

Pigpio

The pigpio is an actively developed library with an impressive set of features: All GPIO pins of the Raspberry Pi can be read, written to, attached to interrupt handlers, and output PWM signals at the same time. Also, UART, I2C and SPI protocols are implemented. It is written in C and also provides Python bindings. Go to the official Github repository and build the newest version on your Raspberry Pi, or install it with apt install pigpio python-pigpio python3-pigpio .

Python

Gpiozero

Officially endorsed by the Raspberry Foundation, gpiozero is a Python-only library that not only accesses the GPIO pins, but also provides direct hardware support for working with actuators and sensors. For connecting other devices, only SPI is supported — I2C was announced, but is not included yet.

Источник

Установка и использование модулей (библиотек) Python

Общие сведения:

Python — высокоуровневый язык программирования придуманный нидерландским программистом Гвидо (Гуидо) ван Россумом в 1991 году. Язык назван Python в честь популярного в 70-е британского телешоу Monty Python’s Flying Circus, скорее всего из-за того, что MPFC были первопроходцами жанра абстрактного юмора и язык Python максимально абстрактный. Так же код Python в основном является скриптом для интерпретатора — виртуальной машины, в которой он выполняется без компилирования в машинный код. Код Python можно скомпилировать в исполняемый машинный код при помощи компилятора Cython, но это уже выходит за пределы охвата данной статьи.

В этой статье мы рассмотрим как работать и устанавливать модули для интерпретатора Python на Raspberry Pi в графической среде Raspbian.

Внимание! Для корректной работы модулей FLASH-I2C на Raspberry Pi под управлением Raspberry OS «Buster» необходимо выключить динамическое тактирование ядра (опция core_freq_min должна быть равна core_freq в /boot/config.txt ) Ссылка на подробное описание.

Нам понадобится:

  • Raspberry Pi
  • Шнур micro USB-B — USB A
  • Шнур HDMI-HDMI
  • Блок питания USB 2,5А
  • Клавиатура
  • Мышь
  • HDMI-совместимый монитор
  • ПК в одной сети c Raspberry
  • Кардридер microSD
  • microSD карта памяти

Если из этого всего у вас есть только сама Raspberry, блок питания, SD карта и ПК с кард ридером — не переживайте, Raspberry можно настроить для подключения и удалённой работы по локальной сети при помощи этой статьи.

Предварительная настройка:

Для начала воспользуемся этой инструкцией для копирования образа диска системы на нашу microSD карту.

Если нужно работать с Rapberry по удалённому соединению (в случае отсутствия клавиатуры, мыши и монитора), можно воспользоваться этой статьёй.

Установка в графической среде:

Этот раздел объясняет процесс установки модулей Python в графической среде в редакторе Thonny Python IDE.

Курсором мыши наводим на пиктограмму малины в правом верхнем углу:

Выбираем в меню приложений Программирование -> Thonny Pyth on IDE:

Откроется окно Thonny Python IDE. Если под шапкой окна нет строки меню, нажимаем Switch to regular mode в правом верхнем углу, перезапускаем программу для применения изменений.



В строке меню выбираем Tools -> Manage packages.

Откроется окно установки пакетов:

В строке поиска вводим название необходимого нам модуля, для примера возьмём наш модуль управления I2C реле pyiArduinoI2Crelay:

После ввода нажимаем кнопку Search, справа от списка установленных модулей появится результат поиска. Нажимаем кнопку Install в нижней части окна:

Начнётся процесс установки, нужно немного подождать (это займет не больше минуты):

После установки модуль появится в списке установленных:

Теперь можно использовать его методы, но работать он будет только в Thonny Python IDE.

Попробуем написать и запустить следующий скрипт:

Набираем с клавиатуры вышеуказанный текст в главном окне редактора, сохраняем файл в меню File -> save, выбираем название для файла (например, new), нажимаем большую зелёную кнопку Play (Run curent script):

В нижнем поле редактора под названием shell будет выведен текст «255» — это значение константы ALL_CHANNEL из модуля pyiArduinoI2Crelay:

Установка в эмуляторе терминала:

Для использования модуля в качестве системного его нужно установить от имени супер-пользователя из командной строки. Этот раздел разъясняет этот процесс.

Нажимаем курсором мыши на пиктограмму виртуального терминала LXTerminal в верхнем меню:

Откроется окно виртуального терминала. Вводим с клавиатуры sudo pip3 install pyiArduinoI2Crelay и нажимаем клавишу enter, начнётся процесс установки:

Теперь можно пользоваться методами модуля.

Вводим с клавиатуры python3 и нажимаем enter, откроется строка ввода интерпретатора Python обозначаемая тремя правыми треугольными скобками «>>>»:

Вводим с клавиатуры from pyiArduinoI2Crelay import *, нажимаем enter, затем в новой строке вводим print(ALL_CHANNEL) , нажимаем enter. Будет выведено значение 255 константы ALL_CHANNEL из модуля pyiArduinoI2Crelay:

Для выхода из интерпретатора наберем на клавиатуре exit() и нажмем enter

Источник

Raspberry Pi: установка библиотеки RPi.GPIO для python

Одно из главных преимуществ Raspberry Pi — это наличие выводов общего назначения (General Purpose Iinput/Outputs). GPIO — это группа контактов, которыми можно управлять с помощью программы. Причем управление это может быть совсем простым, например, включение/выключение светодиода. Либо весьма сложным — обмен данными с периферийными устройствами по специализированным протоколам.

С помощью GPIO можно собирать данные с разных датчиков, управлять реле, двигателями, силовыми ключами. В общем, управлять реальным миром по составленной нами программе.

В этой статье я расскажу как установить на Raspberry Pi библиотеку управления GPIO для python — RPi.GPIO, и приведу несколько простых примеров работы с ней.

1. Загрузка и подготовка библиотеки RPi.GPIO

Первое что мы сделаем — скачаем архив с библиотекой с официального сайта:

Ссылка ведет на страницу с разными версиями библиотеки. Выбираем самый свежий архив. На момент написания статьи это был — RPi.GPIO-0.6.3.tar.gz

По-умолчанию, штатный браузер Chromium скачает библиотеку в папку /home/pi/Downloads. Зайдем в эту папку с помощью проводника:

Теперь жмем правую кнопку мыши на архиве и выбираем пункт Extract Here.

Этим самым мы просим разархивировать библиотеку в ту же папку, в которой находится сам архив. В результате рядом с архивом появится папка RPi.GPIO-0.6.3.

2. Установка дополнительного пакета для python

Перед тем, как установить библиотеку RPi.GPIO, нам потребуется дополнительный пакет python-dev. Для этого запустим терминал (черная иконка на верхней панели рабочего стола) и запустим в нем следующую команду:

На вопрос «Do you want to continue? [Y/n]» пишем символ «Y» и жмем Enter.

В результате появится отчет об успешной установке. Выглядит он так:

3. Установка библиотеки RPi.GPIO

Теперь приступим к установке самой библиотеки для работы с GPIO. Не выходя из терминала, переходим в разархивированную ранее папку:

И запускаем команду для сборки библиотеки из исходных кодов:

В результате получим примерно такой отчет:

Далее запускаем команду установки библиотеки. Нужно выполнить её с правами администратора, поэтому вначале добавляем директиву sudo:

Ну вот и готово! Приступим к сборке стенда и составлению первой программы, которая будет управлять состоянием светодиода.

4. Подключение светодиода к Raspberry Pi

Разъем GPIO у Raspberry Pi имеет два типа нумерации. Первый тип — это последовательный номер контакта. Второй тип — BCM, соответствует выводам микропроцессора. Оба эти нумерации представлены на картинке.

В большинстве примеров используется тип нумерации BCM, последуем традиции. Подключаем светодиод к выводу GPIO23 по следующей схеме.

Анод светодиода (длинная ножка) соединим с выводом GPIO23 через резистор 200 Ом, а катод с землей (GND). Хорошо бы сначала вспомнить урок про макетные платы.

Теперь перейдем к написанию программы.

5. Программа для управления с помощью RPi.GPIO

В Raspbian установлены две версии python: 2 и 3. Поскольку мы установили библиотеку только для python 2, будет пользоваться именно это версией.

Открываем среду разработки Python 2 (IDLE). В меню появившегося окна выбираем New File.

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

Программу желательно сохранить, например, в домашнюю папку. Делается это с помощью пункта меню File/Save As…

Наконец, запускаем программу через меню Run/Run Module или с помощью клавиши F5.

Источник

RPi.GPIO 0.7.1

pip install RPi.GPIO Copy PIP instructions

Released: Feb 6, 2022

A module to control Raspberry Pi GPIO channels

Statistics

View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery

License: MIT License (MIT)

Tags Raspberry, Pi, GPIO

Maintainers

Classifiers

  • Development Status
    • 5 — Production/Stable
  • Intended Audience
    • Developers
  • License
    • OSI Approved :: MIT License
  • Operating System
    • POSIX :: Linux
  • Programming Language
    • Python :: 2.7
    • Python :: 3
  • Topic
    • Home Automation
    • Software Development
    • System :: Hardware

Project description

This package provides a Python module to control the GPIO on a Raspberry Pi.

Note that this module is unsuitable for real-time or timing critical applications. This is because you can not predict when Python will be busy garbage collecting. It also runs under the Linux kernel which is not suitable for real time applications — it is multitasking O/S and another process may be given priority over the CPU, causing jitter in your program. If you are after true real-time performance and predictability, buy yourself an Arduino http://www.arduino.cc !

Note that the current release does not support SPI, I2C, hardware PWM or serial functionality on the RPi yet. This is planned for the near future — watch this space! One-wire functionality is also planned.

Although hardware PWM is not available yet, software PWM is available to use on all channels.

Change Log

Better RPi board + peri_addr detection (issue 190 / 191)

Fix PyEval_InitThreads deprecation warning for Python 3.9 (issue 188)

Fix build using GCC 10 (issue 187)

Fix docstrings to not include licence

Remove Debian/Raspbian stretch packaging support

Use setuptools instead of distutils

Added detection of Zero 2 W

Tested and working with Python 2.7, 3.7, 3.8, 3.9, 3.10

Updated RPI_INFO to include RPi 4B

Fixed pull up/down for Pi4 (issue 168)

Fix spelling mistake in docstrings

Tested and working on Raspbian Buster + Python 3.8.0b2

Fix board detection for aarch64 (Issues 161 / 165)

Fix checking mmap return value in c_gpio.c (issue 166)

Fix exception on re-export of /sys/class/gpio/gpioNN

Event cleanup bug (issue 145)

Fix build warnings (Issue 146 — Dominik George)

test.py runs unchanged for both python 2+3

Soft PWM stops running fix (Issues 94, 111, 154)

Soft PWM segfault fix (Luke Allen pull request)

Fix code so it builds under PyPy (Gasper Zejn)

os.system breaks event detection — Matt Kimball (issue 127)

Rewrote Debian packaging mechanism

RPI_INFO reports Pi 3

Changed module layout — moved C components to RPi._GPIO

Update RPI_INFO to detect more board types

Issue 118 — add_event_detect sometimes gives runtime error with unpriv user

Issue 120 — setmode() remembers invalid mode

0.6.0a3

Now uses /dev/gpiomem if available to avoid being run as root

Fix warnings with pull up/down on pins 3/5

Correct base address on Pi 2 when devicetree is disabled

caddr_t error on compile (Issue 109)

Error on invalid parameters to setup() (issue 93)

Add timeout parameter to wait_for_edge() (issue 91)

Fix — pins > 26 missing when using BOARD mode

Raise exception when a mix of modes is used

GPIO.cleanaup() unsets the current pin mode

Issue 95 — support RPi 2 boards

Issue 97 — fixed docstring for setup()

Issue 87 — warn about pull up/down on i2c pins

Issue 86/75 — wait_for_edge() bugfix

Issue 84 — recognise RPi properly when using a custom kernel

Issue 90 — cleanup() on a list/tuple of channels

Allow lists/tuples of channels in GPIO.setup()

GPIO.output() now allows lists/tuples of values

GPIO.wait_for_edge() bug fixes (issue 78)

Issue 67 — speed up repeated calls to GPIO.wait_for_event()

Added bouncetime keyword to GPIO.wait_for_event()

Added extra edge/interrupt unit tests

GPIO.wait_for_event() can now be mixed with GPIO.add_event_detect()

Improved cleanups of events

Issue 69 resolved

Issue 68 — support for RPi Model B+

Issue 52 — ‘unallocate’ a channel

Issue 35 — use switchbounce with GPIO.event_detected()

Refactored events code

Rewrote tests to use unittest mechanism and new test board with loopbacks

Fixed adding events after a GPIO.cleanup()

Issue 64 — misleading /dev/mem permissions error

Issue 59 — name collision with PWM constant and class

Changed release status (from alpha to full release)

Warn when GPIO.cleanup() used with nothing to clean up (issue 44)

Avoid collisions in constants (e.g. HIGH / RISING / PUD_DOWN)

Accept BOARD numbers in gpio_function (issue 34)

More return values for gpio_function (INPUT, OUTPUT, SPI, I2C, PWM, SERIAL, UNKNOWN)

Tidy up docstrings

Fix /dev/mem access error with gpio_function

Allow pydoc for non-root users (issue 27)

Fix add_event_detect error when run as daemon (issue 32)

Simplified exception types

Changed from distribute to pip

Added software PWM (experimental)

Added switch bounce handling to event callbacks

Added channel number parameter to event callbacks (issue 31)

Internal refactoring and code tidy up

Fixed callbacks for multiple GPIOs (issue 28)

Added new edge detection events (interrupt handling) — Added add_event_detect() — Added remove_event_detect() — Added add_event_callback() — Added wait_for_edge()

Removed old experimental event functions — Removed set_rising_event() — Removed set_falling_event() — Removed set_high_event() — Removed set_low_event()

Changed event_detected() for new edge detection functionality

input() now returns 0/LOW == False or 1/HIGH == True (integers) instead of False or True (booleans).

Fix error on repeated import (issue 3)

Improved docstrings of functions

Fix for installing on Arch Linux (Python 3.3) (issue 20)

Initial value when setting a channel as an output (issue 19)

Added support for Revision 2 boards

Added cleanup() function and removed automatic reset functionality on program exit

Converted debian to armhf

Fixed critical bug with swapped high/low state on outputs

Added pull-up / pull-down setup functionality for inputs

Rewritten as a C extension

Now uses /dev/mem and SoC registers instead of /sys/class/gpio

Make call to GPIO.setmode() mandatory

Added GPIO.HIGH and GPIO.LOW constants

Changed status from alpha to beta

Added setmode() to be able to use BCM GPIO 00.nn channel numbers

Renamed InvalidPinException to InvalidChannelException

Fixed direction bug

Added MANIFEST.in (to include missing file)

Changed GPIO channel number to pin number

Tested and working!

Added GPIO table

Fixed a few critical bugs

Still completely untested!

Internal refactoring. Still completely untested!

First version. Completely untested until I can get hold of a Raspberry Pi!

Project details

Statistics

View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery

License: MIT License (MIT)

Источник

Adblock
detector