极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 470|回复: 0

树莓派与arduino i2c通信教程

[复制链接]
发表于 2018-11-24 21:32:32 | 显示全部楼层 |阅读模式
本帖最后由 hm184092 于 2018-11-24 21:32 编辑

树莓派和arduino之间通讯有很多方法,这里讲解一下i2c通信

首先先打开树莓派的i2c功能,新安装的系统 i2c 默认是关闭的,打开就好了
2018-11-24-202238_1366x768_scrot.png
2018-11-24-202725_500x445_scrot.png

系统默认已安装了i2c工具,如果没有就安装一下
  1. sudo apt-get install i2c-tools
复制代码


安装好之后来查看一下已连接树莓派的i2c地址
  1. sudo i2cdetect -y 1
复制代码

捕获.PNG
当然这里看不到任何地址,因为还没有连接任何i2c器件,接下来写一下代码

1.PNG
Wire.begin(8);这里的8是设定arduino的从机地址,这个地址随便设置,范围到255
程序下载到arduino之后,连接树莓派,这里使用的是uno,A4连接树莓派sda,A5连接scl,gnd接gnd,接好之后再来查看一下i2c地址

2.PNG
那个08就是arduino的i2c地址,这说明和树莓派连接成功

接下来写个例子,树莓派通过i2c发送随机数给arduino,ard收到后把这个数通过pwm来点亮led

python代码:
  1. import smbus
  2. import time
  3. import random


  4. bus = smbus.SMBus(1)

  5. while 1:
  6.     val=random.randint(0, 255)  #产生随机数,范围0-255
  7.     bus.write_byte(0x08, val)  #向地址8发送数据
  8.     time.sleep(0.5)            #延时0.5秒
复制代码


arduino代码:
  1. #include <Wire.h>

  2. int a;

  3. void setup() {
  4.   Wire.begin(8);               
  5.   Wire.onReceive(receiveEvent);
  6.   Serial.begin(9600);         
  7.   pinMode(11,OUTPUT);
  8. }

  9. void loop() {
  10.   delay(100);
  11. }


  12. void receiveEvent(int howMany)
  13. {
  14.   while (Wire.available())
  15.   {
  16.     a = Wire.read();
  17.     analogWrite(11,a);
  18.     Serial.println(a);      
  19.   }
  20. }
复制代码

对指令不懂的可以看下语法手册
没有问题后可以看到11号引脚的led灯忽亮忽暗的
回复

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-1-19 00:48 , Processed in 0.048651 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表