ESP-WROOM-02로 철도 모형을 원격 제어(제3회)

개요



철도 모형을 마이크로컴퓨터 제어해 가려고 생각되고 있는 여러분, 안녕하세요. 아야세입니다. ESP-WROOM-02를 사용해 철도 모형을 제어해 온 것을 정리해 가는 시리즈의 제3회의 이번은, 무선 LAN으로 접속한 디바이스(태블릿 단말이나 스마트 폰 등)로부터 철도 모형 차량을 원격 제어하기 위해 먼저 ESP-WROOM-02에 WebAPI를 구현하기위한 웹 서버를 구축하고 싶습니다.

본 시리즈의 과거 기사는 아래를 참조하십시오.
  제1회
  제2회

구성



하드웨어 구성



이번은 제2회 로 제작한 구성을 그대로 사용합니다.

소프트웨어 구성



이번 구축하는 소프트웨어의 구성을 간단한 일러스트로 나타냅니다.


제2회의 기사로 작성한 것은, 이 일러스트의 PWM 출력 처리가 됩니다. 이번에는 이 PWM 출력 처리를 외부에서 제어하기 위해 WebAPI를 작성하기 위한 토대인 웹 서버를 구축합니다.

준비



 전회와 같이 ESP-WROOM-02를 Arduino화하여 사용합니다. 따라서 Arduino core for ESP8266을 Arduino IDE에 미리 통합합니다.
이번에는 ESP-WROOM-02에 웹 서버를 구축하기 위해 Arduino core for ESP8266에 포함된 라이브러리ESP8266WebServer를 이용합니다.

소스 코드



ESP-WROOM-02에서 웹 서버는 ESP8266WebServer 라이브러리를 이용하여 쉽게 구축할 수 있습니다.

webserver_parts.ino
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80); //Webサーバの待ち受けポートを標準的な80番として定義します

/*---------------------------------------------------------------------------
//サーバリクエスト受信時の正常処理 ルート
---------------------------------------------------------------------------*/
void handleRoot() {
 //ルートにアクセスされた時の処理を書く。
  //ここではESP8266で応答していることと、ESP8266が接続しているアクセスポイントから取得したIPアドレスを返す。
  //DHCPでIPを取得している場合に便利。
  IPAddress myAddr = WiFi.localIP();  
  String mes = "hello from esp8266! IP address:" + String(myAddr[0]) + "." + String(myAddr[1]) +"." +  String(myAddr[2]) +"." +  String(myAddr[3]) + "\n";
  server.send(200, "text/plain", mes);
}
/*---------------------------------------------------------------------------
//サーバリクエスト受信時の正常処理 command.cgi
---------------------------------------------------------------------------*/
void handleCommand() {
 //ここにFlashAirのWebAPI:command.cgi?op=130または131の互換処理を書く
}
/*---------------------------------------------------------------------------
//サーバリクエスト受信時の異常処理
---------------------------------------------------------------------------*/
void handleNotFound(){
 //定義されたURI以外にアクセスされた場合の処理を書く
}
/*---------------------------------------------------------------------------
//初期化処理
---------------------------------------------------------------------------*/
void setup() {
  Serial.begin(115200);
  delay(10);

  //自分のSSIDとパスコードを設定する
 //mySSIDとmyPassは任意のものに書き換えること
  Serial.println("WiFi module setting... ");
  WiFi.softAP("mySSID", "myPass");
  Serial.print("IP address: ");
  Serial.println(WiFi.softAPIP());

  //アクセスポイント(myAPSSID)に接続する(20回接続要求して失敗したらエラー表示)
 //myAPSSIDとmyAPPassは自分の環境のものに書き換えること
  Serial.print("Connecting to ");
  WiFi.begin("myAPSSID", "myAPPass");
  int retry_sum = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    retry_sum++;
    if(retry_sum > 20) break;
  }
  if(WiFi.status() == WL_CONNECTED){
    Serial.println("WiFi connected");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  }
  else{
    Serial.println("WiFi not connected");
  }

  //Webサーバの設定を行い、サーバを起動する
  server.on("/", handleRoot);               //ルートに接続要求があった時の処理を指定
  server.on("/command.cgi", handleCommand); //command.cgiに接続要求があった時の処理を指定
  server.onNotFound(handleNotFound);        //設定外に接続要求があった時の処理を指定
  server.begin();                           //Webサーバを起動
  Serial.println("HTTP server started");
}
/*---------------------------------------------------------------------------
//本体処理
---------------------------------------------------------------------------*/
void loop() {
  server.handleClient(); //Webサーバの接続要求待ち
}

요약



이상과 같이, ESP-WROOM-02를 Arduino화해 ESP8266WebServer 라이브러리를 이용하면, 간단하게 Web 서버가 구축할 수 있는 것을 알았습니다.

다음 번 예고



  다음 번은, 이번 작성한 웹 서버에, WebAPI를 구현합니다.
WebAPI는, 자작의 철도 모형 원격 제어용 클라이언트 앱의 인터페이스 공통화를 위해, FlashAir의 WebAPI 호환으로 합니다.
FlashAir의 API 참조는 FlashAir Developers에서 공개됩니다. 이번, 호환성을 갖게 하는 API는, command.cgi내의 이하의 API입니다.
  • 공유 메모리에서 데이터 검색(op=130)
  • 공유 메모리에 데이터 쓰기(op=131)

  • 참고 자료


  • Arduino core for ESP8266
  • ESP8266 Temperature / Humidity Webserver

  • 마지막으로 홍보



    오늘 밤, 인쇄소에 트래피킹합니다! 사고가 없으면, 신간 나가요~.

    코믹 마켓 89에 있어서, ESP-WROOM-02와 FlashAir의 전자 공작에 있어서의 비교 기사를 게재한 전자 공작(와 술)의 동인지를 배포합니다. ESP-WROOM-02와 FlashAir로 비교 제작한 G 게이지 철도 모형 차량의 원격 제어 장치의 회로도도 게재하고 있습니다. 겨울 코미에 오실 때는 꼭 들러주세요. 또, 겨울 코미 후에는 통신 판매에서도 입수할 수 있다고 생각합니다.
    12/31(목) 3일째 히가시메-08a 「하늘과 달」

    좋은 웹페이지 즐겨찾기