0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Raspberry Pi3和蓝牙构建遥控汽车

科技观察员 来源:circuitdigest 作者:萨达姆 2022-11-21 17:14 次阅读

Raspberry Pi 因其通过互联网进行无线通信的无缝能力而在物联网项目中非常受欢迎。Raspberry Pi 3内置Wi-Fi蓝牙,蓝牙是一种非常流行的无线通信协议。今天我们将使用Raspberry Pi 3和蓝牙构建遥控汽车,在这里我们将使用智能手机作为遥控器来控制汽车。

在这里,我们使用的是具有内置蓝牙的Raspberry Pi 3,因此我们不需要使用任何外部USB蓝牙加密狗。在这里,我们使用RFCOMM蓝牙协议进行无线通信。

Python 中的蓝牙编程遵循套接字编程模型,蓝牙设备之间的通信通过 RFCOMM 套接字完成。RFCOMM(射频通信)是一种蓝牙协议,提供模拟RS-232串行端口,也称为串行端口仿真。蓝牙串行端口配置文件基于此协议。RFCOMM 因其广泛的支持和公开可用的 API 而在蓝牙应用中非常流行。它绑定到 L2CAP 协议。

安装蓝牙通信所需的软件包:

在开始之前,我们需要安装一些软件来在树莓派中设置蓝牙通信。您应该准备好Raspbian Jessie安装的存储卡和Raspberry Pi。

所以现在我们首先需要使用以下命令更新 Raspbian:

sudo apt-get update
sudo apt-get upgrade
然后我们需要安装一些与蓝牙相关的软件包:

sudo apt-get install bluetooth blueman bluez
然后重新启动树莓派:

sudo reboot
BlueZ是一个开源项目和官方Linux蓝牙协议栈。它支持所有核心蓝牙协议,现在成为官方Linux内核的一部分。

Blueman 提供桌面界面来管理和控制蓝牙设备。

最后,我们需要用于蓝牙通信的python库,以便我们可以使用Python语言通过RFCOMM发送和接收数据:

sudo apt-get install python-bluetooth
同时为 Raspberry Pi 安装 GPIO 支持库:

sudo apt-get install python-rpi.gpio
现在我们已经完成了在树莓派中安装蓝牙通信所需的软件包。

通过蓝牙将设备与树莓派配对:
将蓝牙设备(如手机)与树莓派配对非常容易。在这里,我们将Android智能手机与树莓派配对。我们之前在 Pi 中安装了 BlueZ,它提供了一个名为“蓝牙ctl”的命令行实用程序来管理我们的蓝牙设备。

现在通过以下命令打开蓝牙 ctl 实用程序:

sudo bluetoothctl
您可以通过键入“帮助”来检查蓝牙ctl实用程序的所有命令。现在我们需要按给定顺序输入以下命令:

[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# scan on
在最后一个命令“扫描”之后,您将在列表中看到您的蓝牙设备(手机)。确保您的手机已开启蓝牙,并且附近的设备可以看到您的手机。然后复制设备的MAC地址并使用给定的命令进行配对:

pair


然后,系统会提示您在终端控制台中输入密码或 PIN,然后在那里输入密码并按 Enter 键。然后在出现提示时在手机中输入相同的密码,您现在已成功与树莓派配对。

poYBAGN7QV-AZIdcAADM31PqBdE763.gif

如前所述,您还可以使用桌面界面配对手机。安装 Blueman 后,您将在 Raspberry Pi 桌面的右侧看到一个蓝牙图标,如下所示,您可以使用它轻松进行配对。

pYYBAGN7QWGAI7GoAAAxK1dTGJ8606.gif

选择玩具车:

在这个树莓派控制汽车项目中,我们使用玩具车进行演示。在这里,我们选择了具有左右移动转向功能的RF玩具车。购买这辆车后,我们用我们的树莓电路更换了它的射频电路。这辆车有两个直流电机,一个旋转两个前轮,另一个旋转两个后轮。前侧电机用于为汽车提供方向,即向左或向右转(如真正的汽车转向功能)。后侧电机用于驱动汽车向前和向后方向。树莓的蓝牙用于从安卓手机无线接收命令以控制汽车。

poYBAGN7QWOABssmAACsHNpvfuE241.jpg

您可以使用任何具有两个直流电机的玩具车来旋转前轮和后轮。

电路图及说明:

在这辆遥控车中,我们只需要使用L293D 模块将树莓派与两个电机连接。为了给Raspberry Pi和汽车供电,我们使用了移动电源。移动电源足以为Raspberry Pi和汽车的电机供电,但是当我们把移动电源放在汽车上时,由于移动电源的重量很重,汽车将无法正常移动。因此,我们建议使用轻量电源或锂电池为系统供电。所有连接如下图所示。另请查看我们的机器人部分,了解有关使用不同技术控制电机的更多信息

注意:不要在树莓派上放置超过 5v 的电压。

pYYBAGN7QWSAfjrRAADfnuI2chI429.png

该电路已在 Perf 板上为该项目制作,因此汽车的重量更小。

pYYBAGN7QWiAGMU7AADHikzvCUc315.jpg

poYBAGN7QWmAAQTmAADeZfG6DMA461.jpg

使用安卓应用程序BlueTerm远程控制汽车:

现在,在设置了所有内容并成功尝试通过蓝牙配对智能手机之后,我们需要安装一个Android应用程序,以使用蓝牙串行适配器与Raspberry Pi进行通信,以便我们可以控制Raspberry Pi的GPIO引脚。如前所述,RFCOMM / SPP协议模拟蓝牙上的串行通信,因此我们在此处安装了支持此协议的BlueTerm App。

pYYBAGN7QWuAaU63AABjpgraWN0235.gif

您还可以使用任何其他支持通过RFCOMM插座进行通信的蓝牙终端应用程序。

现在,下载并安装BlueTerm应用程序后,从终端运行下面给定的Python程序,并同时从BlueTerm应用程序连接配对的覆盆子皮设备。

poYBAGN7QW2AJtTtAAA6b5gBGOs092.png

连接成功后,您将在应用程序的右上角看到connected:raspberrypi,如下所示:

pYYBAGN7QW6AV2z2AABJe8jZ1lA052.png

pYYBAGN7QXGAM1FPAAAdb1gwpx0711.png

现在,您只需从BlueTerm应用程序中输入以下命令即可使汽车向所需方向移动。按“q”退出程序。您可以使用谷歌语音输入键盘通过语音控制这辆车。

命令:

F – 向前移动

B – 向后移动

S – 停止

L – 向左移动

R – 向前右移动

A – 向后向左移动

P – 向后右移动

Q – 退出

poYBAGN7QXKAYyrnAABMlPJqltg431.png

蟒蛇编程:

用于控制Raspberry Pi GPIO与Android App的Python程序非常简单且不言自明。只需要我们了解一点与蓝牙射频通信相关的代码。否则,就像通过使电机的销高或低来控制任何机器人或汽车一样。

首先,我们需要导入蓝牙套接字库,它使我们能够使用 Python 语言控制蓝牙;我们已经在上一节中安装了相同的库。

import 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)
以下是负责蓝牙通信的代码:

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=蓝牙。蓝牙插座(蓝牙。RFCOMM):为蓝牙RFCOMM通信创建套接字。
server_socket.bind((“”, port):- 服务器将主机 '' 上的脚本绑定到端口。

server_socket.听(1):服务器侦听一次接受一个连接。

client_socket, 地址 = 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()。当我们从移动blueTerm应用程序中按L,R,F,A,P,B,S时,将分别调用这些函数,并且汽车将相应地移动。

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()
数据 = client_socket.recv(1024):通过客户端套接字client_socket接收数据并将其分配给变量数据。一次最多可以接收 1024 个字符。

最后,在所有编程之后,使用以下代码关闭客户端和服务器连接:

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()




声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 遥控汽车
    +关注

    关注

    0

    文章

    7

    浏览量

    6915
  • 微蓝牙
    +关注

    关注

    0

    文章

    2

    浏览量

    6672
收藏 人收藏

    评论

    相关推荐

    Raspberry Pi 3试用体验】【一】Pi3开箱贴

    发过来的板子使用了优.速.快.递,当我看到快递的时候,真的担心板子被压坏掉,还好有惊无险。废话不多说了,下面上图,并跟pi2B做个对比。 被压扁的Pi3盒子,手机没拍出来压扁的效果然后就是Pi3全家福了说明书中的中文部分正反面及
    发表于 04-10 15:00

    Raspberry Pi 3试用体验】生逢其时第一站-开箱

    ,用各种文字标注的“Raspberry Pi3,Model B,1GB RAM”好多行,个人感觉有点多余。盒子包含树莓派3板卡x1,树莓派3说明书x1,树莓派
    发表于 04-13 19:38

    Raspberry Pi 3试用体验】试用进程大汇总(2016.6.21已更新)

    /jishu_580356_1_1.html3、【Raspberry Pi 3试用体验】树莓pi2\pi
    发表于 04-14 21:32

    Raspberry Pi 3试用体验】树莓pi2\pi3 model B型 横向对比

    Raspberry Pi 3试用体验】树莓pi2\pi3 model B型 横向对比 对于开发板学习者来讲,树莓派是不二之选,众多的资源和
    发表于 04-25 18:05

    Raspberry Pi 3 官方套件入门指南

    Raspberry Pi 3套件介绍Raspberry Pi 3套件安装
    发表于 10-09 07:53

    树莓派Raspberry Pi3 A型+的电路原理图免费下载

    本文档的主要内容详细介绍的是树莓派Raspberry Pi3 A型+的电路原理图免费下载。
    发表于 08-14 08:00 26次下载
    树莓派<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b> A型+的电路原理图免费下载

    树莓派Raspberry Pi3 B+型电路原理图免费下载

    本文档的主要内容详细介绍的是树莓派Raspberry Pi3 B+型电路原理图免费下载。
    发表于 08-14 08:00 76次下载
    树莓派<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b> B+型电路原理图免费下载

    树莓派Raspberry Pi3 B型电路原理图免费下载

    本文档的主要内容详细介绍的是树莓派Raspberry Pi3 B型电路原理图免费下载。
    发表于 08-14 08:00 33次下载
    树莓派<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi3</b> B型电路原理图免费下载

    使用Raspberry Pi构建一个OpenCV人群计数装置

    在本教程中,我们将使用 Raspberry Pi 和 ThingSpeak 构建一个 OpenCV 人群计数。
    的头像 发表于 08-12 17:24 2434次阅读
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b>一个OpenCV人群计数装置

    构建一个基于Raspberry Pi蓝牙扬声器

     在这篇文章中,我们将通过融合 A2DP、Linux 和音频编解码器的强大功能来构建基于 Raspberry Pi蓝牙扬声器,以将数据包从音频源无线传输到音频接收器。为此,我们将破
    发表于 08-31 16:22 1590次阅读
    <b class='flag-5'>构建</b>一个基于<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的<b class='flag-5'>蓝牙</b>扬声器

    使用Raspberry Pi构建一个智能车库开门器

    在本教程中,我们将使用 Raspberry Pi 构建一个智能车库开门器。这里将创建一个Raspberry Pi Web 服务器,以使用您的
    的头像 发表于 09-07 15:54 1759次阅读
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b>一个智能车库开门器

    使用Raspberry Pi构建水位传感器

    电子发烧友网站提供《使用Raspberry Pi构建水位传感器.zip》资料免费下载
    发表于 10-28 16:08 0次下载
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>构建</b>水位传感器

    构建自己的Raspberry Pi ALPR停车系统

    电子发烧友网站提供《构建自己的Raspberry Pi ALPR停车系统.zip》资料免费下载
    发表于 11-08 11:14 0次下载
    <b class='flag-5'>构建</b>自己的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> ALPR停车系统

    Raspberry PI的红外遥控

    电子发烧友网站提供《带Raspberry PI的红外遥控器.zip》资料免费下载
    发表于 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便携终端的构建

    电子发烧友网站提供《Raspberry Pi Zero便携终端的构建.zip》资料免费下载
    发表于 01-05 10:43 0次下载
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Zero便携终端的<b class='flag-5'>构建</b>