<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Recently Active Topics]]></title><description><![CDATA[A list of topics that have been active within the past 24 hours]]></description><link>https://community.m5stack.com/recent</link><generator>RSS for Node</generator><lastBuildDate>Wed, 11 Mar 2026 00:47:33 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/recent.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Mar 2026 19:34:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[How to create an infinite loop with a manual exit]]></title><description><![CDATA[<p dir="auto">At the end I used switches and it works.</p>
<p dir="auto">Picture1.png</p>
]]></description><link>https://community.m5stack.com/topic/8127/how-to-create-an-infinite-loop-with-a-manual-exit</link><guid isPermaLink="true">https://community.m5stack.com/topic/8127/how-to-create-an-infinite-loop-with-a-manual-exit</guid><dc:creator><![CDATA[JohnSal]]></dc:creator><pubDate>Tue, 10 Mar 2026 19:34:58 GMT</pubDate></item><item><title><![CDATA[LoRa Point to Point Comms for Cardputer ADV with LoRa868cap]]></title><description><![CDATA[<p dir="auto">Hi. Sorry but I don't use Meshtastic. The software I've written is written from scratch and is deliberately less involved than using Meshtastic's menus. There are lots of videos and articles out there to help you with the menus though.</p>
]]></description><link>https://community.m5stack.com/topic/8015/lora-point-to-point-comms-for-cardputer-adv-with-lora868cap</link><guid isPermaLink="true">https://community.m5stack.com/topic/8015/lora-point-to-point-comms-for-cardputer-adv-with-lora868cap</guid><dc:creator><![CDATA[HectorADV]]></dc:creator><pubDate>Tue, 10 Mar 2026 17:34:23 GMT</pubDate></item><item><title><![CDATA[Issue With Module GPS v2.1 and M5Core2]]></title><description><![CDATA[<p dir="auto">Hi.<br />
Have you tried reading bytes from the GPS and displaying them on a serial monitor as they arrive as below, just to show you are getting data (if the serial setup is incorrect you should still receive data but it will be gibberish):</p>
<p dir="auto">// Serial is the serial monitor<br />
// Serial1 is the GPS data</p>
<p dir="auto">int intChar;<br />
char charChar;<br />
intChar = Serial1.read();<br />
if(inChar != -1){<br />
charChar = (char)intChar;<br />
Serial.print(charChar);<br />
}</p>
<p dir="auto">I have been using the M5Stack GPS v1.1 and it was set to 115200@7N1, not the advertised 115200@8N1 so might be an issue there (I got gibberish at first)</p>
<p dir="auto">Finally my M5Stack GPSv1.1 works fine with an Adafruit Itsy Bitsy 3v controller and an ESP32S3 based controller but not with the Seeed Wio Terminal. With the Seeed Wio Terminal I get nothing at all - no gibberish, absolutely nothing. It's as if the signal is not there (but it is !!).</p>
]]></description><link>https://community.m5stack.com/topic/8125/issue-with-module-gps-v2-1-and-m5core2</link><guid isPermaLink="true">https://community.m5stack.com/topic/8125/issue-with-module-gps-v2-1-and-m5core2</guid><dc:creator><![CDATA[HectorADV]]></dc:creator><pubDate>Tue, 10 Mar 2026 17:25:51 GMT</pubDate></item><item><title><![CDATA[BMI270 on AtomS3R (C126) sign-flips in accelerometer output around high-acceleration events]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">This is copy of the question already asked at <a href="https://github.com/m5stack/M5Unified/issues/230" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/m5stack/M5Unified/issues/230</a></p>
<p dir="auto">Is my test correct? Is this a bad sensor, an an expected sensor limitation? Can it be somehow corrected in hardware settings or software (I'm using M5Unified) ?</p>
<p dir="auto">BMI270 sensor (in M5Stack ATOM S3R C126) produces sign-flips in accelerometer output during high-acceleration events.<br />
By sign-flips I mean that consecutive samples show oscillations where acceleration values flip sign within 10 ms.</p>
<p dir="auto">To test, use the provided code and perform this experiment:</p>
<ol>
<li>Sensor held in hand, palm facing down</li>
<li>Soft pillow placed on rigid table</li>
<li>Hand dropped from ~30cm onto pillow</li>
<li>At impact, hand pressed hard through pillow until table was felt underneath (reducing bounce)</li>
</ol>
<p dir="auto">Example sign-flips, focusing on z-axis (normal to the display) sensor movement trajectory.</p>
<pre><code>grep "14827 " -B 2 -A 10 output.txt
 14807 | raw:( -2285,  -997, -6448) | cal:( -0.236,  0.570, -1.576)  (sensor descent)
 14817 | raw:( -3578,   235,-11929) | cal:(  0.065,  0.885, -2.914)  (sensor descent)
 14827 | raw:( -3527,  1539,-23443) | cal:(  0.383,  0.873, -5.725)  (sensor descent)
 14837 | raw:( -1190,  1725,-32768) | cal:(  0.429,  0.302,  7.999)  FLIP (saturated: raw=-32768)
 14847 | raw:(  2501,  1160,-32768) | cal:(  0.291, -0.599,  7.999)  (saturated)
 14857 | raw:(  7932,  -168,-32580) | cal:( -0.033, -1.925, -7.955)  FLIP BACK
 14867 | raw:( 16790,  -344,-27327) | cal:( -0.076, -4.087, -6.673)
 14881 | raw:( 32767, -7830,  9186) | cal:( -1.904, -7.988,  2.241)  GAP (14867+10=14877, but shows 14881)
 14891 | raw:( 31414,-11571, 31595) | cal:( -2.817, -7.658,  7.712)
 14901 | raw:( 12632,  -802, 32767) | cal:( -0.188, -3.072,  7.998)  (saturated again)
 14911 | raw:( -4568, -9861, 24476) | cal:( -2.400,  1.127,  5.974)
 14921 | raw:(  5535, -2038,-16586) | cal:( -0.490, -1.339, -4.051)  ANOTHER FLIP
 14931 | raw:( -5016, 12606,  9124) | cal:(  3.085,  1.236,  2.226)
</code></pre>
<p dir="auto">What could be the reason for this behavior?<br />
I'm not very familiar with IMUs, so below there are some guesses I was able to find online.<br />
Could this be due to the lack of FIFO reading <a href="https://github.com/m5stack/M5Unified/issues/123" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/m5stack/M5Unified/issues/123</a>, sensor filter ringing, MEMS mechanical resonance, or the prolonged effect of the acceleration range saturation?</p>
<p dir="auto">Are there any workarounds to avoid such flips?</p>
<p dir="auto">The measurement code:</p>
<pre><code>/**
 * @file accel_drop_impact.ino
 * @brief Detect acceleration sign-flips during controlled hand-assisted impacts
 *
 * Test procedure:
 *
 * 1. Sensor held in hand, palm facing down
 * 2. Soft pillow placed on rigid table
 * 3. Hand dropped from ~30cm onto pillow
 * 4. At impact, hand pressed hard through pillow until table was felt underneath (reducing bounce)
 */

#include &lt;M5Unified.h&gt;

static const uint32_t SAMPLING_FREQUENCY_HZ = 100;
static const uint32_t SAMPLING_INTERVAL_MS = 1000 / SAMPLING_FREQUENCY_HZ;  // 10ms

void setup() {
    auto cfg = M5.config();
    cfg.serial_baudrate = 115200;
    M5.begin(cfg);

    Serial.println("\n=== BMI270 HAND-CONTROLLED IMPACT SIGN-FLIP DETECTION ===");
    Serial.println("Using M5Unified defaults: 100 Hz sampling, ±8g accel range");
    Serial.println();

    // Re-initialize I2C
    M5.In_I2C.begin((i2c_port_t)I2C_NUM_0, 45, 0);
    delay(100);
    M5.Imu.update();
    delay(100);

    // M5Unified default calibration
    Serial.println("Calibrating accelerometer baseline (2 seconds)...");
    M5.Imu.setCalibration(64, 64, 64);
    delay(2000);
    M5.Imu.setCalibration(0, 0, 0);

    Serial.println();
    Serial.println("Output format:");
    Serial.println("  timestamp_ms | raw:(x,y,z) LSBs | cal:(x,y,z) g");
    Serial.println("  (all three axes to detect erratic values and cross-talk)");
    Serial.println();
    Serial.println("Ready. Start hand-assisted drops...");
    Serial.println("---");
}

void loop() {
    static uint32_t lastPrint = 0;
    uint32_t now = millis();

    if (M5.Imu.update()) {
        int16_t raw_x = M5.Imu.getRawData(0);
        int16_t raw_y = M5.Imu.getRawData(1);
        int16_t raw_z = M5.Imu.getRawData(2);

        auto data = M5.Imu.getImuData();
        float cal_x = data.accel.x;
        float cal_y = data.accel.y;
        float cal_z = data.accel.z;

        // Print all samples at configured sampling frequency to capture erratic sign-flips
        // (even low values following high values are important for detecting oscillations)
        if (now - lastPrint &gt;= SAMPLING_INTERVAL_MS) {
            Serial.printf("%6lu | raw:(%6d,%6d,%6d) | cal:(%7.3f,%7.3f,%7.3f)\n",
                now,
                raw_x, raw_y, raw_z,
                cal_x, cal_y, cal_z);
            lastPrint = now;
        }
    }

    delay(1);
}
</code></pre>
<p dir="auto">The serial output capture code:</p>
<pre><code>#!/usr/bin/env python3
"""
Capture full-frequency serial output from drop impact test to file.

Usage:
    python capture_serial.py /dev/ttyACM0 output.txt

The script will:
1. Connect to serial port at 115200 baud
2. Read all incoming data
3. Save to file in real-time
4. Press Ctrl+C to stop
"""

import sys
import serial
import time

def capture_serial(port: str, output_file: str) -&gt; None:
    try:
        ser = serial.Serial(port, 115200, timeout=1)
        print(f"Connected to {port} at 115200 baud")
        print(f"Saving to {output_file}")
        print("Ctrl+C to stop\n")

        with open(output_file, 'w') as f:
            start_time = time.time()
            line_count = 0

            while True:
                if ser.in_waiting:
                    line = ser.readline().decode('utf-8', errors='ignore')
                    if line:
                        f.write(line)
                        f.flush()  # Flush to disk immediately
                        line_count += 1

                        # Print progress every 50 lines
                        if line_count % 50 == 0:
                            elapsed = time.time() - start_time
                            print(f"[{elapsed:.1f}s] {line_count} lines captured")

    except KeyboardInterrupt:
        elapsed = time.time() - start_time
        print(f"\n\nCapture complete!")
        print(f"Total lines: {line_count}")
        print(f"Elapsed: {elapsed:.1f}s")
        print(f"Saved to: {output_file}")
    except serial.SerialException as e:
        print(f"Serial error: {e}")
        sys.exit(1)
    finally:
        if 'ser' in locals():
            ser.close()

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print("Usage: python capture_serial.py &lt;device&gt; &lt;output_file&gt;")
        sys.exit(1)

    port = sys.argv[1]
    output_file = sys.argv[2]

    capture_serial(port, output_file)
</code></pre>
]]></description><link>https://community.m5stack.com/topic/8130/bmi270-on-atoms3r-c126-sign-flips-in-accelerometer-output-around-high-acceleration-events</link><guid isPermaLink="true">https://community.m5stack.com/topic/8130/bmi270-on-atoms3r-c126-sign-flips-in-accelerometer-output-around-high-acceleration-events</guid><dc:creator><![CDATA[doop4]]></dc:creator><pubDate>Tue, 10 Mar 2026 17:06:36 GMT</pubDate></item><item><title><![CDATA[High acceleration axis cross-talk on BMI270 on AtomS3R (C126)]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">This is a copy of this question already asked at <a href="https://github.com/m5stack/M5Unified/issues/229" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/m5stack/M5Unified/issues/229</a></p>
<p dir="auto">Is my testing appraoch correct? Is this a bad sensor, an an expected sensor limitation? Can it be somehow corrected in hardware settings or software (I'm using M5Unified)?</p>
<p dir="auto"><a href="https://m5stack.lang-ship.com/catalog/products/controller/c126_atoms3r/" target="_blank" rel="noopener noreferrer nofollow ugc">https://m5stack.lang-ship.com/catalog/products/controller/c126_atoms3r/</a> links to <a href="https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/K128%20CoreS3/BMI270.PDF" target="_blank" rel="noopener noreferrer nofollow ugc">https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/K128 CoreS3/BMI270.PDF</a>, which contains in the table on page 15 Cross Axis Sensitivity SXA = 1%</p>
<p dir="auto"><img src="/assets/uploads/files/1773162145372-542620729-e3aa2223-9636-416c-b577-ac37dcdbb212.png" alt="542620729-e3aa2223-9636-416c-b577-ac37dcdbb212.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">See <a href="https://www.murata.com/en-us/support/faqs/sensor/accel/char/0008" target="_blank" rel="noopener noreferrer nofollow ugc">https://www.murata.com/en-us/support/faqs/sensor/accel/char/0008</a> for definition of "Cross Axis Sensitivity".</p>
<p dir="auto">I'm seeing some unexpectedly high values of acceleration on the axis not involved in the movement.<br />
This is how I'm testing this.<br />
Please check the procedure and the code included further down make sense, since I'm not sure whether any/what calibration is needed for the accelerometer on AtomS3R (C126).</p>
<ol>
<li>Place device FLAT on table, display facing up, USB-C port toward you</li>
<li>Position book parallel to USB-C port (as edge guide)</li>
<li>Keep device still against book edge for 2 seconds (BASELINE)</li>
<li>Slide device PARALLEL to USB-C port (forward/backward along book edge).<br />
Expected: Y-axis activates; X and Z minimal</li>
</ol>
<p dir="auto">In the results below <code>M5U</code> is the M5Unified's magnitude-constraint calibration. <code>Simple</code> is the raw sensor data with per-axis offset subtraction.</p>
<p dir="auto">Baseline (still, device flat), at <code>06:01:03.829</code>:</p>
<pre><code>M5U_x: [-0.009, 0.000] g
M5U_y: [0.000, 0.065] g
M5U_z: [0.000, 1.021] g

Simple_x: [-0.021, 0.023] g
Simple_y: [-0.005, 0.001] g
Simple_z: [0.000, 1.019] g
</code></pre>
<p dir="auto">End of motion, at <code>06:01:08.917</code>:</p>
<pre><code>M5U_x: [-0.086, 0.047] g (span 0.133g)
M5U_y: [-0.210, 0.419] g (span 0.629g)
M5U_z: [0.000, 1.024] g

Simple_x: [-0.376, 0.254] g (span 0.630g)
Simple_y: [-0.082, 0.050] g (span 0.132g)
Simple_z: [0.000, 1.022] g
</code></pre>
<p dir="auto">Both M5U and Simple methods show significant activation on the perpendicular axis (0.13g) when motion is applied to the primary axis (0.63g). This crosstalk is present in both methods, indicating it may be a sensor characteristic.</p>
<p dir="auto">I'm using <a href="https://github.com/m5stack/M5Unified/releases/tag/0.2.13" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/m5stack/M5Unified/releases/tag/0.2.13</a>.<br />
Note that the M5U calibration is applying a transformation like below, so axis exchange between the M5U and Simple methods is expected:</p>
<pre><code>CAL_X ≈ RAW_Y
CAL_Y ≈ -RAW_X  (with sign inversion!)
CAL_Z ≈ RAW_Z
</code></pre>
<p dir="auto"><a href="https://github.com/m5stack/M5Unified/blob/83f5e1a1560d3587fd7cd88422798b06d87c1894/src/utility/IMU_Class.cpp#L94-L99" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/m5stack/M5Unified/blob/83f5e1a1560d3587fd7cd88422798b06d87c1894/src/utility/IMU_Class.cpp#L94-L99</a></p>
<p dir="auto">This is the code used for the axis cross-talk test:</p>
<pre><code>/**
 * @file accel_axis_mixing.ino
 * @brief Detect axis mixing in accelerometer readings
 *
 * Test compares two calibration approaches on identical sensor data:
 * 1. M5Unified: Uses "distance from 1g" constraint (continuous, enforces magnitude)
 * 2. Simple offset: Per-axis offset tracking WITHOUT magnitude constraint
 *
 * Test procedure (requires a book as guide for precise linear motion):
 *
 *   1. Place device FLAT on table, display facing up, USB-C port toward you
 *   2. Position book parallel to USB-C port (as edge guide)
 *   3. Keep device still against book edge for 2 seconds (BASELINE)
 *   4. Slide device PARALLEL to USB-C port (forward/backward along book edge)
 *       Expected: Y-axis activates; X and Z minimal
 *
 * Analysis:
 * If axis mixing is present, the test would show unexpected
 * activation in secondary axes during motion. The simple offset method should
 * behave identically to M5Unified since both use same sensor data.
 */

#include &lt;M5Unified.h&gt;

// Simple offset tracking (on raw sensor data, no magnitude constraint)
struct SimpleOffsets {
    int16_t offset_x = 0;
    int16_t offset_y = 0;
    int16_t offset_z = 0;  // Raw offset for Z (accounting for 1g gravity)
    int sample_count = 0;
};
SimpleOffsets simple_offsets = {};
static const float ACCEL_SCALE = 8.0f / 32768.0f;  // Standard ±8g conversion

void calibrateSimpleOffsets(int duration_ms) {
    Serial.println("Calibrating simple offsets from raw sensor data (accumulating during stillness)...");

    // Reset accumulators
    int32_t sum_x = 0, sum_y = 0, sum_z = 0;
    int count = 0;
    uint32_t start = millis();

    while (millis() - start &lt; duration_ms) {
        if (M5.Imu.update()) {
            int16_t raw_x = M5.Imu.getRawData(0);
            int16_t raw_y = M5.Imu.getRawData(1);
            int16_t raw_z = M5.Imu.getRawData(2);

            sum_x += raw_x;
            sum_y += raw_y;
            sum_z += raw_z;  // We'll subtract 1g equivalent (32768/8 = 4096 LSBs)
            count++;
        }
        delay(1);
    }

    // Compute average raw offsets
    if (count &gt; 0) {
        simple_offsets.offset_x = sum_x / count;
        simple_offsets.offset_y = sum_y / count;
        simple_offsets.offset_z = (sum_z / count) - 4096;  // Subtract 1g gravity (4096 LSBs at ±8g)
        simple_offsets.sample_count = count;
    }

    Serial.printf("Raw offsets from %d samples: x=%d, y=%d, z=%d (LSBs)\n",
        count, simple_offsets.offset_x, simple_offsets.offset_y, simple_offsets.offset_z);
}

void setup() {
    auto cfg = M5.config();
    cfg.serial_baudrate = 115200;
    M5.begin(cfg);

    Serial.println("\n=== BMI270 AXIS MIXING PROOF OF CONCEPT ===");
    Serial.println("Comparing M5Unified vs Simple Offset calibration");
    Serial.println();

    // Re-initialize I2C
    M5.In_I2C.begin((i2c_port_t)I2C_NUM_0, 45, 0);
    delay(100);
    M5.Imu.update();
    delay(100);

    // M5Unified calibration
    Serial.println("1. M5Unified calibration (with magnitude constraint)...");
    M5.Imu.setCalibration(64, 64, 64);
    delay(2000);
    M5.Imu.setCalibration(0, 0, 0);

    // Simple offset calibration (on raw sensor data)
    Serial.println("2. Computing simple offsets from raw sensor data...");
    calibrateSimpleOffsets(1000);

    Serial.println();
    Serial.println("Ready to test. Use a book as edge guide for precise linear motion.");
    Serial.println("Follow the procedure in file comments.");
    Serial.println();
    Serial.println("Format: time_ms | M5U:(x,y,z)g | Simple:(x,y,z)g | ranges...");
    Serial.println("---");
}

void loop() {
    static uint32_t lastPrint = 0;
    static float m5u_min_x = 0, m5u_max_x = 0;
    static float m5u_min_y = 0, m5u_max_y = 0;
    static float m5u_min_z = 0, m5u_max_z = 0;
    static float sim_min_x = 0, sim_max_x = 0;
    static float sim_min_y = 0, sim_max_y = 0;
    static float sim_min_z = 0, sim_max_z = 0;

    uint32_t now = millis();

    if (M5.Imu.update()) {
        auto data = M5.Imu.getImuData();

        // M5Unified values (with magnitude constraint calibration)
        float m5u_x = data.accel.x;
        float m5u_y = data.accel.y;
        float m5u_z = data.accel.z;

        // Simple offset correction on raw data (no magnitude constraint)
        int16_t raw_x = M5.Imu.getRawData(0);
        int16_t raw_y = M5.Imu.getRawData(1);
        int16_t raw_z = M5.Imu.getRawData(2);

        float sim_x = (raw_x - simple_offsets.offset_x) * ACCEL_SCALE;
        float sim_y = (raw_y - simple_offsets.offset_y) * ACCEL_SCALE;
        float sim_z = (raw_z - simple_offsets.offset_z) * ACCEL_SCALE;

        // Track ranges
        if (m5u_x &lt; m5u_min_x) m5u_min_x = m5u_x;
        if (m5u_x &gt; m5u_max_x) m5u_max_x = m5u_x;
        if (m5u_y &lt; m5u_min_y) m5u_min_y = m5u_y;
        if (m5u_y &gt; m5u_max_y) m5u_max_y = m5u_y;
        if (m5u_z &lt; m5u_min_z) m5u_min_z = m5u_z;
        if (m5u_z &gt; m5u_max_z) m5u_max_z = m5u_z;

        if (sim_x &lt; sim_min_x) sim_min_x = sim_x;
        if (sim_x &gt; sim_max_x) sim_max_x = sim_x;
        if (sim_y &lt; sim_min_y) sim_min_y = sim_y;
        if (sim_y &gt; sim_max_y) sim_max_y = sim_y;
        if (sim_z &lt; sim_min_z) sim_min_z = sim_z;
        if (sim_z &gt; sim_max_z) sim_max_z = sim_z;

        // Print at 5Hz
        if (now - lastPrint &gt;= 200) {
            Serial.printf("%6lu | M5U:(%7.3f,%7.3f,%7.3f) | Sim:(%7.3f,%7.3f,%7.3f) | ",
                now,
                m5u_x, m5u_y, m5u_z,
                sim_x, sim_y, sim_z);

            Serial.printf("M5U_x:[%.3f,%.3f] M5U_y:[%.3f,%.3f] M5U_z:[%.3f,%.3f] | ",
                m5u_min_x, m5u_max_x,
                m5u_min_y, m5u_max_y,
                m5u_min_z, m5u_max_z);

            Serial.printf("Sim_x:[%.3f,%.3f] Sim_y:[%.3f,%.3f] Sim_z:[%.3f,%.3f]",
                sim_min_x, sim_max_x,
                sim_min_y, sim_max_y,
                sim_min_z, sim_max_z);

            Serial.println();
            lastPrint = now;
        }
    }

    delay(1);
}
</code></pre>
<p dir="auto">This is the serial output:</p>
<pre><code>06:01:02.606 -&gt; Format: time_ms | M5U:(x,y,z)g | Simple:(x,y,z)g | ranges...
06:01:02.606 -&gt; ---
06:01:02.606 -&gt;   3611 | M5U:( -0.005,  0.045,  1.005) | Sim:( -0.001, -0.001,  1.003) | M5U_x:[-0.005,0.000] M5U_y:[0.000,0.045] M5U_z:[0.000,1.005] | Sim_x:[-0.001,0.000] Sim_y:[-0.001,0.000] Sim_z:[0.000,1.003]
06:01:02.798 -&gt;   3815 | M5U:( -0.005,  0.043,  1.008) | Sim:(  0.001, -0.001,  1.006) | M5U_x:[-0.009,0.000] M5U_y:[0.000,0.065] M5U_z:[0.000,1.021] | Sim_x:[-0.021,0.023] Sim_y:[-0.005,0.001] Sim_z:[0.000,1.019]
06:01:03.025 -&gt;   4018 | M5U:( -0.007,  0.043,  1.003) | Sim:(  0.000, -0.003,  1.001) | M5U_x:[-0.009,0.000] M5U_y:[0.000,0.065] M5U_z:[0.000,1.021] | Sim_x:[-0.021,0.023] Sim_y:[-0.005,0.001] Sim_z:[0.000,1.019]
06:01:03.218 -&gt;   4222 | M5U:( -0.007,  0.041,  0.999) | Sim:(  0.002, -0.003,  0.997) | M5U_x:[-0.009,0.000] M5U_y:[0.000,0.065] M5U_z:[0.000,1.021] | Sim_x:[-0.021,0.023] Sim_y:[-0.005,0.001] Sim_z:[0.000,1.019]
06:01:03.412 -&gt;   4426 | M5U:( -0.007,  0.043,  1.000) | Sim:(  0.001, -0.003,  0.999) | M5U_x:[-0.009,0.000] M5U_y:[0.000,0.065] M5U_z:[0.000,1.021] | Sim_x:[-0.021,0.023] Sim_y:[-0.005,0.001] Sim_z:[0.000,1.019]
06:01:03.637 -&gt;   4629 | M5U:( -0.007,  0.042,  1.005) | Sim:(  0.001, -0.004,  1.003) | M5U_x:[-0.009,0.000] M5U_y:[0.000,0.065] M5U_z:[0.000,1.021] | Sim_x:[-0.021,0.023] Sim_y:[-0.005,0.001] Sim_z:[0.000,1.019]
06:01:03.829 -&gt;   4833 | M5U:( -0.006,  0.042,  1.002) | Sim:(  0.001, -0.003,  1.000) | M5U_x:[-0.009,0.000] M5U_y:[0.000,0.065] M5U_z:[0.000,1.021] | Sim_x:[-0.021,0.023] Sim_y:[-0.005,0.001] Sim_z:[0.000,1.019]
06:01:04.024 -&gt;   5037 | M5U:( -0.006,  0.042,  1.003) | Sim:(  0.002, -0.003,  1.001) | M5U_x:[-0.010,0.000] M5U_y:[0.000,0.065] M5U_z:[0.000,1.021] | Sim_x:[-0.021,0.023] Sim_y:[-0.006,0.001] Sim_z:[0.000,1.019]
06:01:04.249 -&gt;   5240 | M5U:( -0.010,  0.051,  1.000) | Sim:( -0.007, -0.007,  0.998) | M5U_x:[-0.022,0.000] M5U_y:[0.000,0.122] M5U_z:[0.000,1.021] | Sim_x:[-0.078,0.023] Sim_y:[-0.018,0.001] Sim_z:[0.000,1.019]
06:01:04.442 -&gt;   5444 | M5U:( -0.025,  0.122,  0.997) | Sim:( -0.079, -0.022,  0.995) | M5U_x:[-0.035,0.004] M5U_y:[0.000,0.133] M5U_z:[0.000,1.021] | Sim_x:[-0.089,0.023] Sim_y:[-0.032,0.008] Sim_z:[0.000,1.019]
06:01:04.637 -&gt;   5647 | M5U:( -0.021,  0.070,  1.002) | Sim:( -0.026, -0.017,  1.000) | M5U_x:[-0.086,0.039] M5U_y:[-0.019,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.063] Sim_y:[-0.082,0.043] Sim_z:[0.000,1.019]
06:01:04.829 -&gt;   5851 | M5U:(  0.046, -0.069,  0.985) | Sim:(  0.113,  0.050,  0.983) | M5U_x:[-0.086,0.047] M5U_y:[-0.079,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.123] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:05.056 -&gt;   6055 | M5U:(  0.006,  0.062,  0.993) | Sim:( -0.018,  0.009,  0.991) | M5U_x:[-0.086,0.047] M5U_y:[-0.079,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.123] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:05.249 -&gt;   6258 | M5U:( -0.044, -0.085,  0.990) | Sim:(  0.129, -0.041,  0.988) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:05.442 -&gt;   6462 | M5U:( -0.019,  0.015,  1.005) | Sim:(  0.029, -0.015,  1.003) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:05.667 -&gt;   6666 | M5U:( -0.017,  0.013,  1.003) | Sim:(  0.031, -0.013,  1.001) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:05.860 -&gt;   6869 | M5U:( -0.016,  0.013,  1.001) | Sim:(  0.031, -0.013,  1.000) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:06.054 -&gt;   7073 | M5U:( -0.026, -0.019,  1.001) | Sim:(  0.063, -0.023,  0.999) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:06.279 -&gt;   7277 | M5U:( -0.024, -0.053,  1.012) | Sim:(  0.097, -0.021,  1.010) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:06.470 -&gt;   7480 | M5U:( -0.028, -0.059,  1.018) | Sim:(  0.102, -0.024,  1.016) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.210] M5U_z:[0.000,1.021] | Sim_x:[-0.167,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.019]
06:01:06.663 -&gt;   7684 | M5U:(  0.020,  0.218,  1.000) | Sim:( -0.174,  0.023,  0.999) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:06.889 -&gt;   7887 | M5U:( -0.006,  0.053,  1.000) | Sim:( -0.010, -0.003,  0.999) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:07.083 -&gt;   8091 | M5U:( -0.011,  0.042,  1.002) | Sim:(  0.001, -0.008,  1.000) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:07.277 -&gt;   8295 | M5U:( -0.005,  0.041,  1.000) | Sim:(  0.003, -0.001,  0.998) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:07.503 -&gt;   8498 | M5U:( -0.007,  0.040,  1.003) | Sim:(  0.004, -0.004,  1.001) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:07.696 -&gt;   8702 | M5U:( -0.003,  0.041,  1.001) | Sim:(  0.003,  0.001,  0.999) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:07.889 -&gt;   8906 | M5U:( -0.003,  0.041,  0.994) | Sim:(  0.003,  0.000,  0.992) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:08.114 -&gt;   9109 | M5U:( -0.005,  0.042,  0.995) | Sim:(  0.002, -0.001,  0.993) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:08.307 -&gt;   9313 | M5U:( -0.004,  0.042,  1.003) | Sim:(  0.002, -0.000,  1.001) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:08.501 -&gt;   9517 | M5U:( -0.005,  0.042,  1.002) | Sim:(  0.002, -0.002,  1.000) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:08.724 -&gt;   9720 | M5U:( -0.004,  0.042,  1.002) | Sim:(  0.002, -0.001,  1.000) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
06:01:08.917 -&gt;   9924 | M5U:(  0.001,  0.048,  1.003) | Sim:( -0.004,  0.004,  1.001) | M5U_x:[-0.086,0.047] M5U_y:[-0.210,0.419] M5U_z:[0.000,1.024] | Sim_x:[-0.376,0.254] Sim_y:[-0.082,0.050] Sim_z:[0.000,1.022]
</code></pre>
]]></description><link>https://community.m5stack.com/topic/8131/high-acceleration-axis-cross-talk-on-bmi270-on-atoms3r-c126</link><guid isPermaLink="true">https://community.m5stack.com/topic/8131/high-acceleration-axis-cross-talk-on-bmi270-on-atoms3r-c126</guid><dc:creator><![CDATA[doop4]]></dc:creator><pubDate>Tue, 10 Mar 2026 17:02:43 GMT</pubDate></item><item><title><![CDATA[[bug?] Issue with axp2101 and module 4 relay (core base)]]></title><description><![CDATA[<p dir="auto">I'm having an issue where if I use the axp2101 component in esphome, my cores3-se-lite (connected to 12V via a DIN base) stops finding the module 4 relay (<a href="https://docs.m5stack.com/en/module/4relay" target="_blank" rel="noopener noreferrer nofollow ugc">https://docs.m5stack.com/en/module/4relay</a>).</p>
<p dir="auto">This code works (I can hear the relays clicking, and see 0x26 on the i2c scan) (note custom component module4relay is basically unit4relay adapter for a different register to enable the relays)</p>
<pre><code>

esphome:
  name: relay-test-s3
  friendly_name: relay-test-s3


esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "Kh5g1ThAQ3SUqKw9GnyJUI5PyOkndNl4+ykbxHoUIjc="

ota:
  - platform: esphome
    password: "5f65f9ff9e4ab8b3c928a7216c551525"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Relay-Test Fallback Hotspot"
    password: "G1ypogSTYlkb"

captive_portal:

i2c:
  - id: bus_internal 
    sda: GPIO12
    scl: GPIO11
    scan: true 

  - id: bus_port_a 
    sda: GPIO2
    scl: GPIO1
    scan: true 

external_components:
  - source: github://ngolf/esphome-yaml/components
    components: module4relay

module4relay:
  i2c_id: bus_internal

switch:
  - platform: module4relay
    relay_1:
      name: "Module Relay Channel 1"
      restore_mode: RESTORE_DEFAULT_OFF
    relay_2:
      name: "Module Relay Channel 2"
      restore_mode: RESTORE_DEFAULT_OFF
    relay_3:
      name: "Module Relay Channel 3"
      restore_mode: RESTORE_DEFAULT_OFF
    relay_4:
      name: "Module Channel 4"
      restore_mode: RESTORE_DEFAULT_OFF

</code></pre>
<p dir="auto">But adding the axp2101 component (which I need for the backlight) makes the relay stopping being found on i2c scan, and relays inoperable.</p>
<pre><code>(external_components:)
  - source: github://ngolf/esphome-yaml/components
    components: module4relay

axp2101:
  id: axp2101_pmu
  i2c_id: bus_internal
</code></pre>
]]></description><link>https://community.m5stack.com/topic/8128/bug-issue-with-axp2101-and-module-4-relay-core-base</link><guid isPermaLink="true">https://community.m5stack.com/topic/8128/bug-issue-with-axp2101-and-module-4-relay-core-base</guid><dc:creator><![CDATA[ngolf]]></dc:creator><pubDate>Tue, 10 Mar 2026 14:45:59 GMT</pubDate></item><item><title><![CDATA[ToF Hat only Short Range (UIflow2)]]></title><description><![CDATA[<p dir="auto">I have a problem with the ToF Hat (not the external I2C module).<br />
I tested the Hat with the Stick plus2 in the UIflow IDE and I can measure up to 2m without any problems. When I try to implement the same logic in the UIflow2 IDE, only Short Range seems to work, as the maximum measurement is 1.4m. This also happens with the Stick S3 in UIflow2.</p>
<p dir="auto">In UIflow, long range seems to be activated directly. However, I cannot find a block to set the ToF Hat to long range in UIflow2.<br />
There is official information that you have to set it to long range for 2 m, but I can't find how to do that.</p>
<p dir="auto">set_signal_rate_limit is available, but set_vcsel_pulse_period is not – that's what the M5 AI suggests.</p>
<p dir="auto">Who can help me with this?</p>
]]></description><link>https://community.m5stack.com/topic/8129/tof-hat-only-short-range-uiflow2</link><guid isPermaLink="true">https://community.m5stack.com/topic/8129/tof-hat-only-short-range-uiflow2</guid><dc:creator><![CDATA[Wambo6000]]></dc:creator><pubDate>Tue, 10 Mar 2026 07:42:06 GMT</pubDate></item><item><title><![CDATA[Issue with unit 4 relay on cores3]]></title><description><![CDATA[<p dir="auto">On the cores3 (module connected through port A), I see no devices found on i2c scan when using esphome. It finds OK on the atom-lite.<br />
If using the "Cores3 test" binary from m5stack, I can see the address found on the i2c scan app.</p>
]]></description><link>https://community.m5stack.com/topic/8126/issue-with-unit-4-relay-on-cores3</link><guid isPermaLink="true">https://community.m5stack.com/topic/8126/issue-with-unit-4-relay-on-cores3</guid><dc:creator><![CDATA[ngolf]]></dc:creator><pubDate>Mon, 09 Mar 2026 19:57:31 GMT</pubDate></item><item><title><![CDATA[External 1S LIPO on M5Core2 BUS PIN1 and PIN30?]]></title><description><![CDATA[<p dir="auto">I want to extend the battery life of the M5 Core2 unit (communicating through WiFi every 5 seconds, and that takes a lot of power unfortunately).</p>
<p dir="auto">I tried to find information about it, and want to confirm that it is OK to connect the external Lipo battery to pins 1 and 30 on the "BUS expansion port"? And that the battery will be charged when connected to the external USB power? And I don't need to remove the internal 500mAh battery, since they would be connected in parallel anyhow?</p>
<p dir="auto">Since I need the IMU as well, I guess I'll sandwich the existing Core2_Ext and put a simple header in between, unless someone has a better suggestions (I don't have the small JST connectors that I could use to replace).</p>
<p dir="auto">I did ask the <a href="https://chat.m5stack.com/" target="_blank" rel="noopener noreferrer nofollow ugc">https://chat.m5stack.com/</a> and it basically agrees if with me, but I'd like to confirm this with fellow human beings to be sure :)</p>
<p dir="auto">Additionally, are those correct locations (as depicted in the picture)?</p>
<p dir="auto"><img src="/assets/uploads/files/1772996280169-m5-stack-core2-board.jpg" alt="M5-Stack-Core2-Board.jpg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://community.m5stack.com/topic/8124/external-1s-lipo-on-m5core2-bus-pin1-and-pin30</link><guid isPermaLink="true">https://community.m5stack.com/topic/8124/external-1s-lipo-on-m5core2-bus-pin1-and-pin30</guid><dc:creator><![CDATA[skyflyer]]></dc:creator><pubDate>Sun, 08 Mar 2026 18:58:07 GMT</pubDate></item><item><title><![CDATA[ESP32 and  RS485]]></title><description><![CDATA[<p dir="auto">Hello <a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457860">@alex9</a></p>
<p dir="auto">it looks like yes, GPIO0 is TX pin for RS485. See pinmap <a href="https://docs.m5stack.com/en/core/StamPLC?id=pinmap" target="_blank" rel="noopener noreferrer nofollow ugc">here</a>.</p>
<p dir="auto">The platformio.ini example can be found <a href="https://docs.m5stack.com/en/core/StamPLC?id=platformio" target="_blank" rel="noopener noreferrer nofollow ugc">here</a>.</p>
<p dir="auto">Running a quick search I did not find an RS485 example, sorry.</p>
<p dir="auto">Edit: Maybe try this RS485 <a href="https://github.com/arduino-libraries/ArduinoRS485" target="_blank" rel="noopener noreferrer nofollow ugc">library</a>.</p>
<p dir="auto">Thanks<br />
Felix</p>
]]></description><link>https://community.m5stack.com/topic/8123/esp32-and-rs485</link><guid isPermaLink="true">https://community.m5stack.com/topic/8123/esp32-and-rs485</guid><dc:creator><![CDATA[felmue]]></dc:creator><pubDate>Sun, 08 Mar 2026 08:30:56 GMT</pubDate></item><item><title><![CDATA[Industrial Analog pH Meter]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">A good industrial  pH Meter Kit will be great to have.</p>
<p dir="auto">Thanks</p>
]]></description><link>https://community.m5stack.com/topic/8122/industrial-analog-ph-meter</link><guid isPermaLink="true">https://community.m5stack.com/topic/8122/industrial-analog-ph-meter</guid><dc:creator><![CDATA[l.roca]]></dc:creator><pubDate>Sat, 07 Mar 2026 20:29:39 GMT</pubDate></item><item><title><![CDATA[RGB unit issues]]></title><description><![CDATA[<p dir="auto">Hello <a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/123289">@JohnSal</a></p>
<p dir="auto">I think you only need to add one RGB unit but with number set to 6 instead of 3.</p>
<p dir="auto">Thanks<br />
Felix</p>
]]></description><link>https://community.m5stack.com/topic/8121/rgb-unit-issues</link><guid isPermaLink="true">https://community.m5stack.com/topic/8121/rgb-unit-issues</guid><dc:creator><![CDATA[felmue]]></dc:creator><pubDate>Sat, 07 Mar 2026 18:30:48 GMT</pubDate></item><item><title><![CDATA[Seeking for a specific unit, .. any ideas]]></title><description><![CDATA[<p dir="auto">Hello <a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/7741">@HappyUser</a></p>
<p dir="auto">just curious, which SIM module did you settle on?</p>
<p dir="auto">Thanks<br />
Felix</p>
]]></description><link>https://community.m5stack.com/topic/8103/seeking-for-a-specific-unit-any-ideas</link><guid isPermaLink="true">https://community.m5stack.com/topic/8103/seeking-for-a-specific-unit-any-ideas</guid><dc:creator><![CDATA[felmue]]></dc:creator><pubDate>Sat, 07 Mar 2026 15:56:12 GMT</pubDate></item><item><title><![CDATA[UIFlow 2.0 + Cardputer ADV, where is the GPIO 14pin header support?]]></title><description><![CDATA[<p dir="auto">Hello <a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/458958">@hotellonely</a></p>
<p dir="auto">yes, it looks like the drop-down box needs fixing. In the mean time you can use all GPOs on the 14 pin header via some custom code blocks.</p>
<p dir="auto">I created an example in UIFlow2 Project Zone called M5CardputerAdv_ExtPin_Test_UIFlow2.4.2</p>
<p dir="auto">Thanks<br />
Felix</p>
]]></description><link>https://community.m5stack.com/topic/8118/uiflow-2-0-cardputer-adv-where-is-the-gpio-14pin-header-support</link><guid isPermaLink="true">https://community.m5stack.com/topic/8118/uiflow-2-0-cardputer-adv-where-is-the-gpio-14pin-header-support</guid><dc:creator><![CDATA[felmue]]></dc:creator><pubDate>Sat, 07 Mar 2026 15:53:59 GMT</pubDate></item><item><title><![CDATA[M5Stack ALL BAND RADIO]]></title><description><![CDATA[<p dir="auto">M5Stack と SI4732 DSP で ALL BAND RADIOを 製作しました。<br />
LCDは 3.5" 480x320 SPI ILI9488 を接続しています。</p>
<p dir="auto">BLOG : M5Stack ALL BAND RADIO<br />
<a href="https://macsbug.wordpress.com/2026/02/26/m5stack-all-band-radio/" target="_blank" rel="noopener noreferrer nofollow ugc">https://macsbug.wordpress.com/2026/02/26/m5stack-all-band-radio/</a></p>
<p dir="auto"><img src="/assets/uploads/files/1772836399670-m5_all_band_radio_580s-mini.png" alt="m5_all_band_radio_580s-mini.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://community.m5stack.com/topic/8116/m5stack-all-band-radio</link><guid isPermaLink="true">https://community.m5stack.com/topic/8116/m5stack-all-band-radio</guid><dc:creator><![CDATA[macsbug]]></dc:creator><pubDate>Fri, 06 Mar 2026 22:33:41 GMT</pubDate></item><item><title><![CDATA[M5Core2 All Band Radio]]></title><description><![CDATA[<p dir="auto">手のに乗る可愛いM5Core2 で オールバンドラジオが出来ます。</p>
<p dir="auto">BLOG：M5Core2 All Band Radio<br />
<a href="https://macsbug.wordpress.com/2026/02/01/m5core2-all-band-radio/" target="_blank" rel="noopener noreferrer nofollow ugc">https://macsbug.wordpress.com/2026/02/01/m5core2-all-band-radio/</a></p>
<p dir="auto">M5Core2 は 2″ 240×320 LCD と ESP32 with Touch です。<br />
SI4732 DSP は FM/AM/SW/LW Band Receiver です。<br />
SI4732 DSP 仕様：<br />
FM (VHF)  (  64  –  108 MHz )<br />
SW band   ( 2.3  – 30.0 MHz )<br />
AM (MW)  ( 520 – 1710 KHz )<br />
LW band   ( 153  –  279 KHz )<br />
Library PU2CLR / SI473X_2.8_TFT_V3.5 を M5Core2へ移植しました。</p>
<p dir="auto"><img src="/assets/uploads/files/1772836339446-core2_radio_10-mini.png" alt="core2_radio_10-mini.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://community.m5stack.com/topic/8115/m5core2-all-band-radio</link><guid isPermaLink="true">https://community.m5stack.com/topic/8115/m5core2-all-band-radio</guid><dc:creator><![CDATA[macsbug]]></dc:creator><pubDate>Fri, 06 Mar 2026 22:32:22 GMT</pubDate></item><item><title><![CDATA[M5Stack FM Radio]]></title><description><![CDATA[<p dir="auto">M5Stackと SI4732 DSP で FM Radio を製作しました。<br />
アリエクで流行っている ATS mini (Encoder操作) 似の受信機です。<br />
操作はA,B,Cボタンで 行います。</p>
<p dir="auto">BLOG : M5Stack FM Radio<br />
<a href="https://macsbug.wordpress.com/2025/08/14/m5stack-fm-radio/" target="_blank" rel="noopener noreferrer nofollow ugc">https://macsbug.wordpress.com/2025/08/14/m5stack-fm-radio/</a></p>
<p dir="auto"><img src="/assets/uploads/files/1772836279036-m5_fmradio_front_s-min.png" alt="m5_fmradio_front_s-min.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://community.m5stack.com/topic/8114/m5stack-fm-radio</link><guid isPermaLink="true">https://community.m5stack.com/topic/8114/m5stack-fm-radio</guid><dc:creator><![CDATA[macsbug]]></dc:creator><pubDate>Fri, 06 Mar 2026 22:31:22 GMT</pubDate></item><item><title><![CDATA[Unit CamS3 - 5MP : very limited &amp; unusable examples]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/168201">@kuriko</a></p>
<p dir="auto">In case you're still looking for working example, I just build custom firmware and got the camera driver working. See <a href="https://github.com/hbentel/M5Stack-Unit-CamS3-5MP" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/hbentel/M5Stack-Unit-CamS3-5MP</a></p>
]]></description><link>https://community.m5stack.com/topic/6983/unit-cams3-5mp-very-limited-unusable-examples</link><guid isPermaLink="true">https://community.m5stack.com/topic/6983/unit-cams3-5mp-very-limited-unusable-examples</guid><dc:creator><![CDATA[westcoastfox]]></dc:creator><pubDate>Fri, 06 Mar 2026 17:48:25 GMT</pubDate></item><item><title><![CDATA[Working CamS3-5MP firmware with MJPEG stream, works with Frigate, MQTT]]></title><description><![CDATA[<p dir="auto">Me, and Claude Code have been working on a custom  ESP-IDF firmware for the M5Stack Unit CamS3-5MP board.</p>
<p dir="auto">It's part of a fun home project I have to scare the cats off the kitchen counters when I'm not there :)</p>
<ul>
<li>MJPEG streaming over HTTP (port 81 /stream) — compatible with Frigate NVR</li>
<li>Single JPEG snapshot over HTTP (port 80 /)</li>
<li>MQTT telemetry — RSSI, uptime, heap, PSRAM, FPS, error counters every 10 s</li>
<li>Home Assistant auto-discovery — sensor, number, and button entities on connect</li>
<li>Camera image controls via MQTT — brightness, contrast, saturation, white balance</li>
<li>URL-based OTA — publish firmware URL to MQTT; device flashes and reboots</li>
<li>Recovery manager — NVS boot-loop detection, 2-minute health timer, OTA rollback</li>
<li>Core dump to flash — download crash dumps via GET /api/coredump</li>
<li>BLE Wi-Fi provisioning — no hardcoded credentials; first-boot BLE setup</li>
</ul>
<p dir="auto">More details of features at<br />
<a href="https://github.com/hbentel/M5Stack-Unit-CamS3-5MP" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/hbentel/M5Stack-Unit-CamS3-5MP</a></p>
]]></description><link>https://community.m5stack.com/topic/8117/working-cams3-5mp-firmware-with-mjpeg-stream-works-with-frigate-mqtt</link><guid isPermaLink="true">https://community.m5stack.com/topic/8117/working-cams3-5mp-firmware-with-mjpeg-stream-works-with-frigate-mqtt</guid><dc:creator><![CDATA[westcoastfox]]></dc:creator><pubDate>Fri, 06 Mar 2026 17:45:47 GMT</pubDate></item><item><title><![CDATA[M5Dial Example App - Home Assistant, RSS News and OpenWeatherMap]]></title><description><![CDATA[<p dir="auto">7e5ce5b2-8d9d-48f9-ae34-7fa5884c1e12-image.png</p>
]]></description><link>https://community.m5stack.com/topic/8113/m5dial-example-app-home-assistant-rss-news-and-openweathermap</link><guid isPermaLink="true">https://community.m5stack.com/topic/8113/m5dial-example-app-home-assistant-rss-news-and-openweathermap</guid><dc:creator><![CDATA[PaulMcGuinness_UK]]></dc:creator><pubDate>Fri, 06 Mar 2026 16:20:24 GMT</pubDate></item></channel></rss>