ESP-WROOM-02でWiFi通信パート2

〔パート1〕   〔マイコンのトップに戻る〕


パート1では、ESP-WROOM-02モジュールの動作確認と必要なソフトのダウンロード編でした。
パート2では、マイコン(PIC)からESP-WROOM-02を制御し、PCと通信を行ってみます。
このページでは、パート1を読んでいる物として少し簡略して書きます。

《実験1》

マイコン(PIC)とPC間であたかもUART通信を行っているかの様に動作します。

実験1の概念図


仮想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を見ましょう)

HW-VSP3の画面(Settings)  A起動したら[Login]ボタンをクリックし、
   ログインします。
   パスワード画面が表示されたら"admin"を
   入力です。

 B[Settings]タブをクリックして左画面を
   表示させたら、左の様にチェックを入れます。
   これで"TCPサーバーモード"で動作し、
   接続のリスニングをする事になります。


C[Virtual Serial Port]タブをクリックします。
  "Port Name"の項で使用していないCOMポート番号(ここではCOM3を使いました)を選択します。
  "Port"の項で使用していないポート番号(ここでは8089を使いました)を設定します、
  ウェルノンポート(0-1023)以外は何でも良いでしょう。

HW-VSP3の画面(VirtualSerialPort)


  設定したら[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)に文字を送ります。

実験2の概念図


ソフト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]での操作例で説明です

PC操作1  APCの画面右下の[アンテナアイコン]をクリックします。

PC操作2  B左画面が表示されます。
   "ESP_xxxxxx"でAPが作成されていると思います、
   ここに接続しましょう。
   "xxxxxx"の数値はモジュールにより変わるでしょう。

 CWebブラウザを起動させ、
   下の様にアドレスを入力します。
  PC操作2

  "192.168.4.1"はESP-WROOM-02の
  デフォルトアドレスとなります。


PC操作3  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.