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


※ 当ページには【広告/PR】を含む場合があります。
2021/06/15
合同会社タコスキングダム|TacosKingdom,LLC.

自分でScratch3からArduinoを動かそうとするとかなり難しい手順を踏む必要があることが知られています。

しかもWindowsやMacOSと違って、あまり一般的とはいい難いLinuxOSからシリアル通信を介してArduinoを操作しようと思うとそのハードルは更に上がります。

とはいえ方法が無い訳でもありません。

OneGPIOという海外勢が精力的に開発されているエクステンションを使うと、思いの外簡単にLinuxからArduinoに接続できるようです。

今回はPythonとDockerの知識が必要ですが、ロボットプログラミング環境を自前で構築する第一として、このOneGPIOエクステンションを使ってScratch3とArduinoの通信の確立手順を検証してみます。

※この記事はLinux開発者レベルの内容を含みますのでご注意ください。


Arduino Uno Rev3

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

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

このスクラッチ3のOneGPIOエクステンションは、s3-extendというpythonベースのアプリケーションの仲介がなければ動きません。

逆にいうと
s3-extendが正しく動けばどんなデバイスでもScratch3(OneGPIO)から動かすことが出来るようになり、夢が広がります。

公式の手順に沿うと、
①python3.7以上をインストールして、②pip3もインストールし、③pip3から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としましたが、手元で利用して分かれば適当な名前で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の役割になります。

合同会社タコスキングダム|タコキンのPスクール

話は少し逸れますが、ブラウザベースのスクラッチ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を準備の話に移ります。


Arduino Uno Rev3

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

OneGPIO用のArduinoプログラム

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

公式にも説明がある通りの手順で進めていきます。

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

合同会社タコスキングダム|タコキンのPスクール

ここで適当なArduinoをPCに繋いで、このファームウェアを書き込みします。

Arduinoを接続したら、
[ツール] > [シリアルポート]からデバイス名が表示されますので、これが/dev/ttyACM0であることを確認します。

合同会社タコスキングダム|タコキンのPスクール

s3-extendはLinux環境の場合、
ttyACM0デバイスがデフォルトになります。もしデバイス名を指定したい場合は、-cオプションで変更します。

そして
[ファイル] > [スケッチ例] > [FirmataExpress]から書き込みイメージFirmataExpressを選択します。これをArduino側へ書き込みましょう。

合同会社タコスキングダム|タコキンのPスクール

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


Arduino Uno Rev3

合同会社タコスキングダム|タコキンのPスクール【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を選択します。

合同会社タコスキングダム|タコキンのPスクール

選択するとブロックエリアにArduino用の拡張機能が追加されていることが分かります。

ビルドインLED(デジタルピン13)をとりあえずオンオフしてみます。

合同会社タコスキングダム|タコキンのPスクール

どうやら制御できているようです。

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

合同会社タコスキングダム|タコキンのPスクール

これを実行すると、

合同会社タコスキングダム|タコキンのPスクール

ちゃんとチカチカしているみたいです。

ここまでお疲れ様でございました。


Arduino Uno Rev3

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

まとめ

今回は、Arduino Unoで出来るスクラッチ3によるハードウェアプログラミングの基礎講座第一弾として、OneGPIOの使い方を説明していきました。

これで今後は何か具体的な教育向けのロボットなどをArduinoベースで自作して、このブログで少しづつ紹介していこうと思います。

なお、OneGPIO用のFirmataExpressはArduino Unoを念頭に設計されているので、他のArduinoモデルでは動かないと思われます。試したい場合には強くArduino Unoの利用をおすすめします。

参考サイト

OneGPIO Scratch 3 Extensions

GITHUB: MrYsLab/s3onegpio

ArduinoとScratchをOneGPIOつないで遊ぶ方法(2020年 Mac Catalina対応)