ESP02 Arduino IDEでWiFiラジコンにしてみた
Arduino IDEでESP02(ESP8266ともいう)のWiFi機能を使って、スマホやPCからコントロールできるラジコンカーを作ってみました。
ESP02(ESP8266)とは、本来は、プロセッサとWiFi通信モジュールを組み合わせたマイコンモジュールのことを指します。これらモジュールにUSBーシリアル変換器などを組み合わせた開発ボードが用意されており、これら開発ボードも、ESP02と呼ばれることがあります。この記事でもその呼称を用います。なおここでは、ESP02の開発ボードとしてスイッチサイエンス社から購入した「ESPr Developer (ESP-WROOM-02開発ボード)」を使いました。
Arduino IDEでESP02のWiFiを使うには
Arduino IDEのインストール及び、ESPの情報設定、スケッチ(プログラム)の作成実行については「Windows10 Arduino IDEにESPをつなぐ」という記事で書きました。ここでは、ESP02のWiFi機能を使う方法を書きます。
ESP02でWiFiを使い他のESPやPC、スマホなどとつなぐにはいくつか理解しておくべきことがあります。一つは動作モードです。これは、WiFiネットワークの中で、ESPをアクセスポイントとするか、あるいはその下につながるステーションとするかを選びます。
通常はステーションモードでよさそうなので、それを使います。ステーションモードの場合は、以下の図のように、家にあるWiFi親機をアクセス・ポイントしてそこにつながります。この図は、ESP8266のドキュメントのサイト「Welcome to ESP8266 Arduino Core’s documentation!」の「ESP8266WiFi library」から借用しました。
2つ目は、ESPをサーバーとして動作させるかあるいはクライアントとするかという選択です。ここでは、サーバーとすることにします。つまり、ESPの中にWEBサーバーを作り、PCやスマホをクライアントして通信を行います。下のような感じです。この図も上と同じサイトのものです。
この場合、ESPのスケッチには、ESPで行う通常の処理の他に、ESPの外に対してWebサーバーとして見えるような仕組みを組み込んでおく必要があります。このWebサーバーを介してWiFiで外部とつながることになります。
以下の記述では、Webサーバを作る方法を使い、ラジコンカーに挑戦してみました。その際、muku爺さんの「ESP32-DevKit ESP32-DevKitを使ってWiFiコントロール・カーを製作(1)」というページを大いに参考にさせてもらいました。
回路
下の写真は、ラジコンカーのベースになるパーツです。ブレッドボードの左側にESP02、中央にモータードライバがあり、下の2つのモーターをドライブします。これらのモーターにはレゴに取り付けやすくなるようにレゴプレートを取り付けてあります。
なお、ESP02の出力ピンのドライブ能力は10mA程度のようです。私の持っている、電流をあまり食わない小さなキアモーターでも20mA程度必要で、写真のモータは100mA以上流れますので、モータードライバは必須です。ここで使ったモータードライバは、L9110Sチップを使ったもので、アマゾンなどで入手できます。
スケッチの作成
Arduino IDEの処理手順は以下のとおりです。
・ESP02ボードの選択
・スケッチの作成
・コンパイルと転送
それが済むと、スマホやPCのブランザーからリモコンができるようになります。
ボードの選択
ESP02はとして私はESPr Developer (ESP-WROOM-02開発ボード)を使っていますので、「ツール」からマイコンボードとして”Generic ESP8266 Module”を選びます。また、シリアルポートを確認し、シリアルモニターをクリックします。転送速度は115200bpsです。
スケッチの作成
ラジコンカーのスケッチを作るに当たりmuku爺さんのページにあるスケッチをベースにしました。muku爺さんのページでは、ESP02ではなくESP32を使っていますので、スケッチの変更が必要です。以下の点を修正して使いました。各項の末尾の*1は、ESP02にしたことによる変更であることを示します。*2は、自分の環境、好みに合わせて行う修正です。
・#include <WiFi.h> → #include <ESP8266WiFi.h> *1
・アクセスポイントのSSIDとパスワードを設定 *2
・pin番号の0、2、4、5を12、13、14、15に変更 *1
・タイトルその他は自分の好みに合わせる *2
なお、WiFiで通信するため、スケッチには以下のような処理を含みます。
・#include <ESP8266WiFi.h> でWiFi関連のファイルを取り込む
・クライアントで表示するラジコン用のページ(html)を用意する
(ページにはボタンやボックスなどが含まれる)
・WiFiServer server(80); でサーバーを作成する
・ESPの出力ピンの設定などを行う
・アクセスポイントにアクセスし、割り振られたローカルIPアドレスをもらう
・シリアルモニターにローカルIPアドレスを表示する
・クライアント(スマホやPC)の接続状況を確認する
・クライアントに用意してあるhtmlを送る
・クライアントからのボタンのクリック情報などに従いピン出力を制御する
以上のようにしておくと、クライアントとなるスマホやPCのブラウザで、ESP(サーバー)のローカルIPアドレスを開くと、ラジコン用のページが送られてきて末尾のようなボタンを含む画面が表示されます。
コンパイルと転送
Arduino IDEのメニューの「→」をクリックすると、スケッチのコンパイルとESP02への転送が行われます。転送終了後、シリアルモニターに、
Connecting to ** (← ここに、アクセスポイントのSSIDが表示される)
…….
WiFi connected.
IP address:
192.168.0.** (← ここにローカルIPアドレスが表示される)
………………………
と出たら、接続成功です。
リモコン
スマホ、あるいは、PCのブラウザーを開き、シリアルモニターに表示されたIPアドレスを入力して開くと、下のようなラジコン画面が現れます。muku爺さんのサイトにある画面とほぼ同じです。スマホならタッチして、PCならマウスをクリックして前後左右に動かすことができます。上の写真の回路で、モータが指示のとおりに動いていることを確認できました。