Raspberry Pi PICOにファイルを転送するには、Thonnyなどを使えば簡単にできますが、PICOを使った自作VOCAにWAVEファイルを転送しようとすると、簡単にできる方法はなさそうです。バイナリ配列の内容をファイルを書き込むコードをREPLモードで実行してみましたが、メモリ不足のエラーが出て、ごく小さいファイルしか転送できませんでした。そこで、仮想COMポートのcom0comを使ってThonnyの通信内容を解読したところ、2kbyteずつ送信・書き込みを行っていることがわかりました。 下のサンプルコードはtest.wavをPICOのルートディレクトリに転送します。コードをForm1にコピー・貼り付けすれば動作します。
前々回、前回に引き続き、Arduino用のTFT液晶をRaspberry Pi PICOにつなぎ、240 x 320ピクセルのBitmapを表示してみました。前回はGPIOへの出力部分をPIOを使って高速化しました。今回は、24bitBitmapを16bitBitmapに変換する部分もPIOで行いました。 その結果は、前回と同じ画像を5.9秒で表示と、前回の4.5秒よりも遅くなってしまいました。変換そのものは絶対にPIOの方が速いと思うので、StateMachineへのputが2byteから3byteに増えたところがボトルネックなのだと推測しています。(StateMachineへのputにそんなに時間がかかるとも思えないのですが…。不思議です。) 今回のPIOの処理の追加で、Bitmap画像のデータをそのままStateMachineのFIFOへ流し込めばよくなったので、DMAが使えそうです。次回はさらにDMAを使ってPIOにデータを流し込んでみたいと思います。
下のコードは,MicroPython1.17をインストールしたRaspberry Pi PICOで作成・動作確認をしています。(同じフォルダに240 x 340ピクセル、24bitカラーの画像を「sample.bmp」という名前で配置してください。)
前回に引き続き、Arduino用のTFT液晶をRaspberry Pi PICOにつなぎ、240 x 320ピクセルのBitmapを表示してみました。前回はSIOにmem32でアクセスしたのですが、Bitmap画像を表示するのに18.2秒もかかってしまいました。今回は、PIOを使って高速化を図ってみます。 24bitBitmapを16bitBitmapに変換するのはPythonで行い、GPIOへの出力部分をPIOを使って行いました。 その結果、前回と同じ画像を4.5秒で表示できました。(関数デコレーターに@micropython.nativeを指定した場合は、2.8秒!)4倍の高速化!PIOは強力ですね。 しかし、4.5秒でも実用的とは言えないので、次回はさらにPIOに処理を移してみたいと思います。
下のコードは,MicroPython1.17をインストールしたRaspberry Pi PICOで作成・動作確認をしています。(同じフォルダに240 x 340ピクセル、24bitカラーの画像を「sample.bmp」という名前で配置してください。)
Arduino用のTFT液晶をRaspberry Pi PICOにつなぎ、240 x 320ピクセルのBitmapを表示してみました。このLCDは5Vで動作しますが、横のCON1のピンを使うことで、3.3Vでも使うことができるようです。詳しくは、ELEGOOの製品ページに情報があります。 今回は、下のようにPICOと接続しました。
Arduino用のTFT液晶が安かったので、Raspberry Pi PICOにつないでみようと思ったのですが、入力が8bitパラレル入力でした。Arduinoのコード例を参考にMicroPythonで制御しようとしているのですが、パラレル入力に対してGPIOを1本ずつ8本変更すると時間差が生じて、不具合が出ること間違いなしだと思ったので、GPIO8本を同時に変更する方法を調べました。下のページを参考にして実現することができました。
前回作ったBME280のロガーと,ログをグラフ化するコードを合体させてみました。1秒間隔で温度・湿度・気圧を測定し,表示を更新します。ログへの記録は5分間隔で行います。ログは日にちごとに分けて保存します。画面のどこかをクリックすると「グラフ作成中...」と表示され,しばらく待つとグラフが表示されます。ログファイルがない場合は「ログファイルがありません」と表示されます。グラフの画面をクリックすると,リアルタイムデータの画面に戻ります。 Raspberry Pi -Zeroシリーズで実行すると,グラフを作成するところでフリーズしたかと思うほど待つので,別スレッドでグラフを作り,グラフ作成中もリアルタイムの計測値を表示し続けるようにしてみました。(また,メッセージ表示の枠の角を丸くするなど,どうでもよいところに力を入れています。なぜか,どうでもよいところほどやる気がでるのです。) 画面表示にはpygameライブラリを,グラフ作成にはmatplotlibライブラリを使っています。
importcsv importmatplotlib.pyplot as plt importmatplotlib.ticker as ticker importmatplotlib.font_manager as mfontm importmatplotlib.dates as mdates importdatetime
先日作った,BME280ボードを使って,温度・湿度・気圧ロガーを作ってみました。画面の表示はpygameを使っています。1秒ごとに測定と画面更新を行い,10秒ごとにログに出力します。ログは日が変わる毎に新しく作られます。480 x 320のミニ液晶が前提で,フルスクリーン表示で起動します。ESCキーで終了します。 今後は,画面タッチで1日の変化をmatplotlibを使ってグラフ表示するよう機能追加をしていきます。