首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用扭曲的串口/协议类定义i2c地址

如何使用扭曲的串口/协议类定义i2c地址
EN

Stack Overflow用户
提问于 2019-09-03 11:36:24
回答 1查看 121关注 0票数 0

我正在尝试使用扭曲的方式访问I2C设备。这两种设备都位于同一个I2C端口/dev/i2c-1上,并且具有不同的地址(0x68,0x69)。我的问题是,我很难理解在我的代码逻辑中应该在哪里为我的设备指定I2C地址。

我有一个现有的工作脚本,它使用扭曲的SerialPort、协议和工厂从不同的传感器接收输入。下面的代码所缺少的是指示从哪个I2C地址读取传入数据的方法。我在I2cProtocol扩展的GitHub上找到了扭曲的协议类,并尝试根据我的目的对它进行修改,但是该扩展中的i2c地址是在接收到的数据上访问的。如果我在同一个I2C端口上有两个设备,我就不会指望它能工作。

为了简单起见,这是我的脚本的简化版本,展示了与I2C设备有关的部分:

代码语言:javascript
复制
from twisted.internet import reactor
from twisted.internet.serialport import SerialPort
from twisted.internet.protocol import Protocol

class IMU_Protocol(Protocol):
#Class to log IMU 
    def constants(self, sensor, I2C_ADDR):
        self.sensor    = sensor
        self.I2C_ADDR  = I2C_ADDR

    def dataReceived(self, data):
        print 'dataReceivedIMU called', time.time()
        #how do I specify which address to take the data from?
        i2c_address, value = data 

imu_numbers    = (1,2)
i2c_addresses  = (0x68,0x69)

sen_log_instances = {} #dictionary of logging instances

for imu_no,imu_addr in zip(imu_numbers,i2c_addresses):
    sen_log_instances['IMU_'+imu_no]= IMU_Protocol()
    sen_log_instances['IMU_'+imu_no].constants(imu_no,imu_addr)
    SerialPort(sen_log_instances['IMU_'+imu_no],'/dev/i2c-1', reactor, baudrate='115200')
    sensor_numbers += ('IMU_'+imu_no,)

fact = EchoClientFactory(sen_log_instances,sensor_numbers, field_name)
reactor.run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-06 03:41:23

我不认为在扭曲的上下文中通过模拟I2C或其他开箱即用的扭曲模块的机制来实现SerialPort支持是不容易的。

触发dataReceived的关键步骤是让反应堆意识到需要监视的I2C设备,只要一些数据准备就绪,它就应该从那里读取数据并传送到协议中。

反应堆作为高层应用程序的一部分,对诸如串行或I2C之类的低级应用程序一无所知,但它对如何操作FileDescriptor (这是SerialPort的工作方式)知道得很多。因此,如果您确实希望您的I2C在扭曲中是可行的,那么您必须做类似的事情。

  1. 找到一个可以以文件描述符的方式操作I2C的Python库(不幸的是,smbus2不能)
  2. 子类twisted.internet.abstract.FileDescriptor,并重写fileno()、doRead()、doWrite()等方法。
  3. 在初始化时为每个I2C地址创建一个实例

上面提到的I2C协议扩展代码对您没有太大帮助,因为它基于一个非常老的Twisted版本,其中仍然使用SerialPortEndpoint。Twisted的最新版本支持有限类型的端点,因此您必须自己开发。

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

https://stackoverflow.com/questions/57770909

复制
相关文章

相似问题

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