RaspBerry Pi 3B+ s PiJuice HAT

17.2.2019

Poněvadž RaspBerry Pi (dále jen RPI) používám často mimo dostupné sítě a zároveň už mne nebavilo neustálé nastavování času po startu systému a zároveň vítám možnost měnit zdroje napájení za chodu (např. i v terénu při výměně powerbank), přivítal jsem rozšiřující modul k RPI, který jsem koupil na stránce: http://rpishop.cz/baterie/930-pijuice-hat.html. Tento modul se jmenuje PiJuice (dále jen HAT).
Poněvadž při jeho uvádění do provozu může uživatel zažít řadu nejasností a problémů, tak ty, se kterými jsem se setkal, jsem zde popsal, protože jejih řešení by mohlo stát cenný čas.

Představení a základní montáž

Obsah balení, funkce zařízení a další informace jsou popsány na výše uvedených stránkách prodejce.
HATje doručen v papírové krabičce již sestavený s baterií (typ: BP7X 1.82Ah) připevněnou průhlednými plastovými příchytkami, přes které je zároveň přisroubován ke čtyřem plastovým šestihranným sloupkům slouřícím pro pevné připevnění k RPI.
Osazenou desku připojíme k RPI pomocí GPIO headeru v plné délce, který je vyveden na horní stranu desky pro stackování dalších HAT's. Dále pomocí šroubováku PZ1 přišroubujeme pomocí přibalených šroubků k univerzálním montážním otvorům v RPI.
Dodán je také pogo pin, který sloužil pro HAT's s firmwarem (dále jen FW) 1.2 a nižší pro wakeup funkce, ale od FW v1.3_2019_01_15 již není potřeba.
Před zapnutím je třeba odstranit průhledný plastový separátor baterie od kontaktů HATu. Napájení pro provoz RPI a nabíjení baterie je možné jak z powerbanky rozumné kapacity, tak i síťového adaptéru a využít lze jak micro USB konektor na RPI, tak i na HAT.

HW ovládání a signalizace stavů

Přímo na HAT se nacházejí dvě LED a tři mikrospínače. V dokumentaci jsou LED značeny LED1 a LED2 a spínače (tlačítka) S1, S2 a S3. Číslovány jsou při pohledu na HAT tak, že napájecí piny baterie směřují od osoby, zprava. Spínač 3 je mezi spínačem 1 a 2. Spínač S1 slouží ve vypnutém stavu RPI pro zapnutí (krátký stisk) a v zapnutém stavu pro sw vypnuti (po 10s stisku) nebo hw vypnutí (po 20s stisku). Tlačítkům S2 a S3 lze přiřadit funkce softwarově z konfiguračního nástroje (viz níže).
LED jsou dvě, přičemž číslování je opět zprava. LED2 je by default nevyužitá a také její význam může být určen konfigurací.
LED1 plní úlohu signalizace stavu baterie a nabíjení:
Vypnuté RPI:

  • Modrá (stále svítící): baterie plně nabita
  • Zelená (blikající): nabíjení (přes 50%)
  • Modrá (blikající): nabíjení
  • Červená (blikající): nízká úroveň nabití baterie

Zapnuté RPI:

  • Zelená (blikající): zapnuto, baterie nad 50% nabitá
  • Modrá (blikající): nabíjení
  • Oranžová (blikající): nízká úroveň nabití baterie (<50%)
  • Červená (blikající): nízká úroveň nabití baterie (<15%) nebo baterie chybí

Software - instalace

Prvním bodem instalace je kontrola zapnutí i2c sběrnice, přes kterou HAT komunikuje se systémem. Zkontrolujeme, zda soubor “/boot/config.txt” obsahuje řádku:

dtparam=i2c_arm=on

Pokud tento parametr není v souboru přítomen, doplníme jej tam a RPI restartujeme.

Veškerý software potřebný pro běh i ovládání HATu je obsažen v originálním GitHub repozitáři a naklonujeme jej příkazem:

git clone https://github.com/PiSupply/PiJuice.git

Pro bezproblémový běh softwaru je nutné nainstalovat dva balíky z distribučního repozitáře. Tyto balíky obsahují repozitáře jak Raspbianu, tak i Kali. Nainstalujeme je přílkazem:

apt install python3-urwid python3-smbus

Klon GIT repozitáře obsahuje již sestavené binární balíky v různých verzích a poslední nainstalujeme:

dpkg -i PiJuice/Software/Install/pijuice-base_1.4_all.deb

Tímto je veškerý potřebný software nainstalován. Software, který je v tomto nainstalovaném balíku má dvě části: službu pijuice a spustitelný binární soubor pijuice. Službu pijuice musíme povolit pro spouštění při startu systému a můžeme ji rovnou nastartovat:

systemctl enable pijuice
systemctl start pijuice

a ověřit úspěšnost startu služby:

systemctl status pijuice

Možné problémy a nesnáze

Verze Python modulu

Již při startu služby je možné, že se setkáte s tím, že se start nezdaří. Jedním z problémů může být to, že maintainer balíku pijuice-base pracoval se starší verzí Pythonu, ve kterém je většina software pro HAT napsána. Tuto obtíž odstraníme tak, že se podíváme, jaké verze Pythonu jsou nainstalovány a pro jakou verzi Pythonu je vytvářen aktuálně použitý balík a nejspíše zjistíme, že se liší. Protože problém je s umístěním python modulu pijuice.py, podíváme se přímo na něj. Nejprve zjistíme verzi pythonu použitou v balíku:

dpkg -L pijuice-base | grep -i pijuice.py

a vidíme výstup podobný následujícímu:

/usr/lib/python3.5/dist-packages/pijuice.py

tedy použitá verze pythonu je 3.5
Potom zjistíme, jaké verze pythonu jsou použity v systému:

ls -ld /usr/lib/pyth* | sed -ne 's/^..*python\(..*\)$/\1/p'

a jako výstup dostaneme seznam verzí, např:

2.7
3
3.5
3.7

a vidíme, že nejvyšší používaná verze Pythonu je 3.7 oproti 3.5. Proto modul pijuice.py z instalovaného balíčku zkopírujeme nebo vytvoříme hardlink do adresáře s moduly pro Python 3.7:

ln /usr/lib/python3.5/dist-packages/pijuice.py /usr/lib/python3.7/pijuice.py

a provedeme restart sluzby pijuice a ověříme výsledek:

systemctl restart pijuice
systemctl status pijuice

Úspěšný start služby vypadá podobně jako:

● pijuice.service - PiJuice status service
   Loaded: loaded (/lib/systemd/system/pijuice.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-02-17 05:28:56 CET; 2h 51min ago
 Main PID: 322 (pijuice_sys.py)
   CGroup: /system.slice/pijuice.service
           └─322 /usr/bin/python3 /usr/bin/pijuice_sys.py

Feb 17 05:28:56 a systemd[1]: Started PiJuice status service.

Oprávnění uživatele

Dalším problémem, se kterým se můžeme setkat, je chybový stav při spuštění příkazu “pijuice_cli” pro konfiguraci HATu: “No PiJuice found or Failed to use I2C bus. Check if I2C is enabled”. Toto je poněkud matoucí hláška neboť se zobrazí i ve chvíli, kdy uživatel nemá při spuštění dostatečná práva a nebo je root. Práva jsou určena příslušností ke skupinám. Příkaz, který zjistí, že uživatel pi, pod kterým příkaz “pijuice_cli” spouštíme, je členem příslušných skupin, zní:

grep "\(i2c\|pijuice\)" /etc/group

a správný výsledek by měl být:

i2c:x:109:pijuice,pi
pijuice:x:1001:pi

(čísla skupin se mohou lišit). Pokud uživatel pi v některé ze skupin i2c a pijuice neni členem, pak jej do těchto skupin přiřadíme.
Pokud bychom chtěli spouštět příkaz “pijuice_cli” přímo jako root, použijeme raději příkaz: “python3 /usr/bin/pijuice_cli.py”.

V tuto chvíli bychom měli tedy mít jak spuštěnou službu pijuice, tak bychom měli být schopni spustit příkaz pijuice_cli, pomocí kterého můžeme nastavovat HAT a také zjišťovat aktuální stav.

Nekorektní nabíjení baterie

Zde můžeme při podrobnějším testování chování baterie při nabíjení a běhu pouze z baterie zjistit zvláštní a naprosto nepředpokládanou věc. Procentuální ukazatel nabiti baterie může kolísat naprosto nepravděpodobně a při vybíjení baterie lze zaznamenat občas i procentuální nárůst nabití, což je pochopitelně nesmysl.
Takové chování nemusí být nutně chybou HW, jak by se mohlo zdát, ale v tomto případě je chybou FW. V době psaní tohoto článku byl aktuální FW 1.2 a tento vykazoval popisované chování. Naštěstí byl již na GitHubu v issues tento stav popsaný a vyřešený vydáním experimentálního FW. Nejprve FW stáhneme:

wget https://github.com/PiSupply/PiJuice/files/2760372/V1.3_2019_01_15-20190115T155652Z-001.zip

a potom rozbalime a zkopírujeme do adresáře, ve kterém jsou uloženy binární obrazy FW z balíku pijuice-base:

unzip V1.3_2019_01_15-20190115T155652Z-001.zip
cp V1.3_2019_01_15/PiJuice-V1.3_2019_01_15.elf.binary /usr/share/pijuice/data/firmware/

Potom je potřeba pomocí nástroje pijuice_cli nahrát nový firmware do HATu.
Prováděl jsem velmi mnoho testů s nabíjením, vybíjením, apod. a ujistil se, že nový FW funguje již dobře a procentuální vyjádření stavu nabití baterie je zobrazováno korektně a věrohodně.
Při testech je vhodné kontrolovat teplotu příkazem:

/opt/vc/bin/vcgencmd measure_temp

Nastavení RTC - baterií zálohovaných hodin reálného času

Funkci HW RTC ověříme tak, že po synchronizaci času pomocí NTP se pokusíme zapsat aktuální systémový čas do HW:

ntpdate tak.cesnet.cz
hwclock -w

Pokud druhý příkaz oznámí chybu v neexistenci zdroje času, pak editujeme soubor “/boot/config.txt” a přidáme řádku:

dtoverlay=i2c-rtc,ds1339

a restartujeme RPI.
Opakujeme předchozí nastavení času pomocí NTP a pokus o zápis do HW. V tuto chvíli by měl být výsledek úspěšný. Je vhodné provést shutdown a po chvíli času opět RPI nastartovat. Opětové použití NTP synchronizace nás bude informovat o rozdílu mezi systémovým časem po jeho obnově z HW příkazem:

hwclock -s

a časem spočítaným NTP. Mel by být minimální. Jakmile je ověřena možnost zápisu systémového času do HW a obráceně, je vhodné zajistit, aby se HW čas přenesl do systémového při každém startu. Toho je možné dosáhnout vytvořením systemd unity v souboru: “/etc/systemd/system/hwclock.service” s obsahem:

[Unit]
Description=Synchronise Hardware Clock to System Clock
DefaultDependencies=no
After=sysinit.target

[Service]
Type=oneshot
ExecStart=/sbin/hwclock -s

[Install]
WantedBy=graphical.target multi-user.target

a restartem konfigurace unit systemd a povolenim startu unity pri rebootu a nastartovani v tuto chvili:

systemctl daemon-reload
systemctl enable hwclock
systemctl start hwclock

Opět jsem testoval chování HW hodin při vybíjení baterie, při nabíjení, apod. a výsledek byl v normě.

Další zdroje

Pěkný popis mimo GitHub je na stránkách https://learn.pi-supply.com/make/pijuice-quick-start-guide-faq/
Issue nabíjení baterie na GitHubu projektu: https://github.com/PiSupply/PiJuice/issues/249
Baterie použitelné k PiJuice HAT: https://uk.pi-supply.com/products/pijuice-5000mah-battery (v budoucnu by měli mít naskladněn i 12Ah článek).

Závěr - otestované funkce

Ve chvíli psaní tohoto článku jsem otestoval následující funkce:

  • nabíjení baterie ve stavu vypnutého i zapnutého RPI,
  • provoz pouze na baterii,
  • střídání napájení (USB konektor na RPI s USB konektorem na HATu) za běhu,
  • držení RTC bez externího napájení v zapnutém i vypnutém stavu RPI.

Dalším testem bude doba běhu na baterii při různé zátěži.

HAT má spoustu dalších možností a využití. (Nemaje druhou baterii, nemohl jsem vyzkoušet výměnu baterie za provozu, ale toto by probémy dělat nemělo.)
Doporučuji prostuovat GitHub projektu a odkazy v předchozí kapitole.

  • obsah/linux_obecne/rpi_pijuice.txt
  • Last modified: 2019/02/17 17:39
  • by profors