PythonでTENORI-ONを動かすblog(仮)

PythonでMIDIを作ってYAMAHAのTENORI-ONをごにょごにょするよ。

まとめ)Tamagotchi Hacking

新作のために16*16pxの勝手に動くものを探していた矢先、トーキョーピクセルで「90年代後半の携帯ミニゲームの詰め放題イベント」があると知り。

偽たまごっち入手・解体をするうちに、本家たまごっちのハッキング情報に辿り着いた。

ハードウェアハッキングやリバースエンジニアリングに興味がある人にとって、プロセスを学ぶのはとても有益と感じたのでまとめておこうと思った。


ことの発端。

ロシアのメディアアーティストdmitry morozov(ディミトリ・モロゾフ) の作品「Umbilical Digital」
これがArduino I2C libraryを利用して動かしている、と知った。

 

検索「tamagotchi hacking」

@natashenkaさん(Natalie Silvanovich)のスライド資料を見つける。(リンク踏むとpptがダウンロードされるので注意)
これはとてもわかりやすいダイジェストだった。
出ている信号から出力文字を探るプロセス、特定したプロトコル、エポキシ樹脂の除去からSoCの特定、ダンプの取得まで一連の作業が掲載されている。

 


さらに@natashenkaさんも参加しているハックコミュニティにたどり着く。
初代たまごっちのデバッグモードのやり方、歴代のたまごっちシリーズの解体写真や特定したSoCのデータシートやメモリマップまで公開されている。

 

ハッキングコード

@natashenkaさんのGitHub。2010年モデル「TamaTown Tama-Go」に実際に自作のキャラを入れて動かせる模様。。

感想

アンドリュー“バニー"ファン著書「ハードウェアハッカー」においてもハードウェア・ハッキングの手法は掲載されている。
しかし、1つのプロダクトを掘り下げて、まとまった情報として公開されているものはそうそうないのでは?
彼ら、彼女らの情熱や探究心の凄さを垣間見て、改めてクレイジーと感じた。(無論、褒め言葉)


残念ながら16*16のちびたまごっちはデバッグできず、自分のスキルでは到底リバースエンジニアリングはできそうもないが、とても勉強になった。

 

尚、我が家の下記の偽たまごっち達は、初代たまごっち同様にデバッグ可能らしいので、欲しい方が入ればお声がけください。 

f:id:bastardeyes:20190430162847j:plain

偽たまごっち

 

M5Stack + MIDIモジュール + MycroPython + ライフゲーム + テノリオン

気がつけば3か月も放置していた。

 

ひとまず、M5Stack + MIDIモジュール + MycroPython + ライフゲーム +テノリオンの報告まとめです。
1月6日から着手して、ようやく完成したのが3月19日。長かった。

完成形。

 

 2-3月ダイジェスト

  • M5Stack MIDI モジュールが到着。
  • MicroPythonでMIDI信号がうまく出せない。

  =>MIDI system exclusiveのサンプルを色々探すが音が鳴らない。。

 

  • Twitterで話題になっていた1000円ロジアナ購入

       =>ドライバの問題なのか、家のMacで動かない。

 

  • 中古でちょっとお高いロジアナ購入。

  =>またエラーで進まず。Mojaveの既知バグらしく対応版のドライバを海外サポートからもらって解決。

 

  • ロジアナでUARTの信号を読む。一瞬データが取れて、途中から何も読めない状態が続く。

  => 8bit送信後にsleepを入れないと信号がひとかたまりになる、MIDI信号と認識されないのが原因。解決。

 

MicroPythonハマったところ

  • ライブラリの定義

     OK) from machine import UART

     NG) from pyb import UART

    => pybは古いバージョンなので、M5Stackでは使えなかった
  • UARTのボーレート

          =>MIDIは31250が正解

  • uart.writeで書き込むデータの形式

          =>リストをbytes()で変換することが必要

  • 8bit送信ごとにスリーブが必要

   =>time.sleep_ms(100)が適正値かは不明。もう少し短くても動くかも。

 

完成コード

 

MIDIモジュール取扱店

日本)necobit公式秋葉原ラジオデパート、スイッチサイエンス

海外)tindie

 

さて、そろそろMaker Faire Tokyo 2019の出展申し込みをしなければ。

 

M5STACKでライフゲームを動かす。

テノリオンを動かすべく、M5Stack用MIDI Moduleを発注したので、年明けに作っていたライフゲームを移植してみた。

 

Pyxelを置き換えるぐらいですぐに終わると思いきや、予想外の展開。

 

MicroPythonはnumpyが使えない。

 

つまりnumpyで書かれた配列は全て書き換えなければならないという。

 

・・・numpy、今まで甘えてばかりでごめんね。反省。

 

数時間後、動いた。

 

  

ボタンぽちぽちで、簡単にリセットできるのは強い。

 

ランチ占いと同じく、再起動後の乱数が決まっているのだけれど、逆に「起動から何回めは全滅パターン」というのが分かっているので、結果オーライということにしておこう。

 

しかしMycroPython触るようになって、ライブラリのありがたみを痛感する。

触らなければ、ライブラリがない場合の実装方法を考えることはずっとなかったと思うので、勉強になった。しみじみ。

 

4/30追記)書籍「作って動かすAlife」のサンプル(MITライセンス)をもとに、MicroPython用にnumpyを除外して作っています。

GitHubのリンクはこちら。

M5STACK)ランチ占いの続き

前回、M5STACKで作った「ゆるふわランチ占い」。

納得の行くところまで作ってお終いのはずが、そうは問屋が卸さなかった。

 

まさか再起動する度に乱数が初期化されて、毎回同じメニューが出てくるとはな。

 

取り急ぎGoogle Apps Script版も作ってはみたものの、なんかやっぱりしっくりこない。ワクワク感が足りない。

あと、M5STACKの方が圧倒的に女子ウケが良い。

 

悩んだ挙句、加速度センサの値を加算して、乱数に加算する仕様に変更した。

ついでにメニューもちょっぴり変更して、重複も除外した。

 

燦然と輝く白飯が復活。

f:id:bastardeyes:20190127154907p:plain

ビジュアルは変わってないので集中線でカバー。

 めでたしめでたし。

 

完成したのでしばらくは何もしないつもりだったのに、うっかりAliExpressで安売りされているFaces等を買い込んでしまい。

 

MIDIモジュールあればテノリオンも動くことに気づいてしまったり。

 

 沼落ち感あるけれど、数週間後に到着するFacesが待ち遠しいので良いのではないかと。

無事届きますよう。

M5STACKで遊んでみた

1/6。RaspberryPiもくもく会に参加した帰りに、つい出来心でM5STACKを買ってしまった。

 

主な理由

  • 本業でbotとか作りすぎなので、ガジェットらしいものがやりたい。
  • ラズパイでは少々オーバースペック。
  • Python使えるらしい。
  • 電池とモニターとボタンが付いてる。
  • 小さくてかわいい。
  • 正月なのでうっかり財布の紐が緩んだ。

と軽い気持ちで挑んだものの、蓋を開けたら結構大変でした。(苦戦したポイントは後述)

 

ハマったポイント

  • Arduino IDEを使って簡単に環境構築できる」と思いきや、MicroPythonを使う場合は手順が違った。
  • M5CroudでWi-Fi接続する際、SSIDがステルスで選択できなかった。
  • M5Croud上でソースをuploadする画面が開けなかった。=>最終的にオフライン用のファームウェアを使った
  • MicroPythonでは日本語表示が標準機能にない
  • SDHCカード利用時、uos.mountsd()が通らない。諦めてから何度か再起動しているうちに動くようになった。(が抜いたらまた動かなくなった。結局SD使わない)

 

・・・というハマりの結果、以下のオフラインファーム利用に落ち着いた。

大まかな環境構築手順メモ

  1. USBドライバーをインストール

  2. ESP32のインストール(FW書き込みに必要)

  3. オフラインファームのインストール
  4. ampyのインストール(m5stack内のファイル書き込みに必要)

作ったもの

1択〜3択でランチの「選択肢」をざっくり教えてくれるもの
=>日頃から30面ダイスでランチを決めるのだが、選択肢を考えるのが地味に大変。
※店を具体的に選ぶと、混雑に悩んだり距離が微妙なので、店名で選ばない。

f:id:bastardeyes:20190114225446j:plain

おみくじの信憑性は気にしない。

f:id:bastardeyes:20190114225505j:plain

サイコロを振るアナログ感を大事にしたい。

 

MicroPythonによる日本語表示プログラムは、こちらを使わせていただきました。(コード内にもその旨記載)

ご飯画像はいらすとやより拝借。

 

コードはsamples/src/m5/todays_lunch/になります。

 

後学のためにC言語も勉強すべきだろうかと考える今日この頃。。

テノリオン×ライフゲーム

昨日のpyxel × ライフゲームに、さらにテノリオンを追加。

 

約3分かけて全部のセルが死滅する様を見たときは諸行無常を感じました。。

pyxel側にリセットボタンや世代カウントをつけるともう少し良いかもしれない。

 

 

色々試行錯誤の末、以下の設定で実装。

  • 生存セルの個数に応じて、都度音階を変える(スケール8種から選択)
  • レイヤーは複数用いない。レイヤー1-7のうち、4のみを利用。(レイヤーにより高低、リズムなど役割が異なる)

 

↓p3内を参照。

実は過去コード全部libのフォルダがgitignoreで除外されていることに気付いて猛省したのは内緒。

 

明日から仕事なので、そろそろ本業の勉強もまじめにやらねばと思いつつ、日曜にRaspberry Piもくもく会を控えているのでした。

 

テノリオンで何かやるか、別のものをやるか考え中。

 

 

pyxelでライフゲームを動かす

晦日、クリスマス前の連休についカッとなって購入した『キムタクが如く』をなんとかクリアしました。

シナリオもちゃんと面白いのですが、自転車やらネットカフェの看板やらを振り回して戦う様はダイナマイト刑事感があり、「ちょ、待てよwww」が聞けるのもポイント高し。

しかし、スタッフロールの海外ローカライズの記載を見て以来、「人妻系ヘルス こんばんワイフ」は果たしてどう翻訳されるのが気になって夜も眠れない。。

 

 

はい、あけましておめでとうございます。

 

2018年夏あたりから目標にしていたALife & テノリオン作品のマイルストーンとして、ライフゲームテノリオンで表現しようとしている今日この頃。

 

少し前見かけたpyxelが面白そうだったので、書籍「作って動かす ALife - 実装を通した人工生命モデル入門」のライフゲームのサンプル(MITライセンス)をpyxelで動かしてみました。

 

 

 

 

・・・さて、これをテノリオンに出力するのは難しくないのですが、扱うレイヤーが1つだと音が薄っぺらく単調になってしまうので、意外に奥が深そうな予感。

 

今年も頑張ります。