前言
原來是打算用nrf24來做樹莓派和arduino的通訊,因爲nrf24傳的數據量有點小,現在改爲用藍牙來通訊
硬件準備(我的)
- HC-05藍牙
- 樹莓派3b+
- Arduino UNO
Arduino連接藍牙
參考:https://jingyan.baidu.com/article/86f4a73ebd829437d652690d.html
注意:
1.藍牙的TX連接arduino的RX,RX連接TX
樹莓派藍牙準備
因爲我的是3b+版本,所以可以直接從桌面來配對藍牙,但是這裏還是用終端來操作藍牙吧
(樹莓派自帶有藍牙)
參考:
https://blog.csdn.net/faust_cao/article/details/72872079
https://www.cnblogs.com/rayray/p/3157601.html
1.升級安裝一下藍牙的庫
$sudo apt-get update
$sudo apt-get install bluetooth bluez python-bluez
2.打開藍牙控制
$ bluetoothctl
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
3.掃描藍牙設備,找到HC-05的藍牙id
[bluetooth]# scan on
Discovery started
複製紅色方格中的id
4.配對藍牙
[bluetooth]# pair xx:xx:xx:xx
輸入PIN碼(默認是1234)
最後會顯示配對成功
5.連接藍牙
我嘗試用connect命令去連接藍牙,但是會報錯
$sudo rfcomm connect 0 00:14:01:10:10:32
這個地方藍牙的連接是暫時不要着急的,可以先不連接,等到樹莓派要向藍牙發送信息或者藍牙發信息過來給樹莓派的時候系統就會自動連上
6.生成rfcomm0文件
//首先我們退出藍牙控制
exit
//生成rfcomm0文件
sudo rfcomm bind 0 xx:xx:xx:xx(你的藍牙ip)
然後你會發現在/dev目錄下生成了一個新的文件
注意,這一步每次重啓都要輸入一次命令,因爲重啓之後那份文件自動被刪除了
以上我們在硬件方面的準備就完成了,下面是代碼
###樹莓派向Arduino發送數據
樹莓派要使用python文件,我們可以打開編程,然後編寫一段python代碼好,然後編譯什麼的自己可以去查(也可以直接打開這份文件)
樹莓派代碼
#coding=utf-8
import serial
from time import sleep
port='/dev/rfcomm0'
ser=serial.Serial(port,9600)
while(1):
ser.write(bytes("A",'utf-8')) #serial只能傳bytes了而不是string
sleep(.8) #防止串口阻塞
Arduino代碼
void setup() {
Serial.begin(9600);
}
void loop() {
char a;
if(Serial.available()){
a=Serial.read();
Serial.println(a);
}
delay(800);
}
效果
樹莓派接受Arduino數據
樹莓派代碼
#coding=utf-8
import serial
from time import sleep
port='/dev/rfcomm0'
ser=serial.Serial(port,9600)
ser.flushInput() #初始清空一下串口
while(1):
n = ser.inWaiting() #自己去查查
if(n):
a=ser.read(n)
print(a)
sleep(.8)
Arduino代碼
char a[200];
char b[200];
char c[200];
void setup() {
Serial.begin(9600);
for(int i=0;i<200;i++)
{
a[i]='1';
b[i]='2';
c[i]='3';
}
}
void loop() {
for(int i=0;i<10;i++){
Serial.write(a[i]);
}
for(int i=0;i<10;i++){
Serial.write(b[i]);
}
for(int i=0;i<10;i++){
Serial.write(c[i]);
}
delay(800);
}
效果
小技巧:
HC-05連接之後閃爍變慢,未連接時候閃爍的很快