公式サイトの作例を元にプログラムを作成してみました。気象ステーションから天気情報を取得し、Scratchで視覚的に表現します。使用する環境はRaspberry PiのScratch1.4です
Pythonのプログラムで天気情報を取得し、Scratchからその情報を利用します
ソフトのインストール
LXTerminalから以下のコマンドを入力し、Python3 Scratchをインストールします
sudo pip3 install --pre scratch
Pythonプログラムの取得
interface.pyをダウンロードします。ファイルはカレントディレクトリにダウンロードされます
wget -O interface.py rpf.io/wsd
Scrach 1.4の準備
Scratchを起動し、カテゴリ「調べる」の「(スライダー)センサーの値」を右クリックすると表示される「遠隔センサー接続を有効にする」を選びます
気象予報士をえらぶ
スプライトライブラリーから気象予報士のキャラクターを選びます
ねこは必要ないので削除します
Pythonスクリプトの起動
先ほどダウロードしたPythonスクリプトを実行します。このスクリプトが気象ステーションとのやりとりをするので、LXTerminalは閉じずに起動したままにします
python3 interface.py
気象ステーションからのデータの取得
変数「id」を作成します
気象ステーションのID一覧からIDを選びます(どれでもいいです)
気象ステーションのID一覧
プログラム開始時に変数idに気象ステーションIDをセットします
緑の旗をクリックしてプログラムを実行します。カテゴリ 「調べる」の「(スライダー)センサーの値」の「スライダー」部分のプルダウンメニューをクリックするとセンサーの値が追加されているのが確認できます。いっぱい追加されていますね
気象予報士が気圧を教えてくれるようにスクリプトを作成します
何も起こらない場合は、LXTerminalに戻ってinterfaces.pyの出力を確認してください。「Station data not found. Please choose another ID」になっている場合は、ステーションIDのリストから別のIDを選択してください
センサーの値を利用する
気象予報士が喋る言葉を「〜と〜」ブロックで組み合わせて作成します
風向きを表示する
スプライトライブラリーを開き、Thingsの中にあるClock-handを選びます。Clock-handにあらかじめ設定されているスクリプトは使わないので削除します
スプライトにサイズと方向を設定するスクリプトを追加します
風向きセンサー(wind_direction)の値を取得して、矢印を回転させます
風速(wind_speed)を矢印の大きさで視覚化します
温度計を追加する
温度計を作ります。温度を示す水銀(今の温度計はアルコールらしいですけど)はペンを使って動的に描画します
こちらにサイズの大きな画像があります
大きな温度計の画像
この画像をインポートしてスクリプトを作成し、以下のスクリプトを作成します
最後のブロックでメッセージ「draw」を送ります。drawメッセージを受け取ったスプライトで水銀の描画を行います
水銀を描く
「新しいスプライトを描く」から新規スプライトを作成します。画面中央に白い点を描きます(あとで非表示にするので白じゃなくてもいいです)
この小さな点のスプライトに以下のスクリプトを作成します。ここでペンの初期化を行っています
まず、温度0までの水銀を描画します(※元の作例では0度のY座標が-60でしたが、実際に動かしてみてズレがあったので-70に変更しました。あと白い点のスプライトを非表示にしました)
現在の温度までペンを上に進めます(※元の作例では1メモリのサイズが1.7でしたが、ずれていたので2.02に変更しました)
最後に0度以下場合の処理を追加します(※元の作例では0度に当たる座標が55でしたが、ずれていたので60に変更しました)
世界中の気象ステーションにアクセスする
メッセージ「new-station」を送ることで、ランダムに世界中の気象ステーションに切り替えることができます。メッセージはScratchだけでなくPythonスクリプトにも送られます
ステージのスプライト
10秒ごとにランダムに気象ステーションを切り替えます
メッセージの受信でスクリプトが変更されるように、今までに作成したスプライトを若干修正します
気象予報士のスプライト
矢印のスプライト
温度計のスプライト
これで完成です。10秒ごとにいろんな都市の天候が表示されます
この 作品 は クリエイティブ・コモンズ 表示 – 継承 4.0 国際 ライセンスの下に提供されています。