M5STACK(その10)

実は昨日の問題がまた発生したんだけど、何度も書き込みするのが面倒になったので別のM5Stackを引っ張り出した。

たくさん買っておいてよかった。(と、前向きな考え方をしておく)

 

接続したかったのは先日スイッチサイエンスで購入した、M5Stack用USBホストシールド。

 https://www.switch-science.com/catalog/3919/

9/8時点で既に在庫なしになってる。早めに買っておいてよかった。

ときどきM5StackをUSB機器と接続して使ってみたいことがあるので、ブレッドボード上でなんとかしようとしてたんだけど(実際、やってる人がいた)、やっぱコンパクトにまとめられてるのが欲しかった。
機能は言わずもがな、M5Stackの小さいサイズの良さが生かされてるのがいい。

 

今回の動作確認に使ったのは、よくあるBluetoothのドングル。

ESP32ってBluetooth(BLEか?)搭載だったような気がするので実際には使わないかもだけど、何がいいってお手軽に接続できるところ。

何よりドングルも小さいので邪魔にならないし。

 

事前準備として、USBホストシールドのライブラリをダウンロードして追加。

 https://github.com/felis/USB_Host_Shield_2.0

この中にあるサンプルスケッチの、Bluetooth/SPP.inoを使用。

中を見るとわかるけど、Bluetoothで送られたデータをシリアルモニタにエコーバックするだけの単純なスケッチ。

これをちょびっと書き換えて、M5Stack用にした。

ライブラリのSPP.hもいじって、69行目の

        SPP(BTD *p, const char *name = "Arduino", const char *pin = "0000");

を、

        SPP(BTD *p, const char *name = "M5Stack", const char *pin = "0000");

にし、ペアリングの時にM5Stackが出てくるようにした。

スマホから見るとこんな感じ。なんか嬉しい。

スケッチもシリアルモニタに表示させるところをM5Stackの画面に出るように書き換えて、コンパイルして転送。

お手軽にスマホからデータを送りたいので、「S2 Terminal Bluetooth Free」をインストールした。

アプリを起動し、ペアリング済みのデバイスからM5Stackを選択。

M5Stackと接続できた状態。

試しに「test」と書いて送ってみると…

なんだこりゃ。

と思ったけど、そうかASCIIコードになっちゃうのか。そこまで考えてなかった。

 

でも一応動作確認はできたのと、意外と簡単だったのでとても楽しい。

やりたいことはたくさんあるんだけど、自分の知識が追いついてないので、今回のようにサンプルスケッチをカスタムして実験しつつ欲しいものを作っていこうと思う。

Sponsered Link

M5STACK(というかESP32の問題)

M5Stackの新しいボードが届いたのでそれについて書こうと思ったのに、全然別件のトラブルが起きてビビったのでそっちを先にメモしておく。

(もう出ないことを祈るけど…)

 

久々にM5Stackを接続して、スケッチをコンパイルして書き込みしたところ、見たこともないエラーが出た。

ご丁寧に、

 A fatal error occurred: MD5 of file does not match data in flash!

 A fatal error occurred: MD5 of file does not match data in flash!

と、ムカつくことに二行も出て来てくれた。

もちろん書き込みはできてないようで、シリアルポートにも何も出てこない。

コンパイルまではできているので、ハード側の問題だとわかる。

 

このエラーメッセージでそのまま検索したところ、どうやらM5Stackの問題ではなくてESP32の問題らしく、いろんなところで見つかった。

でも具体的な対処方法が書かれているところが見当たらない。

どこかにはあったかもだけど、その時自分がざっと見た感じでは見つからなかった。

ESP32のフォーラムでも同じエラーをちょこちょこ見かけたけど、どうもはっきりしない。

 https://www.esp32.com/index.php

 

ただ、Nefry BTというESP32を使ったボードの解説サイトに、それっぽい話が書いてあった。

 https://dotstud.io/docs/nefrybt-error-handling-2/

単純に、

  • 何度も書き込みをしてみる
  • Arduino IDEのUpload Speedを遅くする

で、治ることがある…らしい。

 

スケッチを簡単なものに変えて、記載されている通りスピードを921600から460800にし、5,6回書き込みしてはリセットしてみたけど治らない。

なんかもう最後はめんどくさくなって、スピードを元通り921600にしてみたところ、あっさり治ってしまった。

 

元に戻したのがよかったのか、何度も繰り返したのがよかったのかわからず、なんか納得できない。

でももしM5Stackに限らずESP32が載ったボードで同じエラーが出たら、諦めずに書き込みを繰り返してみるといいかもしれない。

Sponsered Link

M5STACK(その9)

ちょっとだけM5Stackにねこあつめの猫っぽいイラストを表示させようと思ったら、えらい時間がかかってしまった。

わざわざBMPにコンバートしたもんだから、しなくていい苦労をした。

(あいかわらず懲りてない)

 

イラストを準備し、以前OELDに表示させた時に使ったコンバータ(の、ホームページ)でやってみたんだけど、やっぱりうまく行かなかった。

なんかそんな気がしてたので、M5StackでBMPを表示させるための方法を検索。

知りたいのは画像をコンバートするためのツール。

 

しかし調べたらフォーラムにそのまんまの問い合わせが載っていて、すぐに判明。

 https://github.com/m5stack/M5Stack/issues/28

さっそくLCD image converterをダウンロード。でもWindows用だったので、わざわざ仮想環境からコンバートした。

その前に設定には注意、

Optionから、Imageのタブのとこ。書き込み通りにカスタム。

できたcファイルをテキストエディタで開いて編集。これがまた何度か引っかかった。

 

  • #include <stdint.h>は残しておく
  • 「Static」という単語は削除
  • コード内の画像の名前が「image_data_(画像の名前)」になっているので、必要なら修正
  • 一番下の方にある「const tImage」で始まる行は削除

 

自分はコメント部分は邪魔なので削除してました。

これでArduino IDEで画像表示させるプログラムと同じフォルダに入れておけばOK。

(もちろん画像を呼び出さないといけない)

ちょっと違う画像をもう一枚作って、左端のボタンを押したらちょっとこっちを向く(ような感じがする)ようにしました。

カスタムして、もっとねこあつめらしくできる…かも。

#include  <m5stack.h>

extern const unsigned char neko1[];
extern const unsigned char neko2[];

void setup() {
  M5.begin();
  M5.Lcd.drawBitmap(0, 0, 320, 240, (uint16_t *)neko1);
}

void mikaeri_neko() {
  if(M5.BtnA.wasPressed()) {
  M5.Lcd.drawBitmap(0, 0, 320, 240, (uint16_t *)neko2);
  delay(1000);
  M5.Lcd.drawBitmap(0, 0, 320, 240, (uint16_t *)neko1);
  }
}

void loop(){
  mikaeri_neko();
  M5.update();
}
Sponsered Link

M5STACK(赤外線受信の余談)

またM5Stackの話になるけど、ついでなんでやったことメモ。

 

先日の赤外線が出てるかどうかのチェックをArduino Nanoでやったけど、M5Stackでやれば持ち運びがちょっと便利。

受光素子をそのまま接続して、IRrecvDemo.inoのスケッチはちょっとカスタムして転送すれば、LCDにシリアルモニタの表示を出して使える。

接続はGNDとVCC(3.3V)、データの入力は今回は5pinにした。

見ての通り、フォントのサイズはいじってないので文字が小さい。老眼にはキツイ…。

でもわざわざ別の部屋にあるリモコンを取りに行かなくても、これ持って行けばいいのは便利だったぞ。

 

シリアルモニタの表示をLCDに出力するのは結構簡単で、スケッチのSerial.printlnのところをM5.Lcd.printlnにすればいいだけ。

もちろんM5Stack用のスケッチにするためには「#include <M5Stack.h>」と「M5.begin();」の追加は必要だけど、プログラムのことを良く知らない自分でもこのぐらいの移植はできる。

でも当初M5.Lcd.printlnとM5.Lcd.printの違いを知らなくて改行されなくて悩んだのは内緒。

(Serial.printlnとかM5.Lcd.printlnって改行コード含んでたんだな)

 

Arduinoにわざわざ外付けのLCDを接続してということをしなくても、そのまま使えるのはとても楽。

コマンドの意味とかライブラリの中身とか気にせず、実用的なものをさくさく作って使えるってこういうことなのか〜と納得。

勉強用に使うのもいいけど、これだと便利すぎるだろうか。

ファームウェア書き換えて、MicroPythonの勉強で使うならいいかもしれない。(個人的感想)

 

Sponsered Link

M5STACK(その8)

結局我慢できずM5Stackの事ばっかになっているが、まだ気になる事があるのでそれもメモっておく。

MP3ファイルの話をもうちょっと。

 

ツイッターで投稿されていたM5StackのMP3プレイヤー。

面白そうだったので、元の投稿先からスケッチを落としてきた。

 http://forum.m5stack.com/topic/143/lesson-6-1-speaker-mp3-player

上記の下の方にgithubへのリンクがあるけど、この投稿内容は勉強になる。

 

ちなみにここの公式フォーラムにレッスンとして投稿されてるネタの一つ。

 http://forum.m5stack.com/category/1/news-lessons

他にも興味深いのがいっぱいあるので、またやってみようと思ってる。

というか、最初のLesson1から見直した方が良いのかな。

 

とりあえずMP3プレイヤーのスケッチをコンパイルして転送、手持ちのMP3ファイルをSDカードに入れてみた。

…が、ノイズが出てくるだけで音楽が出てこない。

アイコンも一応作ったんだけど(75x75のjpg、MP3ファイルと同名にしておく)、その画面も出てこないし。

しかし試しに元のサンプルファイルを使うと、ちゃんと再生できてる。

ただ、次の曲に行った後、音が出なくなったりする。

この辺の不具合は周知みたいで、これは今のところしかたないと思う。

 

もしかして自分のMP3ファイルが悪いのか?と思い、前回使ったシンプルなサンプルスケッチでMP3ファイルを再生してみたところ、やっぱり同じようなノイズが出てくるだけだった。

これだったらたぶん、ファイルのサイズを減らせば良さそう。

 

というわけで、MP3のビットレートを96まで落とした。ここまで落とすと音質が悪いのが解りやすい。

でもファイルサイズは3分の2ぐらいまで減らせた。

これでMP3ファイルを再生すると成功。なので再びMP3プレイヤーのスケッチをコンパイル。

SDカードのファイルが無事再生されて、画面も表示された。

…音が悪いのはファイルのせいだけじゃなくて、やっぱりハードの問題もあるよね。

それと2曲目が再生されなかった。タイトルが日本語なのもまずかったのかな。そのぐらいはカスタムできそう。

スケッチ自体はSDカードが入ってないと注意画面が出てきたりして、良く出来てます。

Sponsered Link