From 34fd1ddbc8affdcf4fd7a3ceada7c476e46cf890 Mon Sep 17 00:00:00 2001 From: Scott Mebberson <74628+smebberson@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:54:46 +1030 Subject: [PATCH 1/2] Create an example that works on ESP32-S3 devices Replaces https://github.com/m5stack/M5Stack/blob/master/examples/Unit/ToF_VL53L0X/ToF_VL53L0X.ino --- .../UnitUnified/UnitToF/simpleDisplay.ino | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 examples/UnitUnified/UnitToF/simpleDisplay.ino diff --git a/examples/UnitUnified/UnitToF/simpleDisplay.ino b/examples/UnitUnified/UnitToF/simpleDisplay.ino new file mode 100644 index 0000000..adbb71f --- /dev/null +++ b/examples/UnitUnified/UnitToF/simpleDisplay.ino @@ -0,0 +1,65 @@ +/* + Example using M5UnitUnified for UnitToF (this works on ESP32-S3 based devices) +*/ +#include +#include +#include +#include + +namespace { +auto& lcd = M5.Display; +m5::unit::UnitUnified Units; +m5::unit::UnitToF unit; +} // namespace + +String lastDisplayedText = ""; + +void setup() +{ + M5.begin(); + + auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda); + auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl); + + Wire.begin(pin_num_sda, pin_num_scl, 400 * 1000U); + + Serial.begin(115200); + Serial.println("Starting..."); + + M5.Display.setTextColor(TFT_ORANGE); + M5.Display.setTextDatum(middle_center); + M5.Display.setTextFont(&fonts::Orbitron_Light_32); + M5.Display.setTextSize(2); + + if (!Units.add(unit, Wire) || !Units.begin()) { + M5_LOGE("Failed to begin"); + lcd.clear(TFT_RED); + while (true) { + m5::utility::delay(10000); + } + } + + Serial.println("M5UnitUnified has begun"); + Serial.println(Units.debugInfo().c_str()); + + lcd.clear(); +} + +void loop() +{ + M5.update(); + Units.update(); + + String range = lastDisplayedText; + + if (unit.updated()) { + range = String(unit.range()); + } + + if (lastDisplayedText != range) { + M5.Display.clear(); + M5.Display.drawString(range, M5.Display.width() / 2, M5.Display.height() / 2); + + lastDisplayedText = range; + } +} From 21acdcb194700db1753d645468c1866132cf94bb Mon Sep 17 00:00:00 2001 From: GOB Date: Mon, 3 Feb 2025 13:42:40 +0900 Subject: [PATCH 2/2] Fixes based on M5UnitUnified style. Add ToF4M too --- .../workflows/arduino-esp-v2-build-check.yml | 17 +++++ .../workflows/arduino-esp-v3-build-check.yml | 18 +++++ .github/workflows/arduino-m5-build-check.yml | 17 +++++ .github/workflows/platformio-build-check.yml | 14 ++++ .../UnitToF/SimpleDisplay/SimpleDisplay.ino | 9 +++ .../SimpleDisplay/main/SimpleDisplay.cpp | 67 +++++++++++++++++++ .../UnitUnified/UnitToF/simpleDisplay.ino | 65 ------------------ .../UnitToF4M/SimpleDisplay/SimpleDisplay.ino | 9 +++ .../SimpleDisplay/main/SimpleDisplay.cpp | 67 +++++++++++++++++++ platformio.ini | 14 ++++ 10 files changed, 232 insertions(+), 65 deletions(-) create mode 100644 examples/UnitUnified/UnitToF/SimpleDisplay/SimpleDisplay.ino create mode 100644 examples/UnitUnified/UnitToF/SimpleDisplay/main/SimpleDisplay.cpp delete mode 100644 examples/UnitUnified/UnitToF/simpleDisplay.ino create mode 100644 examples/UnitUnified/UnitToF4M/SimpleDisplay/SimpleDisplay.ino create mode 100644 examples/UnitUnified/UnitToF4M/SimpleDisplay/main/SimpleDisplay.cpp diff --git a/.github/workflows/arduino-esp-v2-build-check.yml b/.github/workflows/arduino-esp-v2-build-check.yml index 07f389d..92f3f0b 100644 --- a/.github/workflows/arduino-esp-v2-build-check.yml +++ b/.github/workflows/arduino-esp-v2-build-check.yml @@ -81,6 +81,23 @@ jobs: archi: - esp32 + include: + # Specific sketches for m5stack-core-esp32 only + - sketch: SimpleDisplay + platform-url: https://espressif.github.io/arduino-esp32/package_esp32_index.json + platform: esp32 + archi: esp32 + platform-version: 2.0.17 + board: m5stack-core-esp32 + unit: UnitToF + - sketch: SimpleDisplay + platform-url: https://espressif.github.io/arduino-esp32/package_esp32_index.json + platform: esp32 + archi: esp32 + platform-version: 2.0.17 + board: m5stack-core-esp32 + unit: UnitToF4M + steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/arduino-esp-v3-build-check.yml b/.github/workflows/arduino-esp-v3-build-check.yml index 5e3f352..e66709b 100644 --- a/.github/workflows/arduino-esp-v3-build-check.yml +++ b/.github/workflows/arduino-esp-v3-build-check.yml @@ -97,6 +97,24 @@ jobs: archi: - esp32 + include: + # Specific sketches for m5stack-core-esp32 only + - sketch: SimpleDisplay + platform-url: https://espressif.github.io/arduino-esp32/package_esp32_index.json + platform-version: 3.0.4 + platform: esp32 + archi: esp32 + board: m5stack_core + unit: UnitToF + - sketch: SimpleDisplay + platform-url: https://espressif.github.io/arduino-esp32/package_esp32_index.json + platform-version: 3.0.4 + platform: esp32 + archi: esp32 + board: m5stack_core + unit: UnitToF4M + + steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/arduino-m5-build-check.yml b/.github/workflows/arduino-m5-build-check.yml index 5c87bd2..952839f 100644 --- a/.github/workflows/arduino-m5-build-check.yml +++ b/.github/workflows/arduino-m5-build-check.yml @@ -99,6 +99,23 @@ jobs: archi: - esp32 + include: + # Specific sketches for m5stack-core-esp32 only + - sketch: SimpleDisplay + platform-url: https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json + platform-version: 2.1.2 + platform: m5stack + archi: esp32 + board: m5stack_core + unit: UnitToF + - sketch: SimpleDisplay + platform-url: https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json + platform-version: 2.1.2 + platform: m5stack + archi: esp32 + board: m5stack_core + unit: UnitToF4M + steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/platformio-build-check.yml b/.github/workflows/platformio-build-check.yml index 011ee73..65c3dad 100644 --- a/.github/workflows/platformio-build-check.yml +++ b/.github/workflows/platformio-build-check.yml @@ -113,6 +113,20 @@ jobs: # - board: Paper # espressif32: '4_4_0' + + include: + # Specific sketches for m5stack-core-esp32 only + - example: SimpleDisplay + unit: UnitToF + board: Core + framework: Arduino + espressif32: latest + - example: SimpleDisplay + unit: UnitToF4M + board: Core + framework: Arduino + espressif32: latest + steps: - name: Checkout uses: actions/checkout@v4 diff --git a/examples/UnitUnified/UnitToF/SimpleDisplay/SimpleDisplay.ino b/examples/UnitUnified/UnitToF/SimpleDisplay/SimpleDisplay.ino new file mode 100644 index 0000000..0e0462b --- /dev/null +++ b/examples/UnitUnified/UnitToF/SimpleDisplay/SimpleDisplay.ino @@ -0,0 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD + * + * SPDX-License-Identifier: MIT + */ +/* + Example using M5UnitUnified for UnitToF +*/ +#include "main/SimpleDisplay.cpp" diff --git a/examples/UnitUnified/UnitToF/SimpleDisplay/main/SimpleDisplay.cpp b/examples/UnitUnified/UnitToF/SimpleDisplay/main/SimpleDisplay.cpp new file mode 100644 index 0000000..a5c7d79 --- /dev/null +++ b/examples/UnitUnified/UnitToF/SimpleDisplay/main/SimpleDisplay.cpp @@ -0,0 +1,67 @@ +/* + * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD + * + * SPDX-License-Identifier: MIT + */ +/* + Example using M5UnitUnified for UnitToF +*/ +#include +#include +#include +#include + +namespace { +auto& lcd = M5.Display; +m5::unit::UnitUnified Units; +m5::unit::UnitToF unit; +int16_t lastRange{}; +} // namespace + +void setup() +{ + M5.begin(); + // The screen shall be in landscape mode if exists + if (lcd.height() > lcd.width()) { + lcd.setRotation(1); + } + + auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda); + auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl); + Wire.begin(pin_num_sda, pin_num_scl, 400 * 1000U); + + if (!Units.add(unit, Wire) || !Units.begin()) { + M5_LOGE("Failed to begin"); + lcd.clear(TFT_RED); + while (true) { + m5::utility::delay(10000); + } + } + + M5_LOGI("M5UnitUnified has been begun"); + M5_LOGI("%s", Units.debugInfo().c_str()); + + lcd.setTextColor(TFT_ORANGE); + lcd.setFont(&fonts::Orbitron_Light_32); + lcd.setTextDatum(middle_center); + float scale = lcd.width() / (32 * 4.0f); + lcd.setTextSize(scale, scale); + + lcd.startWrite(); + lcd.clear(); +} + +void loop() +{ + M5.update(); + Units.update(); + + if (unit.updated()) { + auto range = unit.range(); + if (range > 0 && range != lastRange) { + lcd.fillRect(0, lcd.height() / 2 - lcd.fontHeight() / 2, lcd.width(), lcd.fontHeight(), TFT_BLACK); + lcd.drawString(m5::utility::formatString("%d", range).c_str(), lcd.width() / 2, lcd.height() / 2); + lastRange = range; + } + } +} diff --git a/examples/UnitUnified/UnitToF/simpleDisplay.ino b/examples/UnitUnified/UnitToF/simpleDisplay.ino deleted file mode 100644 index adbb71f..0000000 --- a/examples/UnitUnified/UnitToF/simpleDisplay.ino +++ /dev/null @@ -1,65 +0,0 @@ -/* - Example using M5UnitUnified for UnitToF (this works on ESP32-S3 based devices) -*/ -#include -#include -#include -#include - -namespace { -auto& lcd = M5.Display; -m5::unit::UnitUnified Units; -m5::unit::UnitToF unit; -} // namespace - -String lastDisplayedText = ""; - -void setup() -{ - M5.begin(); - - auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda); - auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl); - - Wire.begin(pin_num_sda, pin_num_scl, 400 * 1000U); - - Serial.begin(115200); - Serial.println("Starting..."); - - M5.Display.setTextColor(TFT_ORANGE); - M5.Display.setTextDatum(middle_center); - M5.Display.setTextFont(&fonts::Orbitron_Light_32); - M5.Display.setTextSize(2); - - if (!Units.add(unit, Wire) || !Units.begin()) { - M5_LOGE("Failed to begin"); - lcd.clear(TFT_RED); - while (true) { - m5::utility::delay(10000); - } - } - - Serial.println("M5UnitUnified has begun"); - Serial.println(Units.debugInfo().c_str()); - - lcd.clear(); -} - -void loop() -{ - M5.update(); - Units.update(); - - String range = lastDisplayedText; - - if (unit.updated()) { - range = String(unit.range()); - } - - if (lastDisplayedText != range) { - M5.Display.clear(); - M5.Display.drawString(range, M5.Display.width() / 2, M5.Display.height() / 2); - - lastDisplayedText = range; - } -} diff --git a/examples/UnitUnified/UnitToF4M/SimpleDisplay/SimpleDisplay.ino b/examples/UnitUnified/UnitToF4M/SimpleDisplay/SimpleDisplay.ino new file mode 100644 index 0000000..cec0be3 --- /dev/null +++ b/examples/UnitUnified/UnitToF4M/SimpleDisplay/SimpleDisplay.ino @@ -0,0 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD + * + * SPDX-License-Identifier: MIT + */ +/* + Example using M5UnitUnified for UnitToF4M +*/ +#include "main/SimpleDisplay.cpp" diff --git a/examples/UnitUnified/UnitToF4M/SimpleDisplay/main/SimpleDisplay.cpp b/examples/UnitUnified/UnitToF4M/SimpleDisplay/main/SimpleDisplay.cpp new file mode 100644 index 0000000..d9e8ad2 --- /dev/null +++ b/examples/UnitUnified/UnitToF4M/SimpleDisplay/main/SimpleDisplay.cpp @@ -0,0 +1,67 @@ +/* + * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD + * + * SPDX-License-Identifier: MIT + */ +/* + Example using M5UnitUnified for UnitToF4M +*/ +#include +#include +#include +#include + +namespace { +auto& lcd = M5.Display; +m5::unit::UnitUnified Units; +m5::unit::UnitToF4M unit; +int16_t lastRange{}; +} // namespace + +void setup() +{ + M5.begin(); + // The screen shall be in landscape mode if exists + if (lcd.height() > lcd.width()) { + lcd.setRotation(1); + } + + auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda); + auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl); + Wire.begin(pin_num_sda, pin_num_scl, 400 * 1000U); + + if (!Units.add(unit, Wire) || !Units.begin()) { + M5_LOGE("Failed to begin"); + lcd.clear(TFT_RED); + while (true) { + m5::utility::delay(10000); + } + } + + M5_LOGI("M5UnitUnified has been begun"); + M5_LOGI("%s", Units.debugInfo().c_str()); + + lcd.setTextColor(TFT_ORANGE); + lcd.setFont(&fonts::Orbitron_Light_32); + lcd.setTextDatum(middle_center); + float scale = lcd.width() / (32 * 4.0f); + lcd.setTextSize(scale, scale); + + lcd.startWrite(); + lcd.clear(); +} + +void loop() +{ + M5.update(); + Units.update(); + + if (unit.updated()) { + auto range = unit.range(); + if (range > 0 && range != lastRange) { + lcd.fillRect(0, lcd.height() / 2 - lcd.fontHeight() / 2, lcd.width(), lcd.fontHeight(), TFT_BLACK); + lcd.drawString(m5::utility::formatString("%d", range).c_str(), lcd.width() / 2, lcd.height() / 2); + lastRange = range; + } + } +} diff --git a/platformio.ini b/platformio.ini index f82d773..0950df2 100644 --- a/platformio.ini +++ b/platformio.ini @@ -515,3 +515,17 @@ build_src_filter = +<*> -<.git/> -<.svn/> +<../examples/UnitUnified/UnitToF/Plot [env:UnitToF_PlotToSerial_CoreInk_Arduino_latest] extends=CoreInk, option_release, arduino_latest build_src_filter = +<*> -<.git/> -<.svn/> +<../examples/UnitUnified/UnitToF/PlotToSerial> + +; +; For the following samples, please refer to PlotToSerial to create env for your own environment +; 以下のサンプルは、PlotToSerial を参考にして、自分の環境にあった env を作成してください +; +;SimpleDisplay (ToF) +[env:UnitToF_SimpleDisplay_Core_Arduino_latest] +extends=Core, option_release, arduino_latest +build_src_filter = +<*> -<.git/> -<.svn/> +<../examples/UnitUnified/UnitToF/SimpleDisplay> + +;SimpleDisplay (ToF4M) +[env:UnitToF4M_SimpleDisplay_Core_Arduino_latest] +extends=Core, option_release, arduino_latest +build_src_filter = +<*> -<.git/> -<.svn/> +<../examples/UnitUnified/UnitToF4M/SimpleDisplay>