树莓派使用蓝牙4.0连接设备并发送指令

安装插件

sudo apt-get install bluez bluez-hcidump

搜索

LE Scan ...
20:91:48:B9:05:77 (unknown)
20:91:48:B9:05:77 UPots
20:91:48:B9:05:77 (unknown)
20:91:48:B9:05:77 UPots

.....

p.s. 搜索会不断循环,想要停止搜索,按快捷键ctrl+c

搜索出来设备UPots mac地址是20:91:48:B9:05:77

通过mac地址连接设备

gatttool -b 20:91:48:B9:05:77 -I

输入connect


输入primary查看设备services


输入characteristics查看设备characteristics


根据uuid寻找到对应收发指令的characteristics,获取handle 对应16进制码

执行以下指令发送指令

char-write-req 0x0025 41


P.S. 0x0025 是characteristics的handle值,41要发送指令,16进制码

最后输入exit退出






  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要准备以下材料: - 树莓派(建议使用树莓派4B) - 蓝牙模块(例如HC-05或HC-06) - 超声波传感器(用于测距离) - LCD 1602显示屏 - 杜邦线若干 接下来,我们需要进行以下步骤: 1. 连接蓝牙模块到树莓派蓝牙模块的TXD引脚连接树莓派的RXD引脚,RXD引脚连接树莓派的TXD引脚,VCC引脚连接树莓派的5V电源,GND引脚连接树莓派的GND。 2. 连接超声波传感器 将超声波传感器的VCC引脚连接树莓派的5V电源,GND引脚连接树莓派的GND,Trig引脚连接树莓派的GPIO17引脚,Echo引脚连接树莓派的GPIO18引脚。 3. 连接LCD 1602显示屏 将LCD 1602显示屏的VSS引脚连接树莓派的GND,VDD引脚连接树莓派的5V电源,VO引脚连接树莓派的电位器中间引脚,RS引脚连接树莓派的GPIO7引脚,RW引脚连接树莓派的GND,E引脚连接树莓派的GPIO8引脚,D4-D7引脚分别连接树莓派的GPIO25、GPIO24、GPIO23、GPIO18引脚。 4. 安装蓝牙模块驱动程序 在终端中输入以下命令: ``` sudo apt-get update sudo apt-get install bluetooth bluez blueman ``` 安装完成后,运行以下命令: ``` sudo hcitool scan ``` 此时蓝牙模块会扫描周围的蓝牙设备并显示它们的MAC地址。 5. 编写代码 使用Python编写代码,可以使用pybluez库来实现蓝牙通信,使用RPi.GPIO库来实现GPIO控制,使用RPi.GPIO.ADC库来实现模拟输入输出控制。以下是一个参考代码: ``` import bluetooth import RPi.GPIO as GPIO import time # 定义GPIO引脚 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO_TRIGGER = 17 GPIO_ECHO = 18 GPIO_RS = 7 GPIO_E = 8 GPIO_D4 = 25 GPIO_D5 = 24 GPIO_D6 = 23 GPIO_D7 = 18 # 设置GPIO输入输出 GPIO.setup(GPIO_TRIGGER, GPIO.OUT) GPIO.setup(GPIO_ECHO, GPIO.IN) GPIO.setup(GPIO_RS, GPIO.OUT) GPIO.setup(GPIO_E, GPIO.OUT) GPIO.setup(GPIO_D4, GPIO.OUT) GPIO.setup(GPIO_D5, GPIO.OUT) GPIO.setup(GPIO_D6, GPIO.OUT) GPIO.setup(GPIO_D7, GPIO.OUT) # 设置LCD显示 def lcd_init(): lcd_write(0x33, False) lcd_write(0x32, False) lcd_write(0x28, False) lcd_write(0x0C, False) lcd_write(0x06, False) lcd_write(0x01, False) def lcd_write(bits, char_mode=False): time.sleep(0.001) bits = bin(bits)[2:].zfill(8) GPIO.output(GPIO_RS, char_mode) GPIO.output(GPIO_D4, False) GPIO.output(GPIO_D5, False) GPIO.output(GPIO_D6, False) GPIO.output(GPIO_D7, False) if bits[0] == "1": GPIO.output(GPIO_D4, True) if bits[1] == "1": GPIO.output(GPIO_D5, True) if bits[2] == "1": GPIO.output(GPIO_D6, True) if bits[3] == "1": GPIO.output(GPIO_D7, True) GPIO.output(GPIO_E, True) GPIO.output(GPIO_E, False) GPIO.output(GPIO_D4, False) GPIO.output(GPIO_D5, False) GPIO.output(GPIO_D6, False) GPIO.output(GPIO_D7, False) if bits[4] == "1": GPIO.output(GPIO_D4, True) if bits[5] == "1": GPIO.output(GPIO_D5, True) if bits[6] == "1": GPIO.output(GPIO_D6, True) if bits[7] == "1": GPIO.output(GPIO_D7, True) GPIO.output(GPIO_E, True) GPIO.output(GPIO_E, False) def lcd_text(message): message = message.ljust(16, " ") for i in range(16): lcd_write(ord(message[i]), True) # 设置超声波传感器 def distance(): GPIO.output(GPIO_TRIGGER, True) time.sleep(0.00001) GPIO.output(GPIO_TRIGGER, False) start_time = time.time() stop_time = time.time() while GPIO.input(GPIO_ECHO) == 0: start_time = time.time() while GPIO.input(GPIO_ECHO) == 1: stop_time = time.time() time_elapsed = stop_time - start_time distance = (time_elapsed * 34300) / 2 return distance # 开始测距离并显示到LCD if __name__ == '__main__': lcd_init() while True: dist = distance() lcd_text("Distance: %.1fcm" % dist) time.sleep(0.5) ``` 6. 运行代码 在终端中输入以下命令: ``` sudo python3 文件名.py ``` 此时,超声波传感器会测量距离并将其显示到LCD 1602显示屏上,同时蓝牙模块会将距离发送到其他蓝牙设备上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值