Parfois, un reboot ne fait pas de mal. Le GPIO4 est souvent utilisé pour le 1-wire ou PiFM, peut-être est-il déjà utilisé par une autre appli ou un driver ?
De mon côté, j'utilise les GPIO 27, 28 et 29 (pin 36, 38 et 40) sur le Pi2.
Voici ce que j'ai rajouté dans domoticz.sh:
Code : Tout sélectionner
#/etc/init.d/domoticz.sh
#GPIO reliées au registre
/usr/local/bin/gpio mode 27 out
/usr/local/bin/gpio mode 28 out
/usr/local/bin/gpio mode 29 out
Cela ouvre les GPIO en sorti au démarrage.
Le script /home/pi/domoticz/scripts/lua/script_device_registre.lua
Code : Tout sélectionner
-- script_device_registre.lua
---------------------------------
-- Gére l'allumage et l'extinction des diodes reliées au registre à décallage
-- Auteur : Neutrino
-- Date : février 2016
-- Source : http://blog.idleman.fr/raspberry-pi-20-creer-un-tableau-de-bord-connect-au-net/
-- Necessite une variable utilisateur "registre" de type chaine
----------------------------------
commandArray = {}
local leds = {}
--leds[Numéro de la sortie sur le 75hc595]='Interrupteur correspondant dans Domoticz'
leds[1]='LED rouge'
leds[2]='LED orange'
leds[3]='LED verte'
leds[4]='LED bleue'
leds[5]='Ecran LCD'
leds[6]='LED blanche'
leds[7]=''
leds[8]=''
for num, switch in pairs(leds) do
if (devicechanged[switch]) then
-- un des switchs a changé d'état
registre= {}
e = 1
--récupération de l'état actuel du registre
for etat in uservariables['registre']:gmatch("%d+") do
registre[e]=etat
e=e+1
end
--modification de l'état du switch
if(devicechanged[switch]=='On')then
registre[num]=1
else
registre[num]=0
end
i = #leds
reg = ''
--inversion de l'ordre des états
while i>0 do
if(registre[i]==nil)then
registre[i]=0
end
reg = reg.." "..registre[i]
i = i-1
end
--mise à jour du registre
os.execute('sh /home/pi/domoticz/scripts/registreMAJ.sh '..reg..' &')
--formatage de la table d'états avant MAJ de la variable utilisateur
regVar = ""
i=1
while i<=#leds do
if(registre[i]==nil)then
registre[i]=0
end
regVar = regVar.." "..registre[i]
i = i+1
end
--mise à jour de la variable utilisateur
commandArray['Variable:registre']=regVar
end
end
return commandArray
Et enfin le script bash, celui finalement qui contrôle le 74hc595.
/home/pi/domoticz/scripts/registreMAJ.sh
Code : Tout sélectionner
#!/bin/bash
#---------------------------------
#-- Envoie la suite de paramètres dans le registre à décalage
#-- Auteur : Neutrino
#-- Date : février 2016
#-- Source : http://blog.idleman.fr/raspberry-pi-20-creer-un-tableau-de-bord-connect-au-net/
#----------------------------------
#Définis les numéros wiring PI des GPIO du raspberry PI qui sont branchés aux pattes du shift register
SH_CP=27
ST_CP=28
DS=29
/usr/local/bin/gpio write $ST_CP 0
for i in "$@"
do
/usr/local/bin/gpio write $SH_CP 0
/usr/local/bin/gpio write $DS $i
/usr/local/bin/gpio write $SH_CP 1
done
/usr/local/bin/gpio write $ST_CP 1
Et enfin, créer une variable utilisateur nommée "registre" de type chaîne et initialisée à "0 0 0 0 0 0 0 0" ou juste "0" par exemple.
Testé avec seulement un 74hc595, mais c'est fait pour fonctionner avec autant que l'imagination laisse entendre !
