Wpis z mikrobloga

#raspberrypi #arduino #i2c

Jak przesyłać liczby z przecinkiem (float) przez I2C pomiędzy Raspberry Pi (master) i Arduino (slave)?

Robię pewien projekt w C i nie mam do dyspozycji Pythona (tam jest struct dzięki czemu można sobie sprawnie poukładać bajty w liczbę).
Korzystam z tego: https://projects.drogon.net/raspberry-pi/wiringpi/i2c-library/
Mogę sobie przesyłać od 0 do 255 za pomocą wiringPiI2CRead, ale przy większych wartościach i funkcji wiringPiI2CReadReg8 dostaję zawsze tę samą liczbę (38792).

Po stronie Arduino przesyłam to tak (array z bajtów, długość to 4 bo float wymaga 4 bajtów):

void sendData(){
Wire.write((byte*) &floatNumber, 4);
}

Po stronie Raspberry to działa dla pojedynczego bajta (ale potrzebuję arraya z 4 bajtów):

int fd;
int data;
wiringPiSetup();

fd=wiringPiI2CSetup(0x04);

data=wiringPiI2CRead(fd);

ui->lcdNumber->display(data);

Opisałem swój problem też tutaj: https://stackoverflow.com/questions/48112530/how-to-read-a-float-value-in-c-on-raspberry-pi-3b-from-arduino-slave-via-i2c - ale wysyłanie Stringa znowu wymaga przesyłania więcej niż 1 bajta przez I2C, a ja nie wiem jak zaprogramować po obu stronach przesyłanie więcej niż 1 bajta.

Z tego co widzę to ktoś chyba z sukcesem ogarnął to tu i tu (z Pythonem):
https://gist.github.com/gileri/5a9285d6a1cfde142260
https://stackoverflow.com/questions/45774308/how-i-write-multiple-float-data-to-arduino-from-rpi-as-master-via-i2c
  • 2