- 必要なコンポーネント
- ESP8266Wi-Fiモジュール
- シリアル通信のためにLPC2148をESP8266に接続する
- 回路図と接続
- ESP8266とインターフェースするためのLPC2148でのUART0のプログラミングに関連する手順
- LPC2148でESP8266IoTWebサーバーを使用してLEDを制御する
ESP8266 Wi-Fiトランシーバーは、マイクロコントローラーをネットワークに接続する方法を提供します。安価で小型で使いやすいため、IoTプロジェクトで広く使用されています。以前は、RaspberryWebサーバーとArduinoWebサーバーを使用してWebサーバーを作成するために使用していました。
このチュートリアルでは、ESP8266 Wi-FiモジュールをARM7-LPC2148マイクロコントローラーと接続し、LPC2148に接続されたLEDを制御するWebサーバーを作成します。ワークフローは次のようになります。
- ATコマンドをLPC2148からESP8266に送信して、ESP8266をAPモードで構成します
- ラップトップまたはコンピューターのWi-FiをESP8266アクセスポイントに接続します
- ESP8266WebサーバーのアクセスポイントIPアドレスを使用してPCでHTMLWebページを作成します
- ESP8266から受信した値に従ってLEDを制御するLPC2148のプログラムを作成します
ESP8266 Wi-Fiモジュールを初めて使用する場合は、以下のリンクにアクセスして、ESP8266Wi-Fiモジュールに慣れてください。
- ESP8266 Wi-Fiトランシーバー入門(パート1)
- ESP8266入門(パート2):ATコマンドの使用
- ESP8266入門(パート3):ArduinoIDEを使用したESP8266のプログラミングとそのメモリのフラッシュ
必要なコンポーネント
ハードウェア:
- ARM7-LPC2148
- ESP8266Wi-Fiモジュール
- FTDI(USBからUART TTL)
- 導いた
- 3.3V電圧レギュレータIC
- ブレッドボード
ソフトウェア:
- KEIL uVision
- フラッシュマジックツール
- パテ
ESP8266Wi-Fiモジュール
ESP8266は、3.3Vの低電力を必要とする、組み込みプロジェクト向けの低コストで広く使用されているWi-Fiモジュールです。ESP8266とUARTポートを備えたマイクロコントローラー間のシリアル通信とデータ転送にTXとRXの2本のワイヤーのみを使用します。
ESP8266Wi-Fiモジュールのピンダイアグラム
- GND、グランド(0 V)
- TX、送信データビットX
- GPIO 2、汎用入出力No. 2
- CH_PD、チップのパワーダウン
- GPIO 0、汎用入出力No.0
- RST、リセット
- RX、受信データビットX
- VCC、電圧(+3.3 V)
ESP8266回路基板のセットアップ
ESP8266は3.3Vの一定の電源を必要とし、ブレッドボードに適していません。そのため、ESP8266に関する前回のチュートリアルでは、3.3V電圧レギュレーター、RESETプッシュボタン、および切り替えモード(ATコマンドまたはフラッシュモード)用のジャンパーセットアップを備えたESP8266用の回路基板を作成しました。また、パフォーマンスボードを使用せずにブレッドボードにセットアップすることもできます。
ここでは、すべてのコンポーネントをブレッドボードにはんだ付けして、独自のESP8266Wi-Fiボードを作成しました。
以下のリンクをたどって、ESP8266とさまざまなマイクロコントローラーとのインターフェースについて学びます。
- ESP8266入門(パート3):ArduinoIDEを使用したESP8266のプログラミングとそのメモリのフラッシュ
- ESP8266とSTM32F103C8の接続:Webサーバーの作成
- MSP430LaunchpadとESP8266を使用したEメールの送信
- ESP8266とPIC16F877Aマイクロコントローラーのインターフェース
- ArduinoとESP8266を使用したIOTベースのごみ箱モニタリング
ESP8266ベースのすべてのプロジェクトはここにあります。
シリアル通信のためにLPC2148をESP8266に接続する
ESP8266をLPC2148とインターフェイスさせるには、これら2つのデバイス間にUARTシリアル通信を確立して、ATコマンドをLPC2148からESP8266に送信し、ESP8266Wi-Fiモジュールを構成する必要があります。ESP8266 ATコマンドの詳細については、リンクをたどってください。
したがって、LPC2148でUART通信を使用するには、LPC2148でUARTポートを初期化する必要があります。LPC2148には、2つのUARTポート(UART0とUART1)が組み込まれています。
LPC2148のUARTピン
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
LPC2148でUART0を初期化しています
LPC2148のピンは汎用ピンであることがわかっているため、UART0を使用するにはPINSEL0レジスタを使用する必要があります。UART0を初期化する前に、UART機能を使用するためにLPC2148で使用されるこれらのUARTレジスタについて通知します。
LPC2148のUARTレジスタ
次の表は、プログラミングで使用されるいくつかの重要なレジスタを示しています。今後のチュートリアルでは、LPC2148のUARTに使用される他のレジスタについて簡単に説明します。
UART0の場合はx-0、UART1の場合はx-1。
登録 |
登録者名 |
使用する |
UxRBR |
受信バッファレジスタ |
最近受け取った値が含まれています |
UxTHR |
保持レジスタの送信 |
送信するデータが含まれています |
UxLCR |
ライン制御レジスタ |
UARTフレームフォーマットが含まれています(データビット数、ストップビット) |
UxDLL |
除数ラッチLSB |
UARTボーレートジェネレータ値のLSB |
UxDLM |
除数ラッチMSB |
UARTボーレートジェネレータ値のMSB |
UxIER |
割り込みイネーブルレジスタ |
UART0またはUART1割り込みソースを有効にするために使用されます |
UxIIR |
割り込み識別レジスタ |
優先度と保留中の割り込みのソースを持つステータスコードが含まれています |
回路図と接続
LPC2148、ESP8266、FTDI間の接続を以下に示します
LPC2148 |
ESP8266 |
FTDI |
TX(P0.0) |
処方箋 |
NC |
RX(P0.1) |
TX |
処方箋 |
ESP8266は3.3V電圧レギュレーターを介して電力を供給され、FTDIおよびLPC2148はUSBから電力を供給されます。
なぜFTDIがここにあるのですか?このチュートリアルでは、FTDI(USB to UART TTL)のRXピンをESP8266 TXピンに接続し、さらにLPC2148 RXピンに接続して、パテ、ArduinoIDEなどの端末ソフトウェアを使用してESP8266モジュールの応答を確認できるようにしました。 。ただし、そのためには、ESP8266Wi-Fiモジュールのボーレートに従ってボーレートを設定します。(私のボーレートは9600です)。
ESP8266とインターフェースするためのLPC2148でのUART0のプログラミングに関連する手順
以下は、ESP8266をLPC2148に接続してIoT互換にするためのプログラミング手順です。
ステップ1:-最初に、PINSEL0レジスタのUART0TXピンとRXピンを初期化する必要があります。
(TXとしてP0.0、RXとしてP0.1) PINSEL0 = PINSEL0-0x00000005;
ステップ2:-次にU0LCR(ライン制御レジスタ)で、DLAB(除数ラッチアクセスビット)を有効にするために1に設定し、ストップビットの数を1に設定し、データフレーム長を8ビットに設定します。
U0LCR = 0x83;
ステップ3:-ここで注意すべき重要なステップは、PCLK値と必要なボーレートに応じてU0DLLとU0DLMの値を設定することです。通常、ESP8266では9600のボーレートを使用します。そこで、UART0に9600のボーレートを設定する方法を見てみましょう。
ボーレート計算の式:
どこ、
PLCK:周波数(MHz)の周辺クロック
U0DLM、U0DLL:ボーレートジェネレータ分周器レジスタ
MULVAL、DIVADDVAL:これらのレジスタは分数ジェネレータ値です
PCLK = 15MHZのボーレート9600の場合
MULVAL = 1&DIVADDVAL = 0
256 * U0DLM + U0DLL = 97.65
したがって、U0DLM = 0であり、U0DLL = 97を取得します(分数は許可されていません)
したがって、次のコードを使用します。
U0DLM = 0x00; U0DLL = 0x61; (97の16進値)
ステップ4:-最後に、LCRでDLA(除数ラッチアクセス)無効を0に設定する必要があります。
だから私たちは持っています
U0LCR&= 0x0F;
ステップ5:- 文字を送信する場合、送信するバイトをU0THRにロードし、バイトが送信されるまで待ちます。これは、THREがHIGHになることで示されます。
void UART0_TxChar(char ch) { U0THR = ch; while((U0LSR&0x40)== 0); }
ステップ6:- 文字列を送信するために、以下の関数が使用されます。文字列データを1つずつ送信するために、上記の手順の文字関数を使用しました。
void UART0_SendString(char * str) { uint8_t i = 0; while(str!= '\ 0') { UART0_TxChar(str); i ++; } }
ステップ7:- 文字列を受信するために、ここでは割り込みサービスルーチン機能が使用されます。これは、ATコマンドを送信するとき、またはESP8266がLPC2148にデータを送信するときはいつでも、ESP8266Wi-FiモジュールがLPC2148のRXピンにデータを送信するためです。 ESP8266のWebサーバーへのデータ。
例: LPC2148(「AT \ r \ n」)からESP8266にATコマンドを送信すると、Wi-Fiモジュールから「OK」という応答が返されます。
したがって、ISR割り込みサービスルーチンの優先度が最も高いため、ここでは割り込みを使用してESP8266Wi-Fiモジュールから受信した値を確認します。
したがって、ESP8266がLPC2148のRXピンにデータを送信するたびに、割り込みが設定され、ISR関数が実行されます。
ステップ8:-UART0の割り込みを有効にするには、次のコードを使用します
VICintEnableは UART0の割り込み可能にするために使用されるレジスタ割り込み許可ベクタれます。
VICIntEnable-=(1 << 6);
VICVecCnt10は、 割り込み制御レジスタをベクトル化されUART0に割り当てるスロットいます。
VICVectCntl0 =(1 << 5)-6;
次に、 VICVectaddr0 は、割り込みサービスルーチンのISRアドレスを持つベクタ割り込みアドレスレジスタです。
VICVectAddr0 =(符号なし)UART0_ISR;
次に、RBR受信バッファレジスタに割り込みを割り当てる必要があります。したがって、割り込みイネーブルレジスタ(U0IER)でRBRを設定します。そのため、データを受信すると割り込みサービスルーチン(ISR)が呼び出されます。
U0IER = IER_RBR;
最後に、ESP8266Wi-Fiモジュールからデータを受信するときに特定のタスクを実行する必要があるISR機能があります。ここでは、U0RBRに存在するESP8266から受信した値を読み取り、それらの値をUART0_BUFFERに格納します。最後に、ISRの最後に、 VICVectAddr をゼロまたはダミー値で設定する必要があります。
void UART0_ISR()__ irq { unsigned char IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue&= 0x02; if(IIRValue == IIR_RDA){ UART_BUFFER = U0RBR; uart0_count ++; if(uart0_count == BUFFER_SIZE){ uart0_count = 0; } } VICVectAddr = 0x0; }
ステップ9: -ESP8266 Wi-FiモジュールをAPモードに設定する必要があるため、 UART0_SendString() 関数を使用して、 LPC2148 から尊重されたATコマンドを送信する必要があります。
LPC2148からESP8266に送信されているATコマンドは以下の通りです。各ATコマンドを送信した後、ESP8266は「OK」で応答します
1.ATをESP8266に送信します
UART0_SendString( "AT \ r \ n"); delay_ms(3000);
2. AT + CWMODE = 2を送信します(APモードでESP8266を設定します)。
UART0_SendString( "AT + CWMODE = 2 \ r \ n"); delay_ms(3000);
3. AT + CIFSRを送信します(APのIPを取得するため)
UART0_SendString( "AT + CIFSR \ r \ n"); delay_ms(3000);
4. AT + CIPMUX = 1を送信します(複数接続の場合)
UART0_SendString( "AT + CIPMUX = 1 \ r \ n"); delay_ms(3000);
5. AT + CIPSERVER = 1,80を送信します(ポートが開いているESP8266サーバーを有効にする場合)
UART0_SendString( "AT + CIPSERVER = 1,80 \ r \ n"); delay_ms(3000);
LPC2148への16進ファイルのプログラミングとフラッシュ
ARM7-LPC2148をプログラムするには、keil uVision&FlashMagicツールが必要です。ここでは、USBケーブルを使用してマイクロUSBポートを介してARM7スティックをプログラムします。Keilを使用してコードを記述し、16進ファイルを作成してから、FlashMagicを使用してHEXファイルをARM7スティックにフラッシュします。keiluVisionとFlashMagicのインストールとその使用方法の詳細については、「ARM7 LPC2148マイクロコントローラー入門」リンクをたどり、KeiluVisionを使用してプログラムしてください。
完全なプログラムは、チュートリアルの最後にあります。
注: HEXファイルをLPC2148にアップロードしている間は、ESP8266Wi-FiモジュールおよびLPC2148に接続されているFTDIモジュールに電力を供給しないでください。
LPC2148でESP8266IoTWebサーバーを使用してLEDを制御する
ステップ1: -HEXファイルをLPC2148にアップロードした後、FTDIモジュールをUSBケーブルでPCに接続し、パテターミナルソフトウェアを開きます。
シリアルを選択してから、PCまたはラップトップ鉱山(COM3)に応じてCOMポートを選択します。ボーレートは9600です。
ステップ2: -ESP8266 Wi-Fiモジュールをリセットするか、電源をオフにしてから再度電源をオンにすると、パテ端末にESP8266Wi-Fiモジュールの応答が次のように表示されます。\
ステップ3: -LPC2148のRESETボタンを押します。その後、LPC2148はATコマンドをESP8266に送信し始めます。その応答はパテ端末で確認できます。
ステップ4:-上の画像でわかるように、ESP8266はAPモードであるMODE 2に設定されており、APIPのアドレスは192.168.4.1です。このアドレスは、LPC2148に接続されたLEDを制御するためにWebページのHTMLコードにハードコードされるため、このアドレスに注意してください。
重要 :ESP8266がAPモードの場合、PCをESP8266APに接続する必要があります。下の画像を参照してください。私のESP8266モジュールは、ESP_06217Bという名前のAPを示しています(開いており、パスワードはありません)。
ステップ5: -PCをESP8266 APに接続した後、メモ帳を開き、次のHTMLプログラムのWebページをコピーして貼り付けます。ESP8266Wi-Fiモジュールに応じてAPIPアドレスを変更してください
サーキットダイジェストへようこそ
ESP8266 LPC2148とのインターフェース:LEDを制御するためのWebサーバーの作成
LEDオン LEDオフこのHTMLページでは、WebページのLEDをオンまたはオフにする2つのハイパーリンクボタンを作成しました。
最後に、メモ帳ドキュメントを.html拡張子として保存します
ウェブブラウザに以下のように表示されます。
ここで、アドレスはAP IPアドレス192.168.4.1であり、以下のLPC2148でこのロジックを使用して、値@と%を送信してLEDのオンとオフを切り替えます。
while(1) { if(uart0_count!= 0) { COMMAND = UART0_BUFFER; if(COMMAND == LEDON)// ESP8266から受信した値に応じてLEDをオンまたはオフに設定するロジック { IOSET1 =(1 << 20); // OUTPUT HIGHを設定し ますdelay_ms(100); } else if(COMMAND == LEDOFF) { IOCLR1 =(1 << 20); // OUTPUT LOWを設定し ますdelay_ms(100); } } }
これは、ESP8266およびARM7マイクロコントローラーLPC2148を使用してデバイスをリモートで制御する方法です。完全なコードと説明のビデオを以下に示します。