Help us understand the problem. What is going on with this article?

Espruino - コタツの温度を教えてくれるWebサーバを立てる

More than 5 years have passed since last update.

今回のテーマは EspruinoをWiFiに繋ぐ- Webサーバとして動かす です。

15日目/16日目の記事ではEspruinoをWebのクライアントとして、サーバにGET/POSTリクエストを投げる方法を紹介しました。今回はその逆で、EspruinoをWebサーバとして動作させることに挑戦しようと思います。

目標

まずは公式のやり方を踏襲し、Espruinoを単純なWebサーバとして動かします。その後、センサーデバイスならではのちょっとした遊びを組み込んだWEBサーバを作ります。コタツの温度を返してくれるWEBサーバを立ててみましょう。

単純なWEBサーバ

とりあえず、アクセスするとHello Worldと返してくれるWebサーバを立てます。

プログラム

// wifi接続情報
var wifiConf = {
  ssid: "xxxxxxx",
  key: "pppppp"
};

// wifiに繋ぎます
var wlan = require("CC3000").connect();
wlan.connect( wifiConf.ssid, wifiConf.key, function (s) { 
  if (s=="dhcp") {
    console.log("My IP is "+wlan.getIP().ip);
    // webサーバとしての動きを定義します
    require("http").createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});  
      res.write("Hello World!");
      res.end();
    }).listen(80);
  }
});

いかにも、という感じですね。
http#createServerのコールバックに外部リクエストを受け取った時の挙動を記述します。上記の場合はいかなるurlでもとにかく「Hello World!」という文字列を返します。

実行

WebIDEを使って実行します。これまでのWifiの手順同様、少し待ちます(10~20秒程度)。接続し、サーバの立ち上げが完了すると、EspruinoのIPアドレスがコンソールに表示されます。

image

表示されたIPにPCやスマホのブラウザでアクセスしてみましょう。このとき、Espruinoが繋いでいるのと同じネットワークに繋がっていることを忘れずに。

image

Hello Worldと表示されました!成功です。

少しだけ応用

せっかくEspruinoがWEBサーバになっているのに、テキストやHTMLを返すだけでは面白くありません。とりあえず、5日目の記事で使った温度センサを組み合わせて、アクセスするとコタツの温度を返してくれるような玩具を作りましょう。

配線

15日目の記事のWifi配線5日目の記事の温度センサの配線を単純に組み合わせます(ピンは被っていないのでそのままできます)。

image

プログラム

先ほどのプログラムと大差はないですが、req.urlによる分岐と、アクセスがあったときに温度センサの値を読んで返す処理が追加されています。

// wifi接続情報
var wifiConf = {
  ssid: "xxxxxxx",
  key: "ppppppp"
};

// 温度センサをセットアップ
var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
sensor.getTemp();


// wifiに繋ぎます
var wlan = require("CC3000").connect();
wlan.connect( wifiConf.ssid, wifiConf.key, function (s) { 
  if (s=="dhcp") {
    console.log("My IP is "+wlan.getIP().ip);
    require("http").createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});  
      res.write("Hello. ");
      // URLがkotatsuの場合、コタツの温度を表示する
      if( req.url === "/kotatsu"){
        res.write( sensor.getTemp() + "degrees Celcius" );
      }
      res.end();
    }).listen(80);
  }
});

実行

コタツの中に温度センサを突っ込んで

image

ブラウザからURL/kotatsuにアクセスすると...

image

コタツの温度が表示されました。暖かそうですね!

まとめ

ここまでで、EspruinoからGET/POSTリクエストを発行する方法、更にはEspruinoをWebサーバとして動作させるやり方について紹介する事が出来ました。Espruino-Wifiの基本としては押さえられていると思います(センサーの値をPOSTで投げてクラウドに溜め込む、とかできますよね)。

次回以降はより実運用といいますか、実際に私がEspruino&CC3000でとあるサービスを運用してみてネックになった安定感やらエラーハンドリングやらについて触れていければと思います。

アドベントカレンダーというか、連載になってますよね。はい。

scouty
「あらゆる事象を必然化し、 世の中のミスマッチをなくす」ことをミッションとし、AIヘッドハンティングサービスを開発・運営するスタートアップ
https://lapras.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした