J'ai pensé faire quelque chose avec la tarte aux râpes qu'il me restait depuis longtemps, mais je n'arrive pas à penser à un thème ... (sueur)
Après avoir réfléchi pendant un moment, j'ai décidé d'essayer à quel point le PyCall que j'utilisais l'autre jour pouvait être utilisé, j'ai donc mis PyCall dans la tarte aux râpes et créé un circuit pour détecter ON / OFF du commutateur et l'exécuter avec Ruby Vu.
[Site de référence] Exemple d'entrée / sortie GPIO Raspberry Pi (Python, langage C, script shell)
Puisque Ruby 2.1 a été inclus immédiatement après l'installation initiale, je vais l'utiliser tel quel. Installez PyCall avec la commande suivante.
python
$ sudo apt install -y ruby-dev
$ sudo gem install --pre pycall
Jetons un œil au code source publié sur le site de référence mentionné ci-dessus.
gpio_input.py
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
IO_NO = 4
print("press ^C to exit program ...\n")
GPIO.setmode(GPIO.BCM)
GPIO.setup(IO_NO, GPIO.IN)
try:
while True:
print(GPIO.input(IO_NO))
time.sleep(1)
except KeyboardInterrupt:
print("detect key interrupt\n")
GPIO.cleanup()
print("Program exit\n")
Quand je l'essaye ...
python
$ python gpio_input.py
press ^C to exit program ...
1
1
1
0
0
1
1
1
0
1
1
^Cdetect key interrupt
Program exit
$
Il semble que lorsque vous appuyez sur le bouton, il passe à 0, et lorsque vous le relâchez, 1 s'affiche. Pour le moment, j'ai trouvé que le câblage était correct.
Si vous utilisez l'exemple de code tel quel, il sera un peu terne, modifions-le donc pour qu'il s'affiche lors du comptage du nombre de fois qu'il a été activé et désactivé.
gpio_input.rb
require 'pycall/import'
include PyCall::Import
pyimport 'RPi.GPIO', as: 'gpio'
io_no = 4
status = 1
buff = 1
cnt = 0
puts "press ^C to exit program ...\n"
gpio.setmode.(gpio.BCM)
gpio.setup.(io_no, gpio.IN)
# 「Ctrl」+Arrêtez-vous à "C"
Signal.trap(:INT) do
puts "detect key interrupt\n"
gpio.cleanup.()
puts "Program exit\n"
exit 0
end
loop do
status = gpio.input.(io_no)
if buff != status
if status == 1
puts "OFF"
else
cnt += 1
puts "ON(#{cnt})"
end
end
buff = status
sleep 0.5
end
Au fait, dans Ruby, les variables commençant par des majuscules ne peuvent pas être définies (j'ai entendu dire que ...), donc je les change en minuscules.
Exécutez la commande et appuyez plusieurs fois sur le bouton ...
python
$ ruby gpio_input.rb
press ^C to exit program ...
ON(1)
OFF
ON(2)
OFF
ON(3)
OFF
^Cdetect key interrupt
Program exit
$
C'était fait (^ - ^)
Si vous utilisez un gem appelé PI Piper, vous pouvez le faire avec Ruby sans aucun problème, vous n'avez donc pas besoin d'utiliser PyCall ...
Eh bien, que dois-je faire ensuite?