Hallo,
da ich nun schon länger an diesem Problem hänge, wollte ich es mal bei euch versuchen.
Ich habe auf dem Raspberry Pi ein Python Script geschrieben, welches mit Hilfe des Adafruit Breakout Boards, NFC Karten lesen und dann LED's ansteuern, sowie die gescannte ID über Serielle Schnittstelle senden kann. Dieses Script soll auch beim booten des Pi's gestartet werden. Das ganze funktionierte auch bei meiner SD-Karte unter Rasbian einwandfrei, weswegen ich angefangen habe das ganze zu dokumentieren und reproduzierbar zu machen. Beim Aufsetzen einer neuen SD-Karte mit Rasbian kam dann das Problem:
Dieses Script funktioniert nun ohne Probleme wenn ich es manuell, mit
starte. Auch kann ich den Pi rebooten und komplett vom Netz trennen, nach einem Neustart kann ich das Script wieder starten.
Wenn ich es aber automatisch beim booten mit Hilfe von /etc/rc.local in Form von
starten lasse, dann funktioniert es erstmal nach einem reboot, benutze ich aber einen "halt" Befehl und starte den Pi neu, wird das Breakout Board mit
(bzw generell kein i2c Gerät mehr) erkannt und das Script hängt sich beim konfigurieren des BB auf.
Dieses Problem kann ich nur beheben wenn ich danach den Start Befehl aus der /etc/rc.local entferne und das i2c-dev modul mit
neu hinzufüge.
Nach einem Neustart wird das BB wieder erkannt und ich kann das Script nochmal normal starten.
Ich habe Rasbian geupdatet, den Kernel aktualisiert und selbst das komplette System mehrmals neu aufgesetzt. Alles klappt solange bis ich das Python-Script beim booten starten lasse. Auch habe ich es über ein Launcher-Batch-Script, crontab und die bachrc versucht zu starten. Dabei macht immer nur der Teil des Scriptes mit i2c Probleme.
Ich benutze dabei die py532lib von HubCityLabs und folgendes vereinfachtes Script:
Spoiler anzeigen
#!/usr/bin/env Python3
# -*- coding: utf-8 -*-
import time, py532lib
from py532lib.i2c import *
from py532lib.frame import *
from py532lib.mifare import *
os.system("clear")
print("""
Starte Script
""")
sleep(1)
#---------------------------------------------------------#
def pn532_setup():
Pn532_i2c.reset_i2c(Pn532_i2c(address=0x24, i2c_channel=0x01))
print("\nNFC resettet\n")
Pn532_i2c().SAMconfigure()
def scan_id():
os.system("clear")
print("""
Scannen nach ID's...
""")
ID = Mifare().scan_field()
print(ID)
cardID = ("".join(format(x, "02x") for x in reversed(ID)))
print("Karte gefunden!\nID: " +cardID)
time.sleep(0.1)
#Auswerfen der Karte
Mifare().in_deselect()
print("\nKarte ausgeworfen!\n")
Pn532_i2c.__exit__(Pn532_i2c(address=0x24, i2c_channel=0x01),type=None,value=None,traceback=None)
return cardID
pn532_setup()
while True:
try:
cardID = scan_id()
print(cardID)
sleep(1)
except KeyboardInterrupt:
break
Alles anzeigen
Ich hoffe ich hab das Problem ausführlich und verständlich beschrieben.
Weiß jemand einen Vorschlag, woran das liegen könnte oder braucht Ihr noch weitere Infos?
Grüße TDog