Raspberry PiでMRAAを使えるようにする for Node.js

前々から、Node-REDで使えるGroveノードを作りたいなーと思っている話を先日のNode-RED UG Tokaiで話したところ、

www.slideshare.net

わりと「いいんじゃね?」という感じだったので、Johnny-FiveとMRAAを比較して、

www.slideshare.net

よっしゃMRAAでやろう!となり、Raspberry PiにMRAA入れるところで盛大に苦労したので、ブログに書いておこうと思う。

f:id:matsujirushix:20191109115036p:plain

やりたいこと

Raspberry Piで、Node-REDから(Node.jsから)呼び出しできるようMRAAをインストールする。

もやもや

apt install mraaみたいにサクッとインストールを期待していたのですが、、、MRAAのパッケージ無い。

Debian -- Package Search Results -- mraa

npmでMRAAありましたが、Node.js 7以降は未サポートorz

mraa - npm

SeeedのパッケージリポジトリにMRAAありましたが、Node.js入っていないっぽい。&バージョン古いっぽい。

GitHub - Seeed-Studio/pi_repo: Package Repository for Raspberry Pi

仕方ないので、ここを見ながらソースをコンパイルし始めたのだが、、、まぁ、コンパイルが通らないわけです。

Build failure with Node.js 12.x · Issue #969 · intel-iot-devkit/mraa · GitHub

SWIG support for NodeJS v12 · Issue #1520 · swig/swig · GitHub

Node.jsのバージョンを変え、SWIGのバージョンを変え、SWIGにパッチ当てたり当てなかったりと、あれこれ試した結果、下記手順で動かすことができました。

Raspberry PiでMRAAを使えるようにする for Node.js

OSイメージは現時点最新の2019-09-26-raspbian-buster-lite.img
とりあえず、パッケージを最新にしておきます。

sudo apt update
sudo apt upgrade

nodesourceで、Node.js v10をインストールします。(参考
最新のv12はダメ。SWIGが対応していない。
aptで入れるのはダメ。nodesourceで入れておかないと、Raspberry Pi用Node-REDスクリプトでアンインストールされてしまうので。

sudo sh -c 'curl -sL https://deb.nodesource.com/setup_10.x | bash -'
sudo apt-get install -y nodejs

この時点の、nodeとnpmのバージョンはこれでした。

$ node -v
v10.17.0
$ npm -v
6.11.3

MRAAのコンパイルに必要なパッケージをインストールします。(参考
nodejs-devは無くてOK。(busterだとlibnode-devなんだけど、あえて入れなくても大丈夫だった。)

sudo apt-get install git build-essential swig3.0 python-dev cmake libjson-c-dev python3-dev

この時点の、SWIGは3.0.12-2。

$ dpkg -l | grep swig3.0
ii  swig3.0                        3.0.12-2                            armhf        Generate scripting interfaces to C/C++ code

SWIGに、Node.js V7以降のパッチを適用します。

wget https://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-devtools/swig/swig/0001-Add-Node-7.x-aka-V8-5.2-support.patch
cd /usr/share/swig3.0
sudo patch -p2 <~/0001-Add-Node-7.x-aka-V8-5.2-support.patch
cd

MRAAをコンパイル

git clone https://github.com/intel-iot-devkit/mraa
cd mraa
mkdir build
cd build
cmake ..
make

MRAAをインストール。
共有ライブラリが増えたので、ldconfigも実行します。

sudo make install
sudo ldconfig

Node.jsから使えるようにシンボリックリンクを作成します。

mkdir ~/node_modules
ln -s /usr/include/node/lib/node_modules/mraa ~/node_modules/mraa

次期Azure Sphere SDKで何が変わるのか?

Richardが、次期Azure Sphere SDKで何が変わるのか?をブログにアップしていたので、確認してみたいと思います。

Plan for changes coming to the Azure Sphere SDK in next release - Microsoft Tech Community - 916078

1. サインインがシンプルで柔軟に

ユーザーとAzure Sphereテナントの認証モデルを変更。
具体的に、どのようなモデルになるか明記されていませんが、マイクロソフトwork/schoolアカウントに加え、マイクロソフト個人アカウントでも認証できるようになると思われる記述があります。
ただし、新しい認証モデルに移行すると、旧来のSDKでは認証できず、新しいSDKにしなければいけない。複数人で開発しているときは注意が必要。

2. OTAの構造を簡素化

プロダクト(e.g. cofee maker)、デバイスグループ(e.g. Development)、デプロイといった、実運用に合わせた区分で管理できるようになるみたい。
このあたり、いままでは名称の付け方とかで工夫していましたが、、分かりやすくなっていいと思います。

3. Azure Sphere SDKLinux対応(プレビュー)

Ubuntu 18.04 LTSに対応。

4. Visual Studio Code対応(プレビュー)

Windows, LinuxVisual Studio Code拡張を提供。

5. CMake

Visual Studioプロジェクトファイルによる管理をやめて、CMakeに変更。

6. Visual Studio 2019に最適化

Visual Studio 2017は非サポートということで。

気になったもの

認証モデル、OTA構造はインパクト大きそうなので、詳しい情報を待つ。

PythonでAzure IoT Hubへテレメトリ送信(Raspberry Pi使用)

最近、ちょいちょい使う機会のあるPython
そういえば、PythonからAzure IoT Hubへの送信ってどうやるんだっけ?と思い、調べて動作確認してみました。

続きを読む

【雑記】「RとKerasによるディープラーニング」が素晴らしい

コンピューティングのGPGPUの仕組みには興味あって、CUDAとかはチョイチョイ触っていたのですが、昨今、流行りの、カメラ+深層学習にはどうも興味が湧かなくて静観していました。

が、お仕事でJetson NanoとかCoral DevBoardとかを扱わなければならず、「深層学習マルデワカリマセン」では通用しないので、、、みなさんに追いつけるよう、機械学習と深層学習をちびちびとやり始めました。

しかし、マジ辛い。

深層学習の参考書を読み漁ってみると、パーセプトロンから始まって、多層、活性化関数、出力層と、、、聞きなれない用語と数式が多数。 数学はわりと好きな方なのですが、用語が多いのは辛い。選んだ本が悪いのか(オイオイ)と思い、他の参考書も見てみるが、どれもこれもだいたい似たような感じ。(オイオイオイ)

が、最近手に取った「RとKerasによるディープラーニング」が、俺が求めていたのはまさにこれだーーーーー!!!だったので、ブログ書くことにしました。

続きを読む