Skip to content

v0.2.2

Choose a tag to compare

@tarosay tarosay released this 10 Aug 18:15

シリアル通信ができるようになりました。 GPS や各種センサーなど、
シリアルで喋る機器を Scratch から読み書きできます。

使い方 中身
Xcratch 版 下の URL を「拡張機能を追加 → Extension Loader」に入れる インストール不要。Chrome か Edge が要る
デスクトップ版 同梱のインストーラを入れる Scratch Desktop に組み込んだもの
https://tarosay.github.io/scratch3-uiapduino/uiapduino.mjs

⚠ 基板の書き込み直しが必要です

同梱の Scratch-UIAPduino-3.29.1-sketch.zip を書き込んでください(プロトコル 6 → 7)。

v0.2.1 のままの基板は繋がりません。 Xcratch 版は URL が同じなので、
これまでの作品を開いても新しい版が読み込まれます。書き込み直すまでは、
ブロックの場所に理由が出ます。

⚠ 基板のスケッチが合わないので つながりません
新しいスケッチの(ScratchUiapduino.ino)を書き込んでください。
新しいプロトコルバージョン: 7
https://github.com/tarosay/scratch3-uiapduino/releases/latest

書き込み直して繋がると、ブロックが元に戻ります。

同梱物

ファイル 内容
Scratch-UIAPduino-3.29.1-Setup.exe インストーラ
Scratch-UIAPduino-3.29.1-portable.zip インストール不要版
Scratch-UIAPduino-3.29.1-sketch.zip UIAPduino に書き込むスケッチ

アプリとスケッチは必ずこのリリースの組み合わせで使ってください。
Xcratch 版を使う場合も、sketch.zip はここから取ってください。

UIAPduino に書き込む

1. Arduino IDE にボードを入れる(初回だけ)

ファイル → 環境設定 → 追加のボードマネージャのURL に次を追加します。

https://github.com/tarosay/board_manager_files/raw/main/package_uiap_hid_index.json

「ボードマネージャ」で UIAPduino を検索してインストールし、
ツール → ボード → UIAP_HID → HID ProMicro CH32V003 を選びます。

すでに入れている方も、ボードマネージャで更新してください。
今回のスケッチは 1.2.10 で確認しています。

基板はお店やネットショップで購入してください。
配布しているのは Arduino IDE の Core(ボード定義)で、基板そのものではありません。

2. 基板を書き込みモードにする

基板のボタンを押しながら USB ケーブルを接続し、すぐにボタンを離します。

3. 書き込む

Scratch-UIAPduino-3.29.1-sketch.zip を解凍し、ScratchUiapduino.ino
Arduino IDE で開いて「書き込み」を実行します。Tools の設定は同梱の
sketch.yaml に入っているので、Arduino IDE 2.x なら自動で選ばれます。

書き込み器(WCH-LinkE など)は要りません。 USB ケーブル 1 本で書けます。

v0.2.1 からの変更

シリアル通信のブロック(新規)

シリアル通信 ボーレート [9600▼] で開始する

シリアル通信 1行書き出す [Hello]
シリアル通信 数値を文字で書き出す [0]
シリアル通信 名前と数値を書き出す [x] = [0]
シリアル通信 文字列を書き出す [Hello]
シリアル通信 複数の数値をカンマくぎりで書き出す [リスト▼]

シリアル通信 1行読み取る
シリアル通信 つぎのいずれかの文字の手前まで読み取る [改行コード▼]
シリアル通信 文字列を読み取る

シリアル通信 つぎのいずれかの文字を受信したとき [改行コード▼]
シリアル通信 [改行コード▼] を受信した

最初に「ボーレートで開始する」を実行してください。 これを置かないと、
読み取りのブロックは何も返しません。

つぎのいずれかの文字を受信したときハットブロックです。受信を待つ間、
USB の通信は発生しません。基板から届いた時点で動き出します。

1行読み取る文字列を読み取る は、チェックを入れるとステージに表示できます。
表示しているだけでは中身は消えません。 ブロックで読んだときだけ取り出されます。

⚠ シリアルを開くと 4 つのピン名が使えなくなります

Tx と Rx は D15 / D16 に固定です。この 2 本は A5 / A6 と同じ物理ピンなので、
ボーレートで開始する を実行した後は、次の 4 つがピン操作のブロックから外れます。

送信 (Tx) D15 = A5
受信 (Rx) D16 = A6

シリアル通信を使わない作品では、4 つともこれまでどおり使えます。

配線は 基板の D15 → 相手の RX / 基板の D16 → 相手の TX / GND → GND です。
UIAPduino は 5V 駆動なので、5V の機器はそのまま繋がります。

⚠ 速度の上限を先に知っておいてください

USB-HID を通すため、シリアルの速度がそのまま出るわけではありません。

実測
キーボードとして打ち込む速さ 25 文字/秒
Scratch へ読み出す速さ 330 バイト/秒

たとえば GPS を 9600 baud で繋いで、受け取った文をキーボードでエディタに
打たせる場合、2 文を打つ間に次の 7 秒ぶんを取りこぼします。
連続で全部を記録する用途には足りません。必要な文だけを選ぶ、
間引く、といった作り方をしてください。

⚠ 記号は日本語キーボードの PC だと変わることがあります

受け取った文字をキーボードのブロックで打たせる場合の話です。基板は US 配列の
キーコードを送るので、日本語配列の PC では一部の記号が別の文字になります。
たとえば *( になります。

英数字・カンマ・ピリオド・ハイフンは変わりません。 数値や座標はそのまま打てます。
これは PC 側のキーボード配列で決まるため、基板では直せません。
記号を正確に残したい場合は、キーボードで打つのではなく Scratch のリストに
入れてください。

ボードの固定先を 1.2.10 にしました

sketch.yaml が指定するボードパッケージの版を 1.2.9 から 1.2.10 に上げました。
基板に焼かれる中身は変わりません(両方でビルドして .hex がバイト単位で
一致することを確認しています)。

制限

  • Windows のみです。macOS / Linux 版はありません
  • Xcratch 版は Chrome か Edge が要ります。 Firefox と Safari には WebHID がありません
  • シリアルの Tx / Rx は D15 / D16 の固定で、変更できません
  • シリアルを開くと A5 / A6 のアナログ入力も使えなくなります(同じ物理ピンのため)
  • 受信バッファは 256 バイトです。あふれた分は捨てられます
  • Xcratch 版では、押しっぱなしのまま USB を抜いたときの後始末ができません。
    ページから OS の状態は戻せないためです(実機では問題になりませんでした)
  • USB を抜いても自動では再接続しません。挿し直したら「!」をクリックするか、
    「つなぐ」ブロックをもう一度実行してください

動作確認環境

Windows 11 / Node.js v16.20.0 / Electron 15.3.1 / Chrome・Edge(Xcratch 版)

ボードパッケージ UIAP_HID:ch32v 1.2.10
スケッチの Flash 使用量は 11148 / 16384 バイト (68%)、RAM は 532 / 2048 (25%) です。

インストーラは 32bit ですが 64bit Windows でも動作します。

ライセンス

このリポジトリの成果物は BSD-3-Clause です。
ビルド成果物には上流 Scratch (Massachusetts Institute of Technology / Scratch Foundation) の
コードが含まれます。詳細は README を参照してください。