2020年末で60万アクセスに到達しました

ぼちぼちと更新をしていたブログですが、始めてから60万アクセスに届きました。 年末で切りのいい数字になったかな。これからも好きなことばかりしか書かないとおもいますが、よろしくお願いいたします。始めてから6年ぐらいになるので、結構長く続いたかなと思います。

f:id:ueponx:20201231225935p:plain

そろそろWioTerminal、M5、AIっぽいことにも手を出していきたいのですが…時間がなかなか作れない…。

micro:bitのGitHub版最新開発環境をWSL2-Docker環境で動作させる

前回はWSL2-Docker環境Chromeブラウザの起動まで行ったので、続きの作業としてmicro:bitGitHub版最新開発環境を構築していきます。

参考

uepon.hatenadiary.com

uepon.hatenadiary.com

基本的には参考リンクで事足りるかなと思いますので、簡単めの説明にとどめたいと思います。

micro:bitGitHub最新版を```WSL2-Docker環境で動作させる

基本的には以下の手順となります。

  1. 必要なパッケージなどのインストール
  2. micro:bitGitHub最新開発版のクローン
  3. micro:bit環境の構築と実行

実際には以下を実行していくことになります。Ubuntuコンテナのデフォルトではcurlgitnode.jsなどはインストールされていないので、インストールを行ってから導入していくことになります。最後にGoogle Chromeを起動しておくといいかなと思います。本来の手順としてはブラウザは自動的に起動するのですが、Chromiumブラウザがインストールされていない場合には、別途生成されたリンクをURLとしてオープンする必要があるので、このような手順にしています。

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

# git clone https://github.com/microsoft/pxt-microbit
# cd pxt-microbit/
# npm install -g pxt
# npm install
# google-chrome --no-sandbox &
# pxt serve

最後にあるpxt serveを実行すると実行時ログの中にURLが表示されると思います。これをコピーして事前に開いておいたブラウザに貼り付ければOKです。ブラウザはFirefoxでもいいのかなと思ったのですが、FirebfoxでURLを開いても、エラーが発生するのでChrome系ブラウザにしています。

f:id:ueponx:20201229222818p:plain

拡大 f:id:ueponx:20201231110043p:plain

URLをオープンすると以下の様な、micro:bitのMakeCode環境が表示されます。

f:id:ueponx:20201229222826p:plain

f:id:ueponx:20201229164532p:plain

Docker環境下なのでUSB接続でmicro:bitを認識してくれません。そのため、一度ファイル出力を行ったものをホスト側にもってきて、USBストレージとして書き込む方法を行います。コンテナの構築時にファイル共有のディレクトリを作成していたのはそのためでもあります。

参考(作成時の設定で共有ディレクトリ設定をしています) f:id:ueponx:20201229222832p:plain

普通に拡張などの機能も使ってブロックを組み立てることもできます。

f:id:ueponx:20201231115134p:plain

ダウンロード先の設定をChrome側で行っておくと共有ディレクトリに保存できて便利かなと思います。

おまけ

散々Firefoxではうまく行かなかったといっていたのですが、動作検証のために再度インストールを試してみましたが、問題なく動作してしまいました。 また、pxt serve後にFirefoxインストール後はブラウザが起動するようになりました。状況はわかりませんが、問題はなさそうです。

ブラウザの起動は以前から問題はなかった* f:id:ueponx:20201231115203p:plain

MakeCodeの起動で失敗していたのですが、起動しました f:id:ueponx:20201231115214p:plain

コードの生成もファイルのダウンロードも問題ありません f:id:ueponx:20201231115220p:plain

おわりに

WSL2-Docker環境でもmicro:bit(MakekCode)のGitHub版最新開発環境を動作させることができました。話によるとWindows環境だけでも構築はできるみたいなので、そこまでのことをしなくても良かったのかなとも思いますが、どんな環境になるかわからないのであればDockerで環境を作ってしまうというのも割とありかなと思いました。

WSL2環境で動作するDockerを使用してX Window SystemのGoogle Chromeブラウザを動作させる

前にmicro:bitの最新版をRaspberry Piで動作させましたが、Raspberry Piでは結構動作が遅く、起動までにかなりの時間がかかっていました。

本当はWindows10でも試してみようかなと思ったのですが、割とインストールした開発アプリの状況が汚いWindows10しかなかったこともあり純粋に手順としてメモをしておく意味はないかなと考え、今回はWSL2環境でのDockerをインストールしていることを思い出しました。

参考

uepon.hatenadiary.com

ただ、問題があってmicro:bitGitHub版最新開発環境導入にはGUI環境(ブラウザが立ち上がる必要があります)そのため、Dockerのコンテナ環境だけではなく、X Window SystemのアプリWindows10側でも見えるようにする必要があります。そこで、X Window Systemサーバーの設定も行っていこうと思います。情報では、今後WSL2(Windows Subsystem for Linux 2)Windows上のX Window Systemのサーバと連携するようになるという話もありったりしたので、来年以降でWindowsだけで別のアプリを入れることなく動作させることもできるかなと思っています。

news.mynavi.jp

そんな中、今回はWindows10のWSL2上にインストールを行ったDockerの環境(以後WSL2-Docker環境ということにします)を使用して、まずは環境整備を行ってみます。

次回はこの環境を使用してmicro:bitの最新版を動かしていくことにします。micro:bitの最新版の導入に関しては以前のエントリーとほとんど同じなのでそちらを参考にしてください。こちらではコマンドのみを記載するだけにとどめます。

参考

uepon.hatenadiary.com

続きを読む

Chromebook(ASUS Chromebook Flip C101PA)でArduino IDEを起動させる

実は去年のアドベントカレンダーに書こうと思っていた内容ですが、ようやくうまくいったのでまとめておこうと思います。

Chromebookも最近は嘘みたいにお安くなっているので、Arduino IDEを使って電子工作をするといった要望もあるかなと思います。Visual Studio Codeも正式に動作が確認されたと言うこともありますし、かなり開発サイドの状況もこの一年で変わってきたと言えるでしょう。

今回の内容は、うまく行かなかったことも含めてまとめたものになりますので、実際に成功する方法に関しては末尾に「ArduinoIDEの正しい導入手順」として、まとめておきますので、そちらをご覧ください。

Chromebookでの、Arduino IDEに関しては情報はあまりありません。検索して自分のブログがヒットするのが1番辛いのですが、参考になるページがありますのでそちらの情報をぜひご覧ください。(少し古いですが、この情報がほとんどすべてかもしれません)

参考

https://www.stevencombs.com/arduino/2020/01/20/arduino-on-chromeos.html

続きを読む

【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だとうまくいくのかもしれません。ちょっとやってみてもいいかも?