最近、micro:bit
を使用することが多いです。教室の指導者向け(大人?)向けのメンターのような形での授業や、小学生向けのクラスを受け持っているので
今月はかなりの時間を費やしているような状況です。また、最近正式に発売されたmicro:bit v2のこともあり、ネットでも盛り上がりを見せています。
そんな中、自分もようやく新micro:bit
を購入しました。お値段は据え置きの2200円です。
ハードウエアとしては、マイク・スピーカーが標準で装備されたのが非常に大きな違いと思いますが、実際に使用して見るとそれ以外にも高速化されているところもあります。
特にiPadなどからBluetooth経由でペアリングしてダウンロードを行うような場合をみるとそのスピードが顕著です。ダブレットなどではUSB経由でのダウンロードができないので、【Aボタン】+【Bボタン】+【リセットボタン】を同時に押して、フラッシュの待機状態にしてから、画面内の【ダウンロード】ボタンをクリックすることになりますが、その時の待機時間が圧倒的に早いです。旧バージョンと同じようなスピードだと逆に失敗するくらいスピードだと思ってもいいかもしれません。
あとは使用できるメモリ量が増えるのもいい点かもしれません。Bluetoothのライブラリをロードすると結構メモリが足りなくて処理を削らないと行けないと思いますが、そういうことも少なくなると思います。(まだそういう状況になっていないので希望的な状況ではあります)
そんなメリットも多い新バージョンのmicrobitですが、まだまだ出たばかりなので少し不具合もあるようです。自分が使う機会のあった以下のキットに同梱されているGrove接続の超音波モジュールがうまく動作しません。(※2020.12.22AM0時現在の話になります)
動作させてみると一回計測を行ったあとに以下のようなエラーが発生します。
エラーコードはLEDの表示としては020
となっていたので、メモリ関係でなにかが発生しているように考えられます。
ただ、以下のようなコードでメモリを食うとは思わないのでバグだと思われます。
実行の様子
参考
Extension using pulseIn errors 020 on V2 · Issue #3731 · microsoft/pxt-microbit · GitHub
少し待てはバージョンアップも行われて、問題なく使えるようになるとは思います。すでに報告済みのバグのようなので修正も完了しているようですが、リリースまではされていない状況です。個人的にはできればそういった機能も早めに使えるといいなと思いMakeCode
の最新版をWeb経由ではなくGitHub経由で取得してローカルに展開しようと考えました。今回のエントリーはそんなローカルにMakeCode
サーバーを構築すると言うものになります。
Windows
でもできるのかもしれませんが、Linux
やMac
のほうが構築が簡単だと感じたので、手元にあった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
なので少し古いものになります。
Node.js
のインストール
デフォルトではNode.js
のパッケージが古いと思うので、今回は以下のサイトからLTSバージョンのVersion 14
をダウンロードしてインストールしました。
上記のサイトのドキュメントにある通りにインストールを行います。ルート権限のユーザーで実行すれば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
念の為git
コマンドもバージョン確認しています。
MakeCode
の取得とインストール
MakeCode
の最新版は以下のGitHub
にあります。
この中のLocal server setupの項目を見ながら作業を進めていくことになります。 基本的には以下のように作業すればOKです。ただ、色々エラーやワーニングがでますが、そのまま継続して行っていきます。
ソースコードの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が起動されます。今回はリモートデスクトップをしようしたので以下のような状態になりました。
いつもみたようなMakeCodeが起動しています。ただ、バージョンを確認すると以下の様になっているので少し違っていることがわかるかと思います。
今回の導入はうまく行ったように見えますが、シュミレータがうまく行かいないようでした。インストール時のログでも、シミュレータ部分でいろいろとなどのワーニングが出ていたためだと思います。ただ、ブロックの操作に関しては特に問題はないようです。ではGrove
を使用できる拡張コードを導入して、テストコードを作成していこうと思います。
【拡張機能】の画面を開いて…
grove
と検索して、最初にでてきたものをクリックしていきます。
追加されたGroveブロックを使って行くことになります。
今回使用するのはUltra Sonic
となります。v2とついているものが該当するブロックになるのでそれを使用します。また、単位はcmで返してほしいの(in cm)となっている方を選択してください。
取り出して、超音波センサーの値をLEDに表示されるようにブロックを組み立てていきます。
拡大すると以下のようになります。
あとは、通常のダウンロードと同じようにしてmicro:bit
に書き込んで行きます。Raspberry Pi
はUSBで接続することができるので、そのままPCのように操作していくことでダウンロードできます。
デバイスの登録もできます。
登録すれば簡単にダウンロードができるようになります。
実行を確認する
ダウンロードしたら、実行状況を確認します。
実行の様子
うまく動作するようになったようです。連続して値を出力してくれています。
おわりに
micro:bit v2
でバグがあった超音波センサーブロックをGitHub
のソースコードを使用してローカルにサーバーを立てることで、エラー回避対応することができました。v2が出たばかりということもあってWeb版もFixされ少しずつ変わってきています。こんな手を使わなくても少し待てば解決できそうですが、あえてこういうことにチャレンジするのも面白いです。
ちなみにWindows
でも同じようにGit
とNode.js
を使ってインストールをしてみようと思ったのですが、インストール中に止まってしまいました。Docker
だとうまくいくのかもしれません。ちょっとやってみてもいいかも?