【Linux OS対応】Scratch3のOneGPIOエクステンションでArduino Unoを動かす
※ 当ページには【広告/PR】を含む場合があります。
2021/06/15

自分でScratch3からArduinoを動かそうとするとかなり難しい手順を踏む必要があることが知られています。
しかもWindowsやMacOSと違って、あまり一般的とはいい難いLinuxOSからシリアル通信を介してArduinoを操作しようと思うとそのハードルは更に上がります。
とはいえ方法が無い訳でもありません。
今回はPythonとDockerの知識が必要ですが、ロボットプログラミング環境を自前で構築する第一として、このOneGPIOエクステンションを使ってScratch3とArduinoの通信の確立手順を検証してみます。
※この記事はLinux開発者レベルの内容を含みますのでご注意ください。
s3-extendをインストール&起動
このスクラッチ3のOneGPIOエクステンションは、
逆にいうと
s3-extend
公式の手順に沿うと、
既に手元のPCにPython3が入っている方がいるなら、公式サイトの手順のままs3-extendをインストールするほうが楽でしょう。
著者的にはLinuxOSに限らず、手持ちのパソコンには必ずDockerをインストールして利用していますので、Dockerを使ったs3-extendの導入方法で解説します。
s3-extendをインストール
まず適当なフォルダに以下の内容で
Dockerfile
FROM python:3.9.5-slim
RUN pip3 install s3-extend
CMD ["s3a"]
で、このフォルダでターミナルを開きまして、このDockerfileからDockerイメージをビルドします。
$ docker build -t banyan-dckr:3.9.5-slim .
とりあえずイメージ名は
banyan-dckr:3.9.5-slim
きちんとイメージがビルドされていればs3-exrtendのインストールは成功です。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
banyan-dckr 3.9.5-slim deacb04a1b14 5 hours ago 213MB
python 3.9.5-slim 609da079b03a 2 weeks ago 115MB
pythonをインストールしてパソコンの環境を汚したくない方にオススメのやり方です。
s3-extendの実行方法
以下の図のようにScratch3とArduinoの通信のやり取りを仲介してくれるのがs3-extendの役割になります。

話は少し逸れますが、ブラウザベースのスクラッチ3とArduinoのようなハードウェアどうしてシリアル通信できるかというと、
早い話、通信中は
s3-extend
ひとまず常駐プロセスにはせずに、
s3-extend
$ docker run --rm -it \
--device=/dev/ttyACM0 \
-p 43124:43124 \
-p 43125:43125 \
-p 9000:9000 \
--name bnyn \
banyan-dckr:3.9.5-slim
#👇レスポンス
docker: Error response from daemon: error gathering device information while adding custom device "/dev/ttyACM0": no such file or directory.
当然ながらまだArduinoをパソコンにUSB接続していないのでまだエラーが出てしまいます。
ちなみにDockerでs3-extnedを利用せず直接Linux側にインストールした場合には、
$ s3a
とした場合と同じです。
では次の節以降でArduinoを準備の話に移ります。
OneGPIO用のArduinoプログラム
ここからはArduinoにOneGPIO用のプログラムをArduinoIDEを使って書き込んでいく手順を説明します。
まず、お手もとのパソコンにArduinoIDEがインストールされているのが大前提としまして、
[ツール] > [ライブラリを管理]
FirmataExpress
Ultrasonic

ここで適当なArduinoをPCに繋いで、このファームウェアを書き込みします。
Arduinoを接続したら、
[ツール] > [シリアルポート]
/dev/ttyACM0

s3-extendはLinux環境の場合、
ttyACM0
そして
[ファイル] > [スケッチ例] > [FirmataExpress]
FirmataExpress

イメージを書き込んだらArduino側の設定は完了です。
OneGPIOでArduinoを動かす!
ここまででようやくScratch3とArduinoの通信が可能となります。
実際に通信できているか、ArduinoのビルドインLED(13ピン)を使ってチカチカさせてみます。
ArduinoとパソコンをUSBで接続しているか確認し、s3-extendを起動します。
$ docker run --rm -it \
> --device=/dev/ttyACM0 \
> -p 43124:43124 \
> -p 43125:43125 \
> -p 9000:9000 \
> --name bnyn \
> banyan-dckr:3.9.5-slim
#👇サーバー起動中
backplane started
Websocket Gateway started
Arduino Gateway started.
Please wait 0 seconds for Arduino to initialize...
Arduino is initialized.
To exit this program, press Control-c
そして
一見普通のスクラッチ3ですが、拡張機能が追加されています。
左下の拡張追加のアイコンを押すと、以下の図のような各デバイスの拡張機能一覧が出ますので、ここから
OneGpio Arduino

選択するとブロックエリアにArduino用の拡張機能が追加されていることが分かります。
ビルドインLED(デジタルピン13)をとりあえずオンオフしてみます。

どうやら制御できているようです。
ではOneGPIO版Lチカもやってみましょう。 以下のようにブロックプログラムを作成します。

これを実行すると、

ちゃんとチカチカしているみたいです。
ここまでお疲れ様でございました。
まとめ
今回は、Arduino Unoで出来るスクラッチ3によるハードウェアプログラミングの基礎講座第一弾として、OneGPIOの使い方を説明していきました。
これで今後は何か具体的な教育向けのロボットなどをArduinoベースで自作して、このブログで少しづつ紹介していこうと思います。
なお、OneGPIO用のFirmataExpressはArduino Unoを念頭に設計されているので、他のArduinoモデルでは動かないと思われます。 試したい場合には強くArduino Unoの利用をおすすめします。