树莓派和Arduino之间的通信主要有三种方式,即USB对接,GPIO对接和I2C总线对接。本文主要学习一下使用USB进行对接。(以及GPIO的准备工作)。
硬件准备:
硬件 | 数量 |
---|---|
Arduino UNO | 一块 |
Arduino UNO的USB接口线 | 一条 |
树莓派3B+ | 一块 |
显示器(视情况而定) | 一块 |
鼠标、键盘等(视情况而定) | 各一个 |
树莓派3B+的充电线 | 一条 |
环境搭配:
Arduino的IDE(我的版本是1.8.5的),树莓派里的系统(任何一个Linux均可,一般树莓派有自己的),还有树莓派中的Python环境(我的是2.7.13,建议是2.7以上的版本)。
以上的安装我假定你们都完成了
那么接下来就是这两个硬件之间的通信需要的环境。
首先是安装Python的两个库RPi.GPIO和serial,前一个是可控制LED、电机什么的,后一个是串口通信,用于发送消息的。
#在普通用户下进行操作(也可以是root,这样下面的sudo就不用输入了)
#下载GPIO库
wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.6.2.tar.gz
#解压
tar -xvzf RPi.GPIO-0.6.2.tar.gz
#进入解压后的目录(文件夹)
cd RPi.GPIO-0.6.2
#安装GPIO库文件(权限不够加sudo)
python setup.py install
#一般现在的系统里面都有这个库
sudo apt-get install python-serial
接下来我们验证一下是否装好了这两个库
#新建一个test.py的测试文件
touch test.py
#使用vim进行编辑(vim可能要自己装,sudo apt-get install vim)
vim test.py
输入的内容如下:
vim的使用相信在座的各位都会。
接下来运行这个文件
#使用Python运行
python test.py
如果没有报错证明安装成功了,如下:
那么我们需要的环境配置就完成了,前戏结束,接下来就是正餐,即连接这两大硬件了。
USB对接:
首先我们检查一下端口:
#输入如下命令
ls /dev/tty*
接下来我们把Arduino和树莓派连接起来:
接着输入上述的命令,我们会发现:
因此多了个这个/dev/ttyACM0(此ACM非彼ACM)端口。有这个说明可以通信了,接下来先给Arduino烧录如下代码:
void setup(){
Serial.begin(9600); // 9600波特率
}
void loop() {
if ( Serial.available())//判断串口缓存区有没有数据
{
if('s' == Serial.read())//有数据就用read来读取并判断是不是s
Serial.println("Hello Raspberry,I am jiayu's Arduino.");//是的话就向串口打印这串字符
}
}
(可以在树莓派中下载Arduino的IDE进行烧录,也可以在Windows上的IDE进行烧录,在Linux里的话需要下载Arduino的IDE命令也很简单:sudo apt-get install arduino)。
在树莓派中新建一个文件用来写Python的程序:
#新建.py文件
touch communication.py
#使用vim进行编辑,和上面一样
vim communication.py
输入以下的代码:
#-*-coding:UTF-8-*-
import serial #导入serial库
ser = serial.Serial('/dev/ttyACM1', 9600,timeout=1); #打开端口,每一秒返回一个消息
#try模块用来结束循环(靠抛出异常)
try:
while 1:
ser.write('s');#写s字符
response = ser.readall();#用response读取端口的返回值
print response;#进行打印
except:
ser.close();#抛出异常后关闭端口
保存退出即可(相信你已经会熟练使用vim了 )。
输入命令运行程序就行了:
#如果权限不够前面就加上sudo
python communication.py
运行结果如下:(Ctrl+z结束,也就是代码中的异常)
如此一来我们就完成了树莓派和Arduino的第一个通信,本文也就接近尾声了。
以上是我的总结至于Arduino的使用,树莓派的安装,树莓派上Python的安装,以及vim的一般使用,我都假定你们已经完成或者有基础了。本文主要讲解如何连接两个硬件。由于本人能力有限,难免有疏漏错误之处,欢迎大家指正以及留言探讨。