M5StickC_Plus

2021年12月25日 (土)

ENV2_HAT_M5StickC_Plus

2021/12/25
初版

ENV2_HAT_M5StickC_Plus

ENV2_HAT_M5StickC_Plus

概要

M5StickC Plus と Env2 Hatで持ち歩き温湿度計を作る その5」のArduino_IDE用スケッチをplatformioでビルドする。

ビルド

以下の手順でビルドする:

# platformio環境に入る cd M5SCP mkdir Plus_Env2Hat cd Plus_Env2Hat # ソースをダウンロードする git clone https://github.com/hakutai/Plus_Env2Hat.git cp -r Plus_Env2Hat src gedit platformio.ini # 次節のplatformio.iniの内容を作成する # platformio環境ではheaderが干渉して # エラーになるようなので削除する # (Arduino-IDEでは問題無し) rm src/Adafruit_Sensor.h pio run -t clean pio run -t upload

以上でビルド/書き込みが終了する。

platformio.ini

[env:M5StickCPlus] platform = espressif32 board = m5stick-c framework = arduino build_flags = -DM5STICK_CP monitor_speed = 115200 lib_ldf_mode = deep+ lib_deps = m5stack/M5StickCPlus @ ^0.0.5 tinyu-zhao/FFT @ ^0.0.1 m5stack/UNIT_ENV @ ^0.0.2 adafruit/Adafruit BMP280 Library @ ^2.5.0 adafruit/Adafruit Unified Sensor @ ^1.1.4

取説

以下のURL参照のこと:
https://github.com/hakutai/Plus_Env2Hat/blob/main/README_jp.md

補足:エラー修正

Arduino-IDEでビルドできているENVII_SHT30_BMP280スケッチなどを
platformioでビルドする際、「Adafruit_Sensor.h」関連でエラーが出る 場合、
src中の「Adafruit_Sensor.h」を削除する。

具体例:

# ソースのダウンロード cd ~/Downloads git clone https://github.com/m5stack/M5StickC-Plus.git cp -r ~/Downloads/M5StickC-Plus/examples/Hat/ENVII_SHT30_BMP280 src rm src/Adafruit_Sensor.h

参考情報

M5StickC_Plus関連:
M5StickC Plus と Env2 Hatで持ち歩き温湿度計を作る その5
M5StickC Plus と Env2 Hatで持ち歩き温湿度計を作る その2
WBGT警報機さらにその後【M5StickC Plus】
M5StickCとM5StickC Plusの違い
M5StickC Plusで在宅勤務用の環境モニターを作った
M5StickC plusとNCIR hatでポータブル非接触体温計を作る

【Arduino】M5StickCの画面制御を極める!画面表示のすすめ

platformio関連:
arduinoフレームワーク用platformio.ini集
Building Core2 FactoryDemo in PlatformIO
VSCodeとPlatformIOでM5Stack Core2開発
M5Stack Core2とVSCode + PlatformIOとでM5Stackプログラミングを始めてみた。

Arduino-IDE関連:
Arduino IDE environment - M5Paper
Arduino IDEのインストールと設定 (Windows, Mac, Linux対応)

M5Stackファミリ関連:
M5Paper Arduino Install
M5CoreInk Arduino Install
M5Stamp-PICO Arduino Install
M5Stamp-C3 Arduino Install
Wio-Terminal/ESP8622/ESP32ボードを共通のスケッチで動かす(NTP-CLIENT編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(STARWARS編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(MQTT編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(REST-API編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(OSC編)

その他:
スルーホール用テストワイヤ TT-200 (10本入)

以上

続きを読む "ENV2_HAT_M5StickC_Plus"

| | コメント (0)

NTPによる時刻設定(M5StickC_Plus, M5CoreInk, M5Core2)

2021/12/26
サポートボードとしてM5Core2を追加した。

2021/12/25
初版

NTPによる時刻設定(M5StickC_Plus, M5CoreInk, M5Core2)

NTPによる時刻設定(M5StickC_Plus, M5CoreInk, M5Core2)

概要

M5StickC_Plus, M5CoreInk, M5Core2は、RTC内蔵されており電源オフでも時刻を保存している。ここでは、NTPに時刻設定するスケッチを紹介する。
M5StickCのRTCをNTPサーバーからセットする」のスケッチを参考にして、M5StickC_Plus, M5CoreInk,M5Core2用に修正する。ソースは共通になっており、platformio.iniの内容で切り替えてビルドする。

ソース

以下のようにソースを修正する:
src/main.ino

//#define M5CI //#define M5C2 //#define M5STICK_CP #ifdef M5STICK_CP //#include <M5StickC.h> #include <M5StickCPlus.h> #endif #ifdef M5C2 #include <M5Core2.h> #endif #ifdef M5CI #include "M5CoreInk.h" #endif #include <WiFi.h> #include "time.h" #ifdef M5CI Ink_Sprite InkPageSprite(&M5.M5Ink); char titleStrbuff[64]; char ntpStrbuff[64]; char dateStrbuff[64]; char weekStrbuff[64]; char timeStrbuff[64]; #endif const char* ssid = "your_ssid"; const char* password = "your_password"; const char* ntpServer = "ntp.jst.mfeed.ad.jp"; RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; void setup() { #ifdef M5CI M5.begin(); if( !M5.M5Ink.isInit()) { Serial.printf("Ink Init faild"); } M5.M5Ink.clear(); delay(1000); //creat ink refresh Sprite if( InkPageSprite.creatSprite(0,0,200,200,true) != 0 ) { Serial.printf("Ink Sprite creat faild"); } #endif #ifndef M5CI // put your setup code here, to run once: M5.begin(); M5.Lcd.setRotation(3); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextSize(1); M5.Lcd.setCursor(40, 0, 2); M5.Lcd.println("RTC NTP TEST"); #endif // connect to WiFi Serial.printf("Connecting to %s ", ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" CONNECTED"); // Set ntp time to local configTime(9 * 3600, 0, ntpServer); // Get local time struct tm timeInfo; if (getLocalTime(&timeInfo)) { #ifndef M5CI M5.Lcd.print(" NTP : "); M5.Lcd.println(ntpServer); #endif // Set RTC time RTC_TimeTypeDef TimeStruct; TimeStruct.Hours = timeInfo.tm_hour; TimeStruct.Minutes = timeInfo.tm_min; TimeStruct.Seconds = timeInfo.tm_sec; #ifndef M5CI M5.Rtc.SetTime(&TimeStruct); #endif #ifdef M5CI M5.rtc.SetTime(&TimeStruct); #endif 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; #ifdef M5STICK_CP M5.Rtc.SetData(&DateStruct); #endif #ifdef M5C2 M5.Rtc.SetDate(&DateStruct); #endif #ifdef M5CI M5.rtc.SetData(&DateStruct); #endif } //disconnect WiFi WiFi.disconnect(true); WiFi.mode(WIFI_OFF); } void loop() { static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"}; #ifndef M5CI // put your main code here, to run repeatedly: M5.Rtc.GetTime(&RTC_TimeStruct); #ifdef M5STICK_CP M5.Rtc.GetData(&RTC_DateStruct); #endif #ifdef M5C2 M5.Rtc.GetDate(&RTC_DateStruct); #endif M5.Lcd.setCursor(0, 30); M5.Lcd.printf(" Date: %04d-%02d-%02d\n", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Date); M5.Lcd.printf(" Week: %s\n", wd[RTC_DateStruct.WeekDay]); M5.Lcd.printf(" Time: %02d : %02d : %02d\n", RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seconds); #endif #ifdef M5CI // put your main code here, to run repeatedly: M5.rtc.GetTime(&RTC_TimeStruct); M5.rtc.GetData(&RTC_DateStruct); sprintf(titleStrbuff,"RTC NTP TEST"); sprintf(ntpStrbuff,"NTP:%s", ntpServer); sprintf(dateStrbuff,"Date: %04d-%02d-%02d", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Date); sprintf(weekStrbuff,"Week: %s", wd[RTC_DateStruct.WeekDay]); sprintf(timeStrbuff,"Time: %02d : %02d : %02d", RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seconds); InkPageSprite.clear(); InkPageSprite.drawString(5,5,titleStrbuff); InkPageSprite.drawString(5,20,ntpStrbuff); InkPageSprite.drawString(5,35,dateStrbuff); InkPageSprite.drawString(5,50,weekStrbuff); InkPageSprite.drawString(5,65,timeStrbuff); InkPageSprite.pushSprite(); #endif delay(500); }

以下は、自分の環境に合わせて修正すること:

const char* ssid = "your_ssid"; const char* password = "your_password"; const char* ntpServer = "ntp.jst.mfeed.ad.jp";

platformio.ini

M5StickC_Plus, M5CoreInk. M5Core2用は以下のようになり、ビルドのターゲットに合わせて内容を変更してビルドする。

M5StickC_Plus用:
platformio.ini

[env:M5StickCPlus] platform = espressif32 board = m5stick-c framework = arduino build_flags = -DM5STICK_CP monitor_speed = 115200 lib_ldf_mode = deep+ lib_deps = m5stack/M5StickCPlus @ ^0.0.5 tinyu-zhao/FFT @ ^0.0.1 m5stack/UNIT_ENV @ ^0.0.2 adafruit/Adafruit BMP280 Library @ ^2.5.0 adafruit/Adafruit Unified Sensor @ ^1.1.4

M5CoreInk用:
platformio.ini

[env:M5CoreInk] platform = espressif32 board = m5stick-c framework = arduino build_flags = -DM5CI upload_poert = /dev/ttyUSB0 monitor_speed = 115200 lib_deps = m5stack/M5-CoreInk @ ^0.0.2 knolleary/PubSubClient @ ^2.8 m5stack/UNIT_ENV @ ^0.0.2 lib_ldf_mode = deep+

M5Core2用:
platformio.ini

[env:m5core2] platform = espressif32 board = m5stack-core2 framework = arduino upload_speed = 2000000 monitor_speed = 115200 board_build.partitions = default_16MB.csv build_flags = -DM5C2 -DCORE_DEBUG_LEVEL=4 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue lib_deps = https://github.com/m5stack/M5Core2.git https://github.com/FastLED/FastLED ;https://github.com/m5stack/M5Core2/blob/master/examples/core2_for_aws/ArduinoECCX08.zip lovyan03/LovyanGFX adafruit/Adafruit BMP280 Library @ ^2.5.0 adafruit/Adafruit Unified Sensor @ ^1.1.4 m5stack/UNIT_ENV @ ^0.0.2 lib_ldf_mode = deep+

なお、ファイルとして、default_16MB.csvが必要になる。
以下の手順でダウンロードすること:

wget https://github.com/espressif/arduino-esp32/blob/master/tools/partitions/default_16MB.csv

動作

ビルドして起動するとNTP同期した時刻が表示される。
一回動かせば時刻が設定されるので、他のスケッチを書き込んでも、設定された時刻が保存される。

参考情報

platformio関連:
arduinoフレームワーク用platformio.ini集
Building Core2 FactoryDemo in PlatformIO
VSCodeとPlatformIOでM5Stack Core2開発
M5Stack Core2とVSCode + PlatformIOとでM5Stackプログラミングを始めてみた。

Arduino-IDE関連:
Arduino IDE environment - M5Paper
Arduino IDEのインストールと設定 (Windows, Mac, Linux対応)

M5Stackファミリ関連:
M5Core2 Arduino Install
M5Paper Arduino Install
M5CoreInk Arduino Install
M5Stamp-PICO Arduino Install
M5Stamp-C3 Arduino Install
Wio-Terminal/ESP8622/ESP32ボードを共通のスケッチで動かす(NTP-CLIENT編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(STARWARS編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(MQTT編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(REST-API編)
Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(OSC編)

その他:
スルーホール用テストワイヤ TT-200 (10本入)

以上

続きを読む "NTPによる時刻設定(M5StickC_Plus, M5CoreInk, M5Core2)"

| | コメント (0)