ESP-WROOM-02でWiFi通信パート2
〔パート1〕
〔マイコンのトップに戻る〕
パート1では、ESP-WROOM-02モジュールの動作確認と必要なソフトのダウンロード編でした。
パート2では、マイコン(PIC)からESP-WROOM-02を制御し、PCと通信を行ってみます。
このページでは、パート1を読んでいる物として少し簡略して書きます。
《実験1》
マイコン(PIC)とPC間であたかもUART通信を行っているかの様に動作します。
仮想COMポート :WiFi通信を従来のRS232C通信と同様のCOMポート通信で行えるソフト
ステーションモード :AP(access point)に接続をするモード
トランスペアレントモード:透過モードの事で、入力した文字はそのまま相手に送信されるモード
(配線図)
このESP-WROOM-02モジュールは、こちらのマイクロテクニカから購入可能です。
(2020/3現在こちらに切換っています。)
ESP-WROOM-02モジュールが、3.0-3.6Vなので、回路の電源は3.3Vです。
もし、5.0Vを使うならUSARTラインは電圧レベル変換を行う必要が有ります。
ESP-WROOM-02モジュール周りの配線を行った後に、モジュールを差し込めば良いでしょう。
ブレッドボードで色々実験&開発するなら、こちら(秋月電子)の変換基板付きが配線しやすそうですね。
ここではPIC18F25K22を使っています、データメモリが1K以上のPICを使い下さい。
PIC側のUSARTは、"USART1"を使っています。(青い配線)
PIC側のI2Cは、"I2C2(MSSP2)"を使っています。(オレンジの配線)
I2C接続LCDの話はこちらの記事を参考にして下さい。
I2Cとスイッチのプルアップ抵抗はPIC内蔵のプルアップを使っています。
PICのMCLR(1番ピン)にリセット回路を付けないのならプルアップ10KΩですが、
PIC内部でプルアップされているので外付け抵抗は省いてもOKです。
(プログラムにつて)
ESP-WROOM-02モジュールは、「ステーションモード」でAPに接続するクライアントとなり、
サーバーにアクセスした後は、「トランスペアレントモード(透過モード)」での通信となります。
PICのシステムクロックは64MHzとなっています、変更しないで下さい。
ESP-WROOM-02に"115200bps(デフォルト)"でUSART通信を行うには32MHzでは少し厳しい様です。
(skUARTlib.cの初期化をBRGH=1/BRG16=1と改造すれば32MHzでもOKでしょう、未確認)
↓ここからサンプルプログラムソースファイルをダウンロードして下さい。
WiFi.lzh
プログラムソースをダウンロードしたら、MPLAB Xにてプロジェクトを作成します。
以下のファイルをプロジェクトディレクトリにコピーしてプロジェクトに取込んで下さい。
次にコンパイルとPIC書き込みを実行して下さい。
MPLAB(R) XC8 C Compiler Version 1.32コンパイラを使用しています。
ダウンロードしたら解凍して下さい、以下のファイル構成です。
WiFi1.c・・・・・・・・・・・・ 本体のサンプルプログラムソースファイル(実験1用)
WiFi2.c・・・・・・・・・・・・ 本体のサンプルプログラムソースファイル(実験2用)
skESP8266.c・・・・・・・ ESP-WROOM02でWiFi通信を行う為の関数ライブラリソースファイル
skESP8266.h・・・・・・・ ESP-WROOM02でWiFi通信を行う関数のインクルードファイル
skUARTlib.c・・・・・・・・ USART通信を行う関数ソースファイル
skUARTlib.h・・・・・・・・ USART通信を行う関数のインクルードファイル
skI2Clib.c・・・・・・・・・・ I2C通信を行う関数ソースファイル
skI2Clib.h・・・・・・・・・・ I2C通信を行う関数のインクルードファイル
skI2CLCDlib.c・・・・・・ I2C接続LCD関数ライブラリソースファイル
skI2CLCDlib.h・・・・・・ I2C接続LCDライブラリ用インクルードファイル
コンパイルする場合は、"WiFi1.c"か"WiFi2.c"の何れか一つを使いますよ、念の為。
skESP8266.h
以下のATコマンドの記述が有るので、自分の環境に合わせて変更する必要が有ります。
#define CMD_CWJAP "AT+CWJAP_DEF=\"BBUser\",\"??????\"" // APに接続する
#define CMD_CIPSTART "AT+CIPSTART=\"TCP\",\"192.168.x.x\",8089" // サーバーに接続する
CMD_CWJAP
”BBUser”の所に接続するAPの[SSID]を設定し、”?????”の所がAPのパスワードを設定します。
CMD_CIPSTART
ここで接続するパソコンのIPアドレスと、下記事”(動かして見る)”の操作Cで指定するポート番号を
設定します。
skESP8266.c
このライブラリはESP-WROOM-02にアクセスする為の関数集です。
この関数集自体は他のPIC12F/16F/18F/PIC24E系統で動作すると思います。
(但し、PIC24Eの場合はここの"skUARTlib","skI2Clib"は使用出来ない、こちらの"16bitMCU版"を使います)
ESP-WROOM-02にアクセスを行う関数の使い方を説明します。
ans = ESP_ClientTOapInit( )
ESP-WROOM02をクライアントモードで初期化する処理
(ステーションモード/APに接続/サーバーに接続/トランスペアレントモード)
このモードでの初期化は、接続相手のサーバーが起動していないと失敗します。
ans :0=正常 失敗した場合は何処で失敗したか進捗番号を返します
ans=4で返された場合は、接続相手の"APアドレス"と"ポート番号"が正しいか確認して下さい。
ans=31で返された場合は、接続するAPの"SSID"と"パスワード"が正しいか確認して下さい。
その他の進捗番号はソースプログラムを読みましょう。
ans = ESP_CommandSend(*cmd)
ESP-WROOM02にATコマンドを送信する処理
コマンド文字列の最後は0x00(NULL)で有る事、コマンドの[CR][LF]はこの関数で付けて送ります。
この関数はコマンドに対する返答("OK")を待ちます、約20秒でタイムアウト。
*cmd:送信するコマンドを格納した配列へのアドレスを指定
ans :0=正常 31=APに接続時のエラー 32=ERRORで返答した -1=相手が返答無(タイムアウト)
例)ans = ESP_CommandSend("AT+CIFSR") ;
以下の関数は《実験2》で使用しているので"WiFi2.c"のソースを参照下さい。
ans = ESP_ServerMYapInit( )
ESP-WROOM02をサーバーモードで初期化する処理
(ソフトAPモード/マルチ接続/サーバーを起動)
ans :0=正常 失敗した場合は何処で失敗したか進捗番号を返します
尚、進捗番号はソースプログラムを読みましょう。
ans = ESP_ServerRcv( )
クライアントからのアクセスを待つ処理
キープアライブパケットのみ受信します、他は現状無視です。
何か受信が有れば、約5秒の間受信待ちをします。
ans :-1=アクセスなし 0=アクセスあった(受信データは、ESP_Buffに保存されています)
ans = ESP_GetMsgInfo(*req)
ネットワークのデータ要求種類とクライアントIDを得る処理
(クライアントから送られて来たメッセージデータから収得しています)
*req :ネットワークのデータ要求種類文字をセットして返す(GET/POST/HTML等)
ans :-1=探せなかった 探せた場合はクライアントIDを返します
ESP_HtmlSnd(id,*txt)
クライアントにHTMLテキストを返す(送信する)処理
HTMLテキスト文字列の最後は0x00(NULL)で有る事。
id :送信する相手のクライアントのIDを指定する
*txt:送信するHTMLテキストを格納した場所を指定する
ans = ESP_GetPOSTtext(*name,*msg)
ネットワークデータから入力されたメッセージを取出す処理
*name:入力フォーム(HTMLに記述した)のテキストコントロールの名前を指定する
*msg :入力されたメッセージ内容を格納する(最後に0x00:NULLを付けて返す)
バッファ確保はメッセージが格納できる十分なサイズを確保する事。
メッセージが無い場合は、NULL(0x00)がセットされます。
ans :-1=メッセージが無い 0=メッセージが有った
例えば、下のHTMLとすると ans= GetPOSTtext("INPUT1",msg) となります。
<form method="post"><input name="INPUT1" size="32" type="tex"></form>
ESP_GetIPaddress(*ip,*mac)
IPアドレスとMACアドレスを得る処理
コマンドの"AT+CIFSR"を発行するだけです。
エラー等によりアドレスが得られなかった場合は、NULL(0x00)をセットして返します。
*ip :IPアドレスを返す("xxx.xxx.xxx.xxx"で返す、MAX16文字)
*mac:MACアドレスを返す("18:fe:xx:xx:xx:xx"で返す、MAX18文字)
返すデータの最後はNULLが付きますが、バッファサイズには注意しましょう。
skUARTlib.c
skUARTlib.h
この内容は”FT232RL使用によりUSBをシリアル変換してマイコンと繋ぎます”を参照下さい。
skI2CLCDlib.c
skI2CLCDlib.h
skI2Clib.c
skI2Clib.h
この内容は”秋月電子I2C接続小型LCDモジュールに表示を行う”を参照下さい。
(動かして見る)
必ず、PC側の「仮想COMポートドライバ(サーバー)」から起動させます。
PIC側の電源は入れませんよ!!。
@「HW Virtual Serial Port - HW VSP3」のソフトを起動させます。
(ソフトのインストールはパート1を見ましょう)
A起動したら[Login]ボタンをクリックし、
ログインします。
パスワード画面が表示されたら"admin"を
入力です。
B[Settings]タブをクリックして左画面を
表示させたら、左の様にチェックを入れます。
これで"TCPサーバーモード"で動作し、
接続のリスニングをする事になります。
C[Virtual Serial Port]タブをクリックします。
"Port Name"の項で使用していないCOMポート番号(ここではCOM3を使いました)を選択します。
"Port"の項で使用していないポート番号(ここでは8089を使いました)を設定します、
ウェルノンポート(0-1023)以外は何でも良いでしょう。
設定したら[CreateCOM]ボタンをクリックして下さい、少し待てば「仮想COMポートドライバ」が
作成されます。
"コントロールパネル"の"デバイス マネージャー"の"ポート"の項を見ると作成されているでしょう
作成されたら「HW Virtual Serial Port - HW VSP3」画面は閉じても良いです。
ドライバーを終了させるには、[DeleteCOM]ボタンを押せば消えます。
D準備完了です、後は好きなターミナルソフトを起動(COM3で開く)させます。
(ボーレートは115200bps、8bit・noParity・1Stop・noFlow)
EここでPIC側の電源を入れましょう。
上手く動作していれば、LCDに”Connection Done!”と表示されます。
"RUN is suspended"と表示された場合は、初期化に失敗してPICは実行を停止します。
表示された"ans"の値を見ればどの場所で失敗したか解るでしょう。
※ "ESP-WROOM02 Test"と表示された後で、約3秒程Delayを置いています、
これはESP-WROOM-02は電源ONやリセット後に起動メッセージを送信して来るのでそれを
受信せず捨てる為です。
FPC側から16文字以内(LCDのサイズ)で何か送信して下さい、LCDの2行目に表示されます。
GPIC側のボタンを押せば数値文字がターミナルソフトに表示されます。
LCDの1行目にも送った数値が表示されます、次にボタン押す場合は2秒後に!。
送信する数値はボタンを押す度に+1されます。
《実験2》
PCやネットに繋がる携帯等のブラウザソフトからマイコン(PIC)に文字を送ります。
ソフトAPモード :ESP-WROOM-02自身がAP(access point)になるモード
サーバーモード :「マルチ接続可」のサーバーモードになります
(配線図)
実験2の回路は、実験1と同じですが、スイッチは使いません。
(プログラムにつて)
実験2のESP-WROOM-02モジュールは、「ソフトAPモード」で動作させます、
自分が「AP」となり「マルチ接続可」のサーバーモードで起動します。
PCやネットに接続できる携帯からESP-WROOM-02モジュール(AP)にアクセスして、
WEBブラウザーから文字情報をPICに送信します。
PICは送られてきた文字情報を解析し、クライアントにHTMLテキストを返します。
(動かして見る)
こんどはPIC側の電源から先に入れます。
@PIC側を起動させます。
上手く動作していれば、LCDに”Start-up Done!”と表示されます。
"RUN is suspended"と表示された場合は、初期化に失敗してPICは実行を停止します。
表示された"ans"の値を見ればどの場所で失敗したか解るでしょう。
LCDの2行目には、ESP-WROOM02自身のIPアドレス(192.168.4.1)を表示します。
以下は、[Windows 7]での操作例で説明です
APCの画面右下の[アンテナアイコン]をクリックします。
B左画面が表示されます。
"ESP_xxxxxx"でAPが作成されていると思います、
ここに接続しましょう。
"xxxxxx"の数値はモジュールにより変わるでしょう。
CWebブラウザを起動させ、
下の様にアドレスを入力します。
"192.168.4.1"はESP-WROOM-02の
デフォルトアドレスとなります。
D左の様にPICからHTMLテキストが送信されます。
文字を入力し[Send]ボタンをクリックして下さい。
但し16文字(LCDのサイズ)以内です。
LCD側の2行目に表示されます。
PICがHTMLテキストを送信する度にLCDの1行目にクライアントIDと送信回数を表示します。
[?,CLIENT,x]ってな感じです、?がクライアントID xが送信回数です。
《その他》
実験2では、"Windows7"で"Internet Explorer 10"・"Firefox38"での確認です、
環境が変われば上手く動作するのかは不明です。
リンク切れ見直し(*1) 2020/03/14
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.