Remote control GPIO on a Raspberry Pi with GPIO Zero
GPIO Zero is a very powerful tool, and now you can use it when you’re not even on the Raspberry Pi! Using the new Remote control GPIO feature.
The MagPi issue 122 out now
Discover retro gaming with Raspberry Pi Pico W in the latest edition of The MagPi magazine. Hack hardware, build handheld consoles and 1980s-style computers.
The GPIO Zero Python library not only makes programming simple electronics easier; it comes with some advanced features.
These offer seamless interfacing between different devices, while helping you progress along the Python learning curve. One useful thing about GPIO Zero is that you can choose which low-level pin library to use, allowing you to take advantage of the power of another library as required, without having to rewrite your code. By default, Ben Croston’s RPi.GPIO library is used, and that’s fine for most purposes.
One of the supported alternative libraries is Joan 2937’s pigpio library, which supports remote GPIO. This allows you to remotely control the GPIO pins of a Pi over a network. You can control the pins from a PC or Mac, or from another Pi, and even use the GPIOs of multiple Pis within the same script.
This month, GPIO Zero v1.4 was released, stabilising the remote pins syntax. This guide is written for v1.4 and will not work on earlier versions. Make sure you upgrade before you start: open a Terminal and enter:
- This tutorial first appeared in The MagPi issue 60 and was written by Ben Nuttal. Ben is Raspberry Pi’s Community Manager, creator of the GPIO Zero library, Jam master, and the Foundation’s resident Python expert!
Remote control GPIO: How to use GPIO Zero
A simple GPIO Zero Python script looks like this:
Running this script on a Pi will work as expected: a button connected to pin 2 (BCM numbering) will light an LED connected to pin 17 when pressed. However, when configured correctly, running this same script can control the pins of a Pi over the network.
Remote control GPIO: Pin factories
The way GPIO Zero wraps around low-level pin libraries is by providing a pin factory. By default, an RPi.GPIO-based factory is used, and when you ask for a pin, the factory gives you a connection to it using the chosen pin library. A pigpio pin factory can be used on its own (simply use the pigpio library instead of RPi.GPIO), but if an IP address is provided too, this can be used to remotely control a Pi’s pins.
To run the above script (unchanged) on a remote Pi, the Pi needs to be configured to accept remote connections. This can be done using the Raspberry Pi configuration tool (via GUI or sudo raspi-config), by enabling Remote GPIO under Interfaces. Otherwise, the Pi needs to have the pigpio daemon running, by entering sudo pigpiod in a Terminal. Finally, look up the Pi’s IP address with hostname -I. Now return to the Pi you’re running the script from, and instead of running the code normally (like python3 led_button.py), set two environment variables in the same command, using the remote Pi’s IP address:
Now, when the script runs, the GPIO commands are executed on the remote Pi over the network.
An alternative to running a script from the command line is to set the environment variables before launching your Python editor. For example:
You can also export these variables in your .bashrc file. See magpi.cc/2qd2MEb for more information.
Hot-swapping pin factories
The previous example showed how to set the default pin factory. Unless otherwise specified, any GPIO devices created will be connected to pins created by this default pin factory. Alternatively, you can specify a pin factory (and with pigpio, an IP address) within the Python code. There are two options for doing this. You can create a pin factory instance, and pass that in as you create a new object, like so:
Alternatively, you can change the default pin factory in the middle of your script, like so:
Press the button on your Pi and watch the LED light up on the remote Pi. With no environment variables set, RPi.GPIO is used as the default pin factory. When the button is created, it uses RPi.GPIO to address a local pin. The default pin factory is replaced with pigpio, connecting to a particular IP address, and the LED is created on pin 17, which now refers to the remote Pi.
While this can be a confusing concept, it’s quite simple once you get used to the idea, and it could be very useful in many projects. You can even run this code on a PC (not a Raspberry Pi) and use it to control a Pi on the network. Any platform (Windows, Mac or Linux) will work, as long as you have Python, pip, GPIO Zero, and pigpio installed. For full instructions, head over to the Remote GPIO documentation.
Security in Remote control GPIO Zero
It’s worth pointing out that allowing remote GPIO connections over the network can be risky. You probably shouldn’t do this in a real project on a network with other users. However, you can take precautions to make it more secure. An easy method is to only allow remote connections from a particular IP address when launching the pigpio daemon:
Learn more about GPIO Zero
GPIO Zero is an amazing tool for creating simple electronics and making your projects just that little bit easier. Check out our Essentials book, Simple Electronics with GPIO Zero.
Russell runs Raspberry Pi Press, which includes The MagPi, Wireframe, and HackSpace magazine, and book projects. He’s a massive sci-fi bore.
4. Configuring Remote GPIO¶
GPIO Zero supports a number of different pin implementations (low-level pin libraries which deal with the GPIO pins directly). By default, the RPi.GPIO library is used (assuming it is installed on your system), but you can optionally specify one to use. For more information, see the API — Pins documentation page.
One of the pin libraries supported, pigpio, provides the ability to control GPIO pins remotely over the network, which means you can use GPIO Zero to control devices connected to a Raspberry Pi on the network. You can do this from another Raspberry Pi, or even from a PC.
See the Remote GPIO Recipes page for examples on how remote pins can be used.
4.1. Preparing the Raspberry Pi¶
If you’re using Raspberry Pi OS (desktop — not Lite) then you have everything you need to use the remote GPIO feature. If you’re using Raspberry Pi OS Lite, or another distribution, you’ll need to install pigpio:
Alternatively, pigpio is available from abyz.me.uk.
You’ll need to enable remote connections, and launch the pigpio daemon on the Raspberry Pi.
4.1.1. Enable remote connections¶
On the Raspberry Pi OS desktop image, you can enable Remote GPIO in the Raspberry Pi configuration tool:
Alternatively, enter sudo raspi-config on the command line, and enable Remote GPIO. This is functionally equivalent to the desktop method.
This will allow remote connections (until disabled) when the pigpio daemon is launched using systemctl (see below). It will also launch the pigpio daemon for the current session. Therefore, nothing further is required for the current session, but after a reboot, a systemctl command will be required.
Управление контактами ввода/вывода (GPIO) Raspberry Pi через Bluetooth и Android приложение
Плата Raspberry Pi находит широкое применение в различных проектах, относящихся к тематике интернета вещей (Internet of Things, IoT), во многом благодаря тому что у нее есть встроенные Wi-Fi и Bluetooth, в настоящее время являющиеся самыми популярными протоколами беспроводной связи. В данной статье мы рассмотрим управление контактами ввода/вывода (GPIO) платы Raspberry Pi через Bluetooth и Android приложение. Ранее на нашем сайте мы рассматривали аналогичный проект для платы Arduino.
В данном проекте мы использовали плату Raspberry 2 Pi Model B, у которой нет встроенного модуля Bluetooth, поэтому для использования в ней возможностей данного протокола мы использовали простой USB Bluetooth адаптера. Для демонстрации возможностей данного проекта мы использовали светодиод, подключенный к плате Raspberry Pi через резистор 220 Ом. В данном проекте для беспроводной связи между смартфоном и платой Raspberry Pi мы использовали протокол RFCOMM Bluetooth.
Программирование Bluetooth в языке Python основано на концепции программирования сокетов (socket programming) и взаимодействие между Bluetooth устройствами в данном случае осуществляется через RFCOMM сокет. RFCOMM (Radio Frequency Communication) представляет собой Bluetooth протокол, который обеспечивает эмуляцию последовательного порта RS-232 и также известен под именем Serial Port Emulation. Профиль последовательного порта Bluetooth основан на этом протоколе. RFCOMM является достаточно популярным приложением Bluetooth поскольку он обеспечивается хорошей поддержкой и имеет свободно доступные инструменты API
Для работы с данным протоколом в нашем проекте мы будем использовать Bluetooth модуль HC-06, на нашем сайте вы можете посмотреть все проекты, в которых он был использован.
Установка необходимых пакетов для работы с Bluetooth в Raspberry Pi
Первым делом нам необходимо установить последние обновления для операционной системы Raspberry Pi OS:
Raspberry Pi
Как настроить управление GPIO через интернет: руководство для Raspberry Pi
Raspberry Pi обладает огромным потенциалом. Одна из доступных и удобных функций – управление электроникой с помощью интернета. Вы без труда активируете опцию при помощи подробного руководства. В результате у вас получится то, что изображено на рисунке ниже:
Алгоритм действий подразумевает работу со следующим софтом:
1. Серверная программа для чтения переменных;
2. Базы данных MySQL для хранения информации;
3. Веб-страница Apache2 для веб-контроля.
Предварительная настройка
Чтобы управлять электронными устройствами через интернет, вы должны заранее настроить следующие элементы:
• Веб-сервер Apache;
• PHP5;
• Сервер MySQL;
• phpMyAdmin.
Root аккаунт
Если вы создали аккаунт ранее, переходите к третьему шагу. Если еще нет – действуйте по инструкции.
При помощи специальной команды зайдите в Raspberry Pi:
Придумайте и дважды напишите пароль от аккаунта. Закройте SSH сессии. После перезапуска компьютера зайдите в root аккаунт.
Настройка MySQL и phpMyAdmin
Третий шаг посвящен настройке баз данных. Зайдите в аккаунт Вашей базы MySQL через панель управления phpMyAdmin. Найдите в верхнем меню опцию «Import», нажмите соответствующую кнопку.
Выберите пункт «File to Import», чтобы выбрать нужный файл, нажмите «Choose File». Вам нужно загрузить то, что скачали по ссылке выше. Теперь перейдите в самый низ страницы, кликните по кнопке «Go». Только так можно создать таблицы.
Используйте phpMyAdmin, чтобы в базах данных появился новый пользователь. Алгоритм действий следующий:
• наверху страницы найдите «Users», кликните по кнопке;
• Откройте ссылку «Add User»;
• Укажите имя пользователя в строке «User name» (это может быть, например, «gpio»);
• Найдите строку «Host» и впишите слово «localhost»;
• Заполните поля с паролями (не используйте спецсимволы, переносы, пробелы);
• Больше ничего не меняйте – нажмите «Add User» (кнопка находится снизу в правом углу).
Теперь новый пользователь должен получить привилегии. Как это делается?
• Откройте вкладку «Users», найдите в списке нового пользователя (ищите строку в таблице «Users Overview»);
• Кликните по ссылке «Edit Privileges» около логина;
• Пролистайте страницу вниз, пока не наткнетесь на словосочетание «Database-specific privileges» — найдите «gpio», кликните «Go»;
• Еще раз нажмите «Go», после того как установите все флажки (кнопка находится в левом нижнем углу).
Проверяем значения MySQL
Четвертый шаг связан с проверкой значений, который находятся в базе данных на компьютере. Нужно настроить некоторые параметры. Скачайте скрипт и выполните следующие команды (после первого запроса нажмите Return/Enter, после второго – тоже):
После скачивания скрипта напишите еще две команды (после каждой нажимайте Return либо Enter):
Теперь можно поменять сценарий.
Корректировки требуют переменные, которые указаны в самом начале файла:
Вместо имени пользователя и пароля укажите данные, созданные вами в phpMyAdmin.
После внесения изменений нажмите комбинацию Ctrl+X. Удерживайте Ctrl и добавьте к клавише Y. Теперь нажмите Enter либо Return.
Изменение параметров веб-страницы
Это последний шаг перед тестовым запуском приложения. Зайдите в аккаунт (если вы не залогинены, напишите sudo –i). Пришло время для команд (после каждой жмите Enter/Return):
После завершения скачивания введите следующие значения (не забывайте нажимать Return либо Enter после каждой строчки):
Не спешите использовать файл. Для начала скорректируйте переменные. Введите nano /var/www/control.php, нажмите Enter/Return. Внесите изменения в следующие строчки:
Откройте браузер, загрузите страницу control.php (в начале адреса указывается название хоста). Чтобы залогиниться на сайте, используйте стандартный логин (admin) и пароль (gpio).
Чтобы обезопасить себя, измените пароль. Вверху страницы найдите строку «Change Password» и перейдите по ссылке. Укажите новые данные для входа.