美文网首页玩转树莓派树莓派树莓派
树莓和Arduino之间的蓝牙通讯

树莓和Arduino之间的蓝牙通讯

作者: YellowTag | 来源:发表于2019-03-14 23:25 被阅读3次

    前言

    原来是打算用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

    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连接之后闪烁变慢,未连接时候闪烁的很快

    相关文章

      网友评论

        本文标题:树莓和Arduino之间的蓝牙通讯

        本文链接:https://www.haomeiwen.com/subject/ijxkmqtx.html