Check! IoT ができるようになるまで ～ まずはシリアル通信を使えるようになる

こんばんは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"

Prologue - はじめに
====
電子工作はじめました！

先日、 Windows女子部企画の「[電子工作のワークショップ](http://eventregist.com/e/WinGirl1031 "Windows女子部IT秋祭り -電子工作のワークショップお申込み枠-｜EventRegist（イベントレジスト）")」で、恐縮ながら教え役を担当させていただいたことをきっかけに、すっかりはまってしまいましたっ！電子工作！

だがしかし、勢いで WiFiモジュール (ESP-WROOM-02 / ESP8266) を買ったものの、どうやって使うんだ…？

ということで、まずは最初の一歩で「シリアル通信」について理解・実践し、それについて書き留めます。まさに初歩中の初歩から日進月歩でお送りいたします。

電子工作におけるシリアル通信について
====
シリアル通信は、その名の通りシリアル方式で通信します。シリアル方式とは、1度に1つずつ、逐次的にデータを送るシンプルな方式です。（これに対して、同時にデータを送る方式がパラレル方式です。）

マイコンにはたいてい、シリアル通信のために [UART](https://ja.wikipedia.org/wiki/UART "UART - Wikipedia")(Universal Asynchronous Reciver Transmitter) という装置（集積回路）が搭載されています。 

UART には、 TX(送信)・RX(受信) の配線があります。これを送信ピン → 受信ピンへ、受信ピン → 送信ピンへというように接続対象に対して送信と受信を逆に接続します。こうすることでPCから送信したデータを接続対象が受け取り、接続対象が送信したデータをPCで受け取ることができるのです。

USB変換ケーブル/アダプター| 通信の方向 |接続対象
------------------------+-----------+--------------------------
TX (送信) | → | RX (受信)
RX (受信) | ← | TX (送信)

使う道具
----
一般的なのは、PCにあるUSBポートを利用してシリアル通信ができるケーブルやアダプターが市販されているので、それを使います。

私は、 FTDI製のUSBシリアル変換アダプターを利用することにしました。[スイッチサイエンス](https://www.switch-science.com/ "スイッチサイエンス") さんで購入できます。このアダプターは通信するピンにジャンパワイヤのオス側が刺さるようになっており、今回の接続対象はブレッドボード上で使うので、オス～オスのジャンパワイヤを使用しました。

使う道具  | 用途
---------+-----------------------------------------
[FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)](https://www.switch-science.com/catalog/1032/ "FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き) - スイッチサイエンス") | USBシリアル変換
microUSBケーブル | PCとUSBシリアル変換アダプターを接続する
[ジャンパワイヤ(オス～オス)](https://www.switch-science.com/catalog/620/ "普通のジャンパワイヤ(オス～オス) - スイッチサイエンス") | USBシリアル変換アダプターとブレッドボードを接続する

なお、変換ケーブル/アダプターを選ぶときは、使う OS にドライバが対応しているか確認してください。 FTDI製であれば私が使う Windows もサポートされてるとのことで選びました。（[はんだづけカフェ](http://handazukecafe.com/ "はんだづけカフェ") の常連さんがアドバイスくださいました、ありがとうございます！）

また、このアダプターは利用時の電圧を 5V か 3.3V に調整できます。このおかげで、今回接続対象が 3.3 Vでしたが、変換することなく利用でき助かりました。

ドライバインストール
====
FTDI USBシリアル変換アダプターのドライバは、Windows であれば Windows Update で自動的にインストールされます。もし手動でインストールする必要がある場合は、[こちら](http://www.ftdichip.com/Drivers/VCP.htm "Virtual COM Port Drivers")のページからインストーラーをダウンロードし、インストールしてください。

接続方法
====
FTDI USBシリアル変換アダプターと接続対象を接続するには、4本の導線を接続します。
![20151121_serial_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/a9c24652-31d1-e399-bff9-0253525042d7.png)

ラベル | 説明
------+----------------
RX    | 受信用ピン。接続対象の TX ピンと接続する。
TX    | 送信用ピン。接続対象の RX ピンと接続する。
VCC   | 電源として 5V or 3.3V を出力する。接続対象の電源として利用する。
GND   | グランド

このように接続対象にジャンパワイヤで接続します。（接続先の説明は今回は割愛し、次回詳細を記載します。）
![20151121_serial_002.png](https://qiita-image-store.s3.amazonaws.com/0/3812/badd8aed-443a-c555-4ec9-a02ea790c80e.png)

シリアル通信の通信内容を見るには
====

上記の状態まで準備できたら、PCに接続してみましょう。

シリアル通信ができるコンソール・モニタは、Terminal などいくつかあるかと思いますが、私は今後 Arduino を使いたいので、 [Arduino IDE](https://www.arduino.cc/en/Main/Software "Arduino Download") のシリアルモニタを利用しました。

Windows の場合、USBシリアル変換アダプターをPCに接続すると、以下のように「デバイスマネージャ」の「ポート(COMとLPI)」という項目に、新しいポートが追加されるのがわかります。この COMを覚えて置き、Arduino IDE のシリアルポートに指定することで、Arduino IDE からこのUSBシリアル変換アダプターを利用してシリアル通信ができるようになります。
![20151117_serial-arduino_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/36599f5b-09cf-2761-7559-9c0ddc0a8174.png)

このときの接続対象は、ATというコマンドを発行すると応答する仕組みでした。実際試してみたところ、以下のように通信が確立され、正常に送受信できたことがわかります。
![20151117_serial-arduino_002.png](https://qiita-image-store.s3.amazonaws.com/0/3812/7530f04b-0779-439a-e2a4-55d14270ef41.png)

ね？、あっさりシリアル通信ができましたよー！！！

Epilogue - おわりに
====
ということで、基礎中の基礎について私の整理も兼ねて記事に書きおこしました。

頭でわかっていたものの、いざ言葉にするとなかなか明確に説明できず、この記事を書くのにかなりの時間を要しました… いつもと違うことを文章で伝えようとすると難しいですね。もっと技術の幅と文章スキルを向上しなければと痛感いたしました…

それでは、この予備知識をもとに、次回はWifiモジュールにPCから接続してみますよ！

おまけ(1)
----
直近の目標は、Arduino + Wifiモジュールで、どこかのクラウドの IoT サービスに連携することです。今のところ、お気に入りの [Bluemix](https://console.ng.bluemix.net/ "IBM Bluemix") で使えるように、 [IBM Internet of Things Foundation](https://internetofthings.ibmcloud.com/) の利用を検討しています。

12月に開催される [Bluemix Advent Calendar](http://qiita.com/advent-calendar/2015/bluemix 
"Bluemix Advent Calendar 2015 - Qiita") の 12/14 にエントリーしているので、この目標達成の記事が書けるようにがんばるつもりです！！

おまけ(2)
----
ちなみに、冒頭の電子工作ワークショップで使ったプログラマブルLEDを Arduino 経由で遊んでみた記事はこちらです。

- [Check! プログラマブルLED の BlinkM で遊んでみよう！ ～ Arduino デビュー編](http://qiita.com/dz_/items/b35d8d48b0d3702f9ea3 "Check! プログラマブルLED の BlinkM で遊んでみよう！ ～ Arduino デビュー編")