以下のリストがマイコン(LPC1114FN28)に書き込むソースとなります。プログラミングについてはクラウド開発環境の「mbed」を利用しますので、開発環境設定など詳細はこちら(mbedではじめるARMマイコン開発入門:クラウド開発環境「mbed」の使い方とターゲットマイコンへの書き込み)を参照してください。
#include "mbed.h" DigitalOut led(LED1); Serial pc(dp16,dp15); int main(){ char msg[1024]; pc.baud(115200); wait(5); pc.printf("AT+CIPMUX=1\r\n"); wait(1); pc.printf("AT+CIPSERVER=1,8888\r\n"); while(1){ pc.scanf("%s",msg); if (strstr(msg,"LED=ON")!=NULL) led=1; if (strstr(msg,"LED=OFF")!=NULL) led=0; if (strstr(msg,"+IPD")!=NULL){ pc.printf("AT+CIPSEND=0,106\r\n"); wait(0.5); pc.printf("HTTP/1.1 200 OK\nContent-length: 46\nContent-Type: text/html\n\n"); pc.printf("<html><body><H1>Hello world</H1></body></html>"); } } }
2行目DigitalOut led(LED1);では発光ダイオードを接続するピンを指定しており、LED1はLPC1114FN28の14番ピンにあたります。3行目Serial pc(dp16,dp15);でUART信号ピンを設定しています。
そして4行目int main(){からmain関数が始まり、5行目char msg[1024];でキャラクター型1024文字分の配列を用意しています。これはESP8266が受信したデーターを一時的に留めるバッファとなります。
次にpc.baud(115200);で、マイコンとESP8266がUARTで通信するためのボーレートを設定しています。この例では115200bpsに設定しています。その次、wait(5);で5秒のウェイトを入れています。これはESP8266が初期設定を完了するまでの時間ですが、取りあえずの値なので、場合によっては変更が必要かもしれません。
8行目pc.printf("AT+CIPMUX=1\r\n");では、ESP8266をマルチコネクションモードに設定しています。そして9行目で1秒のウエイトを入れ、10行目のpc.printf("AT+CIPSERVER=1,8888\r\n");でポート番号 8888のTCPサーバを立ち上げます。
11行目のwhile(1)によって、次の12行から21行までの命令が繰り返されます。11行の命令でESP8266がUARTで送信した文字列をmsgに格納します。ここでESP8266が送信したデータには、ESP8266上に起動しているサーバが受信したデータやESP8266のステータス情報などが混在しています。その文字列の中に”LED=ON”が含まれていればLEDを点灯させ、”LED=OFF”が含まれている場合はLEDを消します。
次にmsgに”IPD”が含まれているか判断します。これはESP8266のサーバがクライアントからのリクエスト受信したことを示します。その場合はHTTPプロトコルにてクライアント側のブラウザーに”Hello world”と表示されるHTMLを送信します。以上の動作を繰り返します。
本来ならリクエスト内容などを厳密に判断するロジックを組むべきでしょうが、大まかな流れが把握しやすいよう、かなり簡略化していることをご容赦頂ければと思います。
またAPモードでESP8266を立ち上げるところまでは、すでに設定がなされているものとします。前回あるいは前々回の記事を参考にしてください。
Copyright © ITmedia, Inc. All Rights Reserved.