- Установка необходимых пакетов для связи Bluetooth:
- Сопряжение устройств с Raspberry Pi через Bluetooth:
- Выбор игрушечной машинки:
- Принципиальная схема и пояснения:
- Удаленное управление автомобилем с помощью Android-приложения BlueTerm:
- Программирование на Python:
Raspberry Pi очень популярен для проектов IoT из-за возможности беспрепятственной беспроводной связи через Интернет. Raspberry Pi 3 имеет встроенный Wi-Fi и Bluetooth, а Bluetooth - очень популярный протокол беспроводной связи. Сегодня мы собираемся построить автомобиль с дистанционным управлением, используя Raspberry Pi 3 и Bluetooth, здесь мы будем использовать смартфон в качестве пульта дистанционного управления для управления автомобилем. Ранее мы создали эту радиоуправляемую машину с использованием Arduino.
Здесь мы используем Raspberry Pi 3 со встроенным Bluetooth, поэтому нам не нужно использовать внешний USB-ключ Bluetooth. Здесь мы используем протокол Bluetooth RFCOMM для беспроводной связи.
Программирование для Bluetooth в Python следует модели программирования сокетов, а связь между устройствами Bluetooth осуществляется через сокет RFCOMM. RFCOMM (радиочастотная связь) - это протокол Bluetooth, который обеспечивает эмуляцию последовательных портов RS-232 и также называется эмуляцией последовательного порта. Профиль последовательного порта Bluetooth основан на этом протоколе. RFCOMM очень популярен в приложениях Bluetooth из-за его широкой поддержки и общедоступного API. Он привязан к протоколу L2CAP.
Если у вас есть Raspberry Pi 2, вам нужно либо использовать внешний Bluetooth-ключ, либо Bluetooth-модуль HC-06. Ознакомьтесь с нашими предыдущими проектами по использованию этих внешних устройств Bluetooth: Управление Raspberry Pi GPIO с помощью приложения Android через Bluetooth и бытовая техника, управляемая Raspberry Pi.
Установка необходимых пакетов для связи Bluetooth:
Перед началом нам необходимо установить программное обеспечение для настройки связи Bluetooth в Raspberry Pi. У вас должна быть установлена карта памяти Raspbian Jessie, готовая к работе с Raspberry Pi. Прочтите эту статью, чтобы установить ОС Raspbian и начать работу с Raspberry Pi. Итак, теперь нам сначала нужно обновить Raspbian, используя следующие команды:
sudo apt-get update sudo apt-get upgrade
Затем нам нужно установить несколько пакетов, связанных с Bluetooth:
sudo apt-get установить bluetooth blueman bluez
Затем перезагрузите Raspberry Pi:
перезагрузка sudo
BlueZ - это проект с открытым исходным кодом и официальный стек протоколов Linux Bluetooth. Он поддерживает все основные протоколы Bluetooth и теперь стал частью официального ядра Linux.
Blueman предоставляет интерфейс рабочего стола для управления устройствами Bluetooth.
Наконец, нам нужна библиотека Python для связи Bluetooth, чтобы мы могли отправлять и получать данные через RFCOMM с использованием языка Python:
sudo apt-get install python-bluetooth
Также установите библиотеки поддержки GPIO для Raspberry Pi:
sudo apt-get install python-rpi.gpio
Теперь мы закончили установку необходимых пакетов для связи Bluetooth в Raspberry Pi.
Сопряжение устройств с Raspberry Pi через Bluetooth:
Подключить устройства Bluetooth, например мобильный телефон, к Raspberry Pi очень просто. Здесь мы соединили наш Android-смартфон с Raspberry Pi. Ранее мы установили BlueZ в Pi, который предоставляет утилиту командной строки под названием «bluetoothctl» для управления нашими устройствами Bluetooth.
Теперь откройте утилиту bluetoothctl с помощью следующей команды:
sudo bluetoothctl
Вы можете проверить все команды утилиты bluetoothctl , набрав «help» . На данный момент нам нужно ввести следующие команды в указанном порядке:
# включение # агент включен # обнаружение при # возможность подключения # сканирование при
После последней команды «сканирование включить» вы увидите свое устройство Bluetooth (мобильный телефон) в списке. Убедитесь, что на вашем мобильном телефоне включен Bluetooth и его видят находящиеся поблизости устройства. Затем скопируйте MAC-адрес вашего устройства и выполните сопряжение с помощью данной команды:
пара
Затем вам будет предложено ввести пароль или PIN-код в консоли терминала, затем введите пароль и нажмите клавишу ВВОД. Затем введите тот же код доступа в свой мобильный телефон, когда будет предложено, и теперь вы успешно подключены к Raspberry Pi. Мы также объяснили весь этот процесс в видео, приведенном в предыдущем руководстве по управлению GPIO. Вот прямая ссылка на YouTube.
Как было сказано ранее, вы также можете использовать интерфейс рабочего стола для сопряжения мобильного телефона. После установки Blueman вы увидите значок Bluetooth в правой части рабочего стола Raspberry Pi, как показано ниже, с помощью которого вы можете легко выполнить сопряжение.
Выбор игрушечной машинки:
В этом проекте Raspberry Pi Controlled Car мы использовали игрушечную машинку для демонстрации. Здесь мы выбрали игрушечный автомобиль RF с функцией поворота влево-вправо. После покупки этого автомобиля мы заменили его ВЧ-схему на нашу Raspberry-схему. В этом автомобиле есть два двигателя постоянного тока, один для вращения двух передних колес, а другой - для вращения двух задних колес. Передний боковой двигатель используется для направления автомобиля, поворачивая влево или вправо (как настоящая функция рулевого управления автомобиля). А двигатель задней стороны используется для движения автомобиля вперед и назад. Bluetooth Raspberry используется для беспроводного получения команд с телефона Android для управления автомобилем.
Вы можете использовать любую игрушечную машинку с двумя двигателями постоянного тока для вращения передних и задних колес.
Принципиальная схема и пояснения:
В этом автомобиле с дистанционным управлением нам нужно только подключить Raspberry Pi с двумя двигателями с помощью модуля L293D. Для питания Raspberry Pi и автомобиля мы использовали мобильный блок питания. Мобильного блока питания достаточно для питания Raspberry Pi и двигателей автомобиля, но если мы поместим блок питания над автомобилем, то из-за большого веса мобильного блока питания автомобиль не сможет нормально двигаться. Поэтому мы рекомендуем использовать для питания системы малый блок питания или литиевые батареи. Все соединения показаны на принципиальной схеме ниже. Также посетите наш раздел Робототехника, чтобы узнать больше об управлении двигателями с помощью различных технологий.
Примечание: не подключайте raspberry pi более 5В.
Эта схема была сделана на Perf Board для этого проекта, чтобы уменьшить вес автомобиля.
Удаленное управление автомобилем с помощью Android-приложения BlueTerm:
Теперь, после настройки всех вещей и успешной попытки подключения смартфона через Bluetooth, нам нужно установить приложение Android для связи с Raspberry Pi с помощью последовательного адаптера Bluetooth, чтобы мы могли управлять контактами GPIO Raspberry Pi. Как было сказано ранее, протокол RFCOMM / SPP имитирует последовательную связь через Bluetooth, поэтому мы установили здесь приложение BlueTerm, которое поддерживает этот протокол.
Вы также можете использовать любое другое приложение Bluetooth Terminal, которое поддерживает связь через разъем RFCOMM.
Теперь, после загрузки и установки приложения BlueTerm, запустите указанную ниже программу Python с терминала и одновременно подключите сопряженное устройство raspberrypi из приложения BlueTerm.
После успешного подключения вы увидите connected: raspberrypi в правом верхнем углу приложения, как показано ниже:
Теперь вы можете просто ввести следующие команды из приложения BlueTerm, чтобы машина двигалась в нужном направлении. Нажмите «q», чтобы выйти из программы. Вы можете использовать клавиатуру Google Voice Typing для управления автомобилем с помощью голоса. Ознакомьтесь с полной демонстрацией в видео, приведенном в конце.
Команды:
F - движение вперед
B - движение назад
S - Стоп
L - движение вперед влево
R - Вперед Правое движение
A - движение назад влево
P - назад вправо
Q - Выйти
Программирование на Python:
Программа Python для управления GPIO Raspberry Pi с помощью приложения для Android очень проста и не требует пояснений. Только нам нужно немного узнать о коде, относящемся к связи Bluetooth RFCOMM. В остальном это то же самое, что управлять любым роботом или автомобилем, делая вывод двигателя высоким или низким. Полная программа приведена ниже в разделе «Код».
Во-первых, нам нужно импортировать библиотеку сокетов Bluetooth, которая позволяет нам управлять Bluetooth с помощью языка Python; мы установили библиотеку для того же самого в предыдущем разделе.
импортировать Bluetooth
Затем мы включили еще несколько файлов заголовков и определили контакты для двигателей, установив для них низкий уровень по умолчанию.
import bluetooth import time import RPi.GPIO as GPIO m11 = 18 m12 = 23 m21 = 24 m22 = 25 GPIO.setwarnings (False) GPIO.setmode (GPIO.BCM) GPIO.setup (m11, GPIO.OUT) GPIO.setup (m12, GPIO.OUT) GPIO.setup (m21, GPIO.OUT) GPIO.setup (m22, GPIO.OUT) GPIO.output (m11, 0) GPIO.output (m12, 0) GPIO.output (m21, 0) GPIO.output (m22, 0)
Ниже приведен код, отвечающий за связь по Bluetooth:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM) port = 1 server_socket.bind (("", порт)) server_socket.listen (1) client_socket, address = server_socket.accept () print "Accepted connection from", адрес
Здесь мы можем понять их построчно:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM): создание сокета для связи Bluetooth RFCOMM.
server_socket.bind (("", порт): - Сервер связывает скрипт на хосте '' с портом.
server_socket.listen (1): сервер прослушивает одно соединение за раз.
client_socket, address = server_socket.accept (): сервер принимает запрос на соединение от клиента и назначает MAC-адрес переменной address, client_socket - это клиентский сокет
После этого мы создали несколько функций, которые отвечают за движение машины в желаемом направлении: def left_side_forward (), def right_side_forward (), def forward (), def left_side_reverse (), def right_side_reverse (), def reverse () def stop (). Эти функции будут вызваны соответственно, когда мы нажмем L, R, F, A, P, B, S в приложении Mobile blueTerm, и машина будет двигаться соответственно.
data = "" while 1: data = client_socket.recv (1024) print "Получено:% s"% data if (data == "F"): forward () elif (data == "L"): left_side_forward () elif (data == "R"): right_side_forward () elif (data == "B"): reverse () elif (data == "A"): left_side_reverse () elif (data == "P"): right_side_reverse () elif data == "S": stop () elif (data == "Q"): print ("Quit") break client_socket.close () server_socket.close ()
data = client_socket.recv (1024): получить данные через клиентский сокет client_socket и назначить их переменной data. Одновременно можно получить не более 1024 символов.
Наконец, после всего программирования, закройте соединение клиента и сервера, используя приведенный ниже код:
client_socket.close () server_socket.close ()