Ich dachte, ich würde etwas mit dem Raspeltorte machen, den ich schon lange übrig hatte, aber ich kann mir kein Thema vorstellen ... (Schweiß)
Nachdem ich eine Weile nachgedacht hatte, entschied ich mich zu versuchen, wie vielseitig PyCall verwendet werden kann. Deshalb habe ich PyCall in Raspeye platziert und eine Schaltung erstellt, um das Ein- und Ausschalten des Schalters zu erkennen und ihn mit Ruby auszuführen Sah.
[Referenzseite] Beispiel für die Eingabe / Ausgabe von Raspberry Pi GPIO (Python, C-Sprache, Shell-Skript)
Da Ruby 2.1 unmittelbar nach der Erstinstallation enthalten war, werde ich es so verwenden, wie es ist. Installieren Sie PyCall mit dem folgenden Befehl.
python
$ sudo apt install -y ruby-dev
$ sudo gem install --pre pycall
Werfen wir einen Blick auf den Quellcode, der auf der oben genannten Referenzseite veröffentlicht wurde.
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")
Wenn ich es ausprobiere ...
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
$
Wenn Sie die Taste drücken, wird sie anscheinend zu 0, und wenn Sie sie loslassen, wird 1 angezeigt. Vorerst stellte ich fest, dass die Verkabelung korrekt war.
Wenn Sie den Beispielcode so verwenden, wie er ist, ist er etwas langweilig. Ändern Sie ihn daher so, dass er angezeigt wird, während Sie zählen, wie oft er ein- und ausgeschaltet wurde.
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」+Halt bei "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
Übrigens können in Ruby Variablen, die mit Großbuchstaben beginnen, nicht definiert werden (das habe ich gehört ...), daher ändere ich sie in Kleinbuchstaben.
Führen Sie den Befehl aus und drücken Sie die Taste mehrmals ...
python
$ ruby gpio_input.rb
press ^C to exit program ...
ON(1)
OFF
ON(2)
OFF
ON(3)
OFF
^Cdetect key interrupt
Program exit
$
Es wurde gemacht (^ - ^)
Wenn Sie einen Edelstein namens PI Piper verwenden, können Sie dies problemlos mit Ruby tun, sodass Sie PyCall nicht verwenden müssen ...
Was soll ich als nächstes tun?