Poniżej opisane jest, jak uruchomić pin’y GPIO na Cubietruck oraz jak można sterować GPIO z openHAB. Osobiście miałem początkowo problemy z dedykowanymi bibliotekami openHAB do GPIO (org.openhab.io.gpio oraz org.openhab.binding.gpio), a gdy w końcu udało mi się je uruchomić nie były wystarczająco stabilne. Opisuję alternatywę do biblioteki GPIO, czyli wykorzystanie biblioteki exec (org.openhab.binding.exec) do sterowania GPIO. Biblioteka exec, umożliwia uruchamianie komend systemu operacyjnego z poziomu openHAB i to w zupełności wystarcza, żeby sterować pin’ami.
Krótkie wideo pokazujące, że działa 🙂
Poniższy opis bazuje na:
- mikrokomputerze: Cubietruck (Cubieboard 3)
- OS: Linux Armbian
- openHAB 1.x
- dokumentacji technicznej: http://docs.cubieboard.org/tutorials/common/gpio_on_lubuntu
Ogólny kroki, aby uruchomić i sterować pin’ami GPIO na Cubietruck
- Identyfikacja pin’ów, które chcemy używać
- Wskazanie w bootloader, które pin’y będziemy używać
- Aktywacja / deaktywacja pin’ów – skryptem opracowanym przeze mnie.
- Konfiguracja openHAB do sterowania pin’ami
- Opcjonalnie: dodanie aktywacji / deaktywacji pin’ów podczas uruchomienia / zamykania openHAB
1. Identyfikacja pin’ów, które chcemy używać
Poniżej zamieszczony jest schemat CubieTruck. Załóżmy, że potrzebujemy sterować pin’ami 5 i 7 na szynie CN8
Kluczowe jest poznanie prawdziwej nazwy tych pin’ów, a następnie wskazanie ich w bootloader. W przypadku pin 7 nazwa jest PC20, a w przypadku pin 4 to PC19. Analogicznie przykładowo pin25 ma nazwę PB19 itd.
2. Wskazanie w bootloader, które pin’y będziemy używać
Uwaga: ta część jest dość kluczowa. Błędy tutaj popełnione mogą spowodować, że system operacyjny może przestać się ładować
Kroki:
- montowanie partycji rozruchowej
- zalecam wykonanie kopii plików, które będą modyfikowane
- dodanie odpowiednich wpisów w pliku script.bin
zaczynamy:
montowanie partycji rozruchowej
- W zależności, czy Twoja partycja rozruchowa jest na karcie SD, czy NAND, czy dysk SATA konieczne jest jej zamontowanie:
Przykład z kartą SD
mkdir /tmp/bootpartition mount -t vfat /dev/mmcblk0p1 /tmp/bootpartition
Przykład z partycją w pamięci NAND
mkdir /tmp/bootpartition mount /dev/nand1 /tmp/bootpartition
Teraz przejdziemy do katalogu, w którym zamontowaliśmy partycję rozruchową:
cd /tmp/bootpartition
kopia zapasowa plików, które będziemy modyfikować
mkdir kopia cp *.bin kopia/
modyfikacja script.bin
Plik konfiguracyjny script.bin ma format binary. Aby go zmodyfikować konieczna jest konwersja z pliku binarnego na plik tekstowy. Można tego dokonać wykorzystując narzędzie bin2fex
bin2fex script.bin script.fex
Teraz otwieramy plik script.fex do edycji, przykładowo wykorzystując edytor nano
nano script.fex
szukamy sekcji [gpio_para]
W tej sekcji wpisujemy odpowiednio poniższe linie
- gpio_pin_3 = port:PC20<0><default><default><1>
- gpio_pin_4 = port:PC19<0><default><default><1>
Uwaga, kluczowe to:
- podanie unikalnych numerów pin, przykładowo nr 3 i 4 – uwaga: te numery nie mają nic wspólnego z numerami pin na powyższym schemacie, ale o tego momentu będziemy się posługiwać już tylko tymi dwoma identyfikatorami (3,4).
- podanie nazw pin’ów z powyższego schematu; w tym przypadku dla wybranych pin’ów, którymi chcemy sterować to PC20 i PC19
- zwiększamy wartość parametru gpio_num o tyle ile dodajemy nowych pin’ów do konfiguracji. W tym przypadku dodajemy 2 pin’y, więc zwiększamy wartość parametru z 4 na 6.
Ważne: Do dalszej konfiguracji zapamiętujemy, że pin na schemacie oznaczony jako nr 7 o nazwie PC19 będzie identyfikowany przez system operacyjny jako numer 3, a pin 5/PC20 ma numer 4
Zapisujemy i konwertujemy plik script.fex z tekstowego na binary i restartujemy system.
fex2bin script.fex script.bin reboot
3. Aktywacja / deaktywacja pin’ów
Pin’y GPIO wymagają włączenia / aktywacji. Napisałem skrypt, który to automatyzuje.
Po skonfigurowaniu skryptu dostępne są komendy:
./gpio.bash start ./gpio.bash stop
odpowiednio, aktywujące / deaktywujące pin’y GPIO.
4. Konfiguracja openHAB do sterowania pin’ami
Sterowanie pin’ami polega na ustawianiu niskiego lub wysokiego stanu na pin’ie (0,1)
Załączony skrypt umożliwia ustawianie tych stanów w następujący sposób
./gpio.bash set PIN WARTOSC
gdzie
- PIN to numer pin’u identyfikowany przez system operacyjny w tym przypadku 3 lub 4
- WARTOSC to
- ON (ustawiający sygnał 5v)
- OFF (brak sygnału)
przykłady
./gpio.bash set 3 OFF ./gpio.bash set 4 ON
W tym momencie możemy konfigurować openHAB, aby sterował pin’ami GPIO
Przykładowy wpis w pliku konfiguracyjnym items.
Switch gpio "PIN GPIO" { exec=">[OFF:/path_to_script/gpio.bash set 3 OFF] >[ON:/path_to_script/gpio.bash set 3 ON]" }
- gdzie path_to_script jest ścieżką do katalogu, w który znajduje się skrypt.
Tak zdefiniowany element w konfiguracji elementów openHAB (items) pozwala na sterowanie pin’em o identyfikatorze 3.
5. Dodanie aktywacji / deaktywacji pin’ów podczas uruchomiania / zamykania openHAB
Każdy reboot systemu operacyjnego powoduje, że konieczna jest ponowna aktywacja pin’ów GPIO. Proponuje zautomatyzować to przez dodanie wpisów do skryptu uruchamiającego openHAB.
W moim przypadku do pliku /etc/init.d/openhab wystarczy dodać wyróżnione linie
Kilka wskazówek na koniec:
- aby sterować GPIO trzeba posiadać uprawnienia root. To wymaga uruchomienia openHAB jako root. W przypadku problemów – jak? itp. odpowiem
- skrypt oczywiście musi zostać skopiowany do Cubietruck i muszą mu zostać przydzielone uprawnienia do uruchamiania.
Skrypt:
Wszystkie opcje:
- start – aktywuje pin’u
- stop – dezaktywuje pin’y
- restart – dezaktywuje aktywne pin’y, a następnie aktywuje wszystkie pin’y
- set PIN WARTOSC – ustawia stan pin’u o numerze PIN na WARTOSC (ON,OFF)
- help – pokazuje pomoc
Konfiguracja:
- to w zasadzie ustawienie numerów pin’ów, które powinny być aktywowane oraz ich wartość początkowa, parametry
- PIN – format w nawiasie po spacji wpisujemy numery pin’ów, które zostały ustawione w bootloader – w tym przykładzie 3 i 4
- STATES – przyjmuje wartości 1 lub 0, kolejność umieszczenia ich w nawiasie odpowiada kolejności numerów pin w parametrze PIN
Jeśli masz pytanie zostaw je tutaj
Widzę, że dołączone pliki gpio.zip i gpio.bash nie działają. Można prosić o poprawę, myślę że się przydadzą 🙂
@m4sh qrcze straciłem te pliki jakoś. Ten artykuł był z 2014, więc 9-letni, gdzieś podczas, aktualizacji serwisu musiałem je stracić – nie mogę też ich znaleźć w najstarszych kopiach zapasowych jakie mam 🙁
Szkoda. Właśnie „odkopałem” Cubietrucka i potrzebuje użyć na nim GPIO….myślałem że to mi pomoże 🙂 W najgorszym wypadku zrobię co planowąłem na ESP lub nawet na RPi 😉