完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
关于树莓派与Arduino UNO的对接,网上的资料也有不少,无外乎三种方式(USB方式,GPIO方式,IIC方式),其中最容易实现的就是第一种了,相比于第二种方式不需要额外的硬件,相比于第三种方式通讯协议比较简洁,所以我想就第一种实现方式详细分享一下。
一、首先准备必要的开发环境 Arduino:直接在官网下载最新的IDE即可 在这里我提供一种比较方便的下载方式吧,利用apt直接下载安装,特别方便哦 二、环境说明 Raspberry: 硬件:Raspberry Pi 3B 软件:树莓派系统 Arduino: 硬件:Arduino mega2560 软件:Arduino IDE 1.8.2(目前最新版) 三、 安装Arduino IDE sudo apt-get install arduino 安装完成在shell脚本里敲入 sudo arduino 即可启动IDE了 四、基本使用 1.将Arduino开发板插到Raspberry的任一USB接口 因树莓派USB口驱动能力有限,强烈建议Arduino板的供电接口同时外接9-12V的电源适配器供电! 2.配置通信端口 主菜单:Tools -》 Port:”/dev/ttyxxx” -》 选择”/dev/ttyACM0(Arduino/Genuino Uno)” 或者 ls /dev 就可以看到新的串口了,一般USB转串口都是ttyACM*的形式 3.验证效果 3.1 主菜单:File -》 Examples -》 01.Basics -》 Blink 3.2 点击工具栏第二个人按钮(Upload) 我现在采用的方式是WiringPi 首先我们需要安装WiringPi ,至于如何安装WiringPi,我在上篇博客已经提过了,在这里我就不在赘述了 现在我们做个试验, 在树莓派里新建一个脚本,向arduino发送数据,同时将aduino的数据传到树莓派串口上显示: 小博闲着无聊,把别人博客的代码搬过来写成了C++的,见程序,下满程序是向Arduino发送了一个数字,同时接受Arduino返回的数据这里是I2C通信方式, I2C通信方式安装参考 #include 《stdio.h》 #include 《wiringPiI2C.h》 int main(void) { int value,back_val; const int devId = 0x55; int fd = wiringPiI2CSetup(devId); if (fd 《 0) { printf(“Error setup I2C device %dn”, devId); return 1; } while(1){ printf(“please enter a number(0-255):n”); scanf(“%d”,&value); wiringPiI2CWrite(fd,value); printf(“RPI:Hello Arduino ,I send a digital %dn”,value); back_val=wiringPiI2CRead(fd); printf(“back_val=%dn”,back_val); } return 0; } 下面我们用传感器来做测试: 树莓派有很好的数据处理能力,但是因为其扩展IO较少,而且没有将AD引脚引出,所以采集数据较麻烦,Arduino则相反,本身实现了很多传感器的驱动,引出了很多标准的VCC+GND+信号的三针管脚,很方便的采集信息。而且Arduino可以很方便的通过其IDE编程,不用自己写驱动。所以尝试使用树莓派+Arduino实现简单的采集处理。 使用到的硬件:树莓派、Arduino、LM35温度传感器。 连接:Arduino可以插在树莓派上,并通过树莓派u***接口与Arduino端连接,LM35为输出为电压信号,所以与Arduino的A0~A5中的任意一组管脚连接即可。 vi pythontest.py 然后将下面脚本copy进去即可 import serialimport time#选定串口port = “/dev/ttyACM0”#设置波特率serialFromArduino = serial.Serial(port,9600)serialFromArduino.flushInput()while True: if(serialFromArduino.inWaiting() 》 0): input = serialFromArduino.readline() inputAsInterger = int(input) print(“inputAsInterger = ” + str(inputAsInterger)) print(“Temperature: ” + str(inputAsInterger*5/10.24)) time.sleep(1) Arduino代码 const int analogInPin = A0;int sensorValue = 0;void setup(){ Serial.begin(9600);}void loop(){ sensorValue = analogRead(analogInPin); Serial.println(sensorValue, DEC); delay(2000);} |
|
|
|
只有小组成员才能发言,加入小组>>
2371 浏览 0 评论
8683 浏览 4 评论
36409 浏览 18 评论
4967 浏览 0 评论
24179 浏览 34 评论
1337浏览 2评论
1586浏览 1评论
1954浏览 1评论
1400浏览 0评论
1835浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 18:58 , Processed in 0.965216 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号