この記事では、WIFIモジュールESP8266をPICマイクロコントローラーとインターフェースする方法について説明します。これまで、ESP8266モジュールをスタンドアロンマイクロコントローラーとして使用していたか、Arduinoライブラリで使用していた可能性があります。しかし、筋金入りの組み込みシステムプロジェクトに関しては、PICマイクロコントローラーでも使用する方法を知っておく必要があります。これは、設計の観点からプロジェクトをカスタマイズするのに役立つと同時に、プロジェクトを安価にするのにも役立ちます。
ESP8266モジュールにはデフォルトのファームウェアがロードされているため、ATコマンドを使用してモジュールをプログラムできます。これらのコマンドは、シリアル通信チャネルを介して送信する必要があります。このチャネルは、PICマイクロコントローラのUSARTモジュールを使用して、PICとESP8266モジュールの間に確立されます。作業全体が監視され、16x2LCDディスプレイを使用してユーザーに報告されます。したがって、このチュートリアルは、PICのUSARTモジュール、LCDとPICのインターフェイス、およびESP8266でのATコマンドの使用に関する基本的な知識があることを前提としています。そうでない場合は、リンクされたチュートリアルに戻って、事前にそれらを学ぶことができます。
必要な材料:
このチュートリアルを完了するには、次のハードウェアが必要です。
- PIC16F877A
- 20MHz水晶発振器
- 7805
- LM317
- ESP8266
- 16 * 2LCDディスプレイ
- PicKit3プログラマー
- 抵抗器(1K、220オーム、360オーム)
- コンデンサ(1uF、0.1uF、33pF)
- ジャンパー線
- PICおよびESPモジュールに電力を供給する12Vアダプター
ハードウェア:
プロジェクトの完全な概略図を以下に示します
回路図は2つの電圧レギュレータ回路で構成されています。1つはPICマイクロコントローラに電力を供給するために使用される+ 5Vレギュレータで、もう1つはESP8266モジュールに電力を供給する3.3Vレギュレータです。+ 5Vは、7805(リニア電圧レギュレータIC)を使用して調整されます。3.3Vは、LM317(可変電圧レギュレーター)を使用して調整されます。ESP8266モジュールは大量の電流(〜800mA)を消費するため、独自の電源を設計する場合は、そのような大電流を供給できることを確認してください。また、PICとESP8266モジュールのアースピンが相互に接続されていることを確認してください。
これで、PICは+ 5Vで動作し、ESP8266は3.3Vボルトで動作することがわかりました。これら2つのモジュール間でUSART通信を確立するには、上の図に示すように、5V〜3.3Vのロジックコンバータ回路が必要です。この回路は、入力+ 5Vを3.3Vに変換する分圧器に他なりません。これにより、ESP8266の3.3V許容RXピンが+ 5Vになるのを防ぎます。
これらのチュートリアルに示すように、PICモジュールとESPモジュールを2つの別々のパフォーマンスボードで作成しました。このようにして、より類似したプロジェクトにそれらを普遍的に使用できます
- PICを使用したLEDハードウェア
- ESP8266入門
同じことに従うか、自分のスタイルで独自のボードを作成するか、上記の回路をブレッドボードに接続するだけです。
PICマイクロコントローラーのプログラミング:
USARTを使用して「ATコマンド」をESP8266モジュールにシリアルに送信するようにPICマイクロコントローラーをプログラムするには、ライブラリを使用する必要があります。このライブラリは、ESP8266命令モジュールを使用してすべてのATコマンドをチェックし、それらをESPモジュールに送信する方法を見つけるなど、多くの手間を省きます。このライブラリは、もともとCamil Stapsによって開発されたフリーソフトウェアであり、その後、PIC16F877Aマイクロコントローラーで使用できるようにCircuitDigestによって改善および変更されました。こちらからダウンロードできます
ライブラリはまだ開発中ですが、ESP8266ファームウェアで重要なATコマンドのほとんどを使用できます。必要なコマンドのいずれかが不足していることがわかった場合は、コメントセクションでお知らせください。追加を試みます。このチュートリアルでは、このライブラリを介して使用できるすべてのコマンド(これまでのところ)について説明します。さらに、独自の関数をライブラリに追加する方法についても説明します。
ESP8266ライブラリの関数:
- Initialize_ESP8266():この関数は、PICのUSARTモジュールを初期化してESP8266モジュールと通信します。ボーレートを115200に設定し、USART通信用にPICのRxピンとTxピンを準備します。
- _esp8266_putch():この関数は、単一の文字をESP8266モジュールにシリアルに送信するために使用されます。たとえば、 _esp8266_putch( 'a') は、文字をESPモジュールにシリアルに送信します。
- _esp8266_getch():この関数は、ESPモジュールから単一の文字を取得するために使用されます。たとえば、ESPが「OK」を出力していて、char a = _esp8266_getch()を使用している場合です。次に、char'o 'が変数aに格納されます。
- ESP8266_send_string():この関数は_esp8266_putch()の文字列バージョンです。1つの完全な文字列をESP8266モジュールに送信できます。たとえば、ESP8266_send_string( "AT / r / n")は、コマンド「AT」をESP8266モジュールに送信します。
- esp8266_isStarted(): PICがESPモジュールと通信できるかどうかを確認するために使用されます。コマンド「AT」を送信し、受信した場合は「OK」を待ち、それ以外の場合はfalseを返します。
- esp8266_restart(): ESP8266モジュールをリセットし、trueを返します。リセットは成功し、失敗した場合はfalseを返します。
- esp8266_mode(): ESP8266モジュールの動作モードを設定するために使用されます。私たちが知っているように、それは3つの異なるモードで動作することができます。
ステーションモード |
|
ソフトAPモード |
|
ステーションモードとAPモードの両方 |
- esp8266_connect(): wifi信号に接続できます。たとえば、 esp8266_connect( "home"、 "12345678") を使用すると、モジュールは、パスワードが12345678であるhomeという名前のwifi信号に接続できます。
- esp8266_disconnect():この関数は、以前に接続されたWi-Fi接続からモジュールを切断します
- esp8266_ip(): IPアドレスを取得して返します。ESP8266モジュールのIPアドレスを知りたい場合は、この機能を使用してください。
- esp8266_start():この関数は、TCPまたはUDP通信を開始するために使用されます。たとえば、 esp8266_start( "TCP"、 "192.168.101.110"、80) 。そのIPとポート80でTCPネットワークを開始します。
- esp8266_send():この関数は、TCP / UDPネットワークに情報を送信するために使用されます。HTMLスクリプトは、このコマンドを使用して送信されます。次に、このスクリプトは、以前に通信が確立されたIPアドレスに表示されます。
- esp8266_config_softAP():この関数は、softAPを設定するために使用されます。たとえば、 esp8266_config_softAP( "office"、 "12345678"); officeという名前のWifi信号を作成し、それにアクセスするにはパスワード12345678を使用する必要があります。
- esp8266_get_stationIP():この関数は、softAPに接続されているクライアントのIP / MACアドレスを返します。
サンプルプログラム:
ライブラリ内のすべてのコマンドの機能を理解したので、小さなサンプルプログラムを調べてみましょう。このプログラムでは、ESP8266とPICの間の接続が成功したかどうかを確認してから、優先名とパスワードを使用してWIFIネットワーク(SoftAP)を作成します。完全なプログラムとそのシミュレーションについて、理解のために説明します。
繰り返しになりますが、LCDとのPICインターフェースおよびPIC USARTチュートリアルをまだ読んでいない場合は、先に進む前にを読んでください。それが意味をなすからです。
PICとESP8266のインターフェースを始めたばかりなので、LCDを使用して問題が正しく機能していることを確認しました。
do {Lcd_Set_Cursor(1,1); Lcd_Print_String( "ESPが見つかりません"); } while(!esp8266_isStarted()); // ESPが「OK」を送り返すまで待つLcd_Set_Cursor(1,1); Lcd_Print_String( "ESPが接続されています"); __delay_ms(1500); Lcd_Clear();
「AT」をESP8266モジュールに送信すると、「OK」で応答します。これにより、ESP8266モジュールが正常に接続されます。関数esp8266_isStarted()が同じように使用されます。PICから信号ATを送信し、ESPモジュールが有効になるまで待機してOKを送信します。OKが表示されると、LCDに「ESPが接続されています」と表示されます。
esp8266_mode(2); Lcd_Set_Cursor(1,1); Lcd_Print_String( "ESP set as AP"); __delay_ms(1500); Lcd_Clear();
上記のコード行は、ESPモジュールを「ソフトAP」モードで動作するように設定するために使用されます。関数esp8266_mode(2); ATコマンド「AT + CWMODE = 3」をモジュールに送信し、モジュールが「OK」で応答するのを待ちます
/ * AP名とパスワードを設定します* / esp8266_config_softAP( "CircuitDigest"、 "619007123"); Lcd_Set_Cursor(1,1); Lcd_Print_String( "AP構成済み"); __delay_ms(1500); Lcd_Clear(); / * AP構成* /
コードのこのセグメントは、softAPを設定するために使用されます。ここでは、SSIDを「CircuitDigest」、パスワードを「619007123」と名付けました。プロセスが完了したことを示すために、モジュールが「OK」で応答するのを待ってから、構成されたAPをLCD画面に印刷します。
これで、ESP8266モジュールをPIC MCUとインターフェイスし、選択した名前とパスワードを使用してsoftAPを構成しました。いつものように、このコードをシミュレートして、どのように機能するかを見てみましょう。
シミュレーション出力:
Proteusソフトウェアを使用して出力をシミュレートしています。同じもののデザインファイルは添付ファイルにあります。
ProteusライブラリにESP8266モジュールがないため、シリアル端末を使用して、PICモジュールにユーザーとして応答します。完了後のシミュレーション画面は以下のようになります
コードの出力は仮想端末に表示されます。シミュレーションの完全な動作は、以下のビデオで説明されます。
出力検証:
シミュレーションを使用してプログラムを検証したら、PICマイクロコントローラーにダンプします。上記の回路図(ハードウェアセクション)に示すように接続します。LCDディスプレイを介して進行状況を追跡できるはずです。
LCDにAPが構成されていることが表示されたら、電話またはラップトップのWIFI設定を使用して確認できます。私のラップトップは、プログラムに従って次の信号を表示します。
つまり、ESP8266モジュールとPICマイクロコントローラーのインターフェイスに成功したのです。これは非常に基本的なインターフェイスであり、ESP8266を使用して複雑なプロジェクトを実行する場合は、独自のライブラリを追加するか、少なくとも独自の関数を追加する必要があります。そうするのはとても簡単だと私を信じてください、私は同じことについて簡単な洞察を与えます。
ESP8266ライブラリへの関数の追加:
独自の機能を追加すると、「AT」コマンドをESP8266モジュールに送信するのに役立ちます。これを続行するには、ESP8266モジュールの命令セットのドキュメントを読む必要があります。その命令セットのマニュアルにあるATコマンドを直接送信できます。ただし、すべてのATコマンドの最後に「/ r / n」を追加することを常に忘れないでください。たとえば、ESPモジュールとの複数の接続を確立したい場合です。次に、命令セットのドキュメントを開き、どのATコマンドがこのジョブを実行するかを見つけます。ここで、コマンド「AT + CIPMUX = 1」を使用すると、ESPモジュールとの複数の接続を確立できます。
これで、シリアルポートを使用してこの「AP + CIPMUX = 1」をESP8266モジュールに送信するだけです。これを行うハードコアな方法は、コマンドを使用するだけです。
_esp8266_print( "AT + CIPMUX = 1 \ r \ n" ")
これは機能しますが、最善の方法ではありません。ESP8266がコマンドに応答する内容を読み返す必要があります。この場合、「OK」で応答します。したがって、ESP8266モジュールからの受信データを読み取り、それが「OK」であることを確認する必要があります。また、「1」または「0」を引数として渡すことができるこの関数を作成することもできます。
先に進んで、ライブラリ用に独自の関数を作成してみてください。しかし、助けが必要な場合は、コメントセクションを自由に使用してください。私がお手伝いします。