RaspberryPi GPIO Pinアサインと各種規格・仕様についてまとめ

◆夏季休暇中のメインイベント

★16日追記 (ピンアサイン表は前パターン網羅しておくべきでしたね。またそのうち更新します)


お盆休みはAzureとラズパイを遊びつくす！！

社会人になるとなかなかまとまった時間がとれないので、やりたいなーと思いつつやれていなかった azure と IoT。

本日夏季休の中盤。azure 夏季休暇前半で アカウント開設 / VNET環境構築 / Virtual Machine / Azure Load Balancer / 一般化済OSイメージ作成 / Blob Storage / VDI (DaaS) といろいろ楽めました。後半はラズパイやろうかなーとラズパイ本体を探します。

発売当初、WiiリモコンでLEDを点灯させてみたり、LinuxやFreeBSDが動く小さなワンボードコンピュータとしていろいろ遊んだラズパイ。2019年、ふと温度・湿度・二酸化炭素濃度などの空気センサーで遊びたくなったので、ラズパイを設置・結線しつつ、I/O の仕様等を改めて調べてみました。また、センサーのデータ読み取り＆可視化をやるための環境構築としてOSのインストールや Python3.6 のビルドを行っているのですが、コンパイルがぜんぜん終わらないので、待ち時間に本記事を執筆を開始。次からはクロスコンパイル環境作ろうと思った次第。

普段は明日の仕事に備えて早めに寝るsuttonですが、今日は寝ない。明日のことは心配しなくて良い。深夜3時くらいにOSのダウンロードと構築が完了。次はpython3.6のビルド。python3.6 のビルドを深夜に始め、朝方5時頃についに寝落ち。翌朝からpython3.6のビルドを再開するも、なぜビルドコマンドを実行しないで寝てしまったのか・・。寝る前にちゃんとやってたら、眠っている間に終わっていたのに orz　





さて、ここから本題。

◆PINアサイン
Raspberry Pi A+ B+ 2B 3B の GPIO 40ピンのPINアサイン
![pinout.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291694/876ee34c-607c-242b-5ebb-6d276e9bdad5.png)
画像は [raspberrypi.zyx](https://pinout.xyz/) さんより引用させて頂きました。



◆ラズパイI/Oピンの規格・用語・用途

Model A	/ Model +A / Model B で利用されている Broadcom BCM2835 で利用可能な通信方式・機能・規格を自分用にメモ・忘備録として記載。ピンアサインの図などを見ていて、これは何をするところなのか？と不明点がでた場合の参考となれば幸いです。

*ALT0～ALT6の切り替えでGPIOのピンの機能・役割が変わり、下記のようにたくさんの規格や方式が使用できます

|pin表記|名称|分類|簡単な説明|
|:--:|:--:|:--:|:--:|
|GPIO|General Purpose Input/Output||集積回路/マイコンの一般的な入出力ピン|
|3.3V|3.3 volt|Electricity|3.3Vの電力供給|
|5V|5.0 volt|Electricity|5Vの電力供給|
|GND|Ground|Electricity|グラウンド アース 接地 (電位0 Volt)|
|SCL|Serial Clock|I2C|クロック (ICやデバイス間の同期用)|
|SDA|Serial Data|I2C|データ通信(同期シリアル通信)|
|MISO|Master In Slave Out|SPI|デバイスからマスタへデータ送信|
|MOSI|Master Out Slave In|SPI|マスタからスレーブのデバイスへデータ送信|
|SCLK|Serial Clock|SPI|データ転送同期のクロック(マスタが生成)|
|CS|Chip Select|SPI|チップセレクト/スレーブセレクト (どのデバイス・チップと通信するか)|
|CE|Chip Enable|SPI|チップ有効化⇒セレクト/スレーブセレクトと同じ|
|TxD|Transmit Data|UART|データ送信(非同期シリアル通信)|
|RxD|Receive Data|UART|データ受信(非同期シリアル通信)|
|CTS|Clear to Send|UART|データ送信可能を通知|
|RTS|Request to Send|UART|データ送信を要求|
|SD CLK|SDIO Clock|SDIO|SDIO通信のクロック|
|SD CMD|SDIO Command|SDIO|SDIOのコマンド|
|SD DAT|SDIO Data|SDIO|SDIOのデータ通信|
|PCM_CLK|PCM Clock|PCM|PCMクロック|
|PCM_FS|PCM Frame Sync|PCM|PCMフレーム同期|
|PCM_DIN|PCM Data In|PCM|PCMデータ入力|
|PCM_DOUT|PCM Data Out|PCM|PCMデータ出力|
|H-SYNC|Horizontal Synchronizing Signal|DPI|水平同期信号(1走査線の書き換えタイミング)|
|V-SYNC|Vertical Synchronizing Signal|DPI|垂直同期信号(1画面の書き換えタイミング)|
|CLK|Clock|DPI|ディスプレイクロック|
|DE / DEN|DPI Enable|DPI|表示開始信号|
|DPI_D|Data(Red/Green/Blue)|DPI|RGB (Red/Green/Blue)の色データ|
|1W Data|W1-GPIO Data|1-Wire|1-Wireインターフェース用データ|
|GPCLK|General Purpose Clock|GPCLK|ソフトウェア制御によらずピン固定の周波数を出力|
|TDI|Test Data In|JTAG|デバッグ用データ入力|
|TMS|Test Mode Select|JTAG|デバッグモード選択|
|TRST|Test Reset|JTAG|JTAG機能のリセット|
|TDO|Test Data Out|JTAG|デバッグ用データ出力|
|TCK|Test Clock|JTAG|ターゲット JTAG ポートへのテストクロック信号|
|RTCK|Return Test Clock|JTAG|ターゲット JTAG ポートからのリターンテストクロック信号|
|ID_SC|Serial Clock for HAT EEPROM|I2C|HAT EEPROM 用クロック *1|
|ID_SD|Serial Data for HAT EEPROM|I2C|EEPROM 用シリアルデータ通信 *1|

*1 HAT I2C EEPROM RaspberryPiの仕様を熟知した人以外は使用非推奨とのこと


|用語|名称|簡単な説明|
|:--:|:--:|:--:|
|I2C|Inter Intergrated Circut|シリアル通信(同期)の方式。|
|SPI|Serial Peripheral Interface|シリアル通信(同期)の方式。|
|UART|Universal Asynchronous Receiver Transmitter|非同期シリアル通信の方式。ラズパイではコンソール接続機能を提供|
|SDIO|Secure Digital Input/Output|SDカードと同じインターフェースでデータ入出力する規格 (SDカードインターフェース)|
|PWM|Pulse Width Modulation|パルス幅変調。パルス波の時間幅を変化させて変調する変調方式|
|PCM|Pulse Code Modulation|パルス符号変調。アナログ信号に対して標本化及び量子化を行いデジタル信号に変換する変調方式|
|DPI|Display Parallel Interface|ディスプレイ映像出力用パラレルインターフェース|
|1-Wire|One Wire Interface|信号＋給電の線とGNDだけで低速データ転送を行う。1-Wireセンサなどを接続して利用|
|JTAG|Joint Test Action Group|IEEE1149.1 集積回路や基板の検査およびテスト・デバッグの標準規格|
|WiringPi|-|RaspberryPiのGPIOを簡単に利用できるように作られたC言語ライブラリ。ラッパーが用意されているのでphpやpythonからも利用可能|
|HAT|Hardware Attached on Top|ラズベリーパイの拡張端子の名称。拡張基盤用のEEPROMを接続する機能を提供|


◆あとがき
記事執筆終わったーと思ったら、ちょうどいいタイミングで python3.6 のコンパイルも完了！いいタイミング！いよいよセンサーなどを接続して遊んでいこうと思います。皆さんも良きラズパイライフを！