ホーム > カテゴリ > ロボット・電子工作・マイコン >

データを送受信をするIoTデバイスの作り方 [Arduino版]

Arduinoで「ESP-WROOM-02」(650円)を使用すると簡単にWifi接続が可能となります。今回はオープンソースの「TESP8266」(ESP-WROOM-02をATコマンドで操作するライブラリ)を使用して「Wifi接続」「URLによるデータの送受信」の方法をご紹介します。

これを使えば「IoTデバイス」が短時間で作成可能です。

※この記事は「TESP8266ライブラリ」の使い方ともなっています。
※2017/5/1にSoftwareSerialにも対応しました。

Arduinoスケッチを「ESP-WROOM-02」に書き込んで使用する場合はデータを送受信をするIoTデバイスの作り方 [ESP-WROOM-02版]をご覧ください。

はじめに

ArduinoとESP-WROOM-02をお互いに通信するにはシリアル通信を行います。そのシリアル通信は「HardwareSerial」「SoftwareSerial」の2種類の方法があります。(※)

今回は都合上、HardwareSerialを主体として解説しますが、慣れてきたらSoftwareSerialを使用すると楽です。また、ライブラリと付属のスケッチ例では両方とも対応しています。

※厳密に言うとシリアル通信の中でATコマンドを叩いてます。

やること

<スケッチを書き込む際の注意事項 >
1. DHCPでWifi接続
2. 固定IPアドレスでWifi接続
3. URLにアクセスしてファイルを取得する
4. URLにアクセスする(HTTP GET)
5. URLにアクセスする(HTTP POST)

使用部品・材料

総額で約1,220円です。(Arduino本体の値段を除く)

部品/材料値段備考
ブレッドボード¥270秋月電子の通販コード(P-00315)
Wi-Fiモジュール ESP-WROOM-02 DIP化キット¥650秋月電子の通販コード(K-09758)
I2Cバス用双方向電圧レベル変換モジュール(FXMA2102)¥200このレベル変換モジュールはI2CやSPI接続などでも使用できるので「2個」ぐらいあると良いです。

秋月電子の通販コード(M-05825)
低損失三端子レギュレーター 3.3V500mA TA48M033F¥100電解コンデンサと積層セラミックコンデンサが付属。

ESP-WROOM-02の電源は3Vから3.6Vまでですので、Arduino UNOの5V電源を3.3Vに降圧するレギュレーターです。

Arduinoには3.3Vの電源がありますが、最大電流が50mAです。ESP-WROOM-02の平均電流は80mAで最大電流は170mAぐらいですので安定化の為、500mAのレギュレーターを使用します。

また、ArduinoへのUSB給電は「USB 3.x」(USBポートが青色)を使用すると給電量が多いです。

秋月電子の通販コード(I-00538)
カーボン抵抗器数円10kΩ(3個)を使用

※レギュレーターがない場合は、Arduinoの3.3V電源で代用できます。
※ESP-WROOM-02はDIP化されていない「素の状態」を10個以上購入すると単価が400円ぐらいになります。

配線図

[HardwareSerialを使用する場合]

※大きい配線図はZIPで提供しています。
※この配線図は5つのサンプルスケッチの共通配線です。

「ESP-WROOM-02」は次のように設置します。

[SoftwareSerialを使用する場合]

HardwareSerialの配線図で、Arduinoの「0ピン,1ピン」の配線を「2ピン,3ピン」に変更するだけです。他のピンでも可能ですが「RXはTXとつなぐ、TXはRXとつなぐ」のようにクロス(交差)させて下さい。

[電圧レベル変換]

ESP-WROOM-02の動作電圧は3.0-3.6Vです。Arduinoの「5VのTX/RX」は「電圧レベル変換」(別名:ロジックレベル変換/電圧レベルシフタ)を使用して電圧を3.3Vに下げています。

動作確認できた電圧レベル変換はI2C用のFXMA2102PCA9306です。汎用のFXMA108を使用すると文字化けなどで正常に接続できない現象が発生しますのでご注意ください。

事前準備

準備作業内容
はんだ付け秋月電子で購入した「ESP-WROOM-02」には細ピンヘッダが付属していますので、ご自分で「はんだ付け」をする必要があります。

Arduino IDEを1.8.2以降にアップグレードする最新のArduino IDEは公式からダウンロード可能です。

※サンプルコードでは日本語(UTF8)を使用していますので、UTF8に対応しているArduino IDE 1.8.2以降をお使いください。
TESP8266ライブラリのダウンロードオープンソースコミュニティのGitHubにあるTESP8266からダウンロード可能です。操作がわからない方はこちらから直にダウンロードできます。
TESP8266ライブラリのインストールArduinoのメニューの[スケッチ][ライブラリをインクルード][ZIP形式のライブラリをインストール]を選択します。

そして、ダウンロードしたZIPファイルを選択すればOKです。
ZIP形式のファイルを展開ダウンロードしたZIP形式のファイルを展開(解凍)します。

Webサーバー最初にPHPをサーバー側で実行できるようにします。

次に「UserDir」フォルダにあるファイルをWebサーバに設置します。iot.incはDBのパスワードなどの設定ファイルですので、外部からアクセスできないユーザーディレクトリに設置します。その他の3つのファイルは外部からアクセス可能なディレクトリに設置します。

UserDir/iot.inc
UserDir/public_html/iot/file.txt
UserDir/public_html/iot/get.php
UserDir/public_html/iot/post.php

URLに変換すると次のようになります。
www.example.com/iot/file.txt
www.example.com/iot/get.php
www.example.com/iot/post.php

※Webサーバーや環境によっては設置方法が異なりますので適宜、変更して下さい。
DBサーバー今回はMySQLを使用します。

データベースを作成後に「SQL」フォルダの「t_example.sql」をデータベース上で実行してテスト用のテーブル(t_example)を作成します。

次にさきほどの「iot.inc」をメモ帳などで開いてデータベースにアクセスする為の設定を書き込みます。

お疲れ様です。これで事前準備は完了です。

スケッチを書き込む際の注意事項

[Arduino IDE 1.8.2のバグ]

Arduino IDEのメニューの[ファイル][スケッチ例][TESP8266]からサンプルのスケッチを開いた場合は[ファイル][名前を付けて保存]で別の場所に保存してから書き込みしてください。そのまま書き込みするとIDE 1.8.2ではUTF8に対応したばかりのバグで「文字化け」が発生します。

[HardwareSerialを使用する場合のみ]

Arduino IDEでスケッチを「マイコンボードに書き込む」前にはArduinoボードの「0ピン」(rx)からピンを外してください。 ピンが刺さったままだと書き込みエラーになります。(Arduinoではスケッチを転送する際に「0ピン」を使用する為です)

スケッチの書き込みが終わった後に「0ピン」にジャンパーワイヤーを刺して下さい。

1. DHCPでWifi接続

Arduino IDEのメニューの[ファイル][開く]から「examples¥connect_DHCP」フォルダの「connect_DHCP.ino」を開きます。

ssidとpasswordを各自の環境に設定します。

そして、スケッチをマイコンボードへ書き込みます。

次にツールバーの一番右にある「シリアルモニター」のアイコンを開きます。

画面右下にあるシリアル通信速度を[115200]に変更します。

Wifi接続に成功すると次のような画面になります。

接続後は「コマンド プロンプト」でpingコマンドを使用して疎通確認をすると良いです。(任意)

ルーターの機種によっては、接続に時間がかかる場合がございます。特にスマートフォンのテザリングによるソフトウェアルータの場合は接続に3-5分ぐらいかかる事があります。

2. 固定IPアドレスでWifi接続

Arduino IDEのメニューの[ファイル][開く]から「examples¥connect_IP」フォルダの「connect_IP.ino」を開きます。

「ssidとpassword」と「36行目のIPアドレス情報」を各自の環境に設定後、スケッチをマイコンボードへ書き込みます。

そして、シリアルモニターで確認します。

SSIDとパスワードが正しい場合は「IPアドレス、ゲートウェイ、ネットマスク」のいれずかが間違っていても「接続」されたと表示される場合がございますのでご注意ください。

3. URLにアクセスしてファイルを取得する

Arduino IDEのメニューの[ファイル][開く]から「examples¥file」フォルダの「file.ino」を開きます。

「ssid、password、host、path」を各自の環境に設定後、スケッチをマイコンボードへ書き込みます。

そして、シリアルモニターで確認します。

ダウンロードするファイルは64byte迄の「テキストファイル」「CSVファイル」などを想定しています。大きいファイルはデータの破損が発生して文字化けする場合があります。
※SSL/TLSはサポートしていません。

4. URLにアクセスする(HTTP GET)

Arduino IDEのメニューの[ファイル][開く]から「examples¥get」フォルダの「get.ino」を開きます。

「ssid、password、host、path」を各自の環境に設定後、スケッチをマイコンボードへ書き込みます。

そして、シリアルモニターで確認します。

「GETの成功」と表示されている場合は、URLにアクセスした際にPHP側の処理が実行されて、データベースに内容が保存されます。

[PHPAdminでデータベースの確認]

5. URLにアクセスする(HTTP POST)

Arduino IDEのメニューの[ファイル][開く]から「examples¥post」フォルダの「post.ino」を開きます。

「ssid、password、host、path、body」を各自の環境に設定後、スケッチをマイコンボードへ書き込みます。

そして、シリアルモニターで確認します。

「POSTの成功」と表示されている場合は、URLにアクセスした際にPHP側の処理が実行されて、データベースに内容が保存されます。

[PHPAdminでデータベースの確認]

参考サイト(仕様系)

HTTP入門

ATコマンドの仕様 (英語)
ATコマンド集 (日本語)
ESP8266 AT Instruction Set (ATコマンドの公式)
※ブラウザで「ESP8266 AT Instruction Set」をサイト内検索。

スイッチサイエンスによる商品解説1
スイッチサイエンスによる商品解説2
マイクロテクニカによる商品解説

参考サイト(ライブラリ系)

電子工作でインターネットに無線接続して通信を行う

参考サイト(その他)

ESP8266を使ってArduinoからネットワーク接続してみる





掲示板

ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。

関連記事



公開日:2017年04月09日 最終更新日:2017年08月20日
記事NO:02317