vendredi 29 décembre 2017

Raspberry épisode 29 : Module LDR ou Photorésistance





Le Module est analogique et ne peut marcher que sur une entrée analogique de Arduino. (Le raspberry n'en n'ayant pas).

ou passer par un autre module de convertion analogique/numerique (ADC)
https://leanpub.com/RPiMRE/read

ou passer par un condensateur
https://www.youtube.com/watch?v=dPwW9zmX84E
https://pimylifeup.com/raspberry-pi-light-sensor/
http://www.instructables.com/id/Raspberry-Pi-GPIO-Circuits-Using-an-LDR-Analogue-S/

ou un controlleur Texas Instrument (TI)
http://marcandreuf.blogspot.fr/2015/06/how-to-photoresistor-on-raspberry-pi.html

ou n'avoir qu'un resultat 1 ou 0
https://www.raspberrypi.org/magpi/raspberry-pi-fridge-monitor/

C'est cette dernière solution que j'ai retenu, car mon Raspberry est  dans un placard et je souhaite savoir si le placard est ouvert (et reçoit de la lumière) ou fermé (et ne reçoit rien)

Mes branchements :

sur PI0:
#PIN S :  1 (3.3V)
#PIN centre: 12 (BCM18)
#PIN - : 6 (Masse)

sur PI2
#PIN S :  non branché
#PIN centre: 12 (BCM18)
#PIN - : 6 (Masse)

Étrangement le code qui fonctionne bien avec le Raspberry PI 0 ne fonctionne pas avec le PI2.
en débranchant le PIN S du module tout fonctionne avec le PI2.




Le Code en Python:
J'ai repris le code suivant :
https://www.raspberrypi.org/magpi/raspberry-pi-fridge-monitor/
et l'ai adapté pour moi:

 ldr_num.py:

import time
import RPi.GPIO as GPIO
import urllib2

LIGHT_PIN = 18   # photoresistor pin
EVENT = 'fridge_alert'

# Configure the GPIO pin
GPIO.setmode(GPIO.BCM)
GPIO.setup(LIGHT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

if GPIO.input(LIGHT_PIN) == 0:
            # Its light (door open)
    print("ouvert")
#            time.sleep(3)
else:
    print("ferme")
#            time.sleep(3)

GPIO.cleanup()

mon script lancé par CRON: (lance le script Python et recupère en variable l'état du placard

#recupération des information de l'unite photosensible
placard=$(python /home/pi/LDR/ldr_num.py)
 et
#enregistrement dans fichier Log
sudo echo $jour"    "$temperature"    "$humidite"    "$placard";" >> /home/pi/dhtxx/logtemp.txt

#enregistrement inversé dans un fichier ilog
valeur=$(echo $jour"    "$temperature"    "$humidite"    "$placard";")
sudo echo $valeur | cat - /home/pi/dhtxx/ilog.txt > temp && mv temp  /home/pi/dhtxx/ilog.txt

Raspberry épisode 28 : DHT on reviens dessus en mode electronique

Si vous n'avez pas un module tout fait, mais juste un composant electronique, voici comment l'utiliser.
(Je l'ai fait car mon module ne répondait plus, je pensais qu'il était grillé, j'en ai donc recommander sur internet)
(En fait, je n’exécutait pas la commande PIGPIOD)


La 1ere Broche, sur la résistance 4,7 KOhms , puis alimentation électrique 5V
La 2eme Broche, sur l'autre bout de la résistance, et le PIN DATA du Raspberry (ex BCM17)
La 3ème Broche, sur rien
La 4ème Broche sur la Masse.

-Branchement sur le Raspberry, comme d'habitude , l'aide se trouve sur ce site: https://fr.pinout.xyz
-Pour reconnaitre une résistance, n'hésitez pas à utiliser des sites comme: https://www.dcode.fr/code-couleur-resistance
ou
https://www.digikey.fr/fr/resources/conversion-calculators/conversion-calculator-resistor-color-code-5-band 

Bravo à vous :)

mercredi 13 décembre 2017

VBS popup MSGBOX qui ne bloque pas l'execution du script VBS





Si vous aussi souhaitez afficher un message dans un script VBS sans pour autant que le script ne s'arrête le temps que l'utilisateur ne clic sur OK, voici un exemple un peu moche mais qui marche :


'declaration des variables
dim wshShell

set wshShell=CreateObject("Wscript.Shell")

'création d'un fichier vbs temporaire
wshShell.run("%comspec% /c echo MSGBOX (""YOUR MESSAGE"") > C:\temp\test_multi_msgbox\message.vbs")

'ok
'wshShell.run "%comspec% /c cscript C:\temp\test_multi_msgbox\message.vbs",0
'wshShell.run "%comspec% /c cscript C:\temp\test_multi_msgbox\message.vbs",0
'nok
'wshShell.run "%comspec% /c cscript C:\temp\test_multi_msgbox\message.vbs",1'
'wshShell.run "%comspec% /c cscript C:\temp\test_multi_msgbox\message.vbs",1
'ok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",2
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",2
'nok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",3
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",3
'nok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",4
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",4
'nok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",5
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",5
'ok mais en bas
wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",6
wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",6
'ok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",7
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",7
'nok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",8
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",8
'nok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",9
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",9
'nok
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",10
'wshShell.run "%comspec% /c call C:\temp\test_multi_msgbox\message.vbs",10

'wshShell.run "%comspec% /Q cscript C:\temp\test_multi_msgbox\message.vbs",3, True
'wshShell.run "%comspec% /Q call C:\temp\test_multi_msgbox\message.vbs",4, True

'wshShell.run "%comspec% /c /Q cscript C:\temp\test_multi_msgbox\message.vbs",5, True
'wshShell.run "%comspec% /c /Q call C:\temp\test_multi_msgbox\message.vbs",0, True


msgbox("le script se poursuit malgré les msgbox précédant")
'suppression du fichier temporaire VBS
wshShell.run("%comspec% /c del C:\temp\test_multi_msgbox\message.vbs /f /q")


samedi 9 décembre 2017

Raspberry épisode 27 : log inversé

Parce que, comme moi, vous ne voulez pas dérouler des dizaines de page de log pour afficher la dernière valeur, voici comment généré de logs inversés, c'est à dire des variables avec chaine qui s'inscrivent en haut de fichier:
echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt
ou
sudo echo $valeur | cat - ilog.txt > temp && mv temp  ilog.txt