Groovy-IoT + kikori (2. 標準ハードウェア)

#はじめに
前回はPCベースのセンサの取り扱いについて論じました。ただ、IoTの文脈においては何らかのターゲットデバイスがベースになります。Groovy-IoT, kikoriが使えるターゲットデバイスについて解説します。

![Dev_basis_dev.png](https://qiita-image-store.s3.amazonaws.com/0/156757/861eafbd-0c69-ebf6-0d94-4d15048b1ab5.png)


#標準ハードウェア
kikoriなどのハードウェアに密接して動作するソフトウェアに開発機器あるいは動作環境として標準ハードウェアを定義する必要があります(簡単に言えば、これがないと開発できない)。候補としてLinuxが動作する低価格のコンピュータが候補になります。こう言えば、思いつくコンピュータは一つですね。そうです、RaspberryPiになります。

##RaspberryPi
RaspberryPiは現行機種として大きく分けると3種類になります(色々な分け方がありますが基板の大きさで分けます)。
##RaspberryPi-ZeroW
小型のシステムを作る上でのソリューションです。多少の高さはありますがフットプリントは最小になります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/14e25669-c3f0-a8f1-8b34-3bc9da25a5ed.jpeg" width=50%>

Parts     |Model No.       |Spec.           |Unit|Distributor|Note. |
----------|----------------|----------------|----|-----------|------|
RasPi     |ZeroWH          |                |1   |[Marutsu Elec.](https://www.marutsu.co.jp/pc/i/1320453/)| |
USB I/F   |Groovy-IoT      |                |1   |[Marutsu Elec.](https://www.marutsu.co.jp/pc/i/1350226/)| |
LCD       |WaveShare 13891 |1.44inch 128×128|1   |[Sengoku](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5A7N)           |      |
USB-Cable |SUNGAY-L        |0.3m            |1   |[Amazon](https://www.amazon.co.jp/gp/product/B07FXKZMFY/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1)|Need to customize|
Spacer    |                |2.6mmx5mm       |4   |[Nishikawa](http://nishikawa.or.tv/)| |
Spacer    |Double-Female   |2.6mmx5mm       |2   |[Nishikawa](http://nishikawa.or.tv/)| |
Spacer    |                |2.6mmx8mm       |4   |[Nishikawa](http://nishikawa.or.tv/)|9mm is better |
Spacer    |Double-Female   |2.6mmx8mm       |2   |[Nishikawa](http://nishikawa.or.tv/)|9mm is better |
Spacer    |                |2.6mmx15mm      |2   |[Nishikawa](http://nishikawa.or.tv/)| |
Washer    |Spring-Type     |2.6mm           |4   |[Nishikawa](http://nishikawa.or.tv/)| |


##RaspberryPi-3A+
現在、RaspberryPi-3A+は技適が取れていないので国内で使うのは難がありますが、処理能力は3B+とほぼ同等なので、エッジ側での処理が必要な場合は有用です。特にスペースが限られている場合にはベストの選択になるでしょう。

<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/e76f804e-1696-e482-ddf1-59c2205eeb53.jpeg" width=50%>

Parts     |Model No.       |Spec.           |Unit|Distributor|Note. |
----------|----------------|----------------|----|-----------|------|
RasPi     |3A+             |                |1   || |
USB I/F   |Groovy-IoT      |                |1   |[Marutsu Elec.](https://www.marutsu.co.jp/pc/i/1350226/)| |
LCD       |WaveShare 13891 |1.44inch 128×128|1   |[Sengoku](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5A7N)           |      |
USB-Cable |MYLB-L          |0.2m            |1   |[Amazon](https://www.amazon.co.jp/gp/product/B07BBN3J2Z/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1)| |
Spacer    |                |2.6mmx5mm       |4   |[Nishikawa](http://nishikawa.or.tv/)| |
Spacer    |                |2.6mmx8mm       |4   |[Nishikawa](http://nishikawa.or.tv/)|9mm is better |
Spacer    |Double-Female   |2.6mmx8mm       |2   |[Nishikawa](http://nishikawa.or.tv/)|9mm is better |
Washer    |Spring-Type     |2.6mm           |4   |[Nishikawa](http://nishikawa.or.tv/)| |


##RaspberryPi-3B+
USBが4ポートあるのでセンサを多く使う場合のソリューションになります。Groovy-IoTは複数枚もkikoriでサポートされます。また、処理速度も高いのでエッジ側での処理が大きい場合に選択します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/47cb0c15-cb5f-5863-2c89-54399719ecb5.jpeg" width=50%>

Parts     |Model No.       |Spec.           |Unit|Distributor|Note. |
----------|----------------|----------------|----|-----------|------|
RasPi     |3B+             |                |1   |[Martsu Elec.](https://www.marutsu.co.jp/pc/i/1349448/)| |
USB I/F   |Groovy-IoT      |                |1   |[Marutsu Elec.](https://www.marutsu.co.jp/pc/i/1350226/)| |
LCD       |WaveShare 13891 |1.44inch 128×128|1   |[Sengoku](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5A7N)           |      |
USB-Cable |SUNGAY-L        |0.3m            |1   |[Amazon](https://www.amazon.co.jp/gp/product/B07FXKZMFY/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1)| |
irMagican |                |                |1   |[Marutsu Elec.]()| |
Spacer    |                |2.6mmx5mm       |4   |[Nishikawa](http://nishikawa.or.tv/)| |
Spacer    |                |2.6mmx8mm       |4   |[Nishikawa](http://nishikawa.or.tv/)|9mm is better |
Spacer    |Double-Female   |2.6mmx8mm       |2   |[Nishikawa](http://nishikawa.or.tv/)|9mm is better |
Washer    |Spring-Type     |2.6mm           |4   |[Nishikawa](http://nishikawa.or.tv/)| |


#周辺デバイス
##[Groovy-IoT](http://www.omiya-giken.com/?page_id=2262)

<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/73df6a0f-f5f4-5b23-493c-455c8b91a98f.jpeg" width=50%>

Groovy-IoTはRaspberryPiを念頭に設計しているので、拡張ボードとネジ穴を同位置にしています。また、基板サイズも極力小さくしているので、他の基板との併用が可能です。USBポートに予備があれば、更に増設が可能です。

###電源設定

<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/33de1bca-65b4-a39f-f13e-32a1c429a782.jpeg" width=50%>


基板表面中央に電源設定のジャンパピンがあります。システムの電源を5/3.3Vとして設定可能です。純正のGrove systemは5/3.3Vはセンサ基板側で対応している場合が多いですが、自作の場合は5 or 3.3Vの固定の場合が少なくありません。そのためシステム側で電源を設定することが出来ます。ただし、5V or 3.3Vの排他設定になりますので注意してください。

###基板のバージョン(PCB Version)

<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/fe46b499-91ef-c5ef-014f-a7c4cacd635b.jpeg" width=50%>

基板のバージョンは1.00, 1.1.0となります。基本的に1.0.0と1.1.0は変わりません。1.1.0は1.0.0に比べて電源ラインが強化されています。

<!--
1.2.0と1.1.0の違いはGPIO1コネクタにおいて、GP0, GP1が入れ替わっています。これにより、GPIO1のコネクタでもADCが使いやすくなっています。なぜならGrove systemにおいてはPin1単体で使われていることが多く、GP0はADCがマッピングされていません。そのためPin1にGP1(ADC1)をアサインすることにより、ADCを使えるようにしたわけです。
-->

###使えるインターフェイス
Groory-IoTはMicrochip社MCP2221aをベースにしています。MCP2221aにはインターフェイスとして以下の機能があり、それらを効率よくGroove system準拠のコネクタに割り当てています。MCP2221aは詳しくは[こちら](http://ww1.microchip.com/downloads/en/devicedoc/20005565b.pdf)を参照してください。

- I2C

I2Cの形式のインターフェイスを取り扱うことが可能です。I2Cについて全て対応しているわけではなく現在のところ、下記のセンサに対応しています(詳しくはkikoriのReadme.mdを参照ください)。
  - BME280
  - ADXL
  - D6T
  - D7S

**PCB Version 1.0.0/1.1.0**

PinX|Function|PinOut|Note|
----|--------|------|----|
Pin1|SCL|10 | |
Pin2|SDA|9 | |
Pin3|Vcc|1 | |
Pin4|GND|14 | |

<br>

- UART

UARTは電源電圧設定で5/3.3Vのインターフェイスとして取り扱えます。送受信のレートは300-406800bpsになります。RaspberryPiのヘッドレスセッティングには最適です。CDC-ACMとして取扱ができますので、基本的にドライバが不要です。

**PCB Version 1.0.0/1.1.0**

PinX|Function|PinOut|Note|
----|--------|------|----|
Pin1|Rx|5 | |
Pin2|Tx|6 | |
Pin3|Vcc|1 | |
Pin4|GND|14 | |

- GPIO1(GPIO/ADC/CLKR)

GPIOに代表されるピン単位のインターフェイスはGPIO1, GPIO2のコネクタに分けてあります。
GPIO1にはGP0とGP1とそのピンにマッピングされ排他利用されるADC1/CLKRがあります。
ADCはReference Volate (Vref)として、電源電圧、1.024, 2.048, 4.096Vに選択が可能です。センサ出力が小さい場合にVrefの設定によりあたかもアンプを通した効果として見えます。量子化ビット数は10bitですので、2^10=4096の分解能となります。
CLKRはクロック出力になります。375KHz単位に24MHzまで出力出来ます。この機能はGroove systemには無いものです。詳しくは詳しくは[こちら](http://ww1.microchip.com/downloads/en/devicedoc/20005565b.pdf)を参照してください。

**PCB Version 1.0.0/1.1.0**

PinX|Function|PinOut|Note|
----|--------|------|----|
Pin1|GP0|2 | |
Pin2|GP1/ADC1/CLKR|3 | |
Pin3|Vcc|1 | |
Pin4|GND|14 | |

<!--
**Version 1.2.0**

PinX|Function|PinOut|Note|
----|--------|------|----|
Pin1|GP1/ADC1/CLKR|3 | |
Pin2|GP0|2 | |
Pin3|Vcc|1 | |
Pin4|GND|14 | |
-->

- GPIO2(GPIO/ADC/DAC)

DACがそれぞれ使えます。Vrefは電源電圧、1.024, 2.048, 4.096Vを切替可能です。出力ビットは5bitとなります。DACの機能はGrove systemにはありません。アクチュエータとなり、周辺に対して影響を及ぼすので利用に際しては細心の注意が必要です。

**Version 1.0.0/1.1.0**

PinX|Function|PinOut|Note|
----|--------|------|----|
Pin1|GP2/ADC2/DAC1|7 | |
Pin2|GP3/ADC3/DAC2|8 | |
Pin3|Vcc|1 | |
Pin4|GND|14 | |


##[1.44inch-LCD](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5A7N)

<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/c41bf5ef-529d-7844-0dc6-047f08ddd4b2.jpeg" width=50%>

表示用の標準デバイスとして、こちらのモデルを利用します。RaspberryPiのすべてのモデルで使えます。このLCDはkikoriでサポートされています。

##[irMagician](http://www.omiya-giken.com/?page_id=837)

<img src="https://qiita-image-store.s3.amazonaws.com/0/156757/0dab88a3-9ff9-bdf0-de03-578b60f016bd.jpeg" width=50%>

IoTの代表的なアプリケーションである赤外線リモコンによる家電制御などで利用できます。irMagicianもkikoriでサポートされています。

#その他のGW
現在、RaspberryPi以外の各種GWやSBC(Single Board Computer)での動作検証を進めていますが、基本的にはJDKとUSB-I/Fが確保できれば利用可能なので、ハードルはかなり低いと思います。動作レポートをお待ちしています。