首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >I2C:树莓派(主)读阿杜伊诺(从)

I2C:树莓派(主)读阿杜伊诺(从)
EN

Stack Overflow用户
提问于 2017-08-11 21:48:13
回答 1查看 671关注 0票数 2

我想用我的树莓派通过I2C从我的Arduino Mega (以及另一个项目中的Arduino Micro )读取一块数据。代码必须用Perl编写,因为它是我的Home-Automation-Server的一种插件。

我正在使用Device::SMBus接口,并且连接正常,我能够写入和读取单字节。我甚至可以使用寄存器地址为0x00writeBlockData。我随机发现这个地址是有效的。

但是当我想要readBlockData时,似乎没有寄存器地址起作用。

有没有人知道正确的寄存器地址,或者这甚至不是导致错误的问题?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2017-08-12 03:30:12

首先,您要读取哪个(哪些)寄存器?下面是一个使用我的RPi::I2C软件的示例(它应该与您正在使用的发行版非常相似),同时还有一个草图,其中包含一组配置为读/写的伪寄存器。

首先是Perl代码。它读取两个字节(设置为寄存器80的引脚A0analogRead()的输出),然后将这两个字节位移位为16位整数,以获得引脚的完整0-1023值:

代码语言:javascript
复制
use warnings;
use strict;

use RPi::I2C;

my $arduino_addr = 0x04;

my $arduino = RPi::I2C->new($arduino_addr);

my @bytes = $arduino->read_block(2, 80);

my $a0_value = ($bytes[0] << 8) | $bytes[1];

print "$a0_value\n";

这是一个完整的Arduino sketch,您可以查看它,它设置了六个左右的伪寄存器,当指定了每个寄存器时,Arduino将写入或读取相应的数据。如果未指定寄存器,则对0x00寄存器进行操作。

Arduino上的I2C总是在执行onReceive()之前执行onRequest()调用(在使用Wire时),所以我设置了一个全局变量reg来保存寄存器值,我在onReceive()中断中填充了该值,然后在onRequest()调用中使用该值向您指定的伪寄存器发送数据。

草图本身并没有真正做任何有用的事情,我只是将其作为一个示例。它实际上是我的RPi::WiringPi发行版的automated unit test platform的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45636845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档