M5StickV一覧

M5StickVでQRコードを読ます

概要

  • M5StickVのプログラム練習でQRコードリーダーを写経した
  • MaixPyのサンプルと違う点(M5StickV固有の問題、原点のズレと液晶とカメラの向きの違い)がある

書いたコードと説明

QRコード読み取り自体はライブラリを呼べばいいだけですが、MaixPy公式のQRコードリーダーサンプルそのままでは動きません。
(参考: M5StickV での QRコード認識
おそらくは、M5StickVはK210を搭載しているものの純正の評価ボードではないためMaixPyのドキュメントそのままでは動作しないのでしょう、購入時に入っているboot.pyを参考に書き換える必要があります。

1つめは「lcd.rotation(2)」です。カメラの入力をそのままLCDに出力するとひっくり返った画像が表示されます。おそらくはLCDとカメラの物理的な実装の向きが一致していないためでしょうか?
※QRコードは本体を縦にしてスキャンしました。上の写真はそれを横にして撮影しています。
※写真のように横にした状態で、原点は左上にあります。

2つめはLCDにおける原点の位置です。上記コードの26行目で赤色の矩形を描画していますが座標が(40,53)であるにも関わらず写真では原点のように見えます。逆に原点から矩形を描画すると見かけ上の原点からは描画されません。これも何かの都合でズレているのでしょう。

個体差があるのかなどは判りませんが、私のモノでは矩形は(40,53,240,134)と覚えておきます。
実は変な使い方をしていて、原点は(0,0)だという使い方ができればぜひご指摘ください。

原因?(追記)

カメラの解像度がQQVGAなので320×240で、M5StickVのディスプレイ解像度が240×135です。

整理すると、カメラで取得した「img = sensor.snapshot()」のimgは320×240のオブジェクトの可能性が高いです。
それを240×135を表示するにあたり原点から描画ではなく、中心をあわせたうえで周辺をカットしているとすれば納得がいきます。

カメラの解像度(320×240) – ディスプレイ(240×135) = カットされる領域は横80,縦105
カメラ画像とディスプレイの中心で合わせているなら原点は(40,52.5)、これで計算が合いました。


M5StickVを買った

M5StickV

最近Twitterでよく目にするM5StickVを買いました。M5Stackなら聞き覚えはあったのですが、四角いStackではなくStickシリーズのひとつです。

液晶やボタンに加えて立派な筐体、カメラやバッテリー内蔵とくれば色々なことに使えそうですね。

使われているSoCStackESP32ではなくRISC-VKendryte K210)というのがワクワクしますし、開発もPythonでできるので面白そうなので買ってみました。完全に勢いでしたが、面白そうな使い道を思いついたので今後試してみます。

開発環境とか

使えるのはMaixPyというやつで、MicroPythonのK210への移植版。

StickV側のUSB Type-CポートとPCを接続すれば、シリアル通信デバイスとして認識されます。(多分デモプログラムが実行されているはずなので、この画面からCtrl-Cで終了するとPythonのインタラクティブシェルが見えます)

公式のガイドではputtyを使っていますが、もちろんシリアル叩けるツールならなんでもいいはず、私はTeraTermを使いました。(レートは115200)

↑公式のHelloWorldコードを実行した図で、今日はここまで。

参考情報


スポンサーリンク
WPC-336 x 280
WPC-336 x 280