查看: 62022|回复: 10

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

  [复制链接]
  • TA的每日心情
    慵懒
    2013-9-17 22:47
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-8-8 09:47:39 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 ky123 于 2018-3-2 09:58 编辑

    关于树莓派与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()
    复制代码
    接下来关键的部份把树莓派配置文件要做一下修改(要看详细的请移步这里 https://www.cirmall.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.逻辑电平转换器方式, 这是我用的中间件(淘宝上有)

    000609ms9ws1gwqpqs9ens.jpg
    接线
    000621ncdc0v8d0fmm27o7.png

    树莓派的引脚说明
    000630wob059wz0wn5vhbk.png

    000645y6rv6so1ozdtj6vy.jpg

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

    000703jrhmunl10il1xaz0.png
    000717gppey7jd8mmop4je.jpg


    之后运行上面的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方式进行远程通迅,控制树莓派.就等着我的好消息。。。

    传送门——智能监控小车树莓派+Arduino


    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2013-9-17 22:47
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2013-8-8 10:09:49 | 显示全部楼层
    heiketiguo 发表于 2013-8-8 10:06
    介绍的很详细,有个问题树莓派上不是有5V的引脚吗,为什么用3.3V的引脚?

    因为树莓派的GPIO高低电平是3.3V的(你用万用表测就知了)。所以要接3.3V,不能接5V
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-12-14 11:43
  • 签到天数: 556 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-8-9 12:45:18 | 显示全部楼层
    大神的帖子,顶一个!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-8-4 11:18
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-8-12 10:26:14 | 显示全部楼层
    不错哈,电平转换那个我上次买了俩
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-27 11:54
  • 签到天数: 309 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-12-28 13:03:13 | 显示全部楼层
    学习了,多谢分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-4-21 16:43:02 | 显示全部楼层
    一根USB对接线直接连接树莓派和Arduino的USB接口吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-13 19:58
  • 签到天数: 1818 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-4-25 14:59:21 | 显示全部楼层
    写的很详细,图文并茂,学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-9-11 12:54
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-9-9 17:06:07 | 显示全部楼层
    学习了。

    http://surenpi.com
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-12-29 17:38
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-12-28 13:18:17 | 显示全部楼层
    学习了,收藏下次使用
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-8-16 16:42:25 | 显示全部楼层
    有没有树莓派与arduino通信(usb)的视频啊
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|电路城

    GMT+8, 2022-8-13 20:26 , Processed in 0.194986 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.