2025.2.17
项目要求使用树莓派接收来自传感器的蓝牙数据,经过一段时间的学习,基本掌握了蓝牙的用法,现尝试在树莓派上接收蓝牙数据
蓝牙设备的使用:按压设备闪烁红灯,变成蓝色就是开机成功了,在按压绿灯闪烁,松开后设备会关机
1.树莓派系统烧录
2.树莓派ip:
3.查看蓝牙在树莓派上面使用哪个串口:
ls -l /dev/tty*
4.树莓派换源
2025.2.19
5.考虑使用usb蓝牙与鞋垫蓝牙自动配对。
试验:
1.
使用 Python pyserial
库
-
pyserial
是一个 Python 库,用于串口通信。 -
安装
pyserial
: -
sudo apt-get update sudo apt-get install python3-pip pip3 install pyserial
如果出错,则改用代码:
-
sudo apt-get update # 更新软件包列表 sudo apt-get install python3-serial # 注意是 python3-serial,不是 python3-pyserial
-
编写 Python 代码,查询与蓝牙模块通信是否正确:位置:home/pi/feet/ feetserial.py
-
import serial import time ser = serial.Serial('/dev/ttyUSB0', 115200,timeout=1) message = "AT\r\n" ser.write(message.encode('utf-8')) response1 = ser.readline().decode('utf-8').strip() response2 = ser.readline().decode('utf-8').strip() print("1:", response1) print("2:", response2) ser.close() print("over")
利用代码控制寻找蓝牙设备
2.将适配器与鞋垫传感器绑定:
将蓝牙主机连接到pc的usb口,然后使用【串口调试助手】进行命令调试
在windows的串口调试助手中输入:
"AT+SCAN\r\n"
AT+SCAN+回车
搜索设备,得到:
3,@230909E453,EC230909E453,-62
2,@230909E01B,EC230909E01B,-48
其中
然后输入:
“AT+BONDNAME=@230909E453”
绑定设备
再去树莓派上写代码接收传感器数据(16进制)
import serial
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.1)
while True:
try:
data = ser.read(1)
if data:
hex_data = data.hex()
print(hex_data, end=" ")
except serial.SerialException as e:
print(f"error{e}")
break
except KeyboardInterrupt:
print("\nover")
break
ser.close()
位置:/home/pi/feet/ 16.py
第二个传感器同理
两个传感器都绑定了
3.树莓派和pc之间通过wifi通信:
获取pc的IP
-
使用命令提示符:
- 按下Win键 + R,输入
cmd
,然后按Enter键打开命令提示符。 - 在命令提示符中输入
ipconfig
,然后按Enter键。 - 在输出的信息中,找到以“IPv4 地址”开头的行,后面的数字就是你的PC的IP地址。
- 按下Win键 + R,输入
树莓派端代码:位置/home/pi/feet/ wifi.py
import socket
SERVER_IP ='192.168.11.88'
SERVER_PORT = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((SERVER_IP, SERVER_PORT))
data = 'Hello from Raspberry Pi!'
s.sendall(data.encode())
s.close()
pc端代码:
import socket
# 设置服务器IP地址和端口号
SERVER_IP ='192.168.11.88' # 将PC的IP地址替换为实际IP
SERVER_PORT = 12345 # 自定义端口号
# 创建Socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
s.bind((SERVER_IP, SERVER_PORT))
# 监听连接
s.listen()
# 接受连接
conn, addr = s.accept()
# 接收数据
data = conn.recv(1024).decode()
print('Received data:', data)
# 关闭连接
conn.close()
s.close()
结果展示:
2025.2.20
1.实现树莓派接收蓝牙消息并用wifi发送到pc
树莓派端:
位置:/home/pi/feet/ serialfeet.py
import serial
import socket
SERIAL_PORT = '/dev/ttyUSB0'
BAUD_RATE = 115200
SERVER_IP = '192.168.11.88'
SERVER_PORT = 12345
try:
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=0.1)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((SERVER_IP, SERVER_PORT))
while True:
try:
data = ser.read(1)
if data:
hex_data = data.hex()
s.sendall(hex_data.encode())
except serial.SerialException as e:
print(f"error1:{e}")
break
except socket.error as e:
print(f"socketerror{e}")
break
except KeyboardInterrupt:
print("\nover")
break
finally:
if ser:
ser.close()
if s:
s.close()
pc端
文件名:feetwifi.py
import socket
# 网络配置
SERVER_IP = '192.168.11.88' # PC的IP地址
SERVER_PORT = 12345 # PC的端口
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口
s.bind((SERVER_IP, SERVER_PORT))
# 监听连接
s.listen()
while True:
try:
# 接受连接
conn, addr = s.accept()
while True:
# 接收数据
data = conn.recv(1024).decode()
if data:
print(data, end='') # 打印接收到的16进制字符串
else:
break # 连接断开
except socket.error as e:
print(f"socket错误:{e}")
break
except KeyboardInterrupt:
print("\n程序结束")
break
s.close()
pc端增加功能:接收蓝牙数据的同时像串口蓝牙发送数据:
import socket
import serial
# 网络配置
SERVER_IP = '192.168.11.88' # PC的IP地址
SERVER_PORT = 12345 # PC的端口
# 串口配置
SERIAL_PORT = 'COM9' # 串口COM9
BAUD_RATE = 115200 # 波特率
try:
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口
s.bind((SERVER_IP, SERVER_PORT))
# 监听连接
s.listen()
ser = serial.Serial(SERIAL_PORT, BAUD_RATE)
while True:
try:
conn, addr = s.accept()
while True:
# 接收数据
data = conn.recv(1024)
if data:
ser.write(data)
print(data) # 打印接收到的16进制字符串
else:
break # 连接断开
except socket.error as e:
print(f"socket错误:{e}")
break
except serial.SerialException as e:
print(f"串口错误:{e}")
break
except KeyboardInterrupt:
print("\n程序结束")
break
finally:
if ser:
ser.close()
if s:
s.close()