Odroid N2+ mit GPIO Relais

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Hannes Schellnast
    Smart Home'r
    • 28.08.2015
    • 93

    Odroid N2+ mit GPIO Relais

    Nachdem bei meinem Russound Mehrfachzonenverstärker sich eine Zone hardwaretechn. komplett verabschiedet hat, baue ich mir gerade einen neuen Verstärker auf Basis d. KAB9 Verstärkers incl. Odroid N2+ zusammen. Dank der tollen u. kreativen Anleitungen aus dem Hardwarebereich und der ausgereiften MS4L Software geht es gut voran.
    Als Relais verwende ich zum Schalten der Netzteilkreise u. zum Muten der Verstärker dieses Relais + 1 SSR.
    Leider habe ich erst zu spät gelesen, dass es mit den GPIOs der div. ARM-Platformen u. den letzten Kernelreleases Probleme gibt, da die "sysfs"-Ansteuerung der GPIOs nach u. nach abgekündigt werden.
    Jetzt habe ich den MS4L Code ein wenig unter die Lupe genommen, und ein Skript so modifiziert, dass ich die Relais verwenden kann, und nicht den Umweg über HID USB Relais gehen muss.
    hismastersvoice : Vielleicht kannst ja kurz drüberschauen, ob du das in deine nächste Version so übernimmst, damit mir meine Änderungen mit dem nächsten Musicserverupdate nicht überschrieben werden. Als nächsten Schritt könnte man die Änderungen vom N2 auch auf die anderen ARM-basierten Boards ausweiten.
    Habe folgendes gemacht:
    - Ich verwende jetzt die Library "libgpiod". Diese ist nicht sysfs-basierend, und sollte deshalb zukunftssicher sein.
    Installation:
    Code:
    sudo apt update
    sudo apt install -y gpiod libgpiod-dev
    - habe das Bash-Script mstools so abgeändert, dass jetzt die neuen Calls verwendet werden
    davor:
    Code:
    if [[ $type == *"N2"* ]]; then
    $2 > /sys/class/gpio/export 2>/dev/null
    out > /sys/class/gpio/gpio$2/direction
    $3 > /sys/class/gpio/gpio$2/value
    else
    if ! [ -d /sys/class/gpio/gpio$2 ]; then
    sudo echo "$2" > /sys/class/gpio/export
    sudo echo "out" > /sys/class/gpio/gpio$2/direction
    fi
    danach:
    Code:
    if [[ $type == *"N2"* ]]; then
    sudo gpioset gpiochip0 $2=$3
    else
    if ! [ -d /sys/class/gpio/gpio$2 ]; then
    sudo echo "$2" > /sys/class/gpio/export
    sudo echo "out" > /sys/class/gpio/gpio$2/direction
    fi

    Getestet wurden die ersten 3 Relais mit dem Kommando:
    sudo mstools set_gpio 62 1
    sudo mstools set_gpio 72 1
    sudo mstools set_gpio 80 1


    Ohne Änderung des Pinnings d. 4. Relais, lässt sich dieses mit dem Odroid N2 nicht betreiben, da der Kernel auf dem Pin d. 4. Relais einen analogen ADC-Eingang gemappt hat. Werde die Leitung demnächst auftrennen, und auf einen anderen Pin verlegen.

    Auf folgendes muss man hier schauen, damit man die richtigen GPIO-Nummern für die libgpiod vom Kernel bekommt:
    Absetzen des Kommandos:
    Code:
    gpioinfo gpiochip0
    Man erhält dann die ganze Liste der unterstützten GPIO incl. Funktion:
    Code:
            line  46:      unnamed       unused   input  active-high
            line  47:      unnamed         "cd"   input   active-low [used]
            line  48:      unnamed       unused   input  active-high
            line  49:     "PIN_44"       unused   input  active-high
            line  50:     "PIN_46"       unused   input  active-high
            line  51:     "PIN_45"       unused   input  active-high
            line  52:     "PIN_47"       unused   input  active-high
            line  53:     "PIN_26"       unused   input  active-high
            line  54:      unnamed       unused   input  active-high
            line  55:      unnamed       unused   input  active-high
            line  56:      unnamed       unused   input  active-high
            line  57:      unnamed       unused   input  active-high
            line  58:      unnamed       unused   input  active-high
            line  59:      unnamed       unused   input  active-high
            line  60:     "PIN_42"       unused   input  active-high
            line  61:     "PIN_32"       unused   input  active-high
            line  62:      "PIN_7"       unused  output  active-high
            line  63:     "PIN_27"       unused   input  active-high
            line  64:     "PIN_28"       unused   input  active-high
            line  65:     "PIN_16"       unused   input  active-high
            line  66:     "PIN_18"       unused   input  active-high
            line  67:     "PIN_22"       unused   input  active-high
            line  68:     "PIN_11"       unused   input  active-high
            line  69:     "PIN_13"       unused   input  active-high
            line  70:     "PIN_33"       unused   input  active-high
            line  71:     "PIN_35"       unused   input  active-high
            line  72:     "PIN_15"       unused   input  active-high
            line  73:     "PIN_19"       unused   input  active-high
            line  74:     "PIN_21"       unused   input  active-high
            line  75:     "PIN_24"       unused   input  active-high
            line  76:     "PIN_23"       unused   input  active-high
            line  77:      "PIN_8"       unused   input  active-high
            line  78:     "PIN_10"       unused   input  active-high
            line  79:     "PIN_29"       unused   input  active-high
            line  80:     "PIN_31"       unused   input  active-high
            line  81:     "PIN_12"       unused   input  active-high
            line  82:      "PIN_3"       unused   input  active-high
            line  83:      "PIN_5"       unused   input  active-high
            line  84:     "PIN_36"       unused   input  active-high
    Die Zeilennummer muss genau für den jeweiligen GPIO für die libgpiod verwendet werden.
    Beispiel Relais 1: Dazu wird der PIN_7 verwendet. D.h. die GPIO-Nummer ist hier 62
Lädt...