iOSアプリは本業ではないのですが、たまにswiftなお仕事頂いたり、プロトタイプ用のアプリ作ったり。Macのアプリもよくよく作るので、申し訳程度にswiftやってます。
ちょっと前ですが、 Kml.swiftというKmlパーサーを作ってたのでブログにも書いときます。
使い方はすごい簡単。
gist.github.com
基本的なタグしかサポートしてないけど、こんな感じで、MapKit上にKmlファイルのデータを表示できます。
先日のTrackingサンプルをRasPi + Python3で実験。解像度おとしてるけど、やっぱり重いかも。
ソースはこちら。OpenCV3でかなりAPIが変わったぽくて、Python3 + OpenCV3な情報が少なかった。
Cinderで、OpenCV3のTracking APIを試してみました。
すごい簡単にTracking APIできることを説明すると、この選択したエリアにある何かをトラッキングして!ということができるもの。マーカーでもないし、自動認識でもないけど。人の顔を角度が変わっても追跡しつづけるし。結構使えそうだなと。
プロジェクトのソースはこちら。
GitHub - asus4/CinderOpenCv3Sample: OpenCV 3 Tracking API
Cinderを初めて試してみて、oFではapps以下にプロジェクトを作る暗黙のルールがあったけれども、CinderではCINDER_PATH
を設定するだけで良いのでプロジェクト作るのが楽な印象でした。あとはofxアドオンみたいにライブラリが増えたらなー。
プロトタイプを作るときにESP32いいですよね。
秋月電子で1個1,480円
安くて高性能なので、ネットワーク使わない案件でも選択肢に入るんじゃないかと。
ESP32はBluetooth/2.4GHz Wifiモジュールが付いてるので簡単にIoTっぽいことが初められます。
でも毎回問題になったりならなかったりする、ネットワーク周りの設定。有線最高。
ソースコード直打ちでやってしまうこともあるけれども、
納品など環境変わったときにめんどくさいし、もうちょっとちゃんとしたいなと思って、
ネットワークの設定について調べてみました。
※サンプルはarduino-esp32環境ですが、esp-idfでも同じことできます。
サーバー側で、_myservice._tcp.local
みたいなサービスを立ち上げておくと、ESP32側から特定のサービスを検索して、そいつのIPアドレスがわかる。
ラズベリーパイも最近は、raspberrypi.local
でアクセスできるし。
mDNSでネットワーク内のサービスを探すサンプルはこちら。
arduino-esp32/mDNS-SD_Extended.ino at master · espressif/arduino-esp32 · GitHub
mDNSサービスをESP32側で立ち上げてみる。すると今度はArduino IDEから、WiFi経由でスケッチのアップロードができるようになるみたい。サンプルコードはこちらに。
arduino-esp32/BasicOTA.ino at master · espressif/arduino-esp32 · GitHub
すごいかんたんたん。そしてシリアル接続より早いw
余談だけど、僕はplatformio
で開発していて。ESP32だとplatformioからのOTAアップデートのスクリプトがエラー出ていたので修正コード。
gist.github.com
以上で、IPアドレスの直打ちは撲滅できそうだけど、
WiFiのSSID,パスワードを設定するという難関がまだ残っています。
これもなるべくシンプルにできないかと調べてみました。
ESP32はBluetoothモジュールも搭載していて。BLEで繋いで、ネットワーク設定をアプリから送ればいいだろうと。
色々調べるうちに、Blufiというライブラリが見つかった。arduinoのラッパーはなかったけど、esp-idfのライブラリも普通にarduino上で動いた。
サンプルはここに。 esp-idf/examples/bluetooth/blufi at master · espressif/esp-idf · GitHub
Androidアプリから接続するみたい。 EspBlufi/releases at master · EspressifApp/EspBlufi · GitHub
…しかし、手元に対応するAndroidがなかったので断念。
ESP32限定でよければこれがスマート。
さらに調べていくうちに、WiFiモジュールのみのESP8266で動くWiFiManagerというライブラリが見つかった。
GitHub - tzapu/WiFiManager: ESP8266 WiFi Connection manager with web captive portal
基本的には、設定したアクセスポイント(AP)に接続する。
初回起動時や、接続に失敗したときは、デバイス側がAPになって、
アプリからつなぎたいWiFiのSSIDとパスワードを設定してあげるというやつ。
最近のIoTな製品でよくみるパターンです。
WiFiManagerは更に、設定用のhtmlも生成してくれるので、わざわざ専用アプリを用意しなくても、ブラウザから設定できる。
…でも、ESP32は対応してなかった。
ESP8266 / ESP32どちらも対応していたのが、SmartConfig
arduino-esp32/WiFiSmartConfig.ino at master · espressif/arduino-esp32 · GitHub
こちらはアプリが必要
ライブラリが公開されてるので、自分のアプリにも組み込める。
これは、WiFiManagerの仕組みとにているけれど、デバイスのAPにつなぎ直す必要がない。
スマートコンフィグモードにはいると、なぜか別ネットワークにいるESP32に、SSID / Passwordを送れる。
はて、同じネットワークにないのに通信するとは、どういうこと?とiOS版のソースコードをよむとブロードキャストアドレスにUDP 送ってるぽい。
そして、ESP側が、スマートコンフィグをするときに、Snifferモードなるものに入るらしい。参考ブログ
Snifferモードで繋がっていないWifiネットワークから情報をとってこれると。
セキュリティ怖い気がするけども、AOSSなどの例もあるし大丈夫なのかな?もう少しSmartConfigは調べてみたい。
でもひとまず、mDNSとSmartConfigで、ソースコードにIPアドレスも、SSID / Passwordもなにも書かないでよくなるので、環境変わっても大丈夫。
360°動画を再生するUnityスマホアプリ増えてる。
スマホで360°動画を再生するときにやはり気になるのは、解像度。画面の解像度はどんどん上がっているのに、FullHDだとかなり汚く見えてしまう。
iOSではiPhone6s以上から。Androidでも2016年に発売されているものは4k再生をサポートしているのが多い。
そこで、サポートしているものは4k, それ以外はFullHDを再生するために、そもそも指定のフォーマットをサポートしているか調べるネイティブプラグインを作ってみました。
Unity5.6のVideoPlayerはいけてるけど、まだAndroidはサポートしてないので、EasyMovieTextureで確認。
GitHub - asus4/unity-video-supported-plugin: Check iOS/Android supported video format from unity
使い方は簡単。
using AppKit; VideoSupported.IsSupported(1920, 1080, 29.97f); VideoSupported.IsSupported(3840, 1920, 29.97f);
手元の環境ではうまく言ってるんだけど、Android端末をそんなに持ってないので、
試して問題合ったらプルリクください。