M5StackCore2を動かしてみた!(その1)
ようやくM5StackCore2を動かしました!
動かした際のトピックを紹介します。😙
M5StackCore2のライブラリーはArduinoのライブラリーの管理からインストールできます!
⭐️開発ボードの設定は ESP32Dev Moduleで動く
⭐️ESP32 Dev Module用のソフトとして書いたものはそのまま動く
⭐️M5Stack Basicなどのソフトは基本的に動くが、ボタンがないため、ボタンを使用するものはコンパルできない。(ボタンを使うソフトが多いため、そのままではほぼ動かない)
⭐️M5Stack Basicに比べサンプルソフトが少なく、自力で作らなければ多い部分が多い。
⭐️M5Stack Basicのソフトを流用する場合は、必ず以下の2点を書き換えてください。これやらないと、なぜかUBSモジュールの電力がオーバーしてますと言うメッセージが出て、USBを切られてしまいます。(実際にはオーバーしでないんだけど、よく分かりません💦)
あとM5.beginを実行するとLCDがオンになって緑のPOWER LEDが光るようです。後でライブラリーのソースを確認してみます。😃
#include <M5Stack.h>
↓
#include <M5Core2.h>
void setup(){
M5.begin();
↓
void setup() {
M5.begin(true, true, true, true);
とりあえず、サクッと時計を作ってみました。wifiからインターネットに接続してntpサーバーから時間を取得してリアルタイムクロックへの設定し、LCDに表示しています。💯
#include <M5Core2.h>
#include <RTC.h>
#include <WiFi.h>
const char* ntpServer = "time.cloudflare.com";
RTC rtc;
void setup() {
M5.begin(true, true, true, true);
// Init Serial
Serial.begin(115200);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(2);
M5.Lcd.clear(BLACK);
// Connect to an access point
//WiFi.begin(); // Connect to the access point of the last connection
WiFi.begin("HUAWEI P30", "a5b5a270f902"); // Or, Connect to the specified access point
int count=0;
Serial.print("Connecting to Wi-Fi ");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
count++;
if(count>10){break;}
}
if(count <10){
Serial.println(" CONNECTED");
// Set ntp time to local
//configTime(9 * 3600, 0, ntpServer);
configTime(9 * 3600,0, "ntp.jst.mfeed.ad.jp");
}
else Serial.println(" No CONNECTED...");
// Init RTC
rtc.begin();
// Get local time
struct tm timeInfo;
if (getLocalTime(&timeInfo)) {
// Set RTC time
RTC_TimeTypeDef timeStruct;
timeStruct.Hours = timeInfo.tm_hour;
timeStruct.Minutes = timeInfo.tm_min;
timeStruct.Seconds = timeInfo.tm_sec;
rtc.SetTime(&timeStruct);
// Set RTC Date
RTC_DateTypeDef dateStruct;
dateStruct.WeekDay = timeInfo.tm_wday;
dateStruct.Month = timeInfo.tm_mon + 1;
dateStruct.Date = timeInfo.tm_mday;
dateStruct.Year = timeInfo.tm_year + 1900;
rtc.SetData(&dateStruct);
}
WiFi.disconnect(true);
}
void loop() {
RTC_DateTypeDef dateStruct,dateold;
RTC_TimeTypeDef timeStruct,timeold;
rtc.GetData(&dateStruct);
rtc.GetTime(&timeStruct);
dateold = dateStruct;
timeold = timeStruct;
while(1){
// Get RTC
rtc.GetData(&dateStruct);
rtc.GetTime(&timeStruct);
// Print RTC
/*Serial.printf("%04d/%02d/%02d %02d:%02d:%02d\n",
dateStruct.Year,
dateStruct.Month,
dateStruct.Date,
timeStruct.Hours,
timeStruct.Minutes,
timeStruct.Seconds
);
*/
M5.Lcd.setTextColor(BLACK);
M5.Lcd.setCursor(10, 10);
M5.Lcd.printf("%02d:%02d:%02d\n",
timeold.Hours,
timeold.Minutes,
timeold.Seconds
);
/*M5.Lcd.printf("%04d/%02d/%02d %02d:%02d:%02d\n",
dateold.Year,
dateold.Month,
dateold.Date,
timeold.Hours,
timeold.Minutes,
timeold.Seconds
);
*/
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setCursor(10, 10);
M5.Lcd.printf("%02d:%02d:%02d\n",
timeStruct.Hours,
timeStruct.Minutes,
timeStruct.Seconds
);
dateold = dateStruct;
timeold = timeStruct;
// Wait
delay(1000);
}
}
WIFIでネットに接続して時刻サーバー(time.cloudflare.com)より時間を接続してリアルタイムクロックに設定します。リアルタイムクロックは当然バックアップされているので、一度設定してしまえば電源を落としても時間は狂いません。
リアルタイムクロックの設定やLCDの表示はM5StackCore2のライブラリーを使いました。😉
今回、久しぶりにLCDの表示を部分を作って表示系は難しいなと思いました。
時間を表示しているだけなのですがprintfで書き換えると、前回書いた文字を消してから描かないと文字が重ねて描かれちゃったり、一度画面をクリアしてから描くと処理速度の関係で画面がチラついたりと。
昔のパソコン(N88BASIC)のグラフィックで苦戦したことを思い出しました。
若い頃は根気よくやってたなぁ〜😅
LCDのライブラリーに関しては、XORを取って必要な部分だけ更新するとか、スプライトのようなもの使うとか工夫が必要かも知れませんね。
その前にエンジニアには絵心がありませんが。💦
M5Stackですが、ardunioで遊ぼうかUIflowで遊ぼうか迷ってしたが、Ulflowを使ったことがないのでとりあえず、Ulflowでやってみようかなとも思ってます。
では✋
この記事が気に入ったらサポートをしてみませんか?