- Встановлення необхідних пакетів для зв'язку Bluetooth:
- Сполучення пристроїв з Raspberry Pi через Bluetooth:
- Вибір іграшкового автомобіля:
- Електрична схема та пояснення:
- Дистанційне керування автомобілем за допомогою програми для Android BlueTerm:
- Програмування на Python:
Raspberry Pi дуже популярний для проектів IoT завдяки своїм бездоганним можливостям бездротового зв'язку через Інтернет. Raspberry Pi 3 має вбудовані Wi-Fi та Bluetooth, а Bluetooth є дуже популярним протоколом бездротового зв'язку. Сьогодні ми збираємося побудувати автомобіль з дистанційним управлінням за допомогою Raspberry Pi 3 і Bluetooth, тут ми будемо використовувати смартфон як пульт для управління автомобілем. Раніше ми створили цей 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 та розпочати роботу з Raspberry Pi. Отже, спочатку нам потрібно оновити Raspbian, використовуючи команди нижче:
sudo apt-get update оновлення sudo apt-get
Тоді нам потрібно встановити кілька пакетів, пов’язаних з Bluetooth:
sudo apt-get встановити bluetooth blueman bluez - -
Потім перезавантажте Raspberry Pi:
sudo reboot
BlueZ - це проект із відкритим кодом та офіційний стек протоколів Bluetooth 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 з Raspberry Pi. Раніше ми встановили BlueZ у Pi, яка надає утиліту командного рядка під назвою „bluetoothctl” для управління нашими пристроями Bluetooth.
Тепер відкрийте утиліту bluetoothctl за командою нижче:
sudo bluetoothctl
Ви можете перевірити всі команди утиліти bluetoothctl , набравши «довідка» . Наразі нам потрібно ввести нижче команди в заданому порядку:
# увімкнути # агент увімкнути # виявити на # зникне при # сканування увімкнено
Після останньої команди “сканувати увімкнено”, ви побачите у списку свій пристрій Bluetooth (мобільний телефон). Переконайтеся, що на вашому мобільному телефоні ввімкнено Bluetooth і його бачать прилеглі пристрої. Потім скопіюйте MAC-адресу вашого пристрою та з'єднайте її за допомогою даної команди:
пара
Потім вам буде запропоновано ввести пароль або PIN-код на консолі терміналу, потім введіть туди пароль і натисніть клавішу Enter. Потім введіть той самий пароль у своєму мобільному телефоні, коли вам буде запропоновано, і ви успішно з'єднаєтеся з Raspberry Pi. Ми також пояснили весь цей процес у відео, поданому в попередньому підручнику з управління GPIO. Ось пряме посилання на YouTube.
Як було сказано раніше, ви також можете використовувати інтерфейс робочого столу для з'єднання мобільного телефону. Після встановлення Blueman ви побачите піктограму Bluetooth у правій частині робочого столу Raspberry Pi, як показано нижче, за допомогою якої ви можете легко здійснити сполучення.
Вибір іграшкового автомобіля:
У цьому проекті Raspberry Pi Controlled Car ми використовували іграшковий автомобіль для демонстрації. Тут ми вибрали RF- іграшковий автомобіль з рухомою функцією рульового управління вліво-вправо. Після покупки цього автомобіля ми замінили його радіочастотну схему на нашу схему Raspberry. Цей автомобіль має два двигуни постійного струму, один для обертання двох передніх коліс, а інший - для обертання двох задніх коліс. Передній боковий двигун використовується для спрямування автомобіля, означає поворот вліво або вправо (як справжнє кермове управління автомобіля). А задній боковий двигун використовується для руху автомобіля вперед і назад. Bluetooth з Raspberry використовується для бездротового отримання команди від телефону Android для управління автомобілем.
Ви можете використовувати будь-яку іграшкову машину, яка має два двигуни постійного струму, щоб обертати передні та задні колеса.
Електрична схема та пояснення:
У цьому автомобілі з дистанційним управлінням нам потрібно лише підключити Raspberry Pi з двома двигунами за допомогою модуля L293D. Для живлення Raspberry Pi та автомобіля ми використовували мобільний банк живлення. Мобільного енергетичного банку достатньо для живлення Raspberry Pi та двигунів автомобіля, але коли ми ставимо енергетичний банк на автомобіль, то через велику вагу мобільного енергобанку автомобіль не зможе рухатися належним чином. Тому ми рекомендуємо використовувати для живлення системи блок живлення із низькою вагою або літієві батареї. Всі з'єднання показані на схемі нижче. Також перегляньте наш розділ “Робототехніка”, щоб дізнатися більше про управління двигунами за допомогою різних технологій.
Примітка: не ставте більше 5v на малиновий пі.
Цей ланцюг був зроблений на Perf Board для цього проекту, так що на машині менше ваги.
Дистанційне керування автомобілем за допомогою програми для Android BlueTerm:
Тепер, налаштувавши всі речі та спробувавши розібрати смарт-телефон за допомогою Bluetooth, нам потрібно встановити додаток Android для спілкування з Raspberry Pi за допомогою послідовного адаптера Bluetooth, щоб ми могли контролювати GPIO-шпильки Raspberry Pi. Як вже говорилося раніше, протокол RFCOMM / SPP емулює послідовний зв'язок через Bluetooth, тому ми встановили тут додаток BlueTerm, який підтримує цей протокол.
Ви також можете використовувати будь-яку іншу програму терміналу Bluetooth, яка підтримує зв'язок через гніздо RFCOMM.
Тепер після завантаження і установки додатка BlueTerm, запустіть нижче заданий Python програму з терміналу і підключити парне raspberrypi пристрої з BlueTerm App одночасно.
Після успішного підключення ви побачите підключений: raspberrypi у верхньому правому куті програми, як показано нижче:
Тепер ви можете просто ввести наступні команди з програми BlueTerm, щоб змусити машину рухатися у бажаному напрямку. Натисніть 'q', щоб вийти з програми. Ви можете використовувати клавіатуру Google Voice Typing, щоб керувати цим автомобілем за допомогою вашого 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. Вихід (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 ()