はじめに
本記事は、iPadを操作するの3つ目になります。
今回は、ラズベリーパイを使いスワイプ動作を実行します。
電子工作でiPadを操作してみる関連の記事
- 電子工作でiPadを操作してみる-1 : タップ
- 電子工作でiPadを操作してみる2 - Bluetooth経由で制御する
- [電子工作でiPadを操作してみる3 - スワイプをやってみる] ← 本記事
スワイプ操作
スワイプは画面の左右(または上下)を指で滑らせる操作です。
前回使用していたリレータッチボードを複数使用することで、実現を目指します。
確認方法
以下にやったことをまとめます。
スワイプ用タッチボードの作成
いろいろと試行錯誤したところ、3つあればスワイプを安定的に実現できそうです。
※2つでも実現できましたが、コードが複雑になることおよび精度が悪いため諦めました。
以下のボードを作成しました。
接続図
ラズパイ | リレータッチボード | 備考 |
---|---|---|
5V | 5V | |
GND | GND | |
16(BCM) | EN | ラズパイ物理ピン - 40 |
20(BCM) | EN | ラズパイ物理ピン - 38 |
21(BCM) | EN | ラズパイ物理ピン - 36 |
回路図は、以下となります。
プログラム
確認用のプログラムは以下となります。
ファイル名:relay.py
import RPi.GPIO as GPIO
import time
import sys
# pin settings
PIN_0 = 21
PIN_1 = 20
PIN_2 = 16
PIN_3 = 12
class RelayProc():
def __init__(self):
self._swipe_pins = [PIN_0, PIN_1, PIN_2]
self._lsw_pin = PIN_0
self._rsw_pin = PIN_3
# bcm setting - gpio output
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_0, GPIO.OUT)
GPIO.setup(PIN_1, GPIO.OUT)
GPIO.setup(PIN_2, GPIO.OUT)
GPIO.setup(PIN_3, GPIO.OUT)
return
def deini(self):
GPIO.cleanup()
return
def tap(self, left = True, intervel=0.050):
pin = self._lsw_pin
if left == False:
pin = self._rsw_pin
GPIO.output(pin, GPIO.HIGH)
time.sleep(intervel)
GPIO.output(pin, GPIO.LOW)
return
def swipe(self, left = True, intervel=0.020):
step = -1
if left == False:
step = 1
for pin in self._swipe_pins[::step]:
GPIO.output(pin, GPIO.HIGH)
time.sleep(intervel)
for pin in self._swipe_pins[::step]:
GPIO.output(pin, GPIO.LOW)
time.sleep(intervel)
return
def main():
relay_proc = RelayProc()
args = sys.argv
if "left" == args[1]:
relay_proc.swipe(True)
elif "right":
relay_proc.swipe(False)
else:
pass
relay_proc.deini()
return
if __name__ == "__main__":
main()
- "left"を指定すると、swipe()にて以下が行われる
- [PIN21 - HIGH]
- 20msec wait
- [PIN20 - HIGH]
- 20msec wait
- [PIN16 - HIGH]
- 20msec wait
- [PIN21 - LOW]
- 20msec wait
- [PIN20 - LOW]
- 20msec wait
- [PIN16 - LOW]
- 20msec wait
- 左へのスワイプを疑似的に行う
- "right"を指定すると、swipe()にて以下が行われる
- [PIN16 - HIGH]
- 20msec wait
- [PIN20 - HIGH]
- 20msec wait
- [PIN21 - HIGH]
- 20msec wait
- [PIN16 - LOW]
- 20msec wait
- [PIN20 - LOW]
- 20msec wait
- [PIN21 - LOW]
- 20msec wait
- 右へのスワイプを疑似的に行う
動作確認
- リレータッチボードを取り付ける
- 今回は、クリップを使用
- ラズパイ側から"left"を指定し、プログラムを実行
$ python relay.py left
- 左側にスワイプする
- ラズパイ側から"right"を指定し、プログラムを実行
$ python relay.py right
- 右側にスワイプする
こんな感じです。
さいごに
上記で、スワイプも実現できることが分かりました。
ラズパイであれば、bluetoothのセントラルで動かしたり、wifiを使ったりすることで、リモート制御もできそうです。
また、microbitと連携させるとおもしろいかもしれません。