電子工作でiPadを操作してみる３ - スワイプをやってみる

# はじめに

本記事は、iPadを操作するの3つ目になります。
今回は、ラズベリーパイを使いスワイプ動作を実行します。


![output3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/23f2981b-36e8-d368-a662-0f3faab370b5.gif)

# 電子工作でiPadを操作してみる関連の記事

- [電子工作でiPadを操作してみる-1 : タップ](https://qiita.com/kotaproj/items/1ac891c2ac65451cbc11)
- [電子工作でiPadを操作してみる２ - Bluetooth経由で制御する](https://qiita.com/kotaproj/items/33395a1e2ba79549c9b5)
- [電子工作でiPadを操作してみる３ - スワイプをやってみる] ←　本記事


# スワイプ操作

スワイプは画面の左右（または上下）を指で滑らせる操作です。
前回使用していたリレータッチボードを複数使用することで、実現を目指します。

# 確認方法

以下にやったことをまとめます。


## スワイプ用タッチボードの作成

いろいろと試行錯誤したところ、３つあればスワイプを安定的に実現できそうです。
※２つでも実現できましたが、コードが複雑になることおよび精度が悪いため諦めました。

以下のボードを作成しました。

![omote_ura.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/86c142f1-0ff1-7c32-9037-d91a7f57c37c.png)


## 接続図


|ラズパイ  |リレータッチボード|備考  |
|---|---|---|
|5V  |5V   |  |
|GND |GND   |  |
|16(BCM)  |EN   | ラズパイ物理ピン - 40 |
|20(BCM)  |EN   | ラズパイ物理ピン - 38 |
|21(BCM)  |EN   | ラズパイ物理ピン - 36 |

回路図は、以下となります。


![kairozu.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/15ec6860-b9db-ed8c-b53e-257431909922.png)


## プログラム

確認用のプログラムは以下となります。


ファイル名：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
```
  - 右側にスワイプする

こんな感じです。


![output3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/23f2981b-36e8-d368-a662-0f3faab370b5.gif)



# さいごに

上記で、スワイプも実現できることが分かりました。
ラズパイであれば、bluetoothのセントラルで動かしたり、wifiを使ったりすることで、リモート制御もできそうです。
また、microbitと連携させるとおもしろいかもしれません。