首页 > 代码库 > Raspberry Pi通过蓝牙与Arduino连接

Raspberry Pi通过蓝牙与Arduino连接

** 刚刚开始接触如有错误请留言指正,多谢 ** 

设备

  • Raspberry Pi第三代B+版本
  • Arduino Pro Mini(5V,16MHz)w/ ATmega328 + 写入设备(或使用其他Arduino版本)
  • 蓝牙HC-06
  • 发光二极管1个
  • 10千欧电阻1个
  • 杜邦线若干

安装过程中所需要的包和工具

在 Python 环境下,使用“import bluetooth”如果报出错误信息“ImportError: No module named bluetooth”则说明没有安装相应的包,执行一下命令安装。

$ sudo apt-get update$ sudo apt-get install bluetooth  bluez  python-bluez

连接蓝牙设备(Arduino)

使用下面的命令查看蓝牙的配置信息

$ hciconfig

 

使用下面的命令扫描可配对的设备

$ hcitool scan

 

进入蓝牙连接工具

$ bluetoothctl
[NEW] Controller B8:27:EB:D3:61:B0 raspberrypi [default][bluetooth]# agent onAgent registered[bluetooth]# default-agentDefault agent request successful//扫描可配对的设备[bluetooth]# scan on Discovery started[CHG] Controller B8:27:EB:D3:61:B0 Discovering: yes[NEW] Device 00:14:01:10:10:32 HC-06//连接设备[bluetooth]# pair 00:14:01:10:10:32 Attempting to pair with 00:14:01:10:10:32[CHG] Device 00:14:01:10:10:32 Connected: yesRequest PIN code[agent] Enter PIN code: 1234[CHG] Device 00:14:01:10:10:32 UUIDs:        00001101-0000-1000-8000-00805f9b34fb[CHG] Device 00:14:01:10:10:32 Paired: yesPairing successful//查看已连接的设备[bluetooth]# paired-devices Device 00:14:01:10:10:32 HC-06//删除已经配对的设备[bluetooth]# remove 00:14:01:10:10:32[DEL] Device 00:14:01:10:10:32 HC-06Device has been removed

 

测试是否能够ping通

$ sudo l2ping 00:14:01:10:10:32

 

连接Arduino的蓝牙设备

$ sudo rfcomm connect 0 00:14:01:10:10:32Press CTRL-C for hangup

连接蓝牙设备后,会在树莓派的【/dev】目录中创建一个蓝牙设备的虚拟文件 /dev/rfcomm0 ,同时Arduino的蓝牙指示灯为常亮状态,表示“已连接”。

 

绑定Arduino的蓝牙设备

$ sudo rfcomm bind 0 00:14:01:10:10:32

绑定蓝牙设备后,也会在树莓派的【/dev】目录中创建 /dev/rfcomm0 文件,而此时Arduino的蓝牙指示灯为闪烁状态,表示“未连接”;当树莓派向蓝牙设备发送消息时才去做连接操作。

 

对已经绑定Arduino的蓝牙设备解除绑定

$ sudo rfcomm bind 0 00:14:01:10:10:32

解除绑定蓝牙设备后,文件 /dev/rfcomm0 消失了。

编程程序

  • Arduino:
void setup(){  pinMode(11, OUTPUT);  digitalWrite(11, HIGH);  delay(500);  digitalWrite(11, LOW);  Serial.begin(9600);}void loop() {  while (Serial.available())  {    char c = Serial.read();    digitalWrite(11, HIGH);    delay(500);    digitalWrite(11, LOW); //收到消息指示灯(LED)闪一下    if (c == A)    {      Serial.println("B"); //收到A就返回B    } else {      Serial.println("Please input [A]"); //都是其他字符返回    }  }}

 

  • python代码:
#coding=utf-8#send to arduinoimport serialimport sysport = "/dev/rfcomm0"serial = serial.Serial(port,9600)if len(sys.argv) > 1:    sendStr = sys.argv[1]else:    sendStr = "A"serial.write(sendStr)serial.flushInput()if serial.isOpen() == False:    serial.open()line = serial.readline()print line

 

运行测试

如何测试就不发了

Raspberry Pi通过蓝牙与Arduino连接