Hallo,
ich hab folgendes Problem. Ich habe einen ADXL345 welchen ich per C++ auslesen kann und auch auf der CLI. Aber Python weigert sich.
Der Hintergrund ist das ich hier ein Mainsailos habe und das mit Klipper zum laufen bringen will. Also hab ich das ganze reversed runter zu simplen aufrufen:
Was hab ich:
Model : Raspberry Pi 4 Model B Rev 1.4
OS: Raspbian GNU/Linux 10 (buster)
Was möchte ich erreichen:
Ich sende dem ADXL345 ein 0x80 (ein "READ" | "Register 0" ) und erwarte ein E5 als Antwort (Q:"Hallo wer bist du." A: "Ich bin ein ADXL345").
CLI:
pi@mainsailos:~/ $ sudo systemctl start pigpiod
pi@mainsailos:~/ $ pigs spio 0 2000000 3
0
pi@mainsailos:~/ $ pigs spix 0 0x80
1 229
#229 = E5 = OK!
C++:
#include <stdio.h>
#include <pigpio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (gpioInitialise() < 0) {
printf("Failed to initialize GPIO!");
return 1;
}
char data[7];
int bytes=0;
int h = spiOpen(0, 2000000, 3);
data[0] = 0x80;
data[1] = 0;
bytes = spiXfer(h, data, data, 1);
if( bytes ){
printf("Got ID %x [%u]\n",data[bytes-1],bytes);
}
gpioTerminate();
return 0;
}
###
pi@mainsailos:~/ $ sudo ./test
Got ID e5 [1]
Alles anzeigen
Python:
import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 5000
spi.mode = 3
r=spi.xfer2([0x80])
print(r)
spi.close()
########
pi@mainsailos:~/ $ python test.py
[0L]
pi@mainsailos:~/ $ python3 test.py
[0]
Alles anzeigen
Klipper geht natürlich auch nicht. Der meldet mir auch die Id 0 und verweigert den Dienst.
Irgendwas stimmt doch mit den Python Libraries nicht. Ideen?
Was ich bisher zum Thema gefunden habe ist das man zwingend den max_speed_hz setzen muss. Ansonsten kommt genau das verhalten. Aber das mache ich schon.
Ich könnte Hilfe gebrauchen...
Danke fürs lesen.