樹莓和Arduino之間的藍牙通訊

前言

原來是打算用nrf24來做樹莓派和arduino的通訊,因爲nrf24傳的數據量有點小,現在改爲用藍牙來通訊

硬件準備(我的)

  • HC-05藍牙
  • 樹莓派3b+
  • Arduino UNO

Arduino連接藍牙

參考:https://jingyan.baidu.com/article/86f4a73ebd829437d652690d.html
image.png

注意:
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

image.png

3.掃描藍牙設備,找到HC-05的藍牙id

[bluetooth]# scan on 
Discovery started

image.png

複製紅色方格中的id

4.配對藍牙

[bluetooth]# pair xx:xx:xx:xx

image.png

輸入PIN碼(默認是1234)
最後會顯示配對成功

5.連接藍牙
我嘗試用connect命令去連接藍牙,但是會報錯

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

image.png


在這裏插入圖片描述

這個地方藍牙的連接是暫時不要着急的,可以先不連接,等到樹莓派要向藍牙發送信息或者藍牙發信息過來給樹莓派的時候系統就會自動連上

6.生成rfcomm0文件

//首先我們退出藍牙控制
exit 
//生成rfcomm0文件
sudo rfcomm bind 0 xx:xx:xx:xx(你的藍牙ip)

然後你會發現在/dev目錄下生成了一個新的文件
image.png

注意,這一步每次重啓都要輸入一次命令,因爲重啓之後那份文件自動被刪除了

以上我們在硬件方面的準備就完成了,下面是代碼
###樹莓派向Arduino發送數據
樹莓派要使用python文件,我們可以打開編程,然後編寫一段python代碼好,然後編譯什麼的自己可以去查(也可以直接打開這份文件)
image.png

樹莓派代碼

#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);       
  }


效果

image.png

樹莓派接受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);       
  }

效果

image.png


小技巧:
HC-05連接之後閃爍變慢,未連接時候閃爍的很快

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章