Advamation-Logo (Druckversion)

Raspberry Pi per AdvaBoard RPi1 ein-/ausschalten

Stand:2014-04-10
zugehöriges Produkt:
AdvaBoard RPi1, http://www.advamation.de/produkte/embeddedpc/advaboard_rpi1/

1   Allgemeines

Mit dem AdvaBoard RPi1 ist es möglich, (a) die Stromversorgung des Raspberry Pi ein- und auszuschalten und (b) selbst bei ausgeschaltetem Raspberry Pi auf bestimmte Ereignisse (z.B. Taster, Überschreitung eines Sensor-Grenzwertes usw.) zu reagieren und bestimmte Aktionen auszulösen:

  • Die Mikrocontroller des AdvaBoards enthalten eine sogenannte ereignisgesteuerte Automatisierung; hierüber kann festgelegt werden, dass bestimmte Aktionen ausgeführt werden sollen, sobald sich ein AdvaBoard-Eingang ändert.
  • An das AdvaBoard RPi1 können I2C-Geräte angeschlossen werden, die z.B. Sensoren (wie einen Temperatursensor oder eine Fernbedienung) überwachen und das AdvaBoard RPi1 steuern können.

Damit ist es möglich, den Raspberry Pi nach dem Herunterfahren auszuschalten (=von der Stromversorgung zu trennen) und z.B. auf Tastendruck oder auf Anforderung externer Peripherie wieder zu starten.

2   Ausschalten des Raspberry Pi nach dem Herunterfahren

Benötigte Komponenten:
  • AdvaBoard RPi1
  • Raspberry Pi
  • Netzteil am AdvaBoard RPi1
Benötigte AdvaBoard RPi1-Ressourcen:
  • 1 Power-Event-Handler (temporär, z.B. Nummer 1)
  • 1 RTC-Alarm (temporär, z.B. Nummer 1)

Um den Raspberry Pi nach dem Herunterfahren automatisch von der Stromversorgung zu trennen, sind mehrere Schritte notwendig:

  1. Konfiguration des Raspberry Pi:

    Um den Raspberry Pi nach dem Herunterfahren auszuschalten, ist ein sogenanntes Init-Skript notwendig. Dieses wird beim Herunterfahren ausgeführt, und schaltet die Stromversorgung kurz nach dem Herunterfahren ab.

    Das Init-Skript (am_rpi_power.sh) sowie dessen Konfigurationsdatei (am_rpi_power) sind in der AdvaBoard RPi1-Software ab Version 2014-04-01 im Verzeichnis tools/sysvinit/ enthalten.

    Installation:

    • Konfiguration: Im Normalfall ist keine Konfiguration notwendig. Sollen jedoch Details des Ausschaltvorgangs bzw. die verwendeten Power-Event-Handler- und RTC-Alarm-Nummern geändert werden, so können die Werte der Konfigurationsdatei am_rpi_power editiert werden:

      • OFF_DELAY: Wartezeit in Sekunden zwischen dem Herunterfahren und dem Trennen der Stromversorgung (Standardeinstellung: 5).
      • EVENT_HANDLER_NUMBER: Nummer des Power-Event-Handlers (1..7, Standardeinstellung: 1), der für das Ausschalten des Raspberry Pi verwendet wird. Diese sollte nicht mit anderen verwendeten Power-Event-Handlern kollidieren.
      • RTC_ALARM_NUMBER: Nummer des Echtzeituhr-Alarms (0..1, Standardeinstellung: 0), der für das Ausschalten des Raspberry Pi verwendet wird. Diese sollte nicht mit anderen verwendeten Echtzeituhr-Alarmen kollidieren.
      • ON_*: Zustand der entsprechenden Stromkreise beim Booten.
      • OFF_*: Zustand der entsprechenden Stromkreise nach dem Ausschalten.
    • Kopieren des Init-Skripts nach /etc/init.d/ und der Konfigurationsdatei (optional) nach /etc/default:

      cd tools/sysvinit/
      sudo bash
      cp am_rpi_power.sh /etc/init.d/
      cp am_rpi_power    /etc/default/
      chmod 755 /etc/init.d/am_rpi_power.sh
      chmod 644 /etc/default/am_rpi_power
      exit
      
    • Aktivieren des Init-Skripts:

      sudo update-rc.d am_rpi_power.sh defaults
      

      (Die eventuell auftretende Warnung "default stop runlevel arguments (0 1 6) do not match am_rpi_power.sh Default-Stop values (0)" kann ignoriert werden.)

  2. Anschluss des Netzteils am AdvaBoard RPi1:

    Falls bisher ein Micro-USB-Netzteil am Raspberry Pi zur Stromversorgung verwendet wurde, muss der Raspberry Pi heruntergefahren, das Netzteil entfernt und durch eines ersetzt werden, das am AdvaBoard RPi1-Netzteilanschluss angeschlossen wird.

    Siehe auch: AdvaBoard RPi1-Anleitung: Stromversorgung.

  3. Entfernen des (roten) RPi5V-Jumpers:

    Nun kann der (rote) RPi5V-Jumper entfernt werden.

Beim nächsten Herunterfahren (z.B. per sudo poweroff) sollte die Stromversorgung nun automatisch abgeschaltet werden.

Um den Raspberry Pi wieder zu starten, muss die Stromversorgung wieder aktiviert werden, indem z.B. der RPi5V-Jumper wieder gesetzt wird, oder – wie im folgenden Abschnitt beschrieben – hierzu ein Taster verwendet wird.

Bei einer Fehlkonfiguration o.ä. empfiehlt es sich, den RPi5V-Jumper zwischenzeitlich zu setzen, damit der Raspberry Pi wieder startet und eine eventuelle Fehlkonfiguration korrigiert werden kann.

3   Ein-/Ausschalten des Raspberry Pi per Taster

Benötigte Komponenten:
  • AdvaBoard RPi1
  • Raspberry Pi
  • Netzteil am AdvaBoard RPi1
  • Taster mit Schließerkontakt
Benötigte AdvaBoard RPi1-Ressourcen:
  • I2C-Interrupt
  • 1 Digital-I/O (optional, z.B. I/O 0.4)
  • 2 Power-Event-Handler (1 dauerhaft, 1 temporär, z.B. Nummer 1 und 2)
  • 1 RTC-Alarm (temporär, z.B. Nummer 1)

3.1   Überblick

Damit der Raspberry Pi vom AdvaBoard RPi1 aus ein-/ausgeschaltet werden kann, muss der 5V-Netzteil-Anschluss des AdvaBoards verwendet, und – nach der Konfiguration – der Jumper RPi5V entfernt werden.

Um den Raspberry Pi auf Tastendruck starten zu können, muss der Taster an den I2C-Interrupt-Eingang angeschlossen werden. Der Power-Mikrocontroller des AdvaBoard RPi1 wird daraufhin so konfiguriert, dass ein I2C-Interrupt (Low-Pegel auf der I2C-Interrupt-Leitung) den Strom für den Raspberry Pi einschaltet.

Um den Raspberry Pi auf Tastendruck herunterzufahren und auszuschalten, kann ebenfalls der I2C-Interrupt-Eingang verwendet und überwacht werden.

Sollten allerdings weitere I2C-Geräte, die einen Interrupt verursachen können, am AdvaBoard RPi1 angeschlossen sein (oder sollte der Power-Mikrocontroller so konfiguriert sein, dass er I2C-Interrupts auslöst), so empfiehlt es sich, einen zweipoligen Ein-/Austaster oder getrennte Taster zum Ein- und Ausschalten zu verwenden, oder I2C-Interrupts und Tastendrücke per Software zu unterscheiden.

Die einzelnen Schritte finden Sie in den folgenden Abschnitten.

3.2   Vorbereitungen

Bevor der Taster installiert wird, sollten zuerst die die Schritte unter Ausschalten des Raspberry Pi nach dem Herunterfahren vorgenommen werden, um ein Ein-/Ausschalten des Raspberry Pi zu ermöglichen.

3.3   Anschluss des Tasters

Der Taster muss einen Schließerkontakt enthalten, und an den I2C-Interrupt-Anschluss und Masse angeschlossen werden.

Taster-Anschluss an I2C-INT
Anschluss des Tasters an das AdvaBoard RPi1 / I2C-INT

Sind am AdvaBoard RPi1 I2C-Geräte angeschlossen, die I2C-Interrupts auslösen, so können getrennte Taster zum Ein- und Ausschalten oder ein zweipoliger Ein-/Austaster verwendet werden, um den Raspberry Pi unabhängig von I2C-Interrupts ausschalten zu können. Der Einschalter (bzw. Einschaltkontakt) wird hierbei an einen Digital-I/O des AdvaBoards angeschlossen, z.B. an den I/O 0.4.

Taster-Anschluss, zweipolig
Anschluss eines zweipoligen Ein-/Austasters
Taster-Anschluss, getrennte Taster
Anschluss getrennten Ein- und Austaster

3.4   Test des Tasters

Zunächst sollte getestet werden, ob der Taster korrekt funktioniert. Hierzu können die Taster-Eingänge periodisch abgefragt werden, z.B. mit dem Kommandozeilenprogramm am_rpi_advaboard_tool:

sudo bash
while true; do am_rpi_advaboard_tool -m I2C_INT_READ -v 32; sleep 0.1; done
exit

Bei nicht gedrücktem Taster sollte I2C-int: high (no interrupt), bei gedrücktem Taster I2C-int: low (interrupt) erscheinen. Per Ctrl-C kann der Test abgebrochen werden.

Wurde zusätzlich ein Digital-Eingang verwendet, so solle auch dies getestet werden:

sudo bash
am_rpi_advaboard_tool -m IO_CONFIG iiii
while true; do am_rpi_advaboard_tool -m IO_READ -v 32; sleep 0.1; done
exit

Bei nicht gedrücktem Taster sollte hinter dem entsprechenden Eingang ein 1 stehen, bei gedrücktem Taster eine 0, z.B. bei Verwendung von I/O 0.4:

  • Taster nicht gedrückt:

    IOs: 0xff 0xff
    IO 0.4 / IDA0:    1
    IO 0.5 / IDA1     1
    IO 0.6 / PWM0:    1
    IO 0.7 / PWM1:    1
    IO 1.0 / CPLDIO0: 1
    IO 1.1 / CPLDIO1: 1
    IO 1.2 / CPLDIO2: 1
    IO 1.3 / CPLDIO3: 1
    IO 1.4 / CPLDIO4: 1
    IO 1.5 / CPLDIO5: 1
    IO 1.6 / CPLDIO6: 1
    IO 1.7 / CPLDIO7: 1
    
  • Taster gedrückt:

    IOs: 0xef 0xff
    IO 0.4 / IDA0:    0
    IO 0.5 / IDA1     1
    IO 0.6 / PWM0:    1
    IO 0.7 / PWM1:    1
    IO 1.0 / CPLDIO0: 1
    IO 1.1 / CPLDIO1: 1
    IO 1.2 / CPLDIO2: 1
    IO 1.3 / CPLDIO3: 1
    IO 1.4 / CPLDIO4: 1
    IO 1.5 / CPLDIO5: 1
    IO 1.6 / CPLDIO6: 1
    IO 1.7 / CPLDIO7: 1
    

Per Ctrl-C kann der Test abgebrochen werden.

3.5   Konfiguration des AdvaBoard RPi1

Meist soll nicht nur der Raspberry Pi ein- bzw. ausgeschaltet werden, sondern auch Teile des AdvaBoards, wie das TFT-Display oder der im AdvaBoard integrierte CPLD. Hierzu werden sogenannte "Power-Zustände" definiert, die dann auf Tastendruck bzw. nach dem Herunterfahren des Raspberry Pi aktiviert werden.

  • Einschaltzustände definieren:

    1. Zustand direkt nach dem Anschließen der Stromversorgung (Netzteil oder Batterie) an das AdvaBoard RPi1 (Event-Handler 0):

      Dies konfiguriert lediglich das Starten unmittelbar nach dem Anschluss einer Stromversorgung; das Ein-/Ausschalten des Raspberry Pi per Taster ist unabhängig von dieser Einstellung.

      • Standard-Zustand "an":

        sudo am_rpi_advaboard_tool -m EVENTPWR_POWER_WRITE 0 -- 1 1 0 1 0 0
        
      • Standard-Zustand "aus":

        sudo am_rpi_advaboard_tool -m EVENTPWR_POWER_WRITE 0 -- 1 0 0 0 0 0
        
      • Überprüfung des Standard-Zustands:

        sudo am_rpi_advaboard_tool -m EVENTPWR_POWER_READ 0
        
    2. Zustand "eingeschalteter Raspberry Pi":

      sudo am_rpi_advaboard_tool -m EVENTPWR_POWER_WRITE 2 -- 1 1 -1 1 -1 -1
      

      Im Beispiel wird hierfür der Power-Event-Handler 2 verwendet. Dieser wird dauerhaft benötigt, und darf nicht anderweitig verändert werden.

    Der Einschaltzustand kann danach mit folgendem Kommando überprüft werden:

    sudo am_rpi_advaboard_tool -m EVENTPWR_POWER_READ 2
    
  • Einschalten per Taster / bei I2C-Interrupt:

    Sobald der Taster gedrückt (und damit ein I2C-Interrupt ausgelöst) wird, soll der Event-Handler 2 aktiv und damit der Raspberry Pi einschaltet werden:

    sudo am_rpi_advaboard_tool -m EVENTPWR_I2CINT_WRITE 0x82
    
  • Konfiguration des Digital-I/Os:

    Wurde ein Taster zusätzlich an einen Digital-I/O angeschlossen, so muss dieser als Eingang ("Input") konfiguriert sein. Dies kann per:

    sudo am_rpi_advaboard_tool -m IO_CONFIG_READ
    

    überprüft und ggf. z.B. per:

    sudo am_rpi_advaboard_tool -m IO_CONFIG iiii
    

    geändert werden.

  • Persistente Speicherung der Einstellungen:

    Damit die Konfiguration erhalten bleibt, selbst wenn die Stromversorgung ausgesteckt wird, sollte diese im EEPROM des AdvaBoards gespeichert werden:

    sudo am_rpi_advaboard_tool -m EEPROM_F912_STORE
    sudo am_rpi_advaboard_tool -m EEPROM_F353_STORE
    

3.6   Konfiguration des Raspberry Pi

Das Ausschalten besteht auf dem Raspberry Pi aus mehreren Teilen: Einem Programm, das den Taster überwacht und den Raspberry Pi herunterfährt, sobald der Taster gedrückt wird; einem Init-Skript, das dieses Programm beim Booten startet; und einem Init-Skript, das den Raspberry Pi nach dem Herunterfahren ausschaltet.

Die Programme/Skripte sind in der AdvaBoard RPi1-Software ab Version 2014-04-01 im Verzeichnis tools/ bzw. tools/sysvinit/ enthalten.

  • tools/am_rpi_shutdownbutton.sh: Skript zum Herunterfahren bei Tastendruck. Dieses wird üblicherweise automatisch beim Booten gestartet, und erhält als Parameter die Taster-Konfiguration.
  • tools/sysvinit/am_rpi_shutdownbutton.sh: Init-Skript zum Starten der Tastenüberwachung beim Booten.
  • tools/sysvinit/am_rpi_shutdownbutton: Konfigurationsdatei
  • tools/sysvinit/am_rpi_poweroff.sh, tools/sysvinit/am_rpi_poweroff: Init-Skript und Konfigurationsdatei zum Ausschalten des Raspberry Pi nach dem Herunterfahren

Installation:

  • Konfiguration: Wurde der Taster lediglich an die I2C-Interrupt-Leitung angeschlossen, so ist keine Konfiguration notwendig. Ansonsten muss der Taster in der Datei am_rpi_shutdownbutton konfiguriert werden:

    • USE_I2CINT: Gibt an, ob der Aus-Taster an die I2C-Interrupt-Leitung angeschlossen ist. (0..1, Standardeinstellung: 1)
    • IO: Gibt an, an welchen Digital-I/O der Aus-Taster angeschlossen ist. (4..7 für I/Os 0.4..0.7 oder leer=keiner, Standardeinstellung: leer)
    • LEVEL: Gibt an, ob der Aus-Taster nach Masse (0) oder +3.3V (1) schaltet.
  • Kopieren der Skripte/Konfigurationsdateien:

    cd tools/
    sudo bash
    cp am_rpi_shutdownbutton.sh /usr/local/bin/
    cp sysvinit/am_rpi_shutdownbutton.sh /etc/init.d/
    cp sysvinit/am_rpi_shutdownbutton    /etc/default/
    chmod 755 /usr/local/bin/am_rpi_shutdownbutton.sh
    chmod 755 /etc/init.d/am_rpi_shutdownbutton.sh
    chmod 644 /etc/default/am_rpi_shutdownbutton
    exit
    
  • Aktivieren des Init-Skripts:

    sudo update-rc.d am_rpi_shutdownbutton.sh defaults
    

3.7   Test

Das Ein-/Ausschalten per Taster kann nun getestet werden:

  • Wurde der Raspberry Pi nach der Konfiguration noch nicht neu gestartet, so muss das Taster-Überwachungs-Skript manuell gestartet werden:

    sudo /etc/init.d/am_rpi_shutdownbutton.sh start
    
  • Wird der (Aus-)Taster nun gedrückt, so sollte der Raspberry Pi herunterfahren und ausgeschaltet werden.

  • Wird der (Ein-)Taster gedrückt, wenn der Raspberry Pi ausgeschaltet ist, so sollte er daraufhin booten.

Bootet der Raspberry Pi nicht, so kann der RPi5V-Jumper gesetzt werden, um den Raspberry Pi zu starten und die Ursache (z.B. Fehlkonfiguration) herausfinden und korrigieren zu können.

4   Ein-/Ausschalten des Raspberry Pi per Schalter

Benötigte Komponenten:
  • AdvaBoard RPi1
  • Raspberry Pi
  • Netzteil am AdvaBoard RPi1
  • Schalter mit Schließerkontakt
Benötigte AdvaBoard RPi1-Ressourcen:
  • I2C-Interrupt, exklusiv
  • 2 Power-Event-Handler (1 dauerhaft, 1 temporär, z.B. Nummer 1 und 2)
  • 1 RTC-Alarm (temporär, z.B. Nummer 1)

Statt einem Taster kann auch ein Schalter zum Ein-/Ausschalten des Raspberry Pi verwendet werden. In diesem Fall darf die I2C-Interrupt-Leitung jedoch nur für den Schalter und nicht für externe I2C-Geräte verwendet werden. Zudem darf der I2C-Interrupt des Power-Mikrocontrollers nicht verwendet werden.

Die Vorgehensweise ist identisch zu der unter Ein-/Ausschalten des Raspberry Pi per Taster beschriebenen, mit folgenden Ausnahmen:

  • An die I2C-Interrupt-Leitung dürfen außer dem Schalter keine weiteren Geräte angeschlossen sein.

  • Die Konfigurationdatei am_rpi_shutdownbutton muss folgende Zeile enthalten:

    LEVEL=1
    

Das Schließen des Schalters schaltet den Raspberry Pi nun ein, das Öffnen des Schalters fährt den Raspberry Pi herunter und schaltet ihn danach aus.