Управление контактами ввода/вывода (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

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *