Управление контактами ввода/вывода (GPIO) Raspberry Pi через Bluetooth и Android приложение


Плата Raspberry Pi находит широкое применение в различных проектах, относящихся к тематике интернета вещей (Internet of Things, IoT), во многом благодаря тому что у нее есть встроенные Wi-Fi и Bluetooth, в настоящее время являющиеся самыми популярными протоколами беспроводной связи. В данной статье мы рассмотрим управление контактами ввода/вывода (GPIO) платы Raspberry Pi через Bluetooth и Android приложение. Ранее на нашем сайте мы рассматривали аналогичный проект для платы Arduino.

Внешний вид проекта управления контактами ввода/вывода (GPIO) Raspberry Pi через Bluetooth и Android приложение

В данном проекте мы использовали плату 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:

Затем нам необходимо установить последние обновления для работы с Bluetooth:

После этого необходимо перезагрузить плату Raspberry Pi:

BlueZ – это проект с открытым исходным кодом и официальный стек протоколов Bluetooth для операционной системы Linux. Он поддерживает все ядро протоколов Bluetooth и в настоящее время является официальной частью Linux Kernel (ядра Linux).

Blueman обеспечивает интерфейс рабочего стола для управления Bluetooth устройствами.

Также нам потребуется библиотека Python для работы с протоколом Bluetooth чтобы мы могли в программе передавать и принимать данные через RFCOMM:

Также необходимо установить библиотеку обеспечения работы с контактами ввода/вывода (GPIO) в Raspberry Pi:

На этом установка всех необходимых пакетов для работы с Bluetooth в Raspberry Pi будет закончена.

Соединение устройств по Bluetooth

В данном проекте мы будем соединять по Bluetooth смартфон на операционной системе Android с платой Raspberry Pi. Ранее мы уже установили в Raspberry Pi стек протоколов BlueZ, который обеспечивает нам утилиту с командной строкой под названием “bluetoothctl”, с помощью которой можно управлять Bluetooth устройствами. Но перед этим убедитесь в том, что ваш USB Bluetooth адаптер подключен к плате Raspberry Pi (для плат, у которых нет встроенного Bluetooth) и проверьте определяется он системой или нет, с помощью команды:

Проверка подключения USB Bluetooth адаптера к плате Raspberry Pi

После этого запустите утилиту bluetoothctl с помощью команды:

Вы можете проверить все команды утилиты bluetoothctl, введя команду  ‘help’. Поэтому вы можете ввести следующие команды в указанном порядке:

Когда вы введете последнюю команду в этом списке (“scan on”), вы в списке устройств должны увидеть смартфон. Убедитесь при этом в том, что Bluetooth на вашем устройстве включен и он видим другим устройствам. После этого скопируйте MAC адрес вашего устройства и подключите его с помощью следующей команды:

После этого вам нужно будет ввести пароль или Pin в вашей терминальной консоли и нажать enter. Затем необходимо ввести этот же самый пароль в вашем смартфоне. После этого ваш смартфон и плата Raspberry Pi будут соединены по протоколу Bluetooth. Более подробно весь этот процесс можно посмотреть на видео, приведенном в конце статьи.

Запрос пароля для подключения Raspberry Pi к смартфону по Bluetooth

Также вместо описанных действий вы можете использовать интерфейс рабочего стола (Desktop interface) чтобы подключить вашу плату Raspberry Pi к смартфону по Bluetooth. После установки Blueman (мы рассмотрели это ранее в статье) вы увидите иконку Bluetooth на рабочем столе вашей Raspberry Pi OS как показано на следующем рисунке. Таким образом, вы можете использовать Blueman для соединения по Bluetooth вашего смартфона и платы Raspberry Pi.

Значок Blueman в Raspberry Pi OS

Схема проекта

Схема проекта для управления контактами ввода/вывода (GPIO) Raspberry Pi через Bluetooth представлена на следующем рисунке.

Схема проекта для управления контактами ввода/вывода (GPIO) Raspberry Pi через Bluetooth

Как видите, схема крайне проста – необходимо просто подключить светодиод к контакту PIN 40 (GPIO 21) платы Raspberry Pi через резистор 220 Ом.

Управление светодиодом с помощью Android приложения BlueTerm

Теперь, когда мы соединили по Bluetooth смартфон и плату Raspberry Pi, нам необходимо установить приложение для Android, которое будет взаимодействовать с Raspberry Pi через последовательный адаптер Bluetooth (Bluetooth Serial Adapter). Как говорилось ранее, протокол RFCOMM/SPP эмулирует последовательную связь через Bluetooth, поэтому мы установим Android приложение BlueTerm, которое поддерживает данный протокол.

Приложение BlueTerm в Playmarket

Также в этом проекте вы можете использовать любое другое приложение терминала Bluetooth, которое поддерживает связь через сокет RFCOMM.

После того как вы скачали и установили приложение BlueTerm, запустите на выполнение программу нашего проекта на Raspberry Pi (приведена в конце статьи) и соедините между собой по Bluetooth плату Raspberry Pi и приложение BlueTerm.

Процесс соединения по Bluetooth платы Raspberry Pi и приложения BlueTerm

После того, как соединение будет успешно установлено, вы увидите надпись connected:raspberrypi в правом верхнем углу приложения BlueTerm как показано на следующем рисунке.

Обмен данными по Bluetooth между платой Raspberry Pi и приложением BlueTerm Соединение по Bluetooth между платой Raspberry Pi и приложением BlueTerm установлено

Теперь вы можете вводить в приложении BlueTerm символы ‘1’ или ‘0’ чтобы, соответственно, включать (GPIO pin HIGH) или выключать (GPIO pin LOW) светодиод в схеме проекта. Для выхода из программы нажмите ‘q’. Также в этом проекте вы можете использовать голосовую клавиатуру от гугла (Google Voice Typing Keyboard) для управления контактами платы Raspberry Pi с помощью голоса.

Таким образом, мы рассмотрели, каким образом можно управлять контактами ввода/вывода (GPIO) платы Raspberry Pi через Bluetooth и Android приложение.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе нам необходимо подключить библиотеку для работы с сокетами Bluetooth, которая позволит управлять протоколом Bluetooth из программы на Python.

Далее идет фрагмент кода, ответственный за связь по протоколу Bluetooth.

В этом фрагменте кода мы использовали следующие команды:

  • server_socket=bluetooth.BluetoothSocket( bluetooth.RFCOMM ) – создание сокета для связи по Bluetooth RFCOMM;
  • server_socket.bind(("", port) – сервер "привязывает" скрипт хоста к порту;
  • server_socket.listen(1) – единовременно сервер будет принимать только одно соединение;
  • client_socket, address = server_socket.accept() – сервер принимает запрос клиентского соединения и ассоциирует mac адрес с адресом переменной, client_socket – это клиентский сокет;
  • data = client_socket.recv(1024) – принимаем данные через клиентский сокет client_socket и сохраняем их в переменной data. Единовременно можно принять максимум 1024 символа.

И, наконец, в конце программы закрываем клиентское и серверное соединение с помощью следующих команд:

Вы можете модифицировать данный проект, добавив в него, к примеру, реле, с помощью которых можно будет включать/выключать различные домашние устройства. Таким образом, вы можете реализовать проект автоматизации дома с управлением домашними устройствами по Bluetooth со смартфона.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
580 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован.