Forum: PC-Programmierung Raspberry Pi - WiringPi i2c beim booten starten


von Julian F. (b0lle)


Lesenswert?

Hallo liebe Mikrocontrollergemeinde,

ich möchte mit meinem Raspberry Pi einen Sensor auslesen, der per I2C 
mit dem Raspberry verbunden ist. Messung, Umrechnung, Auslesen und 
Ansteuern per I2C mit einem C-Script funktioniert tadellos.

Für das Auslesen der I2C Schnittstelle verwende ich die WiringPi 
Bibliothek von Gordon. Der I2C wird mit dem Befehl "gpio load i2c" 
gestartet.

Nun zu meinem Problem:
Ich kann diesen Befehl nicht als Autostartkommando ausführen. Sollte der 
Raspberry also mal abstürzen und neu booten, müsste ich manuell den 
Initbefehl für I2C ausführen --> blöd.

Dabei habe ich verschiedenste Sachen probiert:
1. in /etc/rc.local "gpio load i2c" ergänzt
2. in /etc/rc.local ein Schellscript aufgerufen, welches dann den Befehl 
ausführt
3. den Befehl in der crontab Liste ergänzt

Bisher hat keines der Kommandos gewirkt.
Denkbar wäre es auch die I2C Schnittstelle erst mit der Ausführung des 
C-Programms (wird alle paar Tage von der Crontab ausgeführt) zu 
initialisieren. Ich wüsste aber nicht wie man die Initialisierung in C 
ausführt.

Hat jemand eine Idee was ich noch probieren könnte?
Vielen Dank
b0lle

von Andy (Gast)


Lesenswert?

Vielleicht in der crontab des root-users:
@reboot sleep 30 && gpio load i2c

Es kann notwendig sein, die Zeit in Sekunden nach sleep zu erhöhen bzw. 
den vollständigen Pfad zu gpio anzugeben.

Referenz: man crontab
Beispiel: @reboot sleep 30 && /etc/init.d/privoxy restart

von Julian F. (b0lle)


Lesenswert?

Sehr guter Gedanke!
Ichh atte auch die Befürchtung, dass die wiringPi Bibliotheken evtl. so 
schnell nach dem booten noch nicht verfügbar sind und gpio load i2c 
dadurch nicht funktioniert.

Ich habe jetzt einfach in der crontab den Ladebefehl zyklisch aufgeführt 
und jetzt geht es.
Da ich nichts zeitkritisches nutze sollte das ja so passen.

Vielen Dank für deine Hilfe :)

von Marc (gierig) Benutzerseite


Lesenswert?

in der /etc/modprobe.d/raspi-blacklist.conf
das I2C Modul einkommentieren.

also das # vor "i2c-bcm2708" entfernen
Dann wird das Kernel Modul es auch beim Booten geladen.

Je nach dem welcher user das die Schnitstelle dann benutzen
soll kann es sein das dieser noch rechte benötigt.

Hierfür ist uneradneren UDEV zu gebracuhen.

/etc/udev/rules.d/99-I2C.rules Anlegen
Inhalt

SUBSYSTEM=="i2c-dev", MODE="0666"

sorgt dafür das auch Normale User Vollzugrif haben.

Fertig ist die Laube.

Das gebastel mit der Crontab oder irgentwelchen Scripten
ist und bleibt gebastel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.