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サーバーがレスポンスを返す仕組みは
ちょっと普通と違うけど理にかなってるという話もあるそうだ。
別記事でまとめます。
とりあえず今回はここまで〜。