Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@hayakumi

obnizラジコンをnode化する

More than 1 year has passed since last update.

こちらは「Obniz Advent Calendar 2018」 の12月4日の記事になります。

obniz公式サイトにはたくさんのサンプルプログラムや作品が載っています。
例えばobnizのハンズオンでも使われているobnizラジコンは、HTMLとJavaScriptでスマホから簡単にラジコンを操作することが出来ます。
https://obniz.io/explore/42
今回はこのラジコンプログラムをnode化してみたいと思います。

参考にしたサイト

obniz - Nodejsで使う
https://obniz.io/doc/lessons_nodejs

obniz.js API リファレンス - Messaging
https://obniz.io/doc/sdk/doc/messaging

作り方

Messaging API

obnizのMessaging機能を使うとHTTPリクエストをメッセージとして受け取ることが出来るようです。
って、これを使うといいよって教えてもらったんですけどね。
呼び出すときのエンドポイントはこんな感じです。
GET https://obniz.io/obniz/{obniz_id}/message?data=***

早速作ってみましょう。

工作タイム

必要な部品はサンプル作品と同じです。

  • モーターにジャンパーワイヤーをハンダ付け
    ネット注文した品にはコードが付いてなかったので20年ぶりくらいにハンダごてを使いました。
    コテを当て過ぎてモーター壊すんじゃないかとビビリながらもなんとか。。

  • モーターを張り付ける板の作成
    かっこよく3Dプリンタで!と言いたいところですが必要なのは単なる板ですし、
    100均ののこぎりと紙やすりで100均の木板を加工してお安く作ります。
    4隅を丸くスベスベに整えたのでいい感じになりました。

  • モーター(&タイヤ)とobnizとモバイルバッテリーを板に張り付ける
    センスが問われるところです。
    セロパンテープやマスキングテープだとちょっと見た目が気になったので両面テープで目立たないように貼り付けました。USBケーブルも細めの方がすっきりするのでしょうが持ってなかったのでそこは良しとしました。

obniz1_1.jpg

obniz1_1.jpg

nodeプログラムの作成

エンドポイントURLに、~/message?data=forwardや~/message?data=backを指定し、引数に応じてモーターを回すようにしました。
こんな感じになります。

app.js
var Obniz = require("obniz");

var obniz = new Obniz("{obniz_id}");
obniz.onconnect = async function () {
    var motorA = obniz.wired("DCMotor",  {forward:0, back:1});
    motorA.power(30);
    var motorB = obniz.wired("DCMotor",  {forward:2, back:3});
    motorB.power(30);

    obniz.display.clear();
    obniz.display.print("motor: stop");

    obniz.onmessage = function(message, from) {
        switch (message) {
            case "stop":
                obniz.display.clear();
                obniz.display.print("motor: stop");
                motorA.stop();
                motorB.stop();
                break;
            case "forward":
                obniz.display.clear();
                obniz.display.print("motor: forward");
                motorA.move(true);
                motorB.move(true);
                break;
            case "back":
                obniz.display.clear();
                obniz.display.print("motor: back");
                motorA.move(false);
                motorB.move(false);
                break;
            case "right":
                obniz.display.clear();
                obniz.display.print("motor: turn right");
                motorA.stop();
                motorB.move(true);
                break;
            case "left":
                obniz.display.clear();
                obniz.display.print("motor: turn left");
                motorA.move(true);
                motorB.stop();
                break;
            default:
                obniz.display.clear();
                obniz.display.print("motor: bad parameter");
                break;
        }
    }
}

動作確認

nodeサーバーを起動します。今回はローカルPC上で起動しました。

> node app

Webブラウザのアドレスバーやpostmanなどを使ってHTTP GETリクエストを投げてみましょう。
例えば下のようなURLを指定します。

https://obniz.io/obniz/{obniz_id}/message?data=forward

https://obniz.io/obniz/{obniz_id}/message?data=stop

動きました!
最後の部分をback,right,leftに変えると後退・右回転・左回転します。

終わりに

案の定プログラムよりも工作時間に大半を費やしました。
node化にあたり、Messaging機能を初めて使いましたが(obnizは私にとって全部初めてみたいなものですが)これを使えばHTTPリクエストを使って外部からobnizラジコンを動かすことが出来ます。
セキュリティのためにアクセストークン使うようにコーディングすべきだったな、というのが反省点です。

ここまで読んでいただきましてありがとうございました。
別エントリーに続きがありますのでよろしければそちらも読んでいただけると嬉しいです。
M5Stackでobnizラジコンを操作する
Pepperでobnizラジコンを操作する

2
Help us understand the problem. What is going on with this article?
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
hayakumi
iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?