見出し画像

M5Stack Aボタン連射機能回避の件

以前作成したM5Stack用のスケッチ(プログラム)を、旧パソコンから新パソコンへ引っ越ししました。

引っ越しだけなんで、特に問題ないだろうと思いスケッチをコピーして、念のためM5Stackに書き込みしてみたら。。。

画像1

えええええええ!!!!!

ボタンを押してないのにAボタンが勝手に押されてカウンターがどんどん上がってくよー。やったー!Aボタンに自動連射機能が!!ってうれしくない(^-^;; (画像はイメージです)

これは難問。。。

冗談はさておき、これエラーの中でも結構厄介な部類にはいります。

厄介な理由:スケッチが同じ(ハズ)なのに開発環境により挙動が違う

新旧のパソコンで複数回やっても結果は同じ。まあ再現性があるだけましなのですが。。。

少なくとも旧パソコンでは問題なく動作することから、スケッチ自体やハードの故障が直接的な原因とは考えにくい。とりあえず、新パソコン環境でちょっとずつスケッチのコメントアウトなどをしながら、連射機能の原因となるコードを特定していきます。

まず連射が行われるのは、Aボタンのみで、Bボタン、Cボタンは問題ないことを確認(ハードも無関係ではないっぽいなー)。色々さぐっていくと結局Wifiに関連する部分をコメントアウトしたら、連射機能が止まりました。

しかしWiFi機能が使えないとなると、そもそもこのアプリの意味がない^^;

取り急ぎの代替案

代替案1:Aボタンは使わないという仕様にする。

たしかにアリだけど、現在、ABCボタンすべて使ってるしなー。

代替案2:Aボタンは「長押し」の仕様にする

つまり

M5.BtnA.wasReleased()

M5.BtnA.wasReleasefor(3000)

3000ms(3秒)以上、長押ししないとダメ。(^^;
これ、うまく動きました。でも実運用ではちょっとねー。

で、ネットに助けを求めることにしました。えっと。。。

画像4

ズバリの解決がありました

正直望み薄と思って調べましたが、なんと!

ズバリの解決がありました!スゴイ!!

不具合:
. 1. Web Radio で ButtonA [vol-] が 勝手に動作し Volume が低下します。
. 2. 発生回数は 6時間に 1〜2回程度。
. 3. GPIO39 (ButtonA) に Pulse が発生します。
. 4. 他のスケッチでも WiFi ( WiFi.begin(); ) を使用するとPulseが発生します。
条件:
. 1. WiFi ( WiFi.begin(); ) を使用する時。
. 2. M5.BtnA.wasPressed(); を使用する時。
. 3. Arduino IDE: ESP32 Board Manager:ES32 Arduino 1.0.5 , 1.0.6
原因:
. Arduino IDF(1.06)のBUGと言われています。参照に記載あり。

なるほど。。。

ツール

ボード

ボードマネージャ

で、確認。

画像5

こちらが新パソコン、Aボタン自動連射機能付き。ESP32のバージョン1.0.6

画像6

こちらが旧パソコン、Aボタン連射機能なし。ESP32のバージョン1.0.4
ほんとだ!!

対策:( 回避策 )

void setup(){
  WiFi.Begin();
  WiFi.setSleep(false);
}

もしくは

#include <driver/adc.h>
void setup(){
  adc_power_acquire(); // ADC Power ON

と追記でOKとのこと。実際やってみたところ、どちらの方法でも

「うまくいきました」

お礼

本件解決策をご提供いただいたのは、*nao*(なお)さん、らびやんさん
とのこと。Twitterでの実際のやり取りは以下。早速お礼ツイートさせていただきました。重ねてお礼申し上げます。ありがとうございます

主要因はESP32のバージョン違いとはいえ、ハードが密接に絡んでいるのは確かなようです。カウントアップも「タッタタタッタタ....」のような感じでノイジーな印象をうけました。

実際、「ボタンを押す」という行為はハード寄りになればなるほど、チャタリングなどの奥深い「何か」があるものです。^^;

幸運でした

今回のツイートがアップされたのが6/12。私が本トラブルにはまったのは6/13。その差わずが1日。また、今回は「ちゃんと動いている環境」を確保しつつ調査ができたことなど、幸運が重なりました。

もしこれが1週間前なら、トラブルの解決策がみいだせなかったでしょうし、もしこれがM5Stackで初めて作成したスケッチなら、問題の絞り込みができず途方にくれていたことでしょう。「SORACOM GPS マルチユニット のデータを kintone に保存する」やってみたでも書かせていただきましたが、IoT開発には運も必要^^;。いや本当に今回は運がよかったです。ありがとうございました。

同じような方の参考になればうれしく、つなたいnoteですがまとめさせていただきました。

また参考書籍の出版社さんにも連絡をいれておきます。

今回の不具合は出版後の発生でしょうし、本書籍に責任はないと思います。内容としては、M5Stackのことがよくわかる良書だと思います。^^

この記事が気に入ったらサポートをしてみませんか?