LoginSignup
2
3

More than 5 years have passed since last update.

JavaScriptで動くマイコン「Espruino」を使ってIoTなHello World

Last updated at Posted at 2016-08-20

電子工作知識ゼロのWeb系エンジニアがIoTに挑戦。
とりあえず、Espuruino(JavaScriptで動くマイコン)とESP WROOM-02(WiFiモジュール)を繋げて、外出先からセンサの情報を取得するようなことを目指しています。

今回はいよいよマイコンをインターネットに接続します!
これまでのセットアップや実験は、下記にまとめています。

準備するもの

  • Espruino
    • 日本ではELEFINEから通販で入手可能
  • ESP-WROOM-02ピッチ変換済みモジュール《シンプル版》
  • 3.0V〜3.6V供給できる何かしらの電源
  • 10kΩの抵抗(1/2Wでも1/4Wでも)×3
  • ブレッドボード
  • ジャンパワイヤ(オス-オス)
  • ピンヘッダ(オス-オス、オス-メス)
  • はんだごて
  • USBケーブル(A-マイクロB)

手順

配線

  1. Espruinoにピンヘッダをはんだ付け
    • 手前一列はブレッドボード固定用にオス-オスを下向きに付ける(最低限GNDについていれば良いけど、安定させるために今回はB8までつけました)
    • 奥一列は直接ジャンパワイヤを挿せるようにオス-メスを上向きに付ける image9.JPG
      こんな感じー。汚いけど大丈夫。
  2. ESP-WROOM-02にピンヘッダをはんだ付け
    • もちろん、すでに付いていれば不要。オス-オスのピンヘッダを全部の穴につけます。
  3. ブレッドボードにEspruinoとESP-WROOM-02を挿す(ピンが縦に並ぶように)
  4. ジャンパワイヤで配線
    • ESP-WROOM-02の「3V3」をブレッドボードの「+」列に
    • ESP-WROOM-02の「GND」をブレッドボードの「−」列に
    • ESP-WROOM-02の「RST」をブレッドボードの10kΩ抵抗経由で「+」列に
    • ESP-WROOM-02の「EN」をブレッドボードの10kΩ抵抗経由で「+」列に
    • ESP-WROOM-02の「IO0」をブレッドボードの10kΩ抵抗経由で「+」列に
    • ESP-WROOM-02の「TXD」をEspruinoの「C11」列に
    • ESP-WROOM-02の「RXD」をEspruinoの「C10」列に
    • Espruinoの「GND」をブレッドボードの「−」列に
  5. ブレッドボードに電源を接続
    • USBシリアル変換ケーブルのVCCをブレッドボードの「+」列に
    • USBシリアル変換ケーブルのGNNをブレッドボードの「−」列に

image10.JPG
全部つなぎました!妙に抵抗が多いのは、10kΩが手に入らなかったために20kΩを並列にしているため。10kΩなら、使うのは3つです。

注意したいのは、TXD、RXDの接続先はEspruio上のどの穴でも良いわけではないところ。
公式の「USART〜」「UART〜」がシリアル通信に対応している穴です(今回使っているC10とC11には「UART4」と書いていますが おそらくUSART4の誤り。 訂正。USARTは非同期/同期に対応しており、USARTは非同期のみ対応しているようです)。「TX」と書かれている方にESP-WROOM-02のRXDを、「RX」と書かれている方にESP-WROOM-02のTXDを接続します。

表示用のhtmlを用意

dweet.ioを使用してメッセージを送信してみます。
まずは、表示用のhtmlを用意。
thingNameのところは、ユニークになりそうな適当な値にします。

espruinotest.html
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Espruino TEST</title>
<script src="http://dweet.io/client/dweet.io.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
  $(function(){
    var thingName = "espruinotest_momoham_0820"; // ユニークになりそうなthingName
    dweetio.listen_for(thingName, function(dweet) {
      $('#dweet_val').text(dweet.content.val);
    });
  });
</script>
</head>
<body>
  <div id="dweet_val"></div>
</body>
</html>

htmlはブラウザで開いておきます。
この時点では真っ白。
公式を参考にしながら、コードを実行します。

Serial4.setup(115200, { rx: C11, tx : C10 });
var wifi = require("ESP8266WiFi_0v25").connect(Serial4, function() {
  wifi.reset(function(err) {
    if (err) throw err;
    console.log("Connecting to WiFi");
    wifi.connect("WiFiのSSID","WiFiのパスワード", function(err) {
      if (err) throw err;
      console.log("Connected");

      // dweet.io に文字列を送る
      var queryString = 'val=HelloWorld!';
    });
  });
});

function postData(queryString) {
      var options = {
        host: 'dweet.io', 
        path: '/dweet/for/espruinotest_momoham_0820', // htmlと同じthingName
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': queryString.length
        }
      };
      var req = require("http").request(options, function(res) {
        console.log("Response: ",res);
        res.on('data', function(d) {
          console.log("--->"+d);
        });
      });
      req.write(queryString);
      req.end();
}

HelloWorld!が表示されました。
IoTへの第一歩を踏み出した感じです。
次回はいよいよ、センサとインターネットを繋いで本格IoT!

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3