PI4-HAT Software in English
PI4-HAT Software in English

Software

Die Pla­ti­ne selbst ent­hält kei­nen Con­trol­ler und da­mit kei­ne Firm­ware. Hier je­doch ei­ni­ge nütz­li­che Hin­wei­se und Code­schnip­sel zur An­steu­e­rung. Ich ha­be sie bis­her nur über Bash-Scripts ge­steu­ert.

config.txt

In /boot/config.txt (bzw. /boot/firmware/config.txt bei neu­e­ren Ver­sio­nen) muss der Uart im Ab­schnitt [all] noch ak­ti­viert wer­den. Hier ein Aus­schnitt mei­ner config.txt mit den re­le­van­ten Ein­trä­gen:

[all]
#dtoverlay=vc4-fkms-v3d
dtoverlay=disable-wifi
dtparam=i2c_vc=on
enable_uart=1
dtoverlay=uart5,ctsrts

Bash-Skripts (bis PI4b)

Die Rich­tung der I/O-Pins wird zwar be­reits vom EEPROM vor­ge­ge­ben, um sie per Bash-Script nut­zen zu kön­nen müs­sen wir sie je­doch ex­por­tie­ren:

for i in 16 20 21 26 { echo Init $i echo $i >/sys/class/gpio/export echo "out" >/sys/class/gpio/gpio$i/di­rec­tion }

Erst da­nach kön­nen wir die Pins di­rekt set­zen, z.B. so:

sleep 2 echo 1 >/sys/class/gpio/gpio26/value sleep 0.05 echo 0 >/sys/class/gpio/gpio26/value

Hier se­hen wir auch gleich wie man Im­pul­se er­zeugt, die zum An­steu­ern bi­po­la­rer Re­lais er­for­der­lich sind. Der ers­te Sleep sorgt mit 2 Se­kun­den da­für, dass der Kon­den­sa­tor aus­rei­chend ge­la­den ist. Dann wird der Trei­ber ein­ge­schal­tet und mit ei­nem 50 ms-Sleep die Im­puls­zeit ab­ge­war­tet. Da­nach schal­ten wir den Trei­ber wie­der aus.

Das Ti­ming mit Sleep ist selbst in Bash hin­rei­chend ge­nau. Zur Er­zeu­gung von Mess­im­pul­sen (zum Er­mit­teln der ak­tu­el­len Re­lais-Stel­lung) und zur Aus­wer­tung von Tpulse reicht Bash je­doch nicht. Hier bräuch­te man ein ex­ak­tes Ti­ming und Auf­lö­sun­gen im µs-Be­reich. Das ha­be ich bis­her nicht ver­sucht und ich weiß auch nicht, ob das mit dem Pi über­haupt mög­lich ist (zu­min­dest mit Raspbian).

Wich­tig ist, dass im­mer nur ei­ne ein­zi­ge Spule ei­nes ein­zi­gen Re­lais an­ge­steu­ert wird und da­vor zwei Se­kun­den ge­war­tet wird um si­cher­zu­stel­len, dass der Spei­cher­kon­den­sa­tor ge­la­den ist.

... ab PI5

Das IO-Sys­tem hat sich mit dem PI5 er­heb­lich ge­än­dert. Die bis­he­ri­ge Me­tho­de funk­tio­niert nicht mehr und ist deprecated.

So muss­te ich mit dem Um­stieg auf den PI5 ei­ni­ges än­dern.

In den ak­tu­el­len Skrip­ten ver­wen­de ich den gpiod, den Sie evtl. erst mit apt install gpiod in­stal­lie­ren müs­sen. Die In­i­tia­li­sie­rung der I/Os er­üb­rigt sich da­durch, bei ei­nem gpioset wer­den sie au­to­ma­tisch als Aus­gang pro­gram­miert, bei ei­nem gpioget als Ein­gang. Wer hat sich so­was aus­ge­dacht? Das ist so­weit ent­fernt von der Hard­ware! Manch­mal muss man den Pin-Zu­stand le­sen, oh­ne ihn als Ein­gang zu pro­gram­mie­ren, manch­mal will man ei­nen Ein­gang als Aus­gang schal­ten, oh­ne sei­nen Aus­gangs­zu­stand zu än­dern! Es gibt kein Da­ta-Di­rec­tion-Re­gis­ter, das in prak­tisch je­dem Port vor­han­den ist und das man un­ab­hän­gig set­zen könn­te. Die Steu­e­rung der Re­lais er­folgt al­so in et­wa so:

sleep 2 gpioset gpiochip0 26=1 sleep 0.05 gpioset gpiochip0 26=0

Cron-Skript

Als Sys­tem­kon­stan­te ist die NAS-Plat­te per UUID de­fi­niert. Da­mit wird ver­mie­den, ver­se­hent­lich die fal­sche Plat­te (/dev/sdx) als NAS zu moun­ten. Unter /proc/mounts er­scheint sie je­doch als sdx. $(/bin/readlink -e $d) hilft hier bei der Zu­ord­nung, wo­bei $d der UUID-Link (/dev/disk/by-uuid/<UUID>) ist. Hier bei­spiel­haft mein powerOffNasDisk.