IoT+WEBのためのホームサーバ計画の実装編14。M5StickCに情報を表示させる。
2020-03-08 2020-03-10
M5STACKでやってみたので次はM5StickCでやってみる
ということで、前回っていうか昨日、M5Stackでシリアル通信して、
情報を表示するってのをやりました。
本日午前中、ポチったM5StickCがきてたので、これでもやってみます。
環境の変更
環境の変更っていってもたいしたことは無いですね。
Arduino IDEにて、、ライブラリをincludeです。
ライブラリマネージャで『M5StickC』を指定して、そのままincludeしましょ。
そして、TOOLからボードの設定ですね。
あとは、シリアルポートを変更して、そんでOKでしょう。たぶん^^;
しかし、DeviceManagerで見ると、こんな雑な感じですが。。。。^^;
スケッチという名のプログラムの変更
前回使った、 ScrollTextWindowというのが動かないので、超安易に自分で作ります。
こんな感じで。
char tmpS[16][256];
int nowRow = 0;
//--------------------------------------
void M5Sprint(int row,char* p){
char s[256];
sprintf(s,"%s ",p);
s[26] = 0;
M5.Lcd.setCursor(0, row*8+8);
M5.Lcd.print(s);
}
//--------------------------------------
void M5Sprint(char* p){
char tmpstr[256];
strncpy(tmpstr,p,208);
tmpstr[208] = 0; // 最大文字列。26x8行分
int n = (strlen(tmpstr)-1) / 26 + 1; // 行数
for(int w=0;w<n;w++){
strncpy(tmpS[nowRow+w],&tmpstr[w*26],26);
tmpS[nowRow+w][26] = 0;
}
int sa = 0;
if(nowRow + n > 7){
sa = nowRow + n - 7; // scroll量
}
if(sa){
for(int w=0;w<8;w++){
strcpy(tmpS[w],tmpS[w+sa]);
}
}
nowRow += n;
if(nowRow>7) nowRow = 7;
//26文字改行
for(int w=0;w<8;w++){
M5Sprint(w,tmpS[w]);
}
}
//--------------------------------------
なんとなく配列に突っ込んで、あとは行数分表示っていう、無理やり感満載の感じで。
決して良いサンプルとは言えません^^;
あとは、、こんな感じです。
//--------------------------------------
void setup(void) {
memset(&tmpS[0],0,256*16);//26文字まで
M5.begin();
M5.IMU.Init();
Serial.begin(19200);
M5.Lcd.setRotation(1);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextColor(WHITE, NAVY);
M5.Lcd.drawString(" *FINRED IoT Web world! ",0,0);
M5.Lcd.drawString(" by Hiraide ", 0, 72);
M5.Lcd.setTextColor(ORANGE, BLACK);
M5.Lcd.setCursor(0, 8);
M5Sprint(0,"Ready.");
}
void loop() {
if ( Serial.available() > 0 ) {
try{
String str = Serial.readStringUntil('\n');
M5Sprint((char*)str.c_str());
}catch(...){
M5Sprint("CATCH EXCEPTION!\r\n");
}
}
delay(100);
}
Python側は、とりあえずサーチする部分を追加して見つけられるようにします。
前も書いた通り、ホントはこれだけじゃダメですよ。
通信して、何らかのサインを戻して確認するべきですよね。
if str(com[1]).startswith("Silicon Labs CP210x USB to UART Bridge"):
self.use_port = com
return True
#以下を追加
elif str(com[1]).startswith("USB Serial Port"):#M5StickCはこんなアバウトなやつやってん。^^;
self.use_port = com
return True
追記ですが、RaspberryPiでは、『USB Serial Port』ではなく、『M5Stack Intf』でした
結果(o^^o)
結果(o^^o)
で、結果です。
カッコイイっす(o^^o)
ちょっと見にくいけど、8行+ヘッダフッタ2行表示できるので、、結構イイ感じです。
おしまい。(o^^o)