CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 13799|回复: 10

Cubieboard用I2C连接Arduino

[复制链接]
发表于 2013-8-4 21:05:23 | 显示全部楼层 |阅读模式
今天早上怒过了(参见1602帖子),晚上又准备怒——cb开发者们干嘛去了,i2c驱动也没人试一下
那我就来试一下吧
参见http://blog.oscarliang.net/raspberry-pi-arduino-connected-i2c/,这是树梅派的。
我爱python!!!因为这个东西rpi和cb都能跑,而且差不多
我已经安装好python了,所以安装包:
  1. apt-get install python-smbus i2c-tools -y
复制代码
然后参见http://linux-sunxi.org/Cubieboard/ExpansionPortshttp://linux-sunxi.org/A10/PIO发现只引出了PB18 19,<!--[注释,这句别看]cb设计者干什么去了,才弄96Pin,干嘛不把每个脚都引出来……-->
好吧,开始,我用的是arduino mega,引脚配置:
20 -> SDA
21-> SCL
如果是UNO:
A4 -> SDA
A5 -> SCL
我是这么接的:
Arduino Mega USB -> CB USB
Arduino Pin-No.20 -> CB PB19
Arduino Pin-No.21 -> CB PB20
然后扫描一下:
  1. i2cdetect -y 1
复制代码
不出问题的话:
  1.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
  2. 00:          -- 04 -- -- -- -- -- -- -- -- -- -- --
  3. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  4. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  5. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  6. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  7. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  8. 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  9. 70: -- -- -- -- -- -- -- --   
复制代码
Arduino代码:
  1. #include <Wire.h>

  2. #define SLAVE_ADDRESS 0x04
  3. int number = 0;
  4. int state = 0;

  5. void setup() {
  6.     pinMode(13, OUTPUT);
  7.     Serial.begin(9600);         // start serial for output
  8.     // initialize i2c as slave
  9.     Wire.begin(SLAVE_ADDRESS);

  10.     // define callbacks for i2c communication
  11.     Wire.onReceive(receiveData);
  12.     Wire.onRequest(sendData);

  13.     Serial.println("Ready!");
  14. }

  15. void loop() {
  16.     delay(100);
  17. }

  18. // callback for received data
  19. void receiveData(int byteCount){

  20.     while(Wire.available()) {
  21.         number = Wire.read();
  22.         Serial.print("data received: ");
  23.         Serial.println(number);

  24.         if (number == 1){

  25.             if (state == 0){
  26.                 digitalWrite(13, HIGH); // set the LED on
  27.                 state = 1;
  28.             }
  29.             else{
  30.                 digitalWrite(13, LOW); // set the LED off
  31.                 state = 0;
  32.             }
  33.          }
  34.      }
  35. }

  36. // callback for sending data
  37. void sendData(){
  38.     Wire.write(number);
  39. }
复制代码
Python代码:
【我就直接抄过来了,不改了】
  1. import smbus
  2. import time
  3. # for RPI version 1, use "bus = smbus.SMBus(0)"
  4. bus = smbus.SMBus(1)

  5. # This is the address we setup in the Arduino Program
  6. address = 0x04

  7. def writeNumber(value):
  8.     bus.write_byte(address, value)
  9.     # bus.write_byte_data(address, 0, value)
  10.     return -1

  11. def readNumber():
  12.     number = bus.read_byte(address)
  13.     # number = bus.read_byte_data(address, 1)
  14.     return number

  15. while True:
  16.     var = input("Enter 1 - 9: ")
  17.     if not var:
  18.         continue

  19.     writeNumber(var)
  20.     print "RPI: Hi Arduino, I sent you ", var
  21.     # sleep one second
  22.     time.sleep(1)

  23.     number = readNumber()
  24.     print "Arduino: Hey RPI, I received a digit ", number
  25.     print
复制代码
然后运行:
  1. root@cubieboard:~# python i2c.py
  2. Enter 1 - 9: 1
  3. RPI: Hi Arduino, I sent you  1
  4. Arduino: Hey RPI, I received a digit  1

  5. Enter 1 - 9: 8
  6. RPI: Hi Arduino, I sent you  8
  7. Arduino: Hey RPI, I received a digit  8

  8. Enter 1 - 9: 9
  9. RPI: Hi Arduino, I sent you  9
  10. Arduino: Hey RPI, I received a digit  9

  11. Enter 1 - 9: 6
  12. RPI: Hi Arduino, I sent you  6
  13. Arduino: Hey RPI, I received a digit  6

  14. Enter 1 - 9: 1
  15. RPI: Hi Arduino, I sent you  1
  16. Arduino: Hey RPI, I received a digit  1

  17. Enter 1 - 9: 1   
  18. RPI: Hi Arduino, I sent you  1
  19. Arduino: Hey RPI, I received a digit  1
复制代码
输入1的话可以切换板载LED灯的状态

回复

使用道具 举报

发表于 2013-8-4 22:12:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-4 22:41:50 | 显示全部楼层
matson 发表于 2013-8-4 22:12
http://cn.cubieboard.org/forum.php?mod=viewthread&tid=794&extra=

你这个是连接时钟,我这个是连接arduio,是有程序的,比你更深一层,而且你那个还没完全成功,不过是我没发现啦……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-4 22:42:44 | 显示全部楼层
matson 发表于 2013-8-4 22:12
http://cn.cubieboard.org/forum.php?mod=viewthread&tid=794&extra=

另外matson你有SPI的吗……我的时钟是SPI的……
回复 支持 反对

使用道具 举报

发表于 2013-8-4 22:42:54 | 显示全部楼层
tll 发表于 2013-8-4 22:41
你这个是连接时钟,我这个是连接arduio,是有程序的,比你更深一层,而且你那个还没完全成功,不过是我没 ...

嗯。我只是简单的把rtc(i2c接口)try通~呵呵
回复 支持 反对

使用道具 举报

发表于 2013-8-4 22:45:01 | 显示全部楼层
tll 发表于 2013-8-4 22:42
另外matson你有SPI的吗……我的时钟是SPI的……

改天找个人玩玩。现在cb2 lubuntu v1.04里包含了pwm,我测试过了,可以用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-4 22:46:31 | 显示全部楼层
matson 发表于 2013-8-4 22:45
改天找个人玩玩。现在cb2 lubuntu v1.04里包含了pwm,我测试过了,可以用

pwm?不是spi?
回复 支持 反对

使用道具 举报

发表于 2013-8-4 22:49:11 | 显示全部楼层
tll 发表于 2013-8-4 22:46
pwm?不是spi?

spi我手头上没有这个接口的设备,有什么好的设备玩玩?呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-4 22:52:47 | 显示全部楼层
matson 发表于 2013-8-4 22:49
spi我手头上没有这个接口的设备,有什么好的设备玩玩?呵呵

您有Arduino吗?这个就可以
回复 支持 反对

使用道具 举报

发表于 2013-12-29 23:04:29 | 显示全部楼层
真得向各位学习。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-24 02:44 , Processed in 0.024603 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部