手把手教你树莓派与Arduino Uno的对接(USB及GPIO方式)

2015-10-273万
AI 快速预览详细 收起
本文介绍了树莓派与Arduino Uno的对接方法,包括USB和GPIO两种方式。首先,详细说明了开发环境的配置,包括安装必要的库文件和驱动程序。接着,提供了具体的代码示例,展示了如何通过USB方式进行通信。此外,还介绍了通过GPIO方式进行对接的方法,特别强调了使用逻辑电平转换器的重要性。最后,提供了配置文件的修改步骤,确保能够成功实现两者之间的通信。
关于树莓派与Arduino Uno如何对接,网络上的资料很少,经本人研究三天终于成功了,总结个教程。它们实现对接的方式至少有三种(USB方式对接、GPIO方式对接、 I2C方式对接、其他)。

本文介绍实现的也是亲测成功的前两种(USB对接,GPIO对接),本人也是初学者,老鸟可以绕道。就以初学者方式说起

一.先说必要的开发环境。

Arduino: 开发环境我是用 arduino-0023 现在是 arduino 1.0.5最新版本这 两个主要是驱别是一些库文件被改动,网络上提供的

教程一般都是以 arduino-0023 这个环境很简单,(你要是在淘宝上买Arduino UNO 卖家都会提供IDE与相应的开发教程)
IDE下载地址http://arduino.cc/en/Main/Software

Arduino与PC连接的USB驱动地址:

PL2303_Prolific_DriverInstaller_v1.8.0.zip : http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41

PL2303_Prolific_DriverInstaller_v1.5.0.zip : ftp://ftp.omega.com/public/DASGroup/products/OM-PL-USBS/PL2303_Prolific_DriverInstaller_v1.5.0.zip

(如果连接失效请用迅雷下载或自己百度) 以上软件x86 x64都可以安装

XP与WIN7都没问题,在WIN8 64下有可能遇到驱动无法使用问题,win8亲测可用,注意安装的时候以管理员身份win7兼容性运行,安装完成之后点击“更新驱动程序软件”才可用。



树莓派:开发环镜我用python 2.7(现在新系统都有自带这个),常用的两个库文件 RPi.GPIO与serial

1.安装python(安装过的请跳到下一步):  sudo aptitude install python-dev
2.安装python的GPIO模块,用于控制LED、电机等(安装过的请跳到下一步)
  命令行下 输入(一行一个命令)
  1. wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.3.1a.tar.gz    (下载GPIO库)
  2.   tar xvzf RPi.GPIO-0.3.1a.tar.gz  (tar解压)
  3.   cd RPi.GPIO-0.3.1a               (进入解压后的文件夹)
  4.   sudo python setup.py install     (安装GPIO库文件)
复制代码
要是看不懂上面的两点请移步到这http://www.shumeipai.net/forum.php?mod=viewthread&tid=939

  3.安装serial,用于串口通信及USB通信:
  1. sudo apt-get install python-serial
复制代码
4.当然你要是想在树莓派装串口调试工具就装:
  1. sudo apt-get install minicom   
复制代码
配置minicom
  1. sudo minicom -s     
复制代码
启动出现配置菜单:选serial port setup
进入串口配置
输入A 配置串口驱动为/dev/ttyAMA0
输入E 配置速率为9600 8N1
输入F 将 Hardware Flow Control 设 为 NO
回车 退出      
由于我们使用minicom作为超级终端控制路由器等设备, 而不是控制modem, 所以需要修改Modem and dialing, 将Init string, Reset string, Hang-up string设置为空. 设置完成后选择Save setup as dfl将当前设置保存为默认设置.    在配置菜单 选Save setup as df1保存(一定要记得这一步)   选Exit退出下次在输入minicon 即可直接进入。
命令minicom是进入串口超级终端画面,而minicom -s为配置minicom。说明/dev/ttyAMA0 对应为串口0 为你连接开发板的端口
。(如何更详细使用说明移步到这http://www.shumeipai.net/forum.php?mod=viewthread&tid=550

接下来测一下环境是否都OK
  1. sudo nano test.py
复制代码
或用xwindow下用python IDE打开一个空的文件输入内容
  1. import serial
  2. import RPi.GPIO
复制代码
保存退出,
    然后运行代码:
  1. python test.py
复制代码
(如果没有报错那就说明RPi.GPIO与serial两个库安装成功)上面环境说完了,重点部份来了

USB对接方式:
  1.插上两个Arduion Uno与树莓派 的USB 然后 在树莓派输入:
  1. ls /dev/tty*
复制代码

查看有没有ttyACM0 这个文件(注只有在两个硬件USB互连的情况下才会有这个。如果两者没有连接是不会有的) 最新的系统一般都会自动生成。看到ttyACMO就说明二者可以通讯了 接下来上测试代码
  Arduino代码:
  1.   byte number = 0;
  2.   void setup(){
  3.      Serial.begin(9600);
  4.   }
  5.   void loop(){
  6.     if (Serial.available())  {
  7.        number = Serial.read();
  8.        Serial.print("character recieved: ");
  9.        Serial.println(number, DEC);
  10.    }
  11.    }
复制代码
先把上面的代码下载的Arduino上然后再把两者USB互接

树莓派python代码:
  1. import serial
  2. ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
  3. ser.open()
  4. ser.write("testing")
  5. try:
  6.     while 1:
  7.              response = ser.readline()
  8.              print response
  9. except KeyboardInterrupt:
  10.     ser.close()
复制代码
保存xxx.py 退出

注:树莓派下的serial与GPIO库都要在root帐户下才能运行

然后运行树莓派代码 python xxx.py(这里的xxx就是你保存的树莓派代码)看到
  1. character recieved: 116
  2. character recieved: 101
  3. character recieved: 115
  4. ...
  5. character recieved: 103
复制代码
说明两者USB通迅成功了


GPIO方式这个高级些就是利用树莓派的pin8(GPIO14) pin10(GPIO15)与Arduion pin0(rx) pin1(tx)的进行对接
注:所需的中间硬件 逻辑电平转换器(这个淘宝上有一个5元钱)要实在没有就用两电阻也行(一个是3.3 KO 一个是1.6KO)线路怎么接后面会讲,千万不要把两个直接用电线对接。两个电压不一样会造烧坏你的Pi。


Anduino  测试代码与上面一样不用做改动

树莓派python代码改动一下就是把 ttyACM0 改为 ttyAMA0 其他的不变之后就成这样
  1. import serial
  2. ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
  3. ser.open()
  4. ser.write("testing")
  5. try:
  6.         while 1:
  7.         response = ser.readline()
  8.         print response
  9. except KeyboardInterrupt:
  10.        ser.close()
复制代码

接下来关键的部份把树莓派配置文件要做一下修改(要看详细的请移步这里 http://www.eeboard.com/bbs/thread-8574-1-1.html)
1.修改cmdline.txt
输入
  1. sudo nano /boot/cmdline.txt
复制代码

看到
  1. dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
复制代码

console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 删除

变成这样
  1. dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
复制代码
ctrl+x 按Y保存退出

2.修改inittab 然后禁止掉从串口登录的功能,

  输入
  1. sudo nano /etc/inittab
复制代码
找到
  1. T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
复制代码
这一行 在前面加个#注释掉这一行变成
  1. #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
复制代码

ctrl+x 按Y保存退出
然后重启树莓派,之后树莓派的pin8(GPIO14) pin10(GPIO15)这两个口就可以当成普通的串口来用了 现在你可以像使用一个普通串口那样使用/dev/ttyMA0了


接下来做硬件的部份的对接
1.逻辑电平转换器方式, 这是我用的中间件(淘宝上有)

接线




树莓派的引脚说明



2用电阻对接的 (这个本人没试过,你们有条件就自己试吧,测试代码与上面的一样)







之后运行上面的python 程序,看到
character recieved: 116

character recieved: 101

character recieved: 115

...

character recieved: 103

那就说明成功了。

参考资料
(USB对接)http://blog.oscarliang.net/conne ... -arduino-usb-cable/
(I2C对接)http://blog.oscarliang.net/raspberry-pi-arduino-connected-i2c/
(GPIO对接)http://blog.oscarliang.net/raspb ... nected-serial-gpio/
(SPI对接)http://mitchtech.net/raspberry-pi-arduino-spi/


关于怎么控制LED 很简单

把LED的正级 就是针脚长的那一端接 树莓派的其中一个GPIO脚如 GPIO 17(pin11) ,LED 负极(短脚)接GND (pin6)

代码如下
  1. import RPi.GPIO as GPIO
  2. import time
  3. GPIO.setmode(GPIO.BCM) #以GPIO编号方式 要是BOARD 那下面的17改为11
  4. GPIO.setup(17,GPIO.OUT)
  5. while True:
  6.         print "set output low"
  7.        GPIO.output(17,GPIO.LOW)
  8.        time.sleep(1)
  9.        print "set output HIGH"
  10.        GPIO.output(17,GPIO.HIGH)
  11.        time.sleep(1)
复制代码
保存运行 你就能看到LED一秒闪一下了

好了就到这了,这是我一个初学者研究三天的成果。接下来看各位的了。

后面我要弄个智能小车 树莓派做上位机 + Arduino做下位机驱动硬件。PC通过WIFI 与树莓派以TCP方式进行远程通迅,控制树莓派.就等着我的好消息。。。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(6)
ldsgrh
ldsgrh
学习备用
峻崖松
峻崖松
福利啊!等你好消息.
qq815076543322
qq815076543322
作者
回复峻崖松
我也在寻找原帖的主任 的后续更新
孙毅
孙毅
牛!哈哈
qq815076543322
qq815076543322
作者
回复孙毅
评论内容
孙毅
孙毅
一到月底,论坛就变的欣欣向荣起来。。。。
还是我比较始终如一 —— 都好冷清啊
qq815076543322
qq815076543322
作者
回复孙毅
哈哈 你的大工程要抓紧
dsweiliang
dsweiliang
刚好需要这个,树莓派能不能Overlord连接呢?Overlord的主板是基于arduino的,然后用树莓派监控Overlord呢?
qq815076543322
qq815076543322
作者
回复dsweiliang
我记得是mostfun这个品牌的打印机 好像是之前在众筹
dsweiliang
dsweiliang回复qq815076543322
求个地址看看用Edison做主控的打印机
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
丄帝De咗臂
丄帝De咗臂
树莓派是Linux系统吧
qq815076543322
qq815076543322
作者
回复丄帝De咗臂
可以跑win10了
- 没有更多了 -