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

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