Cerbuino Net でウェザーステーション

3月に開催した 組み込み勉強会.NET Gadgeteer を取り上げました。
早速デバイスを買って ハンズオン資料 を試してくれた方がいます!うれしいですね。

ハンズオン資料では Spider を使用していますが、ちょっとだけお高め。それに対して、廉価なのにイーサネットモジュールがあらかじめ載っているという点で Cerbuino Net もいいボードです。
Gadgeteer ソケットが 3個なので接続できるモジュールが限られてしまうというデメリットはありますが、何を作るか明確であればコストメリットは大きいかと。

473-0_small

ネットワーク対応で少し苦労したとのことだったので、もしかするとファームやライブラリに問題があるのかな?と思い、検証してみました。
※結論から言うと、ハンズオン資料のミスで必要な手順の記述が一つ漏れていました。

せっかく作ってみたのでソースコード付きで紹介します。

作ってみたのは、温度・湿度のウェザーステーションです(Cerbuino の有線 LAN 版)。使用したモジュールは、

WP_20140330_0012014-03-30 23-01-58

 

ソースコードは以下の通り。

using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Net.NetworkInformation;
using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.Seeed;
using System.Text;

namespace GadgeteerApp1
{
    public partial class Program
    {
        private WebEvent _theEvent;

        private double _temp;
        private double _hum;

        // This method is run when the mainboard is powered up or reset.
        void ProgramStarted()
        {
            char_Display.SetBacklight(false);

            InitNetwork();
            DoSense();

            // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
            Debug.Print("Program Started");
        }

        void _theEvent_WebEventReceived(string path, WebServer.HttpMethod method, Responder responder)
        {
            led7r.TurnLightOn(7, true);

            var str = "<html><head><title>Barometer</title><body><h1>Sensor Data</h1>" +
                "<p>Temperature    = " + _temp.ToString() + "</p>" +
                "<p>Humidity = " + _hum.ToString() + "</p>" +
                "</body></html>";
            var outBuffer = Encoding.UTF8.GetBytes(str);

            responder.Respond(outBuffer, "text/html");

            Thread.Sleep(200);
            led7r.Animate(100, true, true, false);
            led7r.Animate(100, true, false, false);
        }

        void temperatureHumidity_MeasurementComplete(TemperatureHumidity sender, double temperature, double relativeHumidity)
        {
            char_Display.Clear();

            _temp = temperature;
            _hum = relativeHumidity;

            char_Display.PrintString(_temp.ToString());
            char_Display.SetCursor(1, 0);
            char_Display.PrintString(_hum.ToString());
        }

        private void InitNetwork()
        {
            var netif = NetworkInterface.GetAllNetworkInterfaces()[0];
            if (netif.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
            {
                netif.EnableStaticIP("192.168.1.2", "255.255.255.0", string.Empty);
                Thread.Sleep(3000);
            }

            _theEvent = WebServer.SetupWebEvent("GetValues");
            _theEvent.WebEventReceived += _theEvent_WebEventReceived;

            WebServer.StartLocalServer(netif.IPAddress, 80);

            char_Display.SetBacklight(true);
            led7r.Animate(100, true, true, true);
            led7r.Animate(100, true, false, false);
            led7r.Animate(100, true, true, true);
            led7r.Animate(100, true, false, false);
        }

        private void DoSense()
        {
            temperatureHumidity.MeasurementComplete += temperatureHumidity_MeasurementComplete;
            temperatureHumidity.StartContinuousMeasurements();
        }
    }
}

環境の都合で固定 IP を使っていますが、もちろん DHCP でも動作するはず。NetworkInterface.IsDhcpEnabled プロパティや EnableDhcp メソッドを使ってみてください。この手順は ハンズオン資料 を参照してください。

このままではビルドに失敗します。Visual Studio で環境設定の追加が必要です。“Gadgeteer.WebServer” の参照を追加してください。コンポーネント名から分かると思いますが、Gadgeteer で Web サーバーの機能が使えるようになります。

2014-03-30 21-39-26

 

これでビルドに成功するはずです。実際に Cerbuino Net に転送して実行してみます。念のため Ethernet モジュール初期化のためにスリープを入れているので、キャラクターディスプレイのバックライトが付き、LED がアニメーションするのを待ってください。
PC から “http://192.168.1.2/GetValues ” にアクセスすると、温度と湿度が表示されます。

2014-03-30 21-34-32

廉価で IoT の検証・評価ができるので Cerbuino Net はなかなかいいですね。

広告
カテゴリー: .NET Micro Framework タグ: , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中