树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)

前言:

Arduino的优点主要是具有丰富的外围硬件及类库支持,同时具备模拟引脚和数字引脚(MEGA、Due具有更多的引脚),缺点主要是作为一款单片机,其运算能力不太足(8位字长16MHz时钟频率的配置跟C51、STM32、ESP系列甚至micro:bit相比整体都有一定差距)。树莓派作为一台嵌入式Linux系统计算机,其算力毋庸置疑,不过其虽然有40个引脚,但是可用的GPIO引脚只有17个,且不含模拟输入引脚。其GPIO口的输入电压不能超过3.3v,而多数传感器、执行器的工作电压是5v,这将导致无法直接使用它们。再者树莓派硬件编程没有丰富的类库支持,这就需要自己不断造轮子,很烦人。个人认为比较理想的方式是将树莓派和Arduino结合起来,树莓派作为上位机承担图形图像处理、服务器程序运行、指令发布等任务,Arduino作为下位机负责从传感器获取数据,驱动执行器、显示器等任务,二者高低搭配,协作解决问题。如此一来二者的通信就是一个需要亟待解决的问题,基本的通信方式有基于IIC协议、SPI协议、UART串口等。从便捷性上考虑,USB串口通信仅需要将USB转Type-B线连接至树莓派和Arduino两端,就跟Arduino和Windows通信一样,从通信距离里上考虑,树莓派4b板载蓝牙5.0,Arduino连接HC蓝牙模块,二者之间进行无线通信,不受线长限制,也是理想选择。下面就分别介绍这两种通信方式。

一、USB串口通信:

使用USB转Type-B线连接树莓派和Arduino(使用USB转TTL线连接至ArduinoTX0 RX0也是同样效果),打开树莓派LX终端输入:

ls /dev/tty*

查看串口列表里面是否出现

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第1张图片

(插入的USB接口不同看到的的序号可能也会有所不同)该串口就是我们要使用的通信串口

接下来安装pyserial库,而且不要安装serial库,但是在编程时要导入serial

sudo apt-get install python-serial

树莓派代码:

import serial
import time
com0="/dev/ttyUSB0"
com1="/dev/ttyUSB1"

ser=serial.Serial(com0,9600,timeout=1)#设置串口、波特率、超时时间

#打印相应信息用于查看
print("Serial name:",ser.name)
print("Serial baudrate:",ser.baudrate)
print("Serial state:",ser.is_open)


try:
   while 1:   

       #读取数据并打印    
       res=ser.readline()
       print(res)

       #串口发送数据
       #time.sleep(1)
       #ser.write("Hello! I am Raspberry!".encode("utf-8"))
    
except:
    ser.close()

树莓派里面没有安装arduino的话先安装一下

sudo apt-get install arduino

然后就像在windows下给Arduino编程一样,编写并下载程序

Arduino代码:

int count=0;
void setup(){
  Serial.begin(115200);
}

void loop(){
    
    //接受数据
    String str="";
    while(Serial.available()){
       char ch=Serial.read();
       str+=ch;
       delay(10);
     }
    if(str.length()>0)
    Serial.println(str);
    
//    发送数据
//    count++;
//    Serial.print("Hello ,I am Arduino!");
//    Serial.print(count);
//    delay(1000);

}

运行结果:

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第2张图片

 

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第3张图片

 

二、蓝牙串口通信

这里采用的是HC-02蓝牙模块(HC-05、HC-06包括BLE蓝牙都可以),首先将蓝牙模块接到Arduino上面(以连接至Serial3),其次在树莓派的图形界面上点击蓝牙按钮,完成蓝牙配对。然后进入LX 终端输入:

bluetoothctl

扫描可用蓝牙:

scan on

找到我们的蓝牙设备:

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第4张图片

在dev目录下建立相应的蓝牙配置文件,则以后可以自动连接到该蓝牙设备

sudo rfcomm bind XXX刚才的蓝牙MAC地址XXX

查看是否建立完成:

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第5张图片

一切就绪后开始编程,与上面的代码类似:

树莓派代码:

import serial
import time
com0="/dev/ttyUSB0"
com1="/dev/ttyUSB1"
com2="/dev/rfcomm0"

ser=serial.Serial(com2,9600,timeout=1)#设置串口、波特率、超时时间

#打印相应信息用于查看
print("Serial name:",ser.name)
print("Serial baudrate:",ser.baudrate)
print("Serial state:",ser.is_open)


try:
   while 1:   

       #读取数据并打印    
       res=ser.readline()
       print(res)

       #串口发送数据
       #time.sleep(1)
       #ser.write("Hello! I am Raspberry!".encode("utf-8"))
    
except:
    ser.close()

为了更好的演示,同时避免干扰,此时在windows上面对Arduino进行编程

Arduino代码:

int count=0;
void setup(){
  Serial.begin(115200);
  Serial3.begin(9600);//HC-02默认波特率9600
}

void loop(){
    
    //接受数据
    String str="";
    while(Serial3.available()){
       char ch=Serial3.read();
       str+=ch;
       delay(10);
     }
    if(str.length()>0)
    Serial.println(str);
    
//    发送数据
//    count++;
//    Serial3.print("Hello ,I am Arduino!");
//    Serial3.print(count);
//    delay(1000);

}

 

运行结果:

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第6张图片

 

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第7张图片

 

OK!

最后放个实物图吧!

 

树莓派和Arduino通信测试(基于USB串口和BT蓝牙串口)_第8张图片

 

你可能感兴趣的:(树莓派,arduino)