MacからGPIO(Lチカ)する

# MacからGPIO制御してみる

RaspberryPiやArduinoからLチカする記事はよく見かけますが、MacやPCからLチカするものはあまり見たことがなかったのでここに記録する。

## USB to GPIO基板
とは言え、MacやPCはGPIOピンを持っていないので、USBをGPIOに変換する[USBシリアルI2C変換基板](https://www.switch-science.com/catalog/6214/)を用いた。I2CだけではなくGPIOへの変換も可能。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e7708a0d-7e9f-30fa-736b-c364f851a2f7.png" width=40%>

## SC18IM700詳細
この基板にはSC18IM700というICが搭載されている。[データシート](https://www.nxp.com/docs/en/data-sheet/SC18IM700.pdf)を解読する。

### Macから送るコマンド
![Command.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/9cf658e1-ad29-2d50-6837-58d17f873e65.png)
今回は主にレジスター設定(0x57)とGPIO Read(0x49)を用いた。
### レジスター設定(0x57)
![WriteRegister.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/46806eec-2538-e926-aa4c-8545ae593f87.png)
### レジスター（一部）
![RegisterSummary.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/8e1a0049-4e06-38e5-1c58-85e200973785.png)
![PortConfigurationRegister.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5bf78c1f-d6a0-8cc7-7ef6-ec4f0af87df5.png)
![IOStateRegister.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f4607b69-52e9-8e8b-9994-8dddf49897a6.png)
### GPIO Read(0x49)
![ReadGPIO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/c676c0bd-54ac-0360-3488-88d21ce4f8b7.png)

### GPIO6を使用
![Pin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5e8aecdb-53a3-1679-83b2-5f6e3981e70f.png)
Input、Outputの両方に使える"GPIO6"を利用した。

## CoolTerm
Macでのシリアル通信制御ソフトは[CoolTerm](https://freeware.the-meiers.org)を利用。

## Output(Lチカ)
GPIO6をOutputとして使うため、Port Configurationレジスター(0x03)のBit5-4を'10'(push-pull output configuration)に、IOStateレジスター(0x04)のBit6を'1'(点灯)/'0'(消灯)にセットする。
### 配線
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/d27bf636-388e-acb2-1230-c9fca3efa313.png" width=80%>

### 点灯時コマンド(Hex表記)
570365044050
### 消灯時コマンド(Hex表記)
540365040050
### 動作
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Mac - USB - GPIO - LED <a href="https://t.co/bzuFSuPMpf">pic.twitter.com/bzuFSuPMpf</a></p>&mdash; HT (@infinite1oop) <a href="https://twitter.com/infinite1oop/status/1264161504691056640?ref_src=twsrc%5Etfw">May 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Input(タッチセンサー)
GPIO6をInputとして使うため、Port Configurationレジスター(0x03)のBit5-4を'01'(input-only configuration)に、IOStateレジスター(0x04)のBit6を'0'にセットする。（おそらく、Input時のIOStateレジスターの設定は不要でしょう。）

### 配線
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/13129764-d3ab-cd62-e0ed-d8b544572330.png" width=70%>

### GPIO読み込みコマンド(Hex表記)
4950
### 動作
<blockquote class="twitter-tweet"><p lang="pl" dir="ltr">Touch sensor - GPIO - USB - Mac <a href="https://t.co/iQH4w9dd42">pic.twitter.com/iQH4w9dd42</a></p>&mdash; HT (@infinite1oop) <a href="https://twitter.com/infinite1oop/status/1264163495303540741?ref_src=twsrc%5Etfw">May 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
センサーにタッチした時は'1'が読み込まれる。GPIO6なのでBit5(=0x40)。

## 続き
今度はI2Cも記録に残す。