【M5Stack_Core2】VS code環境構築

VS code環境構築を構築します。

いままで、Adruinoを使ってきましたがそろそろライブラリの中身を見な(調査し)がら開発するのに限界を感じてVS codeに再チャレンジしました。過去インストールして導入したのですが動かず。PlatformIO IDEという拡張機能を使ったんですがいろいろと設定とかライブラリの整合性とかSDKなどわからないことが多く断念した実績があります。今回は、単純にAdruino環境をそのままVS codeでつかっちゃおーという拡張機能ですので簡単に動作しました。備忘録として残しておきます。

大前提
* Arduinoでプログラムがボード(マイコン)にupdateできる環境をすでにある。
* VSCodeがインストールされている。

手順

  1. 開発ディレクトリを作って、サンプルスケッチをコピーし、Arduinoでサンプルスケッチが動作することを確認する
  2. 拡張機能の追加 Arduino for Visual Studio Code (Microsoft) をインストールする
  3. メニューからフォルダを開くで「開発ディレクトリ」を選択。エクスプローラーが開く
  4. エクスプローラーからサンプルスケッチ(.ino)を開く
  5. Ctrl+Shift+PでArduino: Board Configを選択
  6. Arduino Board Configウインドから開発ボードを選ぶ。Arduinoの設定と同じにする。ソースをセーブしてVS Codeを再起動
  7. エクスプローラー上に.vscodeが追加されていることを確認して、「c_cpp_properties.json」を選択
  8. includePathにArduinoのライブラリを追加
  9. Ctrl+Shift+PでArduino: Select Serial Portを選択。Arduinoの設定と同じにする。
  10. Ctrl+Shift+Pで「Arduino」と打ち込みArduino拡張機能の確認をする(どんな機能があるか見る)1. エクスプローラーでスケッチを選んで(.ino)、ソースコードウインドの右上にあるアイコンArduino: Verify(Ctrl+Alt+R) Arduinoの(レ)検証ボタンと同等
  11. ソースコードウインドの右上にあるアイコンArduino: Update(Ctrl+Alt+U) Arduinoの(→)マイコンに書き込みボタンと同等
  12. 出力LOG文字化け対策下記参照
  13. Serial Port選択バグ対策下記参照

Arduino
f:id:chiyoh:20200919120709p:plain

VS Code
f:id:chiyoh:20200919120430p:plain

Arduino for Visual Studio Code出力の文字化け対策

元ネタ lang-ship.com

Arduino for Visual Studio Code (Microsoft)のバージョンが違うのでPATH等が違うが
"C:\Users\%username%\.vscode\extensions\vsciot-vscode.vscode-arduino-0.3.2\out\src\common\util.js" このファイルの下記の部分を丸ごとコメント化する。

        /*if (os.platform() === "win32") {
            try {
                const chcp = childProcess.execSync("chcp.com");
                codepage = chcp.toString().split(":").pop().trim();
            }
            catch (error) {
                outputChannel_1.arduinoChannel.warning(`Defaulting to code page 850 because chcp.com failed.\
                \rEnsure your path includes %SystemRoot%\\system32\r${error.message}`);
                codepage = "850";
            }
        }*/

Serial Port選択バグ

バージョンによってセレクト画面が出ないことがある。過去に修正されたがまたバグっているっぽい。
Arduino拡張機能のソース設定は、.vscodeに書き込まれるので直接arduino.jsonにport設定(追加)をする。前の行の,(カンマ)を忘れない。

{
    "board": "m5stack:esp32:m5stack-core2",
    "configuration": "PSRAM=enabled,PartitionScheme=default,CPUFreq=240,UploadSpeed=921600,DebugLevel=none",
    "sketch": "Core2_Factory_test\\Core2_Factory_test.ino",
    "port": "COM5"
}

libraryパスの追加

ソースコード#include <M5Core2.h>‘が波線になったので.vscodeのc_cpp_properties.json`にパスの追加
"C:\Users\%username%\Documents\Arduino\libraries\M5Core2\src\M5Core2.h"がソース元なのでこのディレクトリを追加する。カンマでちゃんとつながるようにする。 %username%は、自分のLoginアカウントに合わせる(windows版の話その他は、pathを合わせる)

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "C:\\Users\\%username%\\Documents\\Arduino\\libraries\\M5Core2\\src\\**",
                "C:\\Users\\%username%\\AppData\\Local\\Arduino15\\packages\\m5stack\\tools\\**",
                "C:\\Users\\%username%\\AppData\\Local\\Arduino15\\packages\\m5stack\\hardware\\esp32\\1.0.4\\**",
                "C:\\Users\\%username%\\Documents\\Arduino\\libraries\\**"
            ],
            "forcedInclude": [],
            "intelliSenseMode": "msvc-x64",
            "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/bin/Hostx64/x64/cl.exe",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

【M5Stack_Core2】バッテリーチェック!

話題のバッテリーチェックをしたいと思います。

Core2って、2mm六角レンチがないカバー外せないんですよ。そして、前に買ったm5Stack製品に付いていた六角レンチでも開かない(サイズが違う)
ということで、ダイソーで買ってきました。これ!

f:id:chiyoh:20200919103816p:plain

なんだかなぁ

f:id:chiyoh:20200919103845p:plain

ダイソークオリティでした。あと、金属粉がすごい。手がすごい汚れる。
さっそく、開けたいと思います。

f:id:chiyoh:20200919105453p:plain

ねじの大きさが、長い短いがあるので要チェックです。

f:id:chiyoh:20200919105600p:plain

おおー。当たりでした。凹んでる。ということで、このまま使用し続け膨らんできたときに接触部分が裂けて燃える可能性があるので対策をしたいと思います。

f:id:chiyoh:20200919110006p:plain

バッテリーの裏にテープが張ってあって固定されているので剥がしにくいですが取り外します。

f:id:chiyoh:20200919110138p:plain

ツイッター等で言われているように、90°回転させてはめ込みます。その際水色の部分が重なり合うので接触しないか確認しつつバッテリーの位置調整をおこないます。あと、ねじのサイズが違うのは紫色が浅いねじ、緑色が深いねじになっているのでねじを締めるときに間違えないように。あと、リード線を噛まないように蓋をします。

【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されるでしょ。

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