あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

RP2040とCircuitPythonでマクロキーボード(ボードではない)を雑につくる

CircuitPythonだとRaspberry Pi PicoをHIDデバイスに見せてキーボードやらマウス的に動かすことが可能です。が、リリースされてすぐあたりにCircuitPythonのベータを入れたらなんか動きが怪しくて心折れて放置していました。今日久々に試したら正式版になっていて、PicoでもPimoroni Tiny2040でもちゃんと使えたので、こう言うのを作ってみました。

www.youtube.com

Pimoroni Tiny2040も動かせました。こちらはRGB LEDなので動作中のLEDの色を変える機能付き。

www.youtube.com

イクラの焼石製造機で石を掘ってもらうだけのマクロキーです。GP2がショートしている間、左右に動きながら石を彫り続けるだけのものです。そんだけのためにPicoを……500円だからいっか!w

f:id:Akkiesoft:20210523230658j:plain

コードはこんなかんじです。code.pyとしてCircuitPythonに突っ込めば動きます。

CircuitPythonで書かれた、マイクラでマウスの左を押しながら反復移動することを意図したやつ。石製造機で石を掘るとかいう感じで使える。Raspberry Pi PicoとTiny2040向け。 · GitHub

じゃないや、Adafruit_CircuitPython_HIDリポジトリにあるadafruit_hidディレクトリをlibディレクトリに入れるのも必要です。お忘れなく。

github.com

通常の自作キーボードでこう言うのをしようとするとArduinoで書く感じになりますけど、こちらはPython的にできるので気軽っぽい感じがしますね。

ところで、焼石製造機はておくらでFei3939が作ったものをベースにしたものなんですが、ベースにした方でははちみつブロックを粘着ピストンで動かすことでこれと同等の機能を実現しているので、マイクラ的にはこんなマクロキーは作らなくても実現可能です。私が今やってる自分のサーバーではまだハチの養殖に着手してないんや……!!

続・メダカの卵が採れた

前回の続き

akkiesoft.hatenablog.jp

卵を発見してわけた翌日から孵化し始めました。早すぎる。1日1〜2匹くらいのペースで増えています。

f:id:Akkiesoft:20210523180802j:plain

で、今日は晴れたのでバケツを外に出して水面に貼った油膜を取り除いたりなんだりのメンテをしていたんですが、隣の水換えバケツを覗いたら……なんかこっちにもいる〜〜!?

f:id:Akkiesoft:20210523180919j:plain

水換えのたびに水換えバケツの水草と鉢の水草が多少交換されるので、卵がこちらにも来てしまった模様。ワーオ。

とはいえ水換えバケツは水換えに必要なので、見つけ次第子メダカバケツに移ってもらうことにします。ホントは水質変わるのはよくないんですけど、仕方ない。養命酒カップですくって子メダカバケツに移籍してもらいました。

f:id:Akkiesoft:20210523181105j:plain

動画はMastodonに。現在は移籍したのも含め10匹になりました。

social.mikutter.hachune.net

子メダカはさすがにストリーミングしてませんが、親の方は引き続きこちらで観察できます。

shrimp.marokun.net

メダカの卵が採れた

鉢を眺めていたら、水草の根にメダカの卵がついていました。いくつかはカビてますが、ほかは大丈夫そう。こいつら交尾したんだ!

f:id:Akkiesoft:20210520125052j:plain

で、放置しとくと親メダカに食べられちゃったり水換えで気づかずに流されていったりするので、子メダカ用バケツを用意して卵がついた水草を移しました。卵から飼育中の実家からのアドバイスで水道水にドボンして、水換えはしないようにやっていきます。

なお、今回採った水草は株分けしようとしたら根が多いやつと葉が多いやつで別れてしまったうちの前者側。まあ、根に絡みやすいですからね。あと、小さい浮草の根にもちょっと絡まっていました。なので、多分鉢から卵を取り切れていないはずです。これはもう諦めるしかないかなー。

f:id:Akkiesoft:20210520125507j:plain

水換え用兼入りきらない水草飼育用のバケツもあるのでだいぶにぎやかになってきました。実家は子メダカ飼育にタッパーを使っているようなので、うちもうまく育ってきたらそっちに移行ですね。

f:id:Akkiesoft:20210520125705j:plain

メダカメラ

メダカを飼育してるのにRaspberry Piと絡めないのネタとしてもったいなあと思っていたのですが、ようやくやり始めました。

用意したのはDS18B20温度センサーの防水タイプと、クソ長カメラリボンケーブル。どちらもケーブル長は約2mです。aliexpressで送料含めて600円くらい。Raspberry Pi本体は室内に置きつつ、ケーブルはエアコンのダクトを通して外に出して使うプランです。すでにBME280が外に出してあるので、それをやったときと同じ要領で作業しました。

f:id:Akkiesoft:20210516132416j:plain

パテで手をベトベトにしつつ配線した図。カメラは特にケースに入れたりしていないノーガード戦法ですが、申し訳程度にビニールテープを巻きました。ベランダは台風でもないと雨はそんなに入ってこないのでとりあえずこんなもんで。だめならなんか考えましょう。

f:id:Akkiesoft:20210516132544j:plain

室内側。Raspberry Piは空いている元展示機材の3A+を雑に割り当て。展示活動が再開したら……?買い足せばええ。リボンケーブルの余長はどうにかしたいところ。

f:id:Akkiesoft:20210516132826j:plain

で、配線してから思い出したのですが、温度センサーのケーブルの端が芯だけでている状態なので、ピンヘッダーが使えるよう加工が必要なのでした。計画性がない。仕方ないので、壁に向かってエアはんだ付けで対処。ユニバーサル基板にピンヘッダーと4.7Kオームをつけてケーブルを壁ではんだ付け。

f:id:Akkiesoft:20210516132951j:plain

カメラのストリーミング映像はpython3-picameraのストリーミング機能を使いました。というか、スクリプト自体過去に作ったものを流用しています。Webサーバーとして動くので、こいつにDS18B20のデータを取得・出力できるものを追加で実装してやりました。

あとは自宅のメインWebサーバーからリバースプロキシーで通してやって、HTMLとグラフライブラリをちょいちょいいじったら完成です。このへんも、最近やり始めたエアぴっぴの再開発(bootstrap5)の使いまわしがおおいです。

f:id:Akkiesoft:20210516133702j:plain

ストリーミングのMotion JPEGは任意のタイミングで保存するとその瞬間のJPED画像が取得できるので、メダカが見えたら保存してみるのも良いでしょう。

f:id:Akkiesoft:20210516134319j:plain

Motion JPEGがどのくらい同時アクセスに耐えられるのかイマイチわかってないですが、どうせ見に来る人もそういないでしょうしダメならダメで。

shrimp.marokun.net

思いつきで機能を付け足していくので、もし開いてぶっ壊れているときは、ぶっ壊れているかぶっ壊しています。

まとめてリネームするやつ.sh

なんてことない小ネタなんですけど。

FANBOXとかFantiaとかの画像を拾ったあとのリネーム、2〜3枚なら手でやるんですけど、たくさんあるとだるいので、フォルダに名前つけたとこに放り込んで、フォルダ内でひっぱたいたらフォルダ名をprefixに保存した順でナンバリングするスクリプトを雑に書きました($1にprefixを書いてもいいです)。

#!/bin/bash
prefix=$1
if [ "$prefix" == "" ] ; then
  prefix=`pwd | awk -F'/' '{print $NF}'`
fi
LIST=`ls -1tr`
c=1
for i in $LIST; do
  ext=`echo $i | awk -F'.' '{print $NF}'`
  mv $i ${prefix}_${c}.${ext}
  let ++c
done

これを「まとめてリネームするやつ.sh」としてパスが通っているところにおいてるので、うちでは例えばこんな感じでうごかしてます。

akkie@Soful ~ % cd Desktop/fantia123456
akkie@Soful fantia123456 % まとめてリネームするやつ.sh
akkie@Soful fantia123456 % ls -1
fantia123456_1.png
fantia123456_10.png
fantia123456_2.png
fantia123456_3.png
fantia123456_4.png
fantia123456_5.png
fantia123456_6.png
fantia123456_7.png
fantia123456_8.png
fantia123456_9.png

なんてことない小ネタなんですけどね。