【RaspberryPi】micro:bitの最新開発環境をローカルに構築してみる

最近、micro:bitを使用することが多いです。教室の指導者向け(大人?)向けのメンターのような形での授業や、小学生向けのクラスを受け持っているので 今月はかなりの時間を費やしているような状況です。また、最近正式に発売されたmicro:bit v2のこともあり、ネットでも盛り上がりを見せています。

そんな中、自分もようやく新micro:bitを購入しました。お値段は据え置きの2200円です。

www.switch-science.com

ハードウエアとしては、マイク・スピーカーが標準で装備されたのが非常に大きな違いと思いますが、実際に使用して見るとそれ以外にも高速化されているところもあります。

特にiPadなどからBluetooth経由でペアリングしてダウンロードを行うような場合をみるとそのスピードが顕著です。ダブレットなどではUSB経由でのダウンロードができないので、【Aボタン】+【Bボタン】+【リセットボタン】を同時に押して、フラッシュの待機状態にしてから、画面内の【ダウンロード】ボタンをクリックすることになりますが、その時の待機時間が圧倒的に早いです。旧バージョンと同じようなスピードだと逆に失敗するくらいスピードだと思ってもいいかもしれません。

あとは使用できるメモリ量が増えるのもいい点かもしれません。Bluetoothのライブラリをロードすると結構メモリが足りなくて処理を削らないと行けないと思いますが、そういうことも少なくなると思います。(まだそういう状況になっていないので希望的な状況ではあります)

そんなメリットも多い新バージョンのmicrobitですが、まだまだ出たばかりなので少し不具合もあるようです。自分が使う機会のあった以下のキットに同梱されているGrove接続の超音波モジュールがうまく動作しません。(※2020.12.22AM0時現在の話になります

動作させてみると一回計測を行ったあとに以下のようなエラーが発生します。

f:id:ueponx:20201222232235j:plain

エラーコードはLEDの表示としては020となっていたので、メモリ関係でなにかが発生しているように考えられます。

support.microbit.org

ただ、以下のようなコードでメモリを食うとは思わないのでバグだと思われます。

f:id:ueponx:20201222232804p:plain

実行の様子

youtu.be

参考

Extension using pulseIn errors 020 on V2 · Issue #3731 · microsoft/pxt-microbit · GitHub

少し待てはバージョンアップも行われて、問題なく使えるようになるとは思います。すでに報告済みのバグのようなので修正も完了しているようですが、リリースまではされていない状況です。個人的にはできればそういった機能も早めに使えるといいなと思いMakeCodeの最新版をWeb経由ではなくGitHub経由で取得してローカルに展開しようと考えました。今回のエントリーはそんなローカルにMakeCodeサーバーを構築すると言うものになります。

Windowsでもできるのかもしれませんが、LinuxMacのほうが構築が簡単だと感じたので、手元にあったRaspberry Piで行ってみました。ちょっとダメ元って感じではありますが。Debianベースなのでなんとかなるでしょう。

あとでわかるのですが、Xが必要になるようなので注意が必要です。

Raspberry PiのOSバージョンの確認

では、今回使用したRaspberry Piのバージョンをチェックしておきます。ハードウエアは部屋に転がっていたRaspberry Pi 3Bを使用します。そこまでスペックもいらないかなと思っての選択です。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

$ uname -a
Linux raspberrypi 5.4.51-v7+ #1333 SMP Mon Aug 10 16:45:19 BST 2020 armv7l GNU/Linux

$ cat /etc/debian_version 
10.4

OSのバージョンはこんな状況です。最新のRaspberry Pi OSのバージョンがDecember 2nd 2020なので少し古いものになります。

www.raspberrypi.org

Node.jsのインストール

デフォルトではNode.jsのパッケージが古いと思うので、今回は以下のサイトからLTSバージョンのVersion 14をダウンロードしてインストールしました。

github.com

上記のサイトのドキュメントにある通りにインストールを行います。ルート権限のユーザーで実行すればsudoなしでインストールは可能です。

Node.jsのインストール

curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt install -y nodejs

使用するコマンドのバージョンの確認

$ node -v
v14.15.3
$ npm -v
6.14.9
$ git --version
git version 2.20.1

f:id:ueponx:20201222225509p:plain

念の為gitコマンドもバージョン確認しています。

MakeCodeの取得とインストール

f:id:ueponx:20201222220014p:plain

MakeCodeの最新版は以下のGitHubにあります。

github.com

この中のLocal server setupの項目を見ながら作業を進めていくことになります。 基本的には以下のように作業すればOKです。ただ、色々エラーやワーニングがでますが、そのまま継続して行っていきます。

f:id:ueponx:20201222220019p:plain

ソースコードのCloneとインストール

$ git clone https://github.com/microsoft/pxt-microbit
$ cd pxt-microbit
$ sudo npm install -g pxt
$ npm install

インストールログ

$ git clone https://github.com/microsoft/pxt-microbit
Cloning into 'pxt-microbit'...
remote: Enumerating objects: 46, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 38335 (delta 19), reused 24 (delta 9), pack-reused 38289
Receiving objects: 100% (38335/38335), 304.68 MiB | 2.17 MiB/s, done.
Resolving deltas: 100% (24203/24203), done.
Checking out files: 100% (2291/2291), done.

$ cd pxt-microbit

$ sudo npm install -g pxt
/usr/bin/pxt -> /usr/lib/node_modules/pxt/pxt
+ pxt@0.5.1
added 1 package in 2.067s

$ npm install
npm WARN deprecated request@2.81.0: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@4.2.1: this library is no longer supported
npm WARN deprecated hawk@3.1.3: This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
npm WARN deprecated hoek@2.16.3: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
npm WARN deprecated boom@2.10.1: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
npm WARN deprecated cryptiles@2.0.5: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
npm WARN deprecated sntp@1.0.9: This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
npm WARN deprecated request@2.88.0: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated applicationinsights-js@1.0.21: This package has been moved to @microsoft/applicationinsights-web. Please install that package instead for the latest updates & features
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm WARN deprecated fsevents@2.1.3: Please update to v 2.2.x

> puppeteer@2.1.1 install /home/pi/pxt-microbit/node_modules/puppeteer
> node install.js

Downloading Chromium r722234 - 121.1 Mb [====================] 100% 0.0s 
Chromium downloaded to /home/pi/pxt-microbit/node_modules/puppeteer/.local-chromium/linux-722234
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})

added 666 packages from 1204 contributors and audited 670 packages in 414.196s

39 packages are looking for funding
  run `npm fund` for details

found 25 vulnerabilities (6 low, 16 moderate, 3 high)
  run `npm audit fix` to fix them, or `npm audit` for details

インストールが完了すればあとは実行になります。

ドキュメントのRunningの部分を参考にしていくことになりますが、ここで注意なのはこのコマンドの最後でX上(GUI上)のChromiumブラウザを実行してローカルサーバーにアクセスするという動きをします。そのため、以下コマンドの実行はX上のコンソールから行ったほうがいいと思います。

$ pxt serve

これで実行されます。時間は結構かかりますが、正常にいけばブラウザが立ち上がりMakeCodeが起動されます。今回はリモートデスクトップをしようしたので以下のような状態になりました。

f:id:ueponx:20201222220028p:plain

いつもみたようなMakeCodeが起動しています。ただ、バージョンを確認すると以下の様になっているので少し違っていることがわかるかと思います。

f:id:ueponx:20201222220033p:plain

今回の導入はうまく行ったように見えますが、シュミレータがうまく行かいないようでした。インストール時のログでも、シミュレータ部分でいろいろとなどのワーニングが出ていたためだと思います。ただ、ブロックの操作に関しては特に問題はないようです。ではGroveを使用できる拡張コードを導入して、テストコードを作成していこうと思います。

f:id:ueponx:20201222220037p:plain

拡張機能】の画面を開いて…

f:id:ueponx:20201222220042p:plain

groveと検索して、最初にでてきたものをクリックしていきます。

f:id:ueponx:20201222230505p:plain

追加されたGroveブロックを使って行くことになります。

f:id:ueponx:20201222220052p:plain

今回使用するのはUltra Sonicとなります。v2とついているものが該当するブロックになるのでそれを使用します。また、単位はcmで返してほしいの(in cm)となっている方を選択してください。

f:id:ueponx:20201222231042p:plain

取り出して、超音波センサーの値をLEDに表示されるようにブロックを組み立てていきます。

f:id:ueponx:20201222220101p:plain

拡大すると以下のようになります。

f:id:ueponx:20201222231444p:plain

あとは、通常のダウンロードと同じようにしてmicro:bitに書き込んで行きます。Raspberry PiはUSBで接続することができるので、そのままPCのように操作していくことでダウンロードできます。

f:id:ueponx:20201222220105p:plain

バイスの登録もできます。

f:id:ueponx:20201222220111p:plain

登録すれば簡単にダウンロードができるようになります。

f:id:ueponx:20201222220115p:plain

f:id:ueponx:20201222220120p:plain

実行を確認する

ダウンロードしたら、実行状況を確認します。

実行の様子

youtu.be

うまく動作するようになったようです。連続して値を出力してくれています。

おわりに

micro:bit v2でバグがあった超音波センサーブロックをGitHubソースコードを使用してローカルにサーバーを立てることで、エラー回避対応することができました。v2が出たばかりということもあってWeb版もFixされ少しずつ変わってきています。こんな手を使わなくても少し待てば解決できそうですが、あえてこういうことにチャレンジするのも面白いです。

ちなみにWindowsでも同じようにGitNode.jsを使ってインストールをしてみようと思ったのですが、インストール中に止まってしまいました。Dockerだとうまくいくのかもしれません。ちょっとやってみてもいいかも?

【Node-RED】スケジューリング機能(タイマー的、cron的な)を持つ拡張ノードを使ってみる

これはNode-RED Advent Calendar 2020の17日目のエントリーとなります。

毎年この頃になるとアドベントカレンダーのことを意識しながらエントリーを書いているのですが、 今年は仕事のほうが忙しく、ネタ探しがうまくいっていませんでした。

とはいえ、申し込んだときには色々少しは余裕があるかなと思っていたのですが、なかなかうまく行かず。

そこで今年は少し興味が湧いたNode-REDで使用できるスケジューラー(タイマー)機能のノードを調べてみることにしました。Node-REDで インターバルタイマーを使うことはあっても、schedulerのようなノードを使うことはあまりありませんでした。センサーでの計測を行うときには 計測するタイミングは定時的なスケジュールで動かすこともあるので、今回はそんなスケジュールで動作するいくつかのノードの使い方を調べてみようと思います。

続きを読む

GroveモジュールTF Mini LiDARを使用してみる

こちらはSeeed UG Advent Calendar 2020の8日目のエントリーとなります。

qiita.com

今年はどんなネタにしようかなと悩んでいたのですが、たまたま購入していたGroveモジュールが日本ではあまり使われている様子だったので 使用してエントリー化したいと思います。本家のWikiページも英語ではありますが、わかりやすく書かれているのでそれほど難しくないです。

TF Mini LiDARは赤外線レーザーの照射を行って、その反射した光を計測し、時間差および位相差を算出して距離を測定するものになります。超音波距離センサモジュール(Ultrasonic Ranger)という超音波式の距離センサーがありますが、それの赤外線版がこちらのモジュールになります。

両方とも距離を計測するものにはなるのですが、TF Mini LiDARはSerialデバイスUltrasonic RangerはPWMデバイスとなっています。 あと、動作電圧は5Vになっているので注意したほうが良さそうです。Ultrasonic Rangerは3.3Vでも5Vでも動作するようです。

購入ページ

www.seeedstudio.com

www.switch-science.com

続きを読む

micro:bitをiPadに有線で接続できるか試してみた

Facebookのコミュニティをみていて、iPadにUSBの有線接続してmicro:bitの接続・ダウンロードができるかっていう話題があったので試してみました。 もしかしたら別の方法もあるのかもしれないので、こんなやり方じゃないよという方がいたらコメントいただけると助かります。

ちなみに今回使用しているiPadはminiの第5世代、micro:bitは初代となります。

接続に使用する機器

有線接続を行うことはできないので、USBのOTG変換のコネクタを準備してみます。住んでいるところではなかなか売っていないので、秋葉原あきばお~で売っていた変換コネクタを準備します。(以前購入していたので実験しています)

f:id:ueponx:20201130213956j:plain

Amazonでも同じような変換コネクタ(OTG)は売っていますが、レビューを見ると熱で溶けるとか結構やばいものが多いみたいです。レビューを確認して品質が安定したものを選んだほうが良さそうです。USBメモリが使えるとか書いてあれば問題ないと思います。

そのまま、変換コネクタを接続してUSBメモリを接続するとちゃんと認識してファイルの読み込みも問題ありません。micro:bitはPCなどに接続するとストレージとして見えるので、これなら使用できる可能性は高いのかな?

f:id:ueponx:20201130215721p:plain

USBメモリのフォルダも中に入っている動画も再生で来ています。

では、USBケーブル(タイプA-マイクロBコネクタのケーブル)でiPadmicro:bitを接続してみます。裏面のアクセスランプは点灯しています。自分はmicro:bitをアクリルケースに入れているので、少し見た目が違いますが点灯している状態はわかるかなと思います。

f:id:ueponx:20201130215650j:plain

ではmicro:bitが同じようにストレージとして見えているか確かめてみると、問題なくUSBメモリと同じようにストレージとして見えています。

f:id:ueponx:20201130220542p:plain

micro:bitの中のファイルもちゃんと見えています。

f:id:ueponx:20201130220548p:plain

この領域に書き込む事ができれば、かなり期待できそうです。

続きを読む

iPadからmicro:bitのBluetoothペアリングができなくなったときの対処方法

2021年の夏休みのmicro:bit夏期講習でもトラブルがあったので、その件も後半に追記します。

来月から1か月ほど、子ども向けのmicro:bitのワークショップを開催することになりました。プログラミングに使用するのはPCではなく、iPadなので、ちょっとだけ電波状態や都度手間がかかる点が不安要素ではあります。USB接続のほうが圧倒的に楽なのはわかっていますが、手持ちの端末はiPadだけなので仕方ありません。iPadのアプリでもPCと遜色なくプログラムは作れると思います。Bluetoothによるペアリング設定とダウンロード時に毎回Aボタン+Bボタン+resetボタンを押す必要があるのだけが少し面倒かもしれませんけど。

ペアリング作業は以下の動画の通りになります。(この動画はBluetoothのペアリング動画なんですが、USB給電をしているのでぱっと見では微妙に感じます)


Pairing and Flashing in iOS

そんな中で、ワークショップの生徒募集を行う際のデモ用のプログラムを作る必要が出てきました。いつも通り、事前設定としてBluetoothのペアリングを行います。よくやりなれた作業ではあるのですが、はまりました。何度やっても、ペアリングまで進んでいってくれません。デバイスが見つからないといった状況です。

f:id:ueponx:20201125004136p:plain

今回はそんなときのリカバリー方法をメモっておこうと思います。多分大量にmicro:bitを持っていて、ワークショップをするような人しか使わなさそうだけど。

続きを読む
/* -----codeの行番号----- */