Androidのメモとか

ポキオの日記です。京急は神。

秋のJavaScript祭 in mixi 2017で登壇してきました

ジャッヴァスクリプトォォォォォォォ。

秋のJavaScript祭 in mixi 2017

秋のJavaScript祭 in mixi 2017

javascript-fes.doorkeeper.jp

なんで私がJSなのか?そう思う方もいらっしゃると思いますが、IoT x JSという切り口で話してきました。

秋のJavaScript祭 in mixi 2017

場所は渋谷のmixiさん。おしゃれなスペースをありがとうございます!

登壇するときに使うデモ機を前日に準備するという計画性のなさと、ESP32の仕様に苦しむというバタバタはありましたが、なんとかESP8266でデモ機が作れたので、一安心。

ポキオ基板でデモしますよ #jsfes

A post shared by pokio (@pokiiiiio) on

やっぱりポキオ基板はいい。デモしやすいし、基板が赤くていい。

何を話してきたのか

speakerdeck.com

Google Apps Scriptをつかったマイコンボードのチョッパヤ開発について話してきました。IoTへのJS的なアプローチとしては

  • Mongoose OS
  • Johnny-Five
  • Espruino

などたくさんあって、それらも非常に便利なしくみであります。ただ、GASを使うと何がいいかというと、

  • マイコンボードはGASにアクセスするだけ
  • 非力なマイコンボードでは難しい複雑な処理をすべてGASに任せることができる
  • メインのロジックはGASで書くので、ロジック変更もGASを書き換えるだけでマイコンボードへのスケッチ書き込みは不要
  • 複数台のマイコンボードに同じ処理を行わせたいときも、単一のGASにアクセスさせるだけ
  • その場合もロジック変更はGASだけで、それぞれのマイコンボードの変更は不要

こんな感じでよさみがある感じになっております。

秋のJavaScript祭 in mixi 2017

でもでは、GASをライブで変更して、ポキオ基板のLEDが変化する様子をお伝えしてきました。詳しいコードは以下のページで公開しています。

github.com

JSな方にはちょっと畑違いな話だったかもしれませんが、皆さんには暖かく聞いていただけました。ありがとうございました。

面白かった話

JSにあまり詳しくないので、ちょっとむずかしい話がたくさんありました・・・。が、Unityのような3Dをあつかえるthree.jsが個人的に一番とっつきやすくて、面白そうな技術でした。

three.js - Javascript 3D library

ics.media

これはおいおい触ってみたい所存。いやー、JSって奥が深いなー。勉強するぞー。

CLOSED BETA FOREVER Tシャツも好評でした(笑)

suzuri.jp

SUZURIデビューをしてTシャツの販売を始めました

完全に思い出作り。

オリジナルデザインのTシャツ

suzuri.jp

SUZURIさんで、ポキオストアーをオープンしました。もともとLINEのスタンプを作っていたんですが、途中で心が折れてしまい。手元に余ったどうしようもないイラストをちょっとずつ消化していこうと思います。たまにネタTシャツも。

suzuri.jp

CLOSED BETA FOREVER。なんともかっこいい響きです。

suzuri.jp

愚息用スタイ。あなたの周りの愚息にいかがでしょうか。こんな感じでゆるくやっていくので、皆様からの大量注文をお待ちしております。

Unityで使う3DモデルをSculptrisで作ってみる

前回はUnityのセットアップをしました。

relativelayout.hatenablog.com

3Dオブジェクトをサクっと作る

専門知識もないので、兎に角簡単で作れる方法を。そして無料で。

で、いうわけで行き着いたのがScultpris。

pixologic.com

基本的にマウス操作だけで3Dオブジェクトを作れます。

sculptris unity

球体を粘土のようにつまんだり引っ張ったり平らにしたりして、オブジェクトを作っていきます。

sculptris unity

sculptris unity

途中でパーツを追加しては、また整形して。何やらネズミみたいなものが出来上がってきました。

sculptris unity

このツールでは色も塗ることが出来ます。このツールで、オブジェクトファイルとTEXMAPファイルを出力して、Unityで読み込むと、このネズミみたいなものをUnityで操ることが可能になります。

sculptris unity

こんな感じで。

ZBrushとSculptrisによる3Dモデリング入門

ZBrushとSculptrisによる3Dモデリング入門

Unity(Android)の環境をMacBook Airに構築したんだが難しかった話

UnityなAndroidアプリを作りたくて環境をセットアップしてみましたが、意外とクセモノだったのでメモしておきます。

私の環境

最新のAndroid Studioには非対応

かなり雑な言い方ですが、最新のAndroid StudioにバンドルされてるSDKをUnityで読み込ませても、UnityでAPKのビルドができませんでした。

Android Studio Unity セットアップ

SDKのパスをUnityで登録して、ビルドしようとすると、

Build failure

Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details. See the Console for details.

Android Studio Unity セットアップ

こんな感じで怒られます。

stackoverflow.com

ここの情報を参考にさせていただきました。tools(いわゆるコマンドラインツール)のバージョンが26.x.xだとUnityに対応していない模様。25.x.xなtoolsをどこからか落として来る必要があります。

しょうがないのでイチからセットアップする

ここからMac版のtoolsを落としてきます。

http://dl-ssl.google.com/android/repository/tools_r25.2.5-macosx.zip

Android Studioが参照しているSDKディレクトリには、すでに最新のSDKが入っているので、他のディレクトリを適当に掘って解凍します。

Android Studio Unity セットアップ

この状態で、Unityでそのディレクトリを登録して、APKを作ろうとすると、別の理由で怒られます。

Android SDK is outdated

SDK Platform Tools version 0.0.0 < 23.0.0.

そりゃそうで、toolsとは別に、platforms、platform-tools、build-toolsのダウンロードが必要になります。tools/bin/sdkmanagerでそれらをコマンドラインからダウンロードしていきます。 platformsやbuild-toolsは、すべてのバージョンを落とす必要はありません。個人的にはAndroid 6.0以降の端末で動くAPKが作りたかったので、23(Android 6.0)〜25(Android 7.1)あたりのアイテムをインストールします。

Target SDK Versionは25にする

Min SDKもTarget SDKも23で良いかなと思ったんですが、Unityが生成するManifestに、25以降で対応するAttributeが存在するため、Target SDKは25にしておくと安心です。

Build failure

Failed to re-package resources. See the Console for details.

Targetが23のままだと、こんな怒られ方をされて泣きたくなります。

とりあえずAPKは作れるようになった

あとは実装するだけですね!(震え声)

今後の予定と備忘録

おかげさまで、いろんなイベントに参加させて頂ける事になったので、ご報告。

SIer主催版IoT縛りの勉強会 SIerIoTLT vol2 (vol1?)

iotlt.connpass.com

小生、SIerじゃないんですが、ちょっとだけ話してきます。一応、初心者でもとっつきやすいマイコンボードということで、Nefry BTを紹介してきます。やっぱりIoTやるなら、まずNefry BT♪。間違いないと思います。

秋のJavaScript祭 in mixi 2017

javascript-fes.doorkeeper.jp

小生、JSerでもないんですが、ちょっとだけ話してきます。Google Apps ScriptがかろうじてJSっぽいので、GASとIoTの関係性をお話する予定です。かなりこじつけかもしれませんが、JSな人たちにも是非IoTに挑戦していただきたいです。

みんなでダァシエリイェス!遅延すると光るガジェットをつくるIoTハンズオンを開催しました!

dotstud.io

先日開催したハンズオン会の記事が公開されました。私の周りの一部で非常に好評だったので、もしかしたら第2弾も開催するかも・・・?

というわけで、今後ともよろしくお願いします。 今年もあと2ヶ月。突っ走っていきます。

Nefry BTのディスプレイをサクっと触ってみる

今回はディスプレイ。

Nefry BTで強化されたディスプレイ機能を使う

Nefry BTのバージョンを1.0.8にアップデートしたら、ディスプレイ関係の関数が色々追加されてたようなので、ちょっと使ってみます。ディスプレイをコントロールするのに必要となってくるのが#include <NefryDisplay.h>。これさえ書いておけば、簡単な便利関数で好きな文字列を表示できます。

たとえば、こんな感じのコードを実行すると・・・

#include <Nefry.h>
#include <NefryDisplay.h>

void setup() {
  NefryDisplay.print("POKIO");
  NefryDisplay.print("KEIKYU");
}

void loop() {

}

Nefry BT

こんな感じで、POKIOKEIKYUと表示できました。NefryDisplay#print()という関数を使えば、簡単に好きな文字列を表示できます。ちなみに、日本語には対応していません。日本語を入力しても、何も表示されないので注意が必要。また、表示できるのは3行まで。

#include <Nefry.h>
#include <NefryDisplay.h>

void setup() {
  NefryDisplay.print("P");
  NefryDisplay.print("O");
  NefryDisplay.print("K");
  NefryDisplay.print("I");
  NefryDisplay.print("O");
}

void loop() {

}

こんな感じで4回以上NefryDisplay#print()を実行すると、最初に書き込んだ文字列は消えてしまいます。

Nefry BT

POKIOと入力しても、最後のKIOしか表示されません。ただ、1行に長文を流し込んだ場合は、文字がスクロールするので、なんとか全文読むことができます。たとえば、

#include <Nefry.h>
#include <NefryDisplay.h>

void setup() {
  NefryDisplay.print("POKIOPOKIOPOKIOPOKIO");
  NefryDisplay.print("KEIKYUKEIKYUKEIKYUKEIKYU");
}

void loop() {

}

こんな感じで、無理矢理長い文字列を入れると・・・

Nefry BT

(写真ではわかりづらいですが)文字列がスライドして、すべての文字列を表示してくれます。

Nefry BTで強化されたディスプレイ機能をもっと使う

上記の関数を使うと、簡単に文字列が表示できるものの、

  • ディスプレイ上部にNefry PrintDialogと表示される
  • 3行までしか表示できない
  • 左アライン固定、上詰め

という制限があります。そこで、NefryDisplay#drawString()NefryDisplay#drawStringWithHScroll()NefryDisplay#autoScrollFunc()を使うと、自由度高く文字列を表示できます。

#include <Nefry.h>
#include <NefryDisplay.h>

void setup() {
  NefryDisplay.setAutoScrollFlg(true);
  NefryDisplay.autoScrollFunc(pokioPrint);
}

void loop() {

}

void pokioPrint(){
  NefryDisplay.drawString(0, 0, "POKIO");
  NefryDisplay.drawString(20, 20, "POKIO");
  NefryDisplay.drawString(40, 40, "POKIO");
  NefryDisplay.drawString(60, 60, "POKIO");
}

たとえば、NefryDisplay#drawString()で関数を作って、それをNefryDisplay#autoScrollFunc()をコールするようなコードを書いてみました。NefryDisplay#drawString()では、文字を表示する位置と文字を指定できます。

Nefry BT

これを実行すると、こんな感じで好きな位置に文字列を表示できます。4行目の文字が見切れてしまっていますが、文字を縦方向に15ずつずらせば、ピッタリ4行文字列を表示できます。

#include <Nefry.h>
#include <NefryDisplay.h>

void setup() {
  NefryDisplay.setAutoScrollFlg(true);
  NefryDisplay.autoScrollFunc(pokioPrint);
}

void loop() {

}

void pokioPrint(){
  NefryDisplay.drawString(0, 0, "POKIO");
  NefryDisplay.drawString(20, 15, "POKIO");
  NefryDisplay.drawString(40, 30, "POKIO");
  NefryDisplay.drawString(60, 45, "POKIO");
}

Nefry BT

NefryDisplay#drawStringWithHScroll()を使えば、好きな位置で文字列をスクロール表示でき・・・るはずだったんですが、手元では文字が重なって表示されてしまい、上手く表示されませんでした・・・。

#include <Nefry.h>
#include <NefryDisplay.h>

void setup() {
  NefryDisplay.setAutoScrollFlg(true);
  NefryDisplay.autoScrollFunc(pokioPrint);
}

void loop() {

}

void pokioPrint(){
  NefryDisplay.drawString(0, 0, "POKIOPOKIOPOKIOPOKIOPOKIO");
  NefryDisplay.drawStringWithHScroll(0, 15, "POKIOPOKIOPOKIOPOKIOPOKIO", 10);
  NefryDisplay.drawString(40, 30, "POKIOPOKIOPOKIOPOKIOPOKIO");
  NefryDisplay.drawStringWithHScroll(40, 45, "POKIOPOKIOPOKIOPOKIOPOKIO", 10);
}

Nefry BT

何かコーディングしくじったかな・・・。

NefryDisplay#drawString()は、長い文字列だと自動で改行されるため、文字が重なっていたようです。場合によっては、改行するかしないかを気にしながらコーディングする必要がありそうです。

何はともあれ

簡単な関数でディスプレイを制御できてしまうNefry BT。使い方しだいではかなり面白いガジェットができるのではないでしょうか。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

Nefry BTなら秒で作れる。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

腹痛の見える化

しばしば腹痛がおこるポキオです。お腹が痛いときに、みなさんは呪文を唱えますよね。僕は唱えますよ、「#ponponpain」と。ただ本当にお腹がいたいときに、いちいち「#ponponpain」って打つのはだるいですよね。

そこでNefry BT。ワンタッチでツイッターに「#ponponpain」と宣言できます。

Nefry BT ✕ IFTTT Webhooks ✕ Twitter

Nefry BTにはIFTTTライブラリが入っていて、面倒なHTTP-POSTやらJSONなどを一切意識すること無くIFTTTのTrigger(Webhooks)を叩くことができてしまいます。さっそく、IFTTTのアプレットを作ってみます。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

ここで言う、If THISはWebhooksで、Then THATはTwitterとなります。予めWebhooksとTwitterの設定は済んでいるとします。

IFTTT側の設定

まずはIf THISで、Webhooksを選びます。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

イベント名を決めろと言われるので、ここは適当にponponpainとしておきます。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

次に、Then THATの部分。こちらはTwitterになります。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

Triggerが発火した時に「#ponponpain」とただただツイートするように設定しておきます。これで完成。

Nefry BT側の実装

今回はData Storeなどを使わずに愚直にコードを書いていきます。兎に角短いです。

#include <Nefry.h>
#include <NefryIFTTT.h>

#define EVENT "ponponpain"
#define SECRET_KEY "シークレットキーを書く"

void setup() {
  
}

void loop() {
  if(Nefry.readSW()){
    IFTTT.send(EVENT,SECRET_KEY);
  }
}

これだけ。

まずは、イベント名とシークレットキーを定数として宣言します。シークレットキーはIFTTTのWebhooksの設定画面から調べることができます。URLの後ろの部分が、シークレットキーです。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

そして、ボタンの押下検知ですが、Nefry.readSW()で取得できます。これがTrueになったときはボタンが押されたときなので、IF分の条件式にしています。本当はボタンのチャタリング等の制御を入れたほうが良いかもしれませんが、面倒なので入れてません。

また、IFTTTのトリガーを発火させるのも、IFTTT.send(EVENT,SECRET_KEY);の一文でできてしまいます・・・。良い世の中になったものです。これでコーディング終了。

ponponpainと叫んでみる

あとは、Nefry BTを動作させて、ボタンを押すだけ。

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

ボタンを押して暫く経つと・・・

Nefry BTとIFTTTライブラリをつかってお腹が痛くなった時に押すボタンを作る

はい。ちゃんとponponpainが表示されています。ワンタッチでツイートができるようになったので、これで心置きなくトイレに行くことができます。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。