【问题标题】:Transmit consecutively using I2C on Raspberry Pi, python smbus在树莓派上使用 I2C 连续传输,python smbus
【发布时间】:2014-08-06 02:33:13
【问题描述】:

我想通过 I2C 从 Raspberry pi 传输 AVR 或 Arduino 等。 我正在用 Python 编写代码。

我已经使用 smbus 模块中的 write_data() 函数成功地进行了通信。 但是我想连续传输多个字节数据。

请告诉我如何在 i2c 通信中传输多字节数据。 我找到了write_block_data()函数,但是我不明白第二个参数CMD。 什么是CMD??我应该指定 CMD 的值吗?

谢谢。

【问题讨论】:

    标签: python raspberry-pi i2c


    【解决方案1】:

    如果您使用的是 Wire.h 库,那么在 I2C 上的 RPi 和 Arduino 之间的通信会非常混乱。简短的回答是 RPi 正在使用重复启动信号,而 Arduino 没有使用它。

    I2C 接口上的重复启动信号告诉从机开始接听电话。如果 Arduino 询问和回答是在两个单独的电话中。因此你不能发送块

    我写了两篇博文来通过 I2C 连接这两种架构。第一个是使用遥控器PWM:http://distantorion.com/2014/10/24/rc-signals-pwm-to-i2c-with-arduino/ 第二个是用于在 I2C 上驱动 128x64 LCD 显示器:http://distantorion.com/2014/11/01/i2c-display-with-arduino/

    在第二个中,我在 python 中使用块数据:

    bus.write_i2c_block_data(0x05,0x10,buff)
    

    0x05是设备地址,0x10是“命令”,buff包含要显示的字符。

    关于命令。在 I2C 中,从机以命令或寄存器的方式工作。两种方法看起来都一样。如果您使用重复启动信号,则通信似乎是在读取和写入寄存器。当您没有重复的启动信号时,通信看起来就像一个命令 - 应答系统。在我的示例中,我发送 0x10 什么是“将字符从显示器上显示”。 0x01是清屏指令,0x02是开背光。

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2016-07-12
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多