M5StickC(その5)

簡単な動作確認メモ。

AliExpressのセールを待ちきれなくて、先月、いろんなものを購入した。

その中でM5StickCのHATを二つ新規購入したので、動作確認しようとした話。

(ついでにM5StickC本体も買い足した)

 

一つはBugCという虫みたいな動きをする(と思われる)やつなんだけど、サンプルコードがM5flow専用だった。

 https://m5stack.com/collections/all/products/bugc-w-o-m5stickc

 https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Hat/BugC

なので久しぶりにUIFlowをやることに。

というより、M5StickCでは初めてだった。

 

接続方法は以下を見た方が早い。

 https://docs.m5stack.com/#/ja/quick_start/m5stickc/m5stickc_quick_start_with_uiflow

前はMac用のM5Burnerはなかったと思う。便利になった。

でもUIFlowのバージョンはWindows版の方が最新。

 

事前にgithubからデータはダウンロードしておいて、UIFlow上でbugc.m5fを開いた。

で、接続したM5StickCに書き込み。

無事に書き込めたはずなんだけど、なんか接続されてないってエラーになる。

これについては結局原因がよくわからないまま。

詳しいドキュメントも見つからないんで、まだ調査中。

 

もう一つはYun HAT。これはサンプルコードをUIFlow上から直接ダウンロードして書き込みして、すぐ使えた。

ツイッターに上げた画像がUFOかなんかみたいになってしまった。

LCDの表示はもうちょっとカスタムしたい。

でもこの派手なLEDは自分的には気に入ったんで、なかなか捨て難い。このまま使いたいところ。

しかし会社の机に置いとくには派手すぎるかな…。

Sponsered Link

M5StickC(その4)

久々にM5StickCをいじってたので、メモしておく。

 

台風の時は気圧を測ろうと思ってたんだけど、規模が想定外だったせいでそれどころじゃなかった。

サンプルで前に入れていたものでちょっとだけ測ったけど。

 

表示は似たようなのだけど、検索して見つけた以下のをやってみたかった

これだとヘクトパスカルの表示がちゃんとしてる。

 https://ambidata.io/samples/m5stack/m5sitckc/

最終的にデータをM5Stackに転送する実験もできるけど、今回はそこまでしない。

 

ただ、上記は「M5Stack用環境センサユニット」というのを使っている。

自分の手元にはENV HATしかないので、もともと使っていたENVサンプルスケッチから書き換えた。

試しにそのままコンパイルして書き込んでみたら、思いっきりLCDにエラーの表示が出た。

(でも普通にコンパイルしてM5StickCに書きこめちゃうんだな)

 

といってもheadingDegreesの表示がなくなるので、かなり短いスケッチにできる。

ざっくりと、こんな感じ。

 
#include <M5StickC.h>
#include "DHT12.h"
#include <Wire.h>
#include "Adafruit_Sensor.h"
#include <Adafruit_BMP280.h>
#include "bmm150.h"
#include "bmm150_defs.h"
DHT12 dht12; 
BMM150 bmm = BMM150();
bmm150_mag_data value_offset;
Adafruit_BMP280 bme;

void setup() {
  // put your setup code here, to run once:
  M5.begin();
  Wire.begin(0,26);
  M5.Axp.ScreenBreath(10);
  M5.Lcd.setRotation(3);
  M5.Lcd.setTextSize(2); 
  M5.Lcd.fillScreen(BLACK);
  pinMode(M5_BUTTON_HOME, INPUT);

  if(bmm.initialize() == BMM150_E_ID_NOT_CONFORM) {
    Serial.println("Chip ID can not read!");
    while(1);
  } else {
    Serial.println("Initialize done!");
  }
  if (!bme.begin(0x76)){  
      Serial.println("Could not find a valid BMP280 sensor, check wiring!");
      while (1);
  }
}
uint8_t setup_flag = 1;

void loop() {
  // put your main code here, to run repeatedly:
  float tmp = dht12.readTemperature();
  float hum = dht12.readHumidity();
  float pressure = bme.readPressure();
  double vbat = M5.Axp.GetVbatData() * 1.1 / 1000;  // バッテリー電圧を取得 ----D

    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.printf("temp: %4.1f'C¥r¥n", tmp);
    M5.Lcd.printf("humid:%4.1f%%¥r¥n", hum);
    M5.Lcd.printf("press:%4.0fhPa¥r¥n", pressure / 100);
    M5.Lcd.printf("vbat: %4.2fV¥r¥n", vbat);
    delay(10 * 1000);

  bmm150_mag_data value;
  bmm.read_mag_data();

  if(!setup_flag){
     setup_flag = 1;

     if(bmm.initialize() == BMM150_E_ID_NOT_CONFORM) {
    Serial.println("Chip ID can not read!");
    while(1);
  } else {
    Serial.println("Initialize done!");
  }
  if (!bme.begin(0x76)){  
      Serial.println("Could not find a valid BMP280 sensor, check wiring!");
      while (1);
  }
 }

 if(digitalRead(M5_BUTTON_HOME) == LOW){
  setup_flag = 0;
  while(digitalRead(M5_BUTTON_HOME) == LOW);
 }
}

インクルードするファイルはサンプルのをそのまま使う。

で、ちゃんとENV HATで同じ表示が出るようになった。

 

次の台風(あんまり酷いのはやめて欲しい…)の時には、余裕があればこれで計測しようっと。

Sponsered Link

M5Stackのパネル修理(未完)

以前M5Stackを落っことして表示不可になり、画面にヒビが入ったことはちょっと書いた。

その画面のパネル交換ができるキットがオフィシャルで発売されていたので、セールの時にいろんなものと同時に購入してみた。

購入したのはこれ。

AliExpress.com Product - M5Stack Glass Panel Repair Kit External Acrylic Material Screen Replacement

自分の場合は割れた画面だけでいいんだけど、ボタンも付いてくる。

修理方法は販売してるサイトにも載っていた。

 https://www.aliexpress.com/item/4000020264189.html

あんまり難しいことはしてないですね。

 

壊れたM5Stackは画面が割れただけなら良かったんだけど、電源入れても表示が白くなっちゃうだけだったんで、諦めていた。

しかし先日、電源を入れてみたらなぜか表示された。

自然治癒したんだろうか…。

謎ではあるんだけど、それならパネルの修理だけしようと、届いたキットの吸盤で引っぺがした。

ホントにこれだけで外せた。iPhoneみたい。

しかし新しいパネルを貼る前に、もう一度電源を入れてみたら…

また白くなってしまった…。

 

やっぱりLCD自体が不具合起こしてるんだなあ。

しかし捨てるのももったいないし、パネル交換は一時中断して、なんとかならないかもうちょっと足掻いてみます。

(新しいM5Stack買った方が安いし早い、という気もしなくもない)

Sponsered Link

M5StickV(その4)

M5StickV回りの進化が早すぎて、やったこととメモするのも追いつかない。
特にドキュメントの更新も早く、いつの間にか内容が更新されている。

前よりずっとわかりやすくなっている。

 https://docs.m5stack.com/#/en/related_documents/v-training

その中で、一番大きい点が1クラスあたり120枚以上の画像撮影が必要だったのが、35枚以上と半分以下に変更されているところ。
これは大助かり。かなり作業が楽になる。
認識率が悪かったものをまた撮影して、データを作り直してみたいと思う。

 

それとは別件で、先日Google Colaboratory上で画像認識のトレーニングをする方法について、いろいろ調べてた件。
M5StickV用のデータまで作ることができるコードを公開しているので、とても勉強になる。
(しかし自分ではほとんど理解が追いつかない…)

 https://colab.research.google.com/drive/1mirG8BSoB3k87mh-qyY3-8-ZXj0XB6h6#scrollTo=zZaQb4KqNBzW

これを自分でもやってみた。
というより、ただ単に自分のGoogle Colaboratoryの「Python3の新しいノートブック」を開いて、コードをブロックごとにコピペしては実行しただけ。

 

DropBoxに画像データを置く必要があるんだけど、これは先日M5StickVで撮影したものを100枚ずつ入れた。
これを圧縮。フォルダの構成と内容は、
neko.zip
   ---nikol
      ---1.jpg

      ---2.jpg

      ...
   ---_lion
      ---1.jpg

      ---2.jpg

      ...
…という感じ。
フォルダ名はそのまま認識画面で使用される。
なのでカスタムする箇所は本当に何もない。


各コードは基本的に普通のコピペでいいんだけど、画像を置いたDropBoxのURLを記入するところだけ、セルのコピーを行った。
(普通のコピペでエラーになって気付いた)

この方法の何がいいって、中で何やってるか画像で見えるようにされるとこ。
こういう風に。

グラフや画像を作ってくれるんだけど、実は解析結果をどう見ればいいのか全然わかってない。
ただ、かみねこぬいぐるみの認識率がやはりダメダメなのはよくわかった…。

 

最終的にM5StickV用のデータまで作ってくれて、ダウンロードできるので、これを入れて起動すれば画像認識ができる。

無事に成功。


撮影した画像の何が悪いのか確認するのにいいんだけど、どういうことをしているのか読み解いていくのも面白そう。
自分でカスタムできるようになるのは、まだその先だろうなあ。

Sponsered Link

M5StickV(その3)

本家から、M5StickVのみを使ってお手軽に物体認識のトレーニングできる方法が出てきた。

これはすごい。というより、この進化の速さがすごいと言うべきか。

 https://docs.m5stack.com/#/en/related_documents/v-training

写真撮影もM5StickVのみというのが良い。

撮影したデータは圧縮してクラウド上にアップロードしてトレーニングさせる必要がある。

 

となると、やっぱり自力でやってみたくなる。

やったことは公式のドキュメント通り。

専用のファームウェアをM5StickVに焼き直す際、自分の通常の環境がMacだったため、以前Maix Goで使用したちょっと古いKflash_guiを使用した。

 

手順を一応書いておく。(たぶん自分が後で忘れてるので)

まずはドキュメントの「Click to download firmware file」から「M5StickV_Firmware_0813.kfpkg」をダウンロード。

Kflash_guiを起動し、ファイルとデバイス(Ver.1.32だったのでMaix Goを選択)とM5StickVを接続したポートを選択して書き込む。

書き込む時に速度が速いとエラーになったので、一番遅くしたら時間がかかった。でも成功。

 

公式ドキュメントから今度は「Click here download bootzip」から「V-Training_boot_0823.zip」をダウンロードし、解凍。

MicroSDカードにフォルダの中身の3つのファイルをコピーし、M5StickVに挿して起動。

この画面通り、カメラが起動したらメインのボタンでシャッターを押して1種類につき120枚以上の画像を撮影し、別の種類の時に上のボタンを押してまた120枚撮影。原寸はこんな感じ。

これを3種類(3クラス)以上行う。疲れた。

 

もう一度SDカードを引っこ抜いて、中にできた二つのフォルダを接続したPCにコピー。

「train」に1から100と121からそれ以上の画像、「vaild」に101〜120が入ってるはず。

確認したら二つまとめてzipに圧縮して、今度は「lick to visit upload page」のところからzipファイルをアップロード。

アップロードにはメールアドレスが必要。

トレーニングが完了したらメールで教えてくれるので、そこに書いてあるリンクをクリックすると必要なデータがダウンロードされる。

ダウンロードしたファイルを解凍し、中にある3つのファイルをまたSDカードにコピーして(前のは捨てる)、M5StickVに挿して起動。

 

今回認識に使用したのは机に置いてあるぬいぐるみたち。

カミネコが二匹あるけど、片方はヤママヤーに変更しました。(懐かしい…)

最初は胴体まで入れてたんだけど、認識率が良くなかったので頭の部分を中心に撮影して二度目で成功。

ただ、その二度目の画像もアップロード後にエラーが出て、3度繰り返したせいで(?)M5Stackの中の人がメンテしてくれました。(わざわざメールくれました…申し訳ない)

ざっと検索してみた限りでは、Tensorflowのエラーのようだったけど治ったみたいです。

 

ツイッターに上げた通り、ニコルとポンデライオンの認識率は高いんですがそれ以外が微妙。

またやり直すか、他のぬいぐるみとかオブジェクトに変えてみるかしてみます。

でも120回以上映すの、大変なんだよなあ。

Sponsered Link