目录
1. UART配置
2. 蓝牙配置
3. 代码实现
树莓派提供两个串口外设,分别称为硬件串口和mini串口。硬件串口相对于mini串口有专用的时钟源,数据传输稳定可靠。树莓派默认将硬件串口连接到蓝牙模块,mini串口连接到排针TX/RX引脚。如果使用板载蓝牙不需要做修改。如果要使用外部串口设备需要进行端口映射对换。流程如下。(本设计使用板载蓝牙,未进行映射对换)
/* 1.关闭串口登录,使能硬件串口 */ pi@rasberrypi:~s sudo raspi-config --3 Interface Options ----P6 Serial Port ------否 --------是 /* 2.查看对换前的串口映射 */ pi@rasberrypi:~s ls -l /dev serial0 -> ttyS0 serial1 -> ttyAMA0 /* 3.进行串口映射对换 */ pi@rasberrypi:~s sudo vim /boot/config.txt 添加:dtoverlay=pi3-disable-bt /* 4.重启 */ pi@rasberrypi:~s sudo reboot /* 5.查看对换后的串口映射 */ pi@rasberrypi:~s ls -l /dev serial0 -> ttyAMA0 serial1 -> ttyS0
/* 1.开启蓝牙设备 */ pi@rasberrypi:~s sudo apt-get update pi@rasberrypi:~s sudo apt-get upgrade -y pi@rasberrypi:~s sudo apt-get dist-upgrade -y pi@rasberrypi:~s sudo apt-get install pi-bluetooth bluez bluez-firmware blueman pi@rasberrypi:~s sudo /etc/init.d/bluetooth restart /* 2.等待连接 */ pi@rasberrypi:~s sudo rfcomm watch hci0 /* 3.连接成功 */ pi@rasberrypi:~s ls -l /dev 虚拟串口:rfcomm0
手机端蓝牙软件推荐:
#include "bt.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> #include <termios.h> #include <errno.h> int uartFd; void BtInit() { struct termios newtio; uartFd = open("/dev/rfcomm0", O_RDWR); tcgetattr(uartFd, &newtio); cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); } void BtSend(char* buf, int len) { write(uartFd, buf, len); } void BtReceive(char* buf, int len) { read(uartFd, buf, len); }