- Инсталиране на необходимите пакети за Bluetooth комуникация:
- Сдвояване на устройства с Raspberry Pi през Bluetooth:
- Избор на играчката:
- Електрическа схема и обяснение:
- Управление на автомобил от разстояние с Android App BlueTerm:
- Програмиране на Python:
Raspberry Pi е много популярен за IoT проекти поради безпроблемната си способност за безжична комуникация през интернет. Raspberry Pi 3 има вградени Wi-Fi и Bluetooth, а Bluetooth е много популярен протокол за безжична комуникация. Днес ще изградим автомобил с дистанционно управление с помощта на Raspberry Pi 3 и Bluetooth, тук ще използваме Smart Phone като дистанционно за управление на колата. Преди това сме създали този RC автомобил, използвайки Arduino.
Тук използваме Raspberry Pi 3, който има вграден Bluetooth, така че не е необходимо да използваме външен USB Bluetooth ключ. Тук използваме RFCOMM Bluetooth протокол за безжична комуникация.
Програмирането за 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 OS и да започнете с Raspberry Pi. Така че сега първо трябва да актуализираме Raspbian, като използваме командите по-долу:
sudo apt-get актуализация sudo apt-get надстройка
След това трябва да инсталираме няколко пакета, свързани с Bluetooth:
sudo apt-get инсталирате bluetooth blueman bluez
След това рестартирайте Raspberry Pi:
sudo рестартиране
BlueZ е проект с отворен код и официален стек протокол за Linux Bluetooth. Той поддържа всички основни Bluetooth протоколи и сега става част от официалното ядро на Linux.
Blueman предоставя настолен интерфейс за управление и контрол на Bluetooth устройствата.
И накрая, имаме нужда от библиотека на python за Bluetooth комуникация, за да можем да изпращаме и получаваме данни чрез RFCOMM, използвайки езика Python:
sudo apt-get инсталирайте python-bluetooth
Също така инсталирайте библиотеките за поддръжка на GPIO за Raspberry Pi:
sudo apt-get инсталирайте python-rpi.gpio
Сега приключихме с инсталирането на необходимите пакети за Bluetooth комуникация в Raspberry Pi.
Сдвояване на устройства с Raspberry Pi през Bluetooth:
Сдвояването на Bluetooth устройства, като мобилен телефон, с Raspberry Pi е много лесно. Тук сме сдвоили нашия Android Smart телефон с Raspberry Pi. Преди това сме инсталирали BlueZ в Pi, който предоставя помощна програма за команден ред, наречена „bluetoothctl“, за да управлява нашите Bluetooth устройства.
Сега отворете помощната програма bluetoothctl чрез команда по-долу:
sudo bluetoothctl
Можете да проверите всички команди на помощната програма bluetoothctl , като напишете „помощ“ . Засега трябва да въведем команди отдолу в даден ред:
# включване # агент включен # откриваем на # по възможност при # сканиране включен
След последната команда „сканиране включено“, ще видите вашето Bluetooth устройство (мобилен телефон) в списъка. Уверете се, че мобилният ви телефон е включен и видим от близките устройства. След това копирайте MAC адреса на вашето устройство и го сдвоете с помощта на дадена команда:
двойка
След това ще бъдете подканени да въведете парола или ПИН във вашата терминална конзола, след това въведете парола там и натиснете enter. След това въведете същата парола в мобилния си телефон, когато бъдете подканени и вече сте успешно сдвоени с Raspberry Pi. Обяснихме и целия този процес във видеото, дадено в предишния урок за управление на GPIO. Ето директната връзка към YouTube.
Както беше казано по-рано, можете също да използвате Desktop интерфейс, за да сдвоите мобилния телефон. След като инсталирате Blueman, ще видите икона на Bluetooth в дясната страна на работния плот на Raspberry Pi, както е показано по-долу, с помощта на която можете лесно да направите сдвояването.
Избор на играчката:
В този проект за Raspberry Pi Controlled Car използвахме автомобил играчка за демонстрация. Тук избрахме RF играчка с движеща се функция за управление наляво-надясно. След закупуването на тази кола сме заменили нейната RF верига с нашата схема на Raspberry. Тази кола има два постояннотокови мотора, единият за завъртане на две предни колела, а другият за завъртане на две задни колела. Моторът отпред се използва за насочване на автомобила, означава завъртане наляво или надясно (като реална функция за управление на автомобила). А двигателят отзад се използва за шофиране на колата в посока напред и назад. Bluetooth на Raspberry се използва за безжично получаване на команди от Android телефон за управление на колата.
Можете да използвате всяка кола с играчки, която има два постояннотокови мотора, за да въртите предни и задни колела.
Електрическа схема и обяснение:
В този автомобил с дистанционно управление трябва да свържем Raspberry Pi само с два двигателя с помощта на модул L293D. За захранването на Raspberry Pi и автомобила използвахме мобилна банка за захранване. Мобилната банка за захранване е достатъчна за захранване на Raspberry Pi и двигателите на автомобила, но когато поставим power bank над колата, поради голямото тегло на мобилната power bank колата няма да може да се движи правилно. Затова препоръчваме да използвате захранването с ниско тегло или литиевите батерии за захранване на системата. Всички връзки са показани на схемата по-долу. Също така проверете нашия раздел „Роботика“, за да научите повече за управлението на двигатели с различни технологии.
Забележка: не поставяйте повече от 5v на малиновия пи.
Тази схема е направена на Perf Board за този проект, така че да има по-малко тегло върху колата.
Управление на автомобил от разстояние с Android App BlueTerm:
След като настроим всички неща и успешно опитаме да съпоставим смартфона с Bluetooth, трябва да инсталираме приложение за Android за комуникация с Raspberry Pi с помощта на Bluetooth сериен адаптер, за да можем да контролираме GPIO пиновете на Raspberry Pi. Както беше казано по-рано, протоколът RFCOMM / SPP емулира серийна комуникация през Bluetooth, затова инсталирахме тук приложението BlueTerm, което поддържа този протокол.
Можете също така да използвате всяко друго приложение за Bluetooth терминал, което поддържа комуникация чрез RFCOMM сокет.
Сега, след като изтеглите и инсталирате на BlueTerm App, стартира по-долу дава Python програма от терминала и да свържете в двойка raspberrypi устройството от BlueTerm App в същото време.
След успешна връзка ще видите свързан: raspberrypi в горния десен ъгъл на приложението, както е показано по-долу:
Сега можете просто да въведете следните команди от приложението BlueTerm, за да накарате колата да се движи в желаната посока. Натиснете 'q', за да излезете от програмата. Можете да използвате клавиатурата за въвеждане на Google Voice, за да управлявате тази кола с помощта на вашия Voice. Проверете пълната демонстрация във видеото, дадено в края.
Команди:
F - Преместване напред
B - Преместване назад
S - Спри
L - Преместване напред наляво
R - Преместване надясно напред
A - Преместване назад наляво
P - Назад надясно
Q - Излезте
Програмиране на Python:
Програмата на Python за управление на Raspberry Pi GPIO с приложение за Android е много проста и разбираема. Само ние трябва да научим малко за кода, свързан с Bluetooth RFCOMM комуникацията. В противен случай това е същото като управление на всеки робот или кола, като направите щифта на двигателя висок или нисък. Пълната програма е дадена по-долу в раздела Код.
Първо, трябва да импортираме библиотеката на Bluetooth сокети, която ни позволява да контролираме Bluetooth с език Python; инсталирали сме библиотеката за същото в предишния раздел.
импортирайте Bluetooth
След това включихме още няколко заглавни файла и дефинирахме щифтове за двигатели, като ги поставихме по подразбиране.
импортиране на Bluetooth време за импортиране RPi.GPIO като 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 (("", port)) server_socket.listen (1) client_socket, address = server_socket.accept () print "Приета връзка от", адрес
Тук можем да ги разберем ред по ред:
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 е сокетът на клиента
След това създадохме някои функции, които отговарят за движението на автомобила в желаната посока: 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 ()