あわてないあわてない 食休み食休み
はじめに
- ラズパイの環境設定ばかりしていて精神がやられたので、間違えて買ってしまったpicoをここを参考に触ることとした
- はぁ、落ち着いた
- 同じように、ラズパイpicoをラズパイ一味と間違えて買ってしまった人の参考になれば良いな
picoについて
- cpuはrp2040
- 動かすpythonはmicroPython。arduinoがc++を若干いじって使ってるのと違う概念の存在で、rp2040で稼働し、対話型プロンプト(REPL)が可能なpythonのこと。昔、haskellをREPLでいじって遊んでたことを思い出した。
- pico専用のsdkも用意されている
- arduinoIDEみたいのとして、thonnyがあるけど、政治主張をしているのがちょっとなあ、と思ったら個人開発者だった。なら、むしろ政治主張するのも当然だね。使わせて貰ってありがとう。
動かしかた
- 参考HPを読めば、Lチカまで一通り動かせると思うけど、自分の場合は、pimoroniのexplorerbaseも買ってしまったので、これを動かせるように若干異なる手順を踏んでいる。
- 「bootsel」ボタンを押しながら、macにusb-cケーブルで刺すのは参考HPと同じだけど、picoの中に入れるファームウェア(uf2ファイル)は公式からではなく、pimoroniの「pimoroni-pico-v1.21.0-micropython」を使った。
公式
pimoroni
- picoの中にuf2ファイルを入れると、勝手にpicoが再起動して、macに接続してきた。下記がuf2を入れた後に認識されたpico。
- 後は、tonnyをインストールして、設定画面で、インタプリタとして、picoを選ぶ。
- 設定画面で、インタプリタをMicroPython(Raspberry Pi Pico)を選ぶ。これにより、Thonnyのpythonコードを実行するのはpicoとなる。その代わり当然だけど、picoを繋いでないと、何も出来ず「print(1+3)」すら計算してくれない。
- インタプリタをmacos内のpythonにしておけば、当然、計算が実行される。上の枠内にプログラムを書いて、右上の実行を押すと、下枠内のシェルで結果が返される。なお、インタプリタの変更については、設定画面を開かずとも、エディタ画面のシェル下側にある赤線部分「ローカルpython3」のところをクリックして可能。
実行結果
- thonnyのインタプリタをpicoに戻して、pimoroniのgithubページから、下記のお試しプログラムballs_demoをthonnyコピペして実行したら、ecplorer base上の液晶画面でballが動いた。
import time
import random
from picographics import PicoGraphics, DISPLAY_PICO_EXPLORER, PEN_P8
display = PicoGraphics(display=DISPLAY_PICO_EXPLORER, pen_type=PEN_P8)
WIDTH, HEIGHT = display.get_bounds()
# We're creating 100 balls with their own individual colour and 1 BG colour
# for a total of 101 colours, which will all fit in the custom 256 entry palette!
class Ball:
def __init__(self, x, y, r, dx, dy, pen):
self.x = x
self.y = y
self.r = r
self.dx = dx
self.dy = dy
self.pen = pen
# initialise shapes
balls = []
for i in range(0, 100):
r = random.randint(0, 10) + 3
balls.append(
Ball(
random.randint(r, r + (WIDTH - 2 * r)),
random.randint(r, r + (HEIGHT - 2 * r)),
r,
(14 - r) / 2,
(14 - r) / 2,
display.create_pen(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
)
)
BG = display.create_pen(40, 40, 40)
while True:
display.set_pen(BG)
display.clear()
for ball in balls:
ball.x += ball.dx
ball.y += ball.dy
xmax = WIDTH - ball.r
xmin = ball.r
ymax = HEIGHT - ball.r
ymin = ball.r
if ball.x < xmin or ball.x > xmax:
ball.dx *= -1
if ball.y < ymin or ball.y > ymax:
ball.dy *= -1
display.set_pen(ball.pen)
display.circle(int(ball.x), int(ball.y), int(ball.r))
display.update()
time.sleep(0.01)
- 特にthonnyに対して、重要そうなライブラリらしきPicoGraphicsを取り込ませる作業をしてないのに、上記のコードをthonnyに読ませて動作したのは、picoに入ってるuf2ファイルに、既にライブラリがとりこまれているから。
- なるほど、picoの流儀はそうなのね。
- なお、thonnyのストップボタンをしたら、液晶画面上のボールの動きは止まったものの、ボール自体は表示されたままだった。再度、実行ボタンを押したら、一回画面が消えて新たに動くボールが表示された。
最後に
- とりあえず、土曜日のストレスが多少は解消されて良かったよ。
- picoって良い子だなぁ