使用通过I2C传输的Python解包C struct

时间:2018-04-14 15:08:08

标签: python c i2c

设置如下:Arduino(Mega2560)接收GPS和遥测数据,通过I2C(Pi = Master)连接到Raspberry Pi。我从Github获得了一些代码,它可以准确地发送和解包浮点数,没有任何问题。但是,我没有发送同类字节流。我创建的C结构是:(Float,Float,Int,Int,Int,Char,Char)。这是我的一些代码:

C:

  // callback for sending data
void sendData(){

struct transferData data;

data.latitude = GPS.latitude;
data.longitude = GPS.longitude;
data.hour = GPS.hour;
data.minute = GPS.minute;
data.second = GPS.seconds;
data.lat = GPS.lat;
data.lon = GPS.lon;

uint8_t *ptr = (uint8_t *)&data;
Wire.write(ptr,sizeof(data));

的Python:

data=get_data()
print"Latitude",(get_float(data,0)),(get_char(data,5))

功能如下:

def get_data():
  return bus.read_i2c_block_data(address,0);

def get_float(data,index):
  bytes = data[4*index:(index+1)*4]
  return struct.unpack('f', "".join(map(chr, bytes)))[0]
def get_char(data,index):
  bytes = data[(index)*4]
  return struct.unpack('c', "".join(map(chr, bytes)))[0]

我的python代码不会通过get_char()函数运行。

我也尝试过:

buff = bus.read_i2c_block_data(address, 0)
buff = struct.unpack('f f i i i c c', buff)
print buff

但那也没有用。有没有人对我有一些指导?

0 个答案:

没有答案