树莓派用USB蓝牙适配器与Arduino通信
起初用raspberry控制arduino是用的USB数据线,写的是串口程序。
后来觉得用线还是不方便,于是改用蓝牙与arduino通信,串口程序也只需要改个port就行
1.Bluetooth Driver :
$ sudo apt-get install bluetooth bluez-utils bluez-compat blueman
$ sudo service bluetooth status
2.Arduino Code:
String val;
int E1 = 5; //M1 Speed Control
int E2 = 6; //M2 Speed Control
int M1 = 4; //M1 Direction Control
int M2 = 7; //M1 Direction Control
void setup() {
Serial1.begin(115200);
pinMode(M1, OUTPUT);
pinMode(E1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(E2, OUTPUT);
}
void loop() {
while (Serial1.available() > 0)
{
val += char(Serial1.read());
delay(2);
}
if (val.length() > 0)
{
if (val.equals("1") == true)
{
//Forward
digitalWrite(M1, HIGH);
digitalWrite(M2, HIGH);
analogWrite(E1, 150);
analogWrite(E2, 150);
}
else if (val.equals("2") == true)
{
//Left
digitalWrite(M1, HIGH);
digitalWrite(M2, LOW);
analogWrite(E1, 150);
analogWrite(E2, 150);
}
else if (val.equals("3") == true)
{
//Stop
analogWrite(E1, 0);
analogWrite(E2, 0);
}
else if (val.equals("4") == true)
{
//Right
digitalWrite(M1, LOW);
digitalWrite(M2, HIGH);
analogWrite(E1, 150);
analogWrite(E2, 150);
}
else if (val.equals("5") == true)
{
//Backward
digitalWrite(M1, LOW);
digitalWrite(M2, LOW);
analogWrite(E1, 150);
analogWrite(E2, 150);
}
val = "";
}
}
3.bluetooth pair and serial port from terminal on linux
a.Device Pairing
$ sudo apt-get install bluez bluez-tools
$ hciconfig
$ hcitool scan
$ bluez-simple-agent xx:xx:xx:xx:xx #the bluetooth device you want to pair
In /etc/bluetooth/rfcomm.conf:
rfcomm 0 {
bind no;
device xx:xx:xx:xx:xx;
channel 1;
comment "Serial Port";
}
$ sudo rfcomm0 connect 0
4.Python Code
import serial
port = "/dev/rfcomm0"
stop = "3"
ser = serial.Serial(port,9600)
ser.write(stop)
ser.flushInput()
tip: Raspberry Pi: run shell at startup
#!/bin/bash
#file path:/home/pi/mystart.sh
cd /home/pi/flasky
sudo rfcomm0 connect 0 & sudo python hello.py runserver - 0.0.0.0 -p 80