我是靠谱客的博主 哭泣电灯胆,最近开发中收集的这篇文章主要介绍树莓派与arduino通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、安装树莓派及arduino开发环境

1、arduino开发环境在前面的文章中已经说明,有需要的朋友可以参看“arduino控制二路电机运动”这篇博文。


2、搭建树莓派串口通信开发环境

(1)安装python:

     sudo apt-get update

      sudo apt-get install python

         (2)安装python的GPIO模块,用于控制LED、电机等:

          wget https://sourceforge.net/projects/raspberry-gpio-python/files/RPi.GPIO-0.6.2.tar.gz    (下载GPIO库,因为更新,具体参考官网网址变动)

          tar xvzf RPi.GPIO-0.6.2.tar.gz  (tar解压)

         cdRPi.GPIO-0.6.2               (进入解压后的文件夹)

         sudo python setup.py install     (安装GPIO库文件)

   (3)安装serial,用于串口通信及USB通信:

      sudo apt-get install python-serial

     (4)检验前三步环境安装是否正确

     #用nano编辑器编辑一个test文件

     sudo nano test.py  

     #在test.py文件中写入下面两行代码

     import serial

     import RPi.GPIO

     #运行python test.py语句,如果没有报错说明树莓派开发环境搭建正确。

到此树莓派及arduino通信开发环境搭建完毕,下面讲解具体通信实现。

二、树莓派与arduino通过USB进行通信

1、将树莓派与arduino通过usb线进行连接


2、在树莓派终端输入 ls /dev/tty*查看两者连接端口的名字。查看有没有ttyACM0 这个文件(注只有在两个硬件USB互连的情况下才会有这个。如果两者没有连接是不会有的) 最新的系统一般都会自动生成。看到ttyACM0就说明二者可以通讯了 接下来上测试代码。


3、编写树莓派与arduino通信代码。

arduino代码:

void setup() 
{
  Serial.begin(9600); // 9600 bps
}
void loop()
{
  if ( Serial.available())
    {
      if('s' == Serial.read())
        Serial.println("Hello Raspberry,I am Arduino.");
     }
}

把上面代码通过python IDE下载到arduino中,然后再再与树莓派usb链接。

树莓派代码:

import serial    #import serial module
ser = serial.Serial('/dev/ttyACM1', 9600,timeout=1);   #open named port at 9600,1s timeot

#try and exceptstructure are exception handler
try:
  while 1:
    ser.write('s');#writ a string to port
    response = ser.readall();#read a string from port
    print response;
except:
  ser.close();

我这里把上面代码在树莓派中保存为communication.py文件。

2、在树莓派终端输入sudo python communication.py运行程序。

显示结果:


此图是两者之间的通信结果:树莓派向arduino发送一个字符‘s’,arduino向树莓派回复字符串“hello raspberry,i am arduino”。

三、树莓派与arduino通过GPIO引脚通信


1、连接方式:

          树莓派的RX       -----      arduino的TX

          树莓派的TX       -----      arduino的RX

          树莓派的GND      -----      arduino的GND

2、修改树莓派配置文件(要看详细的请移步这里 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/ttyAMA0了。


3、实验代码及效果

只需要将上面USB通信树莓派上的代码ser = serial.Serial('/dev/ttyACM1', 9600,timeout=1); 中的ttyACM1改成ttyAMA0即可。




到此树莓派与arduino通过USB和GGPIO两种通信方式介绍完毕。



最后

以上就是哭泣电灯胆为你收集整理的树莓派与arduino通信的全部内容,希望文章能够帮你解决树莓派与arduino通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部