tande lab.

ArduinoをWebServerにしてみる

Arduinoを動かすならWeb経由で色々やりたいなぁ、
てことで以下を追加購入してみますた。


Ethernetシールドがどんな感じで動くのか試しに動かしてみます。
まず、こんな感じにつなぎます。

そして、ArduinoIDEのサンプルコード「WebServer」を開きます。

開いたサンプルコードを以下のように少しだけ書き換えます。

  • 9行目: EthernetシールドのMacアドレスへ書き換え。
  • 10行目: 適当な自宅内ローカルIPアドレスへ書き換え。
  • 38-41行目: HTMLコードを追加。(なくても動くけど一応)
  • 51行目: HTMLコードを追加。(なくても動くけど一応)
/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

#include <Ethernet.h>

byte mac[] = { 0xxx, 0xxx, 0xxx, 0xxx, 0xxx, 0xxx }; //シールドにシール貼付けてあるMacアドレスを入力。
byte ip[] = { 192, 168, 1, 100 }; //自宅内のIPアドレスを適当にあてがう。

Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK"); //HTTPのステータスコード 200:成功の意味。
          client.println("Content-Type: text/html"); //HTTPのヘッダ これからテキストの本文を返しますよ、という意味。
          client.println(); //からの行がかならず一行必要。これでヘッダと本文を区別する。
          
          client.println("<html><head>");
          client.println("<title>Arduino test</title>");
          client.println("</head>");
          client.println("<body>");

          // output the value of each analog input pin
          for (int i = 0; i < 6; i++) {
            client.print("analog input ");
            client.print(i);
            client.print(" is ");
            client.print(analogRead(i));
            client.println("<br />");
          }
          client.println("</body></html>");
          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
        } else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}

そしたら、以下ボタンを押してArduinoへ転送!!

しばらくピコピコした後無事に転送されるはず。
その後ブラウザで「192.168.1.100」を表示すると
ArduinoがWebServerとなってレスポンスした結果が以下のように表示されるはず。
※XXXにはランダムな数字3桁が入る。

analog input 0 is XXX
analog input 1 is XXX
analog input 2 is XXX
analog input 3 is XXX
analog input 4 is XXX

ひとまず、これでArduinoがWebServerになった!
WebServerの仕組みとかもよくわからないので勉強しなきゃなのだけど
↓のようなやり取りが行われていると今日は理解しました。

ちなみにYoutubeサーバーがレスポンスを返す仕組みは
ちょっと普通と違うけど理にかなってるという話もあるそうだ。
別記事でまとめます。

とりあえず今回はここまで〜。




1 comment
  1. […] ArduinoをWebServerにしてみる で WebServerに関する勉強をしていたらこんな話になったので、記事化してみました。 […]

Submit comment