Raspberry Pi Pico? 奈良^h^hならPiper Makeでしょ!!
https://gyazo.com/f9b51aecfd908418bdf30f54ae860867
I'm 610t!!
むとうたけし(武藤武士): 専業主夫(52歳)@奈良
610t
https://gyazo.com/29d993247bf7e8192f05cbc215263a1a
むとうたけし(武藤武士)
専業主夫(52歳)@奈良
所属コミュニティ
アカウント一覧
はじめに
いま、Raspberry Pi Pico(RP2040)が熱い!!
マイコン界隈: 安価で多機能
キーボード界隈: キーボードやマウスが作れる
Raspberry Pi Picoのビジュアルプログラミング環境のPiper Makeを紹介します。 Raspberry Pi Picoって?
https://gyazo.com/03fb6564fdd9e1f1e00e83b347b45864
安い (コストパフォーマンスに優れてる)
Raspberry Pi財団(UK)設計のRP2040マイコン搭載
デュアルコア ARM Cortex M0+プロセッサ、最大動作周波数 133 MHz
Arduinoでは、setup1()とloop1()とかで別コアで動く!!
SRAM:264KB、フラッシュメモリ:2MB
端面スルーホールを備えているため直接キャリアボードへのはんだづけが可能
USB 1.1 ホスト/デバイス両対応
簡単にキーボードやマウスが作れる!!
低消費電力スリープモードおよびドーマントモードが利用可能
USBを介しマスストレージを使ったドラッグアンドドロップによるプログラムの書き込みが可能
豊富なI/O
26 x 多機能GPIOピン
2 x SPI、2 x I2C、2 x UART、3 x 12 bit ADC、16 x PWMチャンネル
8 x プログラマブルI/O(PIO)
温度センサ搭載
正確なクロックとタイマーを搭載
高速な浮動小数点ライブラリを搭載
面白そうなRP2040搭載ボード
GroveからモータードライバからLEDからスイッチから全部入りでこのお値段!!
https://gyazo.com/953ef810544213b22d73766007c38731
とにかく小さい
https://gyazo.com/95ccb521a52ee21b433d790597a038cd
有線LANあり(W5100S): Arduinoで実績多し
https://d2air1d4eqhwg2.cloudfront.net/images/7556/500x500/7546fb24-245a-4907-8a49-32908daec2b8.jpg
無線LAN(IEEE 802.11n)が使える!!
https://cdn.shopify.com/s/files/1/0514/0719/2262/products/b836bb04-71dc-40f0-beb6-626feba244e7_099cf3e3-4bc4-41db-a500-904a76ee85fe_634x634.jpg?v=1671441299
RP2040開発環境
Python
Arduino, C, C++
Piper Makeって?
https://gyazo.com/26c610edcf6a830702235736987c2b50
Raspberry Pi Pico(RP2040)用のブロックプログラミング環境。
Blocklyを利用。
実はCircuitPython。
教育用途らしい。
チュートリアルがたくさん。
キーボードやマウスを実現することも可能!!
コードを保存するとPNGになるが、importすると普通にコードに戻る。
ファイル末尾にXMLでコードを埋め込み。
https://gyazo.com/0f69f1f60b9417780aaff116e5180d19
PNGファイル末尾を抜き出し整形したもの
code:PipeMake_code.xml
<xml xmlns="htps://developers.google.com/blockly/xml">
<variables>
<variable id="q9hy8eIz($R+#w1xCk^C">random</variable>
</variables>
<block type="on_start" id="+.++P{~HV6L1e./FJ~Ft" x="0" y="0">
<next>
<block type="repeat_forever" id="Yj(lGEnM5:L}GaMRy6ac">
(snip)
<block type="math_number" id="`~K;4.qLn_UAj~FDjz8b">
<field name="NUM">0.2</field>
</block>
</value>
</block>
</next>
</block>
<project details="{"name":"my_Random for graph","description":""}">
</project>
</xml>
ファイル末尾の16進ダンプ
code:PiperMake_code.png
(snip)
00011320 44 65 3C 78 6D 6C 20 78 6D 6C 6E 73 3D 22 68 74 De<xml xmlns="ht
00011330 74 70 73 3A 2F 2F 64 65 76 65 6C 6F 70 65 72 73 tps://developers
00011340 2E 67 6F 6F 67 6C 65 2E 63 6F 6D 2F 62 6C 6F 63 .google.com/bloc
00011350 6B 6C 79 2F 78 6D 6C 22 3E 3C 76 61 72 69 61 62 kly/xml"><variab
00011360 6C 65 73 3E 3C 76 61 72 69 61 62 6C 65 20 69 64 les><variable id
00011370 3D 22 71 39 68 79 38 65 49 7A 28 24 52 2B 23 77 ="q9hy8eIz($R+#w
00011380 31 78 43 6B 5E 43 22 3E 72 61 6E 64 6F 6D 3C 2F 1xCk^C">random</
00011390 76 61 72 69 61 62 6C 65 3E 3C 2F 76 61 72 69 61 variable></varia
000113A0 62 6C 65 73 3E 3C 62 6C 6F 63 6B 20 74 79 70 65 bles><block type
000113B0 3D 22 6F 6E 5F 73 74 61 72 74 22 20 69 64 3D 22 ="on_start" id="
000113C0 2B 2E 2B 2B 50 7B 7E 48 56 36 4C 31 65 2E 2F 46 +.++P{~HV6L1e./F
000113D0 4A 7E 46 74 22 20 78 3D 22 30 22 20 79 3D 22 30 J~Ft" x="0" y="0
000113E0 22 3E 3C 6E 65 78 74 3E 3C 62 6C 6F 63 6B 20 74 "><next><block t
000113F0 79 70 65 3D 22 72 65 70 65 61 74 5F 66 6F 72 65 ype="repeat_fore
00011400 76 65 72 22 20 69 64 3D 22 59 6A 28 6C 47 45 6E ver" id="Yj(lGEn
00011410 4D 35 3A 4C 7D 47 61 4D 52 79 36 61 63 22 3E 3C M5:L}GaMRy6ac"><
(snip)
00011860 59 22 3E 3C 62 6C 6F 63 6B 20 74 79 70 65 3D 22 Y"><block type="
00011870 6D 61 74 68 5F 6E 75 6D 62 65 72 22 20 69 64 3D math_number" id=
00011880 22 60 7E 4B 3B 34 2E 71 4C 6E 5F 55 41 6A 7E 46 "`~K;4.qLn_UAj~F
00011890 44 6A 7A 38 62 22 3E 3C 66 69 65 6C 64 20 6E 61 Djz8b"><field na
000118A0 6D 65 3D 22 4E 55 4D 22 3E 30 2E 32 3C 2F 66 69 me="NUM">0.2</fi
000118B0 65 6C 64 3E 3C 2F 62 6C 6F 63 6B 3E 3C 2F 76 61 eld></block></va
000118C0 6C 75 65 3E 3C 2F 62 6C 6F 63 6B 3E 3C 2F 6E 65 lue></block></ne
000118D0 78 74 3E 3C 2F 62 6C 6F 63 6B 3E 3C 70 72 6F 6A xt></block><proj
000118E0 65 63 74 20 64 65 74 61 69 6C 73 3D 22 7B 26 71 ect details="{&q
000118F0 75 6F 74 3B 6E 61 6D 65 26 71 75 6F 74 3B 3A 26 uot;name":&
00011900 71 75 6F 74 3B 6D 79 5F 52 61 6E 64 6F 6D 20 66 quot;my_Random f
00011910 6F 72 20 67 72 61 70 68 26 71 75 6F 74 3B 2C 26 or graph",&
00011920 71 75 6F 74 3B 64 65 73 63 72 69 70 74 69 6F 6E quot;description
00011930 26 71 75 6F 74 3B 3A 26 71 75 6F 74 3B 26 71 75 ":"&qu
00011940 6F 74 3B 7D 22 3E 3C 2F 70 72 6F 6A 65 63 74 3E ot;}"></project>
00011950 3C 2F 78 6D 6C 3E 31 87 1D 15 00 00 00 00 49 45 </xml>1.......IE
00011960 4E 44 AE 42 60 82 ND.B`.
Piper Makeコクピット
https://gyazo.com/beacd7e9fa6cac1107732c3051581018
Piper Makeコクピットは上図のとおり。
Pico初期設定: ファームウエアを書き込む
モード設定: プログラムモードとチュートリアルモードを切り替え
プログラムモードにすると、自由にプログラムを作ることが可能
ミッション: チュートリアルを実行
ミッション種別選択: ミッションカテゴリを切り替え
ミッション一覧: そのカテゴリでのミッション一覧
とてもページの癖がつよい!!
同じURL()でチュートリアルとコーディング用になっていて、デフォルトはチュートリアルorz 右下レバーのCREATIVE MODE(図のプログラムモード)を選ぶとコーディング用モードに。
おまけ:チュートリアル一覧
https://gyazo.com/062570343e6362980e98c3292ecf5299
懇切丁寧な英語チュートリアル。
Pip(ネズミ)とPiperbot(ロボット)の掛け合い。
火星(Mars)の冒険物語。
大量にある。
Minecraft的なキャラクターによるビデオがあるものも。
タイトルと内容: ()内は、新たに習う概念とセンサーの情報
STARTER(教材): LED、ボタンスイッチ、コンソールを使ったプログラミング GETTING STARTED: PiperMakeの操作の仕方、GPIO、スイッチの基本原理 (loop)
BLINK: Lチカ
TRAFFIC LIGHT: スイッチ付きLED信号機
REACTION GAME: 2つのボタンで早押しゲーム (function, if)
SILLY STORIES: ストーリー作成ゲーム (variable)
TALLY: 連打ゲーム (sound)
GUESS MY NUMBER: 数当てゲーム
BOUNCY NUMBERS: コラッツの問題 (graph)
SPEAK LIKE MACHINE: 2進数16進数変換 (list)
ROBOTICS(教材1, 教材2): サーボや超音波センサーを使った作品例 SECURITY ZONE: 超音波センサーによる警報装置 (if, sound)
音はPicoに接続したPCから出る
ULTRASONIC DRUM: 超音波ドラム (map)
RESISTOR PIANO: 分圧抵抗を用いたピアノ (list)
WALKER RACE: 4足歩行ロボット (servo)
WALKER DANCE: 4足ダンス
WALKER DETECT: 4足障害物前停止ゲーム
RUNAWAY ROVER: 車の基本動作 (360度サーボ)
ROVER SENSOR STEERING: 超音波センサー回避付き車
GAMING(教材): ゲームコントローラーを作ってなにかをする LIGHTHOUSE: コントローラーでLEDを点灯したり音を出したり (controller)
FROG FRENZY: コンソールでの餌食べゲーム
GAME CONTROLLER: USBキーボードとマウスを使ったコントローラ作成 (keyboard, mouse)
GAMES: ゲームコントローラでできるゲーム(普通のキーボードやマウスでも遊べます)
SNAKE: 蛇の餌食べゲーム
HEXTRIS: 六角形版テトリス風ゲーム
RETRO RACER: カーレースゲーム
BREAKOUT: ブロック崩し
SKI SLOPE: スキースラローム(Scratchで作成)
TOWER CLIMB: 塔登りゲーム
HYPERSPACE GC: 宇宙冒険ゲーム(?)
MINECRAFT CONTROLLER: Minecraft Education Edition用コントローラプログラム
SENSORS(教材): センサー入力に関するもの SECURITY ZONE: ROBOTICSのSECURITY ZONEと同じもの
ULTRASONIC DRUM: ROBOTICSのULTRASONIC DRUMと同じもの
RESISTOR PIANO: ROBOTICSのRESISTOR PIANOと同じもの
THER-MOOD-STAT: 絵文字温度計 (温度センサー, shout)
COLOR CODED: 色判定器 (カラーセンサー, compare)
BEAM BREAK: 車速測定 (beam breakセンサー)
CAR RACE: 2台のカーレースゲーム
MOTION BALL: 動きに応じて3色のLEDを点灯 (動きセンサー)
SOLAR HOUSE: 太陽電池の家 (太陽光電池)
SOIL SENSOR: 水やり警報システム (自作土壌センサー, bar graph)
AIR GUITAR: アルミホイルのエアギター (feedback, smoothing)
プログラミング画面
実際にやってみて説明します。
https://gyazo.com/26c610edcf6a830702235736987c2b50
Piper Makeのプログラミング画面は、以下のような要素からできている。
Pico接続ボタン: Picoに接続
実行ボタン: コードを実行
ブロックメニュー:ブロックに関連するメニュー
https://gyazo.com/d70f51da236367a84f4c48ee4ca498f7
DIGITAL VIEW: Picoの状態を表示
入出力に応じて、ピンの状態表示が変化
https://gyazo.com/0dac23c495203720869b0beb5ef9132e
CONSOLE: Picoからprintした結果の出力やaskによる入力を表示
https://gyazo.com/e8dcfcee85429a3c2c6b026dda32d885
DATA: graphブロックの結果を表示
https://gyazo.com/e2eddb9d3c43a0807f8f26abfbc1e3b3
PYTHON: ブロックコードに対応するPythonプログラムを表示
これをcode.pyなどで保存すると、コードの永続化が可能。
https://gyazo.com/7e3076ffe4b9707e007a3299acb2c23e
Piper Make I/O
I/Oに関しては、以下のブロックなどが利用可能。
Chipカテゴリ
Input
ask: コンソールからの入力
read voltage...:ピンからのアナログ入力
<is pin <GPIO?> ...: ピンの状態確認
chip clock: 内蔵クロック値
Output
print: コンソールへの出力
shout: 画面にポップアップで文字表示
turn pin <GPIO?> <on/off>: ピン<?>へのGPIO出力
Actionsカテゴリ: Output
KeyboardとかMouseをテストで使うときは、delay長く取ったほうが良い。
操作できなくなってハマる。
https://gyazo.com/71375026756b7b4fd4e36f587a466248
Sensingカテゴリ: Input
https://gyazo.com/eadd873855740e71318537edcc3a5544
Sounds: 音のOutput
https://gyazo.com/e47a4e55bb3332fe620f05f4e7691b7c
デモ
Intro(既に終了)
DIGITAL VIEW: Blink LED: 内蔵LEDでLチカ
CONSOLE: print&ask:文字の入出力
DATA: Random for graph:ランダムな数値でグラフ作成
PYTHON: CircuitPythonコードの確認
Mouse & Keyboard: マウスとキーボードを使う例(スクリーンセーバーセーバー)
Piper Make IoT風味!?
https://gyazo.com/3a48cf81960c2bfd01d01a9114b7b5f4
画面を固定位置のレイアウトにできれば、マウスとキーボードが使えるだけで出力はできる。
LINEに温度、アナログ入力、超音波距離センサーの出力を投げてみる例。
おまけ:ちょっとだけPiperMake実装の話
DIGITAL VIEWのピン状態表示やshout、サウンド、コンソールのカーソル移動などの機能は、piper_blockly.pyでprintのエスケープコードとして実装。 table:escape_code
機能 エスケープコード(<>内は実際の値を入れる)
コンソールクリア chr(16)
コンソールカーソル移動 chr(17)P<x>,<y>chr(17)
DIGITAL VIEW用 chr(17)GPIO<num>|<pin state>chr(16)
サウンド用 chr(19)<sound name>chr(19)
shout用 chr(18)<color>|<text>chr(18)
えもじ用 chr(20) - chr(29)
グラフ数値用 chr(17)G<value>,<value>...chr(17)
グラフ色用 chr(17)C<color>chr(17)
piper_blockly.pyをCIRCUITPYディスクのトップに置くと、そちらが優先的に使われるので改造可能。
おまけ:Raspberry Pi Pico for BSD Lovers
BSDでも使いたいという素っ頓狂な人は…
おわりに
Raspberry Pi Picoでも、Piper Makeでビジュアルプログラミングできます!!
キーボードやマウスも作れます!!
なんちゃってIoTもできる!?
当日の情報へのリンク
https://www.youtube.com/watch?v=GmZjy_2rzBc&t=2760s