概述
关于树莓派与Arduino Uno如何对接,网络上的资料很少,经本人研究三天终于成功了,总结个教程。它们实现对接的方式至少有三种(U
SB方式对接、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、电机等(安装过的请跳到下一步)
命令行下 输入(一行一个命令)
- wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.3.1a.tar.gz (下载GPIO库)
- tar xvzf RPi.GPIO-0.3.1a.tar.gz (tar解压)
- cd RPi.GPIO-0.3.1a (进入解压后的文件夹)
- sudo python setup.py install (安装GPIO库文件)
3.安装serial,用于串口通信及USB通信:
- sudo apt-get install python-serial
- sudo apt-get install minicom
- sudo minicom -s
进入串口配置
输入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
- sudo nano test.py
输入内容
- import serial
- import RPi.GPIO
然后运行代码:
- python test.py
USB对接方式:
1.插上两个Arduion Uno与树莓派 的USB 然后 在树莓派输入:
- ls /dev/tty*
Arduino代码:
- byte number = 0;
- void setup(){
- Serial.begin(9600);
- }
-
- void loop(){
- if (Serial.available()) {
- number = Serial.read();
- Serial.print("character recieved: ");
- Serial.println(number, DEC);
- }
- }
树莓派python代码:
- import serial
- ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
- ser.open()
-
- ser.write("testing")
- try:
- while 1:
- response = ser.readline()
- print response
- except KeyboardInterrupt:
- ser.close()
注:树莓派下的serial与GPIO库都要在root帐户下才能运行
然后运行树莓派代码 python xxx.py(这里的xxx就是你保存的树莓派代码)看到
- character recieved: 116
- character recieved: 101
- character recieved: 115
- ...
- character recieved: 103
GPIO方式这个高级些就是利用树莓派的pin8(GPIO14) pin10(GPIO15)与Arduion pin0(rx) pin1(tx)的进行对接
注:所需的中间硬件 逻辑电平转换器(这个淘宝上有一个5元钱)要实在没有就用两电阻也行(一个是3.3 KO 一个是1.6KO)线路怎么接后面会讲, 千万不要把两个直接用电线对接。两个电压不一样会造烧坏你的Pi。
Anduino 测试代码与上面一样不用做改动
树莓派python代码改动一下就是把 ttyACM0 改为 ttyAMA0 其他的不变之后就成这样
- import serial
- ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
- ser.open()
-
- ser.write("testing")
- try:
- while 1:
- response = ser.readline()
- print response
- except KeyboardInterrupt:
- ser.close()
-
1.修改cmdline.txt
输入
- sudo nano /boot/cmdline.txt
- dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
变成这样
- dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
2.修改inittab 然后禁止掉从串口登录的功能,
输入
- sudo nano /etc/inittab
- T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
- #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
然后重启树莓派,之后树莓派的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)
代码如下
- import RPi.GPIO as GPIO
- import time
- GPIO.setmode(GPIO.BCM) #以GPIO编号方式 要是BOARD 那下面的17改为11
- GPIO.setup(17,GPIO.OUT)
- while True:
- print "set output low"
- GPIO.output(17,GPIO.LOW)
- time.sleep(1)
- print "set output HIGH"
- GPIO.output(17,GPIO.HIGH)
- time.sleep(1)
好了就到这了,这是我一个初学者研究三天的成果。接下来看各位的了。
后面我要弄个智能小车 树莓派做上位机 + Arduino做下位机驱动硬件。PC通过WIFI 与树莓派以TCP方式进行远程通迅,控制树莓派.就等着我的好消息。。。
最后
以上就是复杂秋天为你收集整理的树莓派与Arduino Uno的对接(USB及GPIO方式)的全部内容,希望文章能够帮你解决树莓派与Arduino Uno的对接(USB及GPIO方式)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复