今までArduinoでネットワークに接続するにはイーサネットシールドを使っていました。
それも互換品(?)の超安いやつを。
本家は4000円くらいしますが、互換品は1000円弱なので。
ArduinoのWi-Fiシールド(純正)はイーサネットシールドより高く、10000円くらいしますし、ほぼ無線LANは諦めていました。
そこで見つけたのがESP8266を使ったモジュールです。
ArduinoからWi-Fiでネットワークに接続できますし、なんと1個400円弱とめちゃくちゃ安いのです。
さらに資料も続々と増えてきてる模様で、苦労することもなさそうです。
超魅力的なESP8266モジュール使ってWi-Fiでネットワークに接続してみたいと思います。
スポンサーリンク
用意するもの
- ESP8266 モジュール ×1
- Arduino ×1
- Arduinoの開発環境
- その他(USB-シリアル変換モジュール、ブレッドボード)
ESP8266のモジュールは現在AliexpressやSeeed Studioなど海外のショップでしか手頃に購入できるところを把握しておりません。
Amazonでも売っているみたいですが非常に高いですね・・・
ESP8266の電源電圧は3.3Vなので通信の電圧も3.3Vが望ましいですが、Arduino Unoなどの5Vでも大丈夫なようです、たぶん・・
実際に使用するときは安全も兼ねてレベルシフト回路などをはさみましょう。
USB-シリアル変換モジュールはデバッグ用です。
これがなくてもやろうと思えばできますが、あったほうが確認しやすいです。
Arduinoのテストスケッチ
Arduino用のライブラリは以下のところから頂きました。
注意点としてはESP8266のファームウェアのバージョンに応じてシリアル通信の速度を変えてやる必要があります。
今回のだとシリアル通信の速度を変えるにはライブラリ内部のコードを書き換えなければなりません。
そこまで難しくはないのでライブラリのReadmeを読んでください。
私の買ったモジュールは古かったので9600bpsでした。
新しいのだと115200bpsでも行けるみたいです。
次のコードはライブラリのサンプルコードです。
Wi-Fiで接続してプライベートIPアドレスを取ってくるだけです。
「SSID」と「PASSWORD」は環境に合わせて書き換えてください。
#define SSID "Itead_1(Public)" #define PASSWORD "27955416" #include "uartWIFI.h" #include <SoftwareSerial.h> WIFI wifi; void setup() { wifi.begin(); bool b = wifi.Initialize(STA, SSID, PASSWORD); if(!b) { DebugSerial.println("Init error"); } DebugSerial.print("Connecting..."); String wifistring = wifi.showJAP(); while(wifistring == "") { delay(200); wifistring = wifi.showJAP(); } String ipstring = wifi.showIP(); while(ipstring == "") { delay(200); ipstring = wifi.showIP(); } DebugSerial.println(wifistring); //show the name of current wifi access port, "AP" label is included here DebugSerial.print("IP Address:"); DebugSerial.println(ipstring); //show the ip address of module } void loop() { }
回路
ESP8266モジュールのピンアサインは次のようになっています。
スポンサーリンク
回路といってもArduinoとESP8266モジュールを接続するだけです。
今回はArduino Unoで考えてみます。
Arduino MEGAなどでは、また違ってきますがここでは省略します。
ESP8266 Module |
Arduino Uno |
VCC | 3.3V |
CH_PD | 3.3V |
UTXD | 0(RX) |
URXD | 1(TX) |
GND | GND |
GPIO0 | 未接続 |
GPIO2 | 未接続 |
RST | 未接続 |
配線は次のようになります。
モジュールとブレッドボードの接続は自作の治具(?)を使っています。
そのほうがスッキリしていて好きなんです。
書いてはいないですけどデバッグ用のUSB-シリアル変換モジュールも接続しています。
ArduinoからWi-Fiによるネットワーク接続
成功するとこんな感じになるはずです、デバッグ用の通信結果です。
IPアドレスが取得できたら、とりあえず成功です。
このプログラムはIPアドレスを取ってくるだけですが、サンプルプログラムにはHTTPリクエストを送信するものやUDPを使って通信するものもあるのでこのライブラリで大体の事はできそうですね。
これでイーサネットシールドを使わずに、さらにWi-Fiシールドも使わずにネットワークに接続できました。
もうイーサネットシールドは控えめにしてESP8266を積極的に使っていこうと思います。
最後に言うのもなんですが、技適は取得していないので個人利用だとしても無線モジュール同様グレーなモジュールになります。
ご使用の際は十分に気をつけて下さい。
追記(2015/7/17)
ESP-WROOM-02というモジュールが出ているみたいです。
こちらは技適取得済みのため日本国内でも安心して使えるようですね。
スポンサーリンク
Pingback: Wi-Fiモジュールってどうなんだ
>最後に言うのもなんですが、技適は取得していないので個人利用だとしても無線モジュール同様>グレーなモジュールになります。
記事参考になります。
ところで、電波法の観点から言うと別に認証を通していないモジュール
を販売、購入することは別に違法ではありません。違法となるのはこの
モジュールに電源を入れて電波を送信した時に、電波を送信した人が
法律違反となります。
認証を取得するのは販売者が購入者を犯罪者にして迷惑をかけないようにする販売者責任で
やっていることです。
ちなみにこれを逃れるためには40dB以上の遮蔽ができる金属遮蔽体の内部で行えば
OKです。具体的に言えばアルミホイルを2重に隙間なく貼り、表面をアースした
ダンボールの中で行えばokになります(漏れがなければ)。
https://www.tele.soumu.go.jp/horei/reiki_honbun/a72aa79391.html
たまさ様
お世話になります。
最近Arduinoの電子工作を始めた"超"初心者です。
Arduino、UNO、NANOをPCに””USB接続”して書き込みしていますが、
これをESP8266で行いたいと思い、ESP8266はすでに購入済みです。
そしてインストール方法を調べているのですが、えらく難しく
英語サイトでは全くわからなかったので、日本語サイトを探したところ
御HPにたどり着いた次第です。
さて、この記事を読ませていただいて不明な点がありましたので、
ご教示いただければ幸いです。
1.本記事で”ここからは「ESP8266」は持ってて「Arduino IDE」はインストール済みという前提で話を進めます。”とありますが、”持っているだけで無く”前記事の"ESP8266モジュールでArduinoからWi-Fiを使う"でのセットアップは必要ですよね?
2.1はもちろん必要かと思いますが、本記事で”[ArduinoOTA]→[BasicOTA]”をESP8266に書き込む際1でアップロードしたプログラムは消えないのでしょうか?
3.1の質問で事前セットアップが不要な場合、ESP8266に書き込んだ[ArduinoOTA]→[BasicOTA]内にはWIFIネットワーク名とパスワードを記入する箇所が無いのですが、どうなっているのでしょうか?
4.ARDUINOとESP8266を接続する方法を調べていると各種の方法があり、抵抗を使ったりする場合もある様ですが、前記事の"ESP8266モジュールでArduinoからWi-Fiを使う"での方法がベストでしょうか?
5.ESP8266を単体で使用する場合ですが、実際の使用方法のイメージがつかめません。WIFIシールド以外の具体的な使用方法があればお教えいただければ幸いです。
不明な点をクリアにしてからセットアップを開始したいと思いますので、よろしお願いいたします。
すいません。間違いました。
”ArduinoOTAでプログラムの無線書き込み(ESP8266)”に書くべきでした。
削除出来ませんので、再投稿します。
たまさ様
詳細なご回答誠にありがとうございます。
Arduinoを始めてまだ10日ほどで、かつ,ネットワークに関しても全くの素人で、基本的な事が全く判っていませんので、かなり的外れの質問をしている様で、非常に恥ずかしいです。
まだ何が分からないかも理解できていないような状態なので、もう少し基本的な事から教えていただければ幸いです。
さて、ESP8266(8ピンのもの)のセットアップを行っているのですが、非常に苦労しております。まずはファームウェアのアップデートでモジュールが全く認識されず、PCを換えると認識したり、それも再現しなかったり、アップロードもことごとく失敗した後、アップロード開始の直前にUSB端子に接続すると書き込めたりで極めて不安定で、何をやっているか分からなくなってしまうような状態です。一方、同時に購入したWEMOS D1と言う、Arduino UNO にESP8266がビルトインされているタイプのものは,これももちろん苦労しましたが何とかセットアップ出来、ArduinoOTAを入れて無線で書き込み、書き換えもできるようになったのですが、この場合、アップロード対象はESP8266では無くWEMOS D1と言うのも理解できていません。まあ、Arduino(WEMOS D1)を無線書き込みは出来たので、当初の目的は達成しているのですが、何とかESP8266の8ピンのものを使ってArduino UNOに接続したいと思っています。
さて、記事”ESP8266モジュールでArduinoからWi-Fiを使う”にご質問ですが、
1.このコードの書き込み対象はESP8266でしょうか?
2.このコードを書き込んだ後にArduino***にまた書き込むのでしょうか?
3.ESP8266に書き込む時とArduinoに書き込む時でRX、TX端子の接続を逆にしたりするのでしょうか?(他のサイトでは常にRXはRX、TXはTXに接続しているようなのですが・・・)
4.英語サイトなどではESP8266に書き込む時はGPIO0をGNDをに接続などと書いてありますが、これは不要なのでしょうか?
5.話の筋は少々違いますが、ESP8266(8ピン)の単体で何かに使えるのでしょうか?
と書きましたが、要するにこのESP8266(8ピン)とArduino UNOを接続して無線書き込みを行いたいのですが、記事”ESP8266モジュールでArduinoからWi-Fiを使う”でIPアドレス取得後のArduino本体へのコードの書き込み方法を知りたいのですが、ご存知のサイトなどがあればご紹介いただければ幸いです。
前述のように、当初の目的はWEMOS D1で実現できているのですが、せっかく購入したESP8266(8ピン)も何とか活用したいので、ご教示いただけないでしょうか?
お時間があるときで結構ですので、よろしくお願いします。