【M5Stack_Core2】Core2_Factory_test再コンパイル(続き)

Core2_Factory_test
github.com

ソース追ってみた。I2C関係が、軒並みNGになっているのよくよく調べると、内部(システム)で使っているI2Cって同じアドレスを使っているのか。 でもって、内部使用用(Wire1 G21,G22)と外部端子用(Wire G32,G33)を想定しているとも思われるのに、一部初期化で、Wire.begin(21, 22);とかなっているし デバイス初期化してクラスをインスタンス化しているところではWire1を使っている。Wireのライブラリ詳しくわからないけど、コンフリクトしているような感じなのかなぁ。 まあ、ライブラリgrepしてWire関係で、G21,G22使っているデバイスのところチェックして、

M5Core2.cpp の

  • Wire.begin(21, 22);

Core2_Factory_test.ino の

  • Wire.beginTransmission( lastptr->addr );
  • if ( Wire.endTransmission() == 0 )

を変更したら、I2C関係は問題なくなった。また、SD Cardの方は、SDcard関係のところにdelayを入れたらPowerONボタンで起動の時のみ認識しないまで、改善したが 電源回りなのか?一度切り替えしないとだめなのか?もう少しAXP192を使うようになってからじゃないとね。でも、M5Core2を人に見せるときにSDcard部でFailedなのはかっこ悪いなぁ。

【M5Stack_Cre2】メモメモ

  • loop()側で画面が表示されたり、されなかったりプログラム関係なさそうな変数代入等のありなしで変わったりする。setup関数側でダミー画面設定を行っておく。無意味にdelay(1000);位入れて起動時間調整する。
  • loop()側でSerialの出力されたりされなかったりする。Serial.printf("%02X ", buff[i]);はいいけどSerial.printf("%02X\n", buff[i]);はダメってどういうこと?とりあえずsetup関数側でダミー出力するとハングアップしなくなった。

なんか、どのデバイスもちゃんとに初期化終了してないような感じ?ライブラリ1stリリース版だからしゃーないのかなぁ。

【M5stack Core2】マルチタッチをやってみた

とりあえず、M5Stack Core2の新しい機能のタッチセンサで遊んでみた。

まず、ボタン。M5Stackでは、3ボタン在りましたがCore2では、3ボタンがなくなり画面外に〇 〇 〇がありますが、3ボタンの代わりになりません。たとえるならば、1つのプッシュスライダーがある感じ。つまり、同時押しができません

マルチタッチに挑戦
I2Cからの情報から、プロットしてみた。

(1)タッチペンで横ライン(USBライン有) f:id:chiyoh:20200906012749p:plain

上側も下側も端も問題なく反応している。

(2)タッチペンで縦ライン(USBライン有)
f:id:chiyoh:20200906012952p:plain

これも、両端と上下まで反応している。

(3)人差し指と中指で横ライン(USBライン有) f:id:chiyoh:20200906013124p:plain

まあ、反応している。(赤1ポイント認識と青2ポイント認識)

(4)人差し指と中指で縦ライン(USBライン有)
f:id:chiyoh:20200906013213p:plain

これは、残念な結果になってます。2本のラインの中間地点を座標値と認識してます。

(5)人差し指と中指で円をなぞる(USBライン有)
f:id:chiyoh:20200906013602p:plain

指が、横ライン側は、なんとか反応するが、縦ライン方向になると反応しなくなり 赤の1ポイント目と青の2ポイント目が入れ替わる感じに動作しています。

(6)1ポイント目固定(黄色部)、2ポイント目画面全体をツンツンしてみる(USBライン有) f:id:chiyoh:20200906013849p:plain

横方向に関しては、青ポイントが発生していない。誤動作の赤ポイントのみ。
上側と下側は、反応するポイントがある。これは、横ラインに供給する電荷が一定でマルチタッチすると取り込み容量が分散されて。閾値を超えないので認識できてないような。縦側は、供給する電荷が別なので容量の閾値を超えて取り込めた感じでしょうか。指等を3本以上置くと、横ライン並びでは認識しないでしょうし、縦ラインにしても仕様で2ラインまでしか内部MCUは座標計算しないのでなんともいえないかんじですね。

USBケーブル電圧供給無しの場合 なんか、反応が悪かったので実験してみました。

(7)タッチペンで横ライン(USBライン無) f:id:chiyoh:20200906015037p:plain

反応が良くありません。

(8)タッチペンで縦ライン(USBライン無)
f:id:chiyoh:20200906015130p:plain

反応が良くありません。横ラインより良い?

(9)人差し指と中指で横ライン(USBライン無) f:id:chiyoh:20200906015228p:plain

反応しません。マルチタッチにすると、容量値が下がるのかもしれません。

(10)人差し指と中指で縦ライン(USBライン無)
f:id:chiyoh:20200906015416p:plain

反応良く。1本線が引けました! 2本のラインの中間地点を座標値と認識してます。2ポイントの縦軸が同じところにあったので 指2本分の容量が加算されて、閾値が上がったためと思われます。

私が行った実験ではこんな感じになりました。 内部FWの修正やらなんやらは、仕様なしでは厳しすぎますが。USB接続と取り外しは識別できるので、キャリブレーション閾値やら、フィルタ係数なんかを調整したものが公開されるといいなぁ。

いまのところ、ライブラリにあるように、シングルなタッチセンサの運用ですかね。o o oは横並びなので同時押しは2つはできないし。3つは、仕様上NG? まあ、1日あれこれ実験した結果がこのような感じになりました。

【M5Stack_Cre2】Core2_Factory_test再コンパイル

f:id:chiyoh:20200904000842p:plain

f:id:chiyoh:20200904000909p:plain

SD Card failedになるので、工場出荷プログラムから自分でソース持ってきて。Arduino環境でコンパイルしてみた。

  • I2C Axp192 Find Failed
  • I2C CST Touch Find Failed
  • I2C IMU6886 Find Failed
  • I2C BM8563 Find Failed
  • SDCard Find Failed f:id:chiyoh:20200904002005p:plain

f:id:chiyoh:20200904002020p:plain

f:id:chiyoh:20200904002034p:plain

f:id:chiyoh:20200904002053p:plain

f:id:chiyoh:20200904002120p:plain

なんか、Failedが増殖している。 Sound周りも改善されてていい感じだったのに。 きっと、ライブラリ周りが古いままとかESP32のライブラリとの整合とかの問題だと思うが、ほかの方でCore2_Factory_test再コンパイルうまくいっている人いるのかなぁ

8GBのカードだと認識するっぽい。

電源ON/OFFだと、SDCard Find Failedであったが、Resetボタンからだと問題ない? 起動時のSDカード認識時間の問題?

f:id:chiyoh:20200904002140p:plain

I2C関係は、なんかありそうなことをTwitterでつぶやかれてたなぁ。

不具合っぽいの2020/9/3現在

  • 初期ロットの内蔵電池の組み立て位置がまずいっぽい。コネクターにあたってるらしい。対策は、電池の設置位置を90°回すらしいけど2mmの六角レンチが無い人は無理
  • 相変わらず、起動時の電源回りが弱い?書き込みのときエラーになるときがあるっぽい。
  • I2Cまわりでなんかあるっぽい
  • 登録されているライブラリとCore2_Factory_testのバージョンの関係かうまくコンパイルできない。まあ、過去のM5StackのFactory_testでもあったし、そのうちUpdateされるでしょ。

今週は、いろいろチェックと不具合状況の確認で終わりそう。まあ、こういうのも楽しみなのかもしれないが。。。

pandas 1.0.0リリース

pandas 1.0.0リリース(2020年1月29日)

anaconda環境も慣れてきていろいろとできるようになってきましたが、ここにきてpandasがメジャーアップデートされたみたいなので確認をしています。見た感じ書くと

変更点概要

  • 今回は、メジャーリリースなのでAPIによっては変更、廃止がある。
  • Numbaを使用して適用集計実行の改善
  • Markdownへの変換
  • その他いろいろ

いままで動いていたプログラムが動かない場合などは、APIの変更や仕様変更の可能性が 大きいので、自分で作った部分に関しては下記のURLを参照して変更箇所がないか調査するのが いいかもしれません。

pandas.pydata.org

matplotlib pcolor

matplotlib の pcolor

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
#from matplotlib.colors import LogNorm

#Z = np.random.rand(6, 10)
Z = 100*np.random.randn(64,256)
Z = np.where(Z < -256, -256, Z)
Z = np.where(Z > 255, 255, Z)

fig, (ax0, ax1) = plt.subplots(2, 1)

fig.dpi = 200 # 200dpi

c = ax0.pcolor(Z)
ax0.set_aspect('equal')
ax0.set_title('default: no edges')
fig.colorbar(c, ax=ax0)

c = ax1.pcolor(Z, edgecolors='k', linewidths=0.5)
ax1.set_title('thick edges')
ax1.set_aspect('equal')
fig.colorbar(c, ax=ax1)

fig.tight_layout()
plt.show()

f:id:chiyoh:20190624232805p:plain

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
#from matplotlib.colors import LogNorm

#Z = np.random.rand(6, 10)
Z = 100*np.random.randn(64,256)
Z = np.where(Z < -256, -256, Z)
Z = np.where(Z > 255, 255, Z)

fig, ax = plt.subplots(2, 2)
fig.dpi = 200 # 200dpi

ax2 = ax[1][0]
c = ax2.pcolor(Z)
#ax2.set_aspect('equal')
#ax2.set_title('default: no edges')

ax1 = ax[0][1]
fig.colorbar(c, ax=ax1)

ax0 = ax[0][0]
c = ax0.bar(range(Z.shape[1]),np.sum(Z,axis=0))
ax0.set_xlim(ax2.get_xlim())

ax3 = ax[1][1]
c = ax3.barh(range(Z.shape[0]),np.sum(Z,axis=1))
ax3.set_ylim(ax2.get_ylim())



fig.tight_layout()
plt.show()

f:id:chiyoh:20190624232828p:plain