0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Raspberry Pi3和藍(lán)牙構(gòu)建遙控汽車

科技觀察員 ? 來源:circuitdigest ? 作者:薩達(dá)姆 ? 2022-11-21 17:14 ? 次閱讀

Raspberry Pi 因其通過互聯(lián)網(wǎng)進(jìn)行無線通信的無縫能力而在物聯(lián)網(wǎng)項(xiàng)目中非常受歡迎。Raspberry Pi 3內(nèi)置Wi-Fi藍(lán)牙,藍(lán)牙是一種非常流行的無線通信協(xié)議。今天我們將使用Raspberry Pi 3和藍(lán)牙構(gòu)建遙控汽車,在這里我們將使用智能手機(jī)作為遙控器來控制汽車。

在這里,我們使用的是具有內(nèi)置藍(lán)牙的Raspberry Pi 3,因此我們不需要使用任何外部USB藍(lán)牙加密狗。在這里,我們使用RFCOMM藍(lán)牙協(xié)議進(jìn)行無線通信。

Python 中的藍(lán)牙編程遵循套接字編程模型,藍(lán)牙設(shè)備之間的通信通過 RFCOMM 套接字完成。RFCOMM(射頻通信)是一種藍(lán)牙協(xié)議,提供模擬RS-232串行端口,也稱為串行端口仿真。藍(lán)牙串行端口配置文件基于此協(xié)議。RFCOMM 因其廣泛的支持和公開可用的 API 而在藍(lán)牙應(yīng)用中非常流行。它綁定到 L2CAP 協(xié)議。

安裝藍(lán)牙通信所需的軟件包:

在開始之前,我們需要安裝一些軟件來在樹莓派中設(shè)置藍(lán)牙通信。您應(yīng)該準(zhǔn)備好Raspbian Jessie安裝的存儲(chǔ)卡和Raspberry Pi。

所以現(xiàn)在我們首先需要使用以下命令更新 Raspbian:

sudo apt-get update
sudo apt-get upgrade
然后我們需要安裝一些與藍(lán)牙相關(guān)的軟件包:

sudo apt-get install bluetooth blueman bluez
然后重新啟動(dòng)樹莓派:

sudo reboot
BlueZ是一個(gè)開源項(xiàng)目和官方Linux藍(lán)牙協(xié)議棧。它支持所有核心藍(lán)牙協(xié)議,現(xiàn)在成為官方Linux內(nèi)核的一部分。

Blueman 提供桌面界面來管理和控制藍(lán)牙設(shè)備。

最后,我們需要用于藍(lán)牙通信的python庫,以便我們可以使用Python語言通過RFCOMM發(fā)送和接收數(shù)據(jù):

sudo apt-get install python-bluetooth
同時(shí)為 Raspberry Pi 安裝 GPIO 支持庫:

sudo apt-get install python-rpi.gpio
現(xiàn)在我們已經(jīng)完成了在樹莓派中安裝藍(lán)牙通信所需的軟件包。

通過藍(lán)牙將設(shè)備與樹莓派配對(duì):
將藍(lán)牙設(shè)備(如手機(jī))與樹莓派配對(duì)非常容易。在這里,我們將Android智能手機(jī)與樹莓派配對(duì)。我們之前在 Pi 中安裝了 BlueZ,它提供了一個(gè)名為“藍(lán)牙ctl”的命令行實(shí)用程序來管理我們的藍(lán)牙設(shè)備。

現(xiàn)在通過以下命令打開藍(lán)牙 ctl 實(shí)用程序:

sudo bluetoothctl
您可以通過鍵入“幫助”來檢查藍(lán)牙ctl實(shí)用程序的所有命令?,F(xiàn)在我們需要按給定順序輸入以下命令:

[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# scan on
在最后一個(gè)命令“掃描”之后,您將在列表中看到您的藍(lán)牙設(shè)備(手機(jī))。確保您的手機(jī)已開啟藍(lán)牙,并且附近的設(shè)備可以看到您的手機(jī)。然后復(fù)制設(shè)備的MAC地址并使用給定的命令進(jìn)行配對(duì):

pair


然后,系統(tǒng)會(huì)提示您在終端控制臺(tái)中輸入密碼或 PIN,然后在那里輸入密碼并按 Enter 鍵。然后在出現(xiàn)提示時(shí)在手機(jī)中輸入相同的密碼,您現(xiàn)在已成功與樹莓派配對(duì)。

poYBAGN7QV-AZIdcAADM31PqBdE763.gif

如前所述,您還可以使用桌面界面配對(duì)手機(jī)。安裝 Blueman 后,您將在 Raspberry Pi 桌面的右側(cè)看到一個(gè)藍(lán)牙圖標(biāo),如下所示,您可以使用它輕松進(jìn)行配對(duì)。

pYYBAGN7QWGAI7GoAAAxK1dTGJ8606.gif

選擇玩具車:

在這個(gè)樹莓派控制汽車項(xiàng)目中,我們使用玩具車進(jìn)行演示。在這里,我們選擇了具有左右移動(dòng)轉(zhuǎn)向功能的RF玩具車。購(gòu)買這輛車后,我們用我們的樹莓電路更換了它的射頻電路。這輛車有兩個(gè)直流電機(jī),一個(gè)旋轉(zhuǎn)兩個(gè)前輪,另一個(gè)旋轉(zhuǎn)兩個(gè)后輪。前側(cè)電機(jī)用于為汽車提供方向,即向左或向右轉(zhuǎn)(如真正的汽車轉(zhuǎn)向功能)。后側(cè)電機(jī)用于驅(qū)動(dòng)汽車向前和向后方向。樹莓的藍(lán)牙用于從安卓手機(jī)無線接收命令以控制汽車。

poYBAGN7QWOABssmAACsHNpvfuE241.jpg

您可以使用任何具有兩個(gè)直流電機(jī)的玩具車來旋轉(zhuǎn)前輪和后輪。

電路圖及說明:

在這輛遙控車中,我們只需要使用L293D 模塊將樹莓派與兩個(gè)電機(jī)連接。為了給Raspberry Pi和汽車供電,我們使用了移動(dòng)電源。移動(dòng)電源足以為Raspberry Pi和汽車的電機(jī)供電,但是當(dāng)我們把移動(dòng)電源放在汽車上時(shí),由于移動(dòng)電源的重量很重,汽車將無法正常移動(dòng)。因此,我們建議使用輕量電源或鋰電池為系統(tǒng)供電。所有連接如下圖所示。另請(qǐng)查看我們的機(jī)器人部分,了解有關(guān)使用不同技術(shù)控制電機(jī)的更多信息。

注意:不要在樹莓派上放置超過 5v 的電壓。

pYYBAGN7QWSAfjrRAADfnuI2chI429.png

該電路已在 Perf 板上為該項(xiàng)目制作,因此汽車的重量更小。

pYYBAGN7QWiAGMU7AADHikzvCUc315.jpg

poYBAGN7QWmAAQTmAADeZfG6DMA461.jpg

使用安卓應(yīng)用程序BlueTerm遠(yuǎn)程控制汽車:

現(xiàn)在,在設(shè)置了所有內(nèi)容并成功嘗試通過藍(lán)牙配對(duì)智能手機(jī)之后,我們需要安裝一個(gè)Android應(yīng)用程序,以使用藍(lán)牙串行適配器與Raspberry Pi進(jìn)行通信,以便我們可以控制Raspberry Pi的GPIO引腳。如前所述,RFCOMM / SPP協(xié)議模擬藍(lán)牙上的串行通信,因此我們?cè)诖颂幇惭b了支持此協(xié)議的BlueTerm App。

pYYBAGN7QWuAaU63AABjpgraWN0235.gif

您還可以使用任何其他支持通過RFCOMM插座進(jìn)行通信的藍(lán)牙終端應(yīng)用程序。

現(xiàn)在,下載并安裝BlueTerm應(yīng)用程序后,從終端運(yùn)行下面給定的Python程序,并同時(shí)從BlueTerm應(yīng)用程序連接配對(duì)的覆盆子皮設(shè)備。

poYBAGN7QW2AJtTtAAA6b5gBGOs092.png

連接成功后,您將在應(yīng)用程序的右上角看到connected:raspberrypi,如下所示:

pYYBAGN7QW6AV2z2AABJe8jZ1lA052.png

pYYBAGN7QXGAM1FPAAAdb1gwpx0711.png

現(xiàn)在,您只需從BlueTerm應(yīng)用程序中輸入以下命令即可使汽車向所需方向移動(dòng)。按“q”退出程序。您可以使用谷歌語音輸入鍵盤通過語音控制這輛車。

命令:

F – 向前移動(dòng)

B – 向后移動(dòng)

S – 停止

L – 向左移動(dòng)

R – 向前右移動(dòng)

A – 向后向左移動(dòng)

P – 向后右移動(dòng)

Q – 退出

poYBAGN7QXKAYyrnAABMlPJqltg431.png

蟒蛇編程:

用于控制Raspberry Pi GPIO與Android App的Python程序非常簡(jiǎn)單且不言自明。只需要我們了解一點(diǎn)與藍(lán)牙射頻通信相關(guān)的代碼。否則,就像通過使電機(jī)的銷高或低來控制任何機(jī)器人或汽車一樣。

首先,我們需要導(dǎo)入藍(lán)牙套接字庫,它使我們能夠使用 Python 語言控制藍(lán)牙;我們已經(jīng)在上一節(jié)中安裝了相同的庫。

import Bluetooth
然后我們加入了更多的頭文件,并定義了電機(jī)的引腳,將它們默認(rèn)為低電平。

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)
以下是負(fù)責(zé)藍(lán)牙通信的代碼:

server_socket=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
port = 1
server_socket.bind(("",port))
server_socket.listen(1)

client_socket,address = server_socket.accept()
print "Accepted connection from ",address
在這里我們可以逐行理解它們:

server_socket=藍(lán)牙。藍(lán)牙插座(藍(lán)牙。RFCOMM):為藍(lán)牙RFCOMM通信創(chuàng)建套接字。
server_socket.bind((“”, port):- 服務(wù)器將主機(jī) '' 上的腳本綁定到端口。

server_socket.聽(1):服務(wù)器偵聽一次接受一個(gè)連接。

client_socket, 地址 = server_socket.accept():服務(wù)器接受客戶端的連接請(qǐng)求并將 mac 地址分配給可變地址,client_socket是客戶端的套接字

在此之后,我們創(chuàng)建了一些負(fù)責(zé)向所需方向移動(dòng)汽車的函數(shù):def left_side_forward(),def right_side_forward(),def forward(),def left_side_reverse(),def right_side_reverse(),def reverse()def stop()。當(dāng)我們從移動(dòng)blueTerm應(yīng)用程序中按L,R,F(xiàn),A,P,B,S時(shí),將分別調(diào)用這些函數(shù),并且汽車將相應(yīng)地移動(dòng)。

data=""
while 1:
data= client_socket.recv(1024)
print "Received: %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()
數(shù)據(jù) = client_socket.recv(1024):通過客戶端套接字client_socket接收數(shù)據(jù)并將其分配給變量數(shù)據(jù)。一次最多可以接收 1024 個(gè)字符。

最后,在所有編程之后,使用以下代碼關(guān)閉客戶端和服務(wù)器連接:

client_socket.close()
server_socket.close()

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)


server_socket=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

port = 1

server_socket.bind(("",port))

server_socket.listen(1)



client_socket,address = server_socket.accept()

print "Accepted connection from ",address


def left_side_forward():

print "FORWARD LEFT"

GPIO.output(m21 , 1)

GPIO.output(m22 , 0)

time.sleep(.5)

GPIO.output(m11 , 1)

GPIO.output(m12 , 0)


def right_side_forward():

print "FORWARD RIGHT"

GPIO.output(m21 , 1)

GPIO.output(m22 , 0)

time.sleep(.5)

GPIO.output(m11 , 0)

GPIO.output(m12 , 1)


def forward():

print "FORWARD"

GPIO.output(m11 , 0)

GPIO.output(m12 , 0)

GPIO.output(m21 , 1)

GPIO.output(m22 , 0)


def left_side_reverse():

print "BACKWARD LEFT"

GPIO.output(m21 , 0)

GPIO.output(m22 , 1)

time.sleep(.5)

GPIO.output(m11 , 1)

GPIO.output(m12 , 0)


def right_side_reverse():

print "BACKWARD RIGHT"


GPIO.output(m21 , 0)

GPIO.output(m22 , 1)

time.sleep(.5)

GPIO.output(m11 , 0)

GPIO.output(m12 , 1)


def reverse():

print "BACKWARD"

GPIO.output(m11 , 0)

GPIO.output(m12 , 0)

GPIO.output(m21 , 0)

GPIO.output(m22 , 1)


def stop():

print "STOP"

GPIO.output(m11 , 0)

GPIO.output(m12 , 0)

GPIO.output(m21 , 0)

GPIO.output(m22 , 0)



data=""

while 1:

data= client_socket.recv(1024)

print "Received: %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()




聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 遙控汽車
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6978
  • 微藍(lán)牙
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    6683
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Raspberry Pi 3試用體驗(yàn)】【一】Pi3開箱貼

    發(fā)過來的板子使用了優(yōu).速.快.遞,當(dāng)我看到快遞的時(shí)候,真的擔(dān)心板子被壓壞掉,還好有驚無險(xiǎn)。廢話不多說了,下面上圖,并跟pi2B做個(gè)對(duì)比。 被壓扁的Pi3盒子,手機(jī)沒拍出來壓扁的效果然后就是Pi3全家福了說明書中的中文部分正反面及
    發(fā)表于 04-10 15:00

    Raspberry Pi 3試用體驗(yàn)】生逢其時(shí)第一站-開箱

    ,用各種文字標(biāo)注的“Raspberry Pi3,Model B,1GB RAM”好多行,個(gè)人感覺有點(diǎn)多余。盒子包含樹莓派3板卡x1,樹莓派3說明書x1,樹莓派
    發(fā)表于 04-13 19:38

    Raspberry Pi 3試用體驗(yàn)】試用進(jìn)程大匯總(2016.6.21已更新)

    /jishu_580356_1_1.html3、【Raspberry Pi 3試用體驗(yàn)】樹莓pi2\pi
    發(fā)表于 04-14 21:32

    Raspberry Pi 3試用體驗(yàn)】樹莓pi2\pi3 model B型 橫向?qū)Ρ?/a>

    Raspberry Pi 3試用體驗(yàn)】樹莓pi2\pi3 model B型 橫向?qū)Ρ?對(duì)于開發(fā)板學(xué)習(xí)者來講,樹莓派是不二之選,眾多的資源和
    發(fā)表于 04-25 18:05

    樹莓派Raspberry Pi3 A型+的電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是樹莓派Raspberry Pi3 A型+的電路原理圖免費(fèi)下載。
    發(fā)表于 08-14 08:00 ?32次下載
    樹莓派<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b> A型+的電路原理圖免費(fèi)下載

    樹莓派Raspberry Pi3 B+型電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是樹莓派Raspberry Pi3 B+型電路原理圖免費(fèi)下載。
    發(fā)表于 08-14 08:00 ?76次下載
    樹莓派<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b> B+型電路原理圖免費(fèi)下載

    樹莓派Raspberry Pi3 B型電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是樹莓派Raspberry Pi3 B型電路原理圖免費(fèi)下載。
    發(fā)表于 08-14 08:00 ?38次下載
    樹莓派<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b> B型電路原理圖免費(fèi)下載

    微雪電子Raspberry Pi 3 Model主板簡(jiǎn)介

    Raspberry Pi 3 Model B+ 樹莓派3代B+型 1.4GHZ CPU、低功耗藍(lán)牙4.2、POE以太網(wǎng)供電 型號(hào)
    的頭像 發(fā)表于 12-20 11:35 ?3011次閱讀
    微雪電子<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>3</b> Model主板簡(jiǎn)介

    微雪電子樹莓派3計(jì)算模塊Raspberry Pi3簡(jiǎn)介

    新推出的計(jì)算模塊,英文全名是Compute Module 3。 相比1代的Compute Module,我配備了與Raspberry Pi 3一樣的處理器BCM2837和1GB內(nèi)存,處
    的頭像 發(fā)表于 01-14 09:46 ?3727次閱讀
    微雪電子樹莓派<b class='flag-5'>3</b>計(jì)算模塊<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b>簡(jiǎn)介

    構(gòu)建一個(gè)基于Raspberry Pi藍(lán)牙揚(yáng)聲器

     在這篇文章中,我們將通過融合 A2DP、Linux 和音頻編解碼器的強(qiáng)大功能來構(gòu)建基于 Raspberry Pi藍(lán)牙揚(yáng)聲器,以將數(shù)據(jù)包從音頻源無線傳輸?shù)揭纛l接收器。為此,我們將破
    發(fā)表于 08-31 16:22 ?1970次閱讀
    <b class='flag-5'>構(gòu)建</b>一個(gè)基于<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的<b class='flag-5'>藍(lán)牙</b>揚(yáng)聲器

    使用Raspberry Pi構(gòu)建一個(gè)智能車庫開門器

    在本教程中,我們將使用 Raspberry Pi 構(gòu)建一個(gè)智能車庫開門器。這里將創(chuàng)建一個(gè)Raspberry Pi Web 服務(wù)器,以使用您的
    的頭像 發(fā)表于 09-07 15:54 ?2113次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>構(gòu)建</b>一個(gè)智能車庫開門器

    構(gòu)建自己的Raspberry Pi ALPR停車系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《構(gòu)建自己的Raspberry Pi ALPR停車系統(tǒng).zip》資料免費(fèi)下載
    發(fā)表于 11-08 11:14 ?0次下載
    <b class='flag-5'>構(gòu)建</b>自己的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> ALPR停車系統(tǒng)

    Raspberry PI的紅外遙控

    電子發(fā)燒友網(wǎng)站提供《帶Raspberry PI的紅外遙控器.zip》資料免費(fèi)下載
    發(fā)表于 12-23 16:44 ?0次下載
    帶<b class='flag-5'>Raspberry</b> <b class='flag-5'>PI</b>的紅外<b class='flag-5'>遙控</b>器

    Raspberry Pi Zero便攜終端的構(gòu)建

    電子發(fā)燒友網(wǎng)站提供《Raspberry Pi Zero便攜終端的構(gòu)建.zip》資料免費(fèi)下載
    發(fā)表于 01-05 10:43 ?0次下載
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Zero便攜終端的<b class='flag-5'>構(gòu)建</b>

    使用Raspberry Pi進(jìn)行汽車診斷

    電子發(fā)燒友網(wǎng)站提供《使用Raspberry Pi進(jìn)行汽車診斷.zip》資料免費(fèi)下載
    發(fā)表于 06-20 09:31 ?0次下載
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>進(jìn)行<b class='flag-5'>汽車</b>診斷