Распакуйте структуру C с помощью Python, переданного через I2C
Настройка такова: Arduino (Mega2560), принимающий данные GPS и телеметрии, который подключен к Raspberry Pi через I2C (Pi = Master). Я получил некоторый код от 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
Но это тоже не сработало. У кого-нибудь есть руководство для меня?