【Linux OS対応】Scratch3のOneGPIOエクステンションでArduino Unoを動かす


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



自分でScratch3からArduinoを動かそうとするとかなり難しい手順を踏む必要があることが知られています。
しかもWindowsやMacOSと違って、あまり一般的とはいい難いLinuxOSからシリアル通信を介してArduinoを操作しようと思うとそのハードルは更に上がります。
とはいえ方法が無い訳でもありません。

OneGPIO という海外勢が精力的に開発されているエクステンションを使うと、思いの外簡単にLinuxからArduinoに接続できるようです。
今回はPythonとDockerの知識が必要ですが、ロボットプログラミング環境を自前で構築する第一として、このOneGPIOエクステンションを使ってScratch3とArduinoの通信の確立手順を検証してみます。
※この記事はLinux開発者レベルの内容を含みますのでご注意ください。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ

s3-extendをインストール&起動



このスクラッチ3のOneGPIOエクステンションは、
s3-extend というpythonベースのアプリケーションの仲介がなければ動きません。
逆にいうと
s3-extend が正しく動けばどんなデバイスでもScratch3(OneGPIO)から動かすことが出来るようになり、夢が広がります。
公式の手順に沿うと、
①python3.7以上をインストール 、という流れになります。
既に手元の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 としましたが、手元で利用して分かれば適当な名前でOKです。
きちんとイメージがビルドされていれば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のようなハードウェアどうしてシリアル通信できるかというと、
Python Banyan Framework という仕組みがバックグラウンドプロセスでプロトコル変換してくれているからです。
早い話、通信中は
s3-extend を常に起動しておかないといけません。 そのためs3-extendは独立してコマンドから呼び出すように利用します。
ひとまず常駐プロセスにはせずに、
s3-extend をDockerコンテナで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を準備の話に移ります。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ

OneGPIO用のArduinoプログラム



ここからはArduinoにOneGPIO用のプログラムをArduinoIDEを使って書き込んでいく手順を説明します。

公式にも説明がある通りの手順 で進めていきます。
まず、お手もとのパソコンにArduinoIDEがインストールされているのが大前提としまして、
[ツール] > [ライブラリを管理] からライブラリマネージャに移り、 FirmataExpressUltrasonic を検索から探してインストールします。

合同会社タコスキングダム|蛸壺の技術ブログ


ここで適当なArduinoをPCに繋いで、このファームウェアを書き込みします。
Arduinoを接続したら、
[ツール] > [シリアルポート] からデバイス名が表示されますので、これが /dev/ttyACM0 であることを確認します。

合同会社タコスキングダム|蛸壺の技術ブログ


s3-extendはLinux環境の場合、
ttyACM0 デバイスがデフォルトになります。 もしデバイス名を指定したい場合は、 -cオプション で変更します。
そして
[ファイル] > [スケッチ例] > [FirmataExpress] から書き込みイメージ FirmataExpress を選択します。 これをArduino側へ書き込みましょう。

合同会社タコスキングダム|蛸壺の技術ブログ


イメージを書き込んだらArduino側の設定は完了です。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ

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

        

そして
OneGPIO(ブラウザ版) にアクセスします。
一見普通のスクラッチ3ですが、拡張機能が追加されています。
左下の拡張追加のアイコンを押すと、以下の図のような各デバイスの拡張機能一覧が出ますので、ここから
OneGpio Arduino を選択します。

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


これを実行すると、

合同会社タコスキングダム|蛸壺の技術ブログ


ちゃんとチカチカしているみたいです。
ここまでお疲れ様でございました。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】お子様に通わせたいロボットプログラミング教室&教材・学習サービスまとめ

まとめ



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

参考サイト

OneGPIO Scratch 3 ExtensionsGITHUB: MrYsLab/s3onegpioArduinoとScratchをOneGPIOつないで遊ぶ方法(2020年 Mac Catalina対応)