🤖Have you ever tried Chat.M5Stack.com before asking??😎

Subcategories

  • 551 Topics
    2k Posts
    H
    @Danieldsouza I prefer to use KiCAD for schematic and PCB design. The software is open source It runs on Windows, Linux, Mac there is a strong community there is a ton of libraries for thousands of components some part distributor and assembling factories provide their own library or allow symbol and footprint download making your own symbols and footprints is very easy design rule checking I am not an advanced user but managed to make a 4-layer PCB after watching a few tutorial videos. Independend of the EDA Tool make sure you avoid the common tripping hazard like missing blocking caps or unwanted ground loops.
  • When you meet problems using M5Stack, we help you solve it.

    200 Topics
    989 Posts
    robskiR
    @johnericsutton hard to believe that unit is designed in such way to report value only when measured source is above 0...
  • 505 Topics
    2k Posts
    D
    Hopefully I can shed a little light on this topic. The AIN4-20mA unit uses a STM32 processor to handle the I2C interface in software. For some reason, the timing is not wholly compatible with the Raspberry Pi kernel I2C drivers. However, the Espressif I2C implementation is a lot more tolerant and flexible and works just fine. That's why it works with the M5 controllers. There was a an update to the github repo for this unit's firmware (https://github.com/m5stack/M5Module-4-20mA-Internal-FW) which changed the I2C library that was used. It's possible that this will fix it, but I haven't bothered to set up a STM32 development system to try it. If you really want to use a Pi or other Linux host board, you could use any inexpensive ESP device (like an M5Stamp) as a go-between. Another option is to use something like the Arduino UNO Q, which runs Linux on the main processor and allows you to run C++ code on the STM32 microcontroller to talk to I2C devices. It's really better to run real-time control on a separate microcontroller anyway.
  • 1k Topics
    6k Posts
    ShawnHymelS
    @felmue That helps a lot, thank you!
  • 55 Topics
    203 Posts
    J
    I have been able to get a program to work that uses the M5EchoBase library but no luck using the unified library. For example the simple program below doesn't work. #include <M5Unified.h> void setup() { // 1. Initialize M5Unified delay(1000); // Delay for a moment to allow the system to stabilize. auto cfg = M5.config(); cfg.serial_baudrate = 115200; M5.begin(cfg); // 2. Configure the Speaker for the Atomic Audio Base (ES8311) // We access the speaker configuration directly via M5.Speaker.config() auto spk_cfg = M5.Speaker.config(); // Set pins for Atomic Audio Base (ES8311) spk_cfg.pin_bck = 8; // BCLK spk_cfg.pin_ws = 6; // LRCK (WS) spk_cfg.pin_data_out = 5; // DAC (DOUT) spk_cfg.i2s_port = I2S_NUM_0; // Configure for external codec (not internal DAC) spk_cfg.use_dac = false; spk_cfg.sample_rate = 44100; // Apply the configuration M5.Speaker.config(spk_cfg); // 3. Start the speaker M5.Speaker.begin(); // 4. Set volume (0-255) M5.Speaker.setVolume(128); } void loop() { M5.update(); // Play a 1000 Hz tone for 1000 milliseconds (1 second) M5.Speaker.tone(1000, 1000); // Wait for the tone to finish delay(1000); // Small delay before next loop delay(1000); } Is there no way to set up the ES8311 codec without using M5EchoBase? strangely if I run the program below then load the above program the tone works? But I can't stick the M5.Speaker.tone(1000, 1000); command in the program below and have it work. Does anyone know how to play a tone using only the Unified library from an AtomS3R into a Atomic Audio Base (ES8311 codec)? #include <M5Unified.h> #include <M5EchoBase.h> #if defined(CONFIG_IDF_TARGET_ESP32S3) #define RECORD_SIZE (1024 * 400) #elif defined(CONFIG_IDF_TARGET_ESP32) #define RECORD_SIZE (1024 * 400) #endif #if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)) M5EchoBase echobase; #else M5EchoBase echobase(I2S_NUM_0); #endif static uint8_t *buffer = nullptr; // Pointer to hold the audio buffer. void setup() { delay(1000); // Delay for a moment to allow the system to stabilize. auto cfg = M5.config(); cfg.serial_baudrate = 115200; M5.begin(cfg); // Initialize the EchoBase with ATOMS3 pinmap. #if defined(CONFIG_IDF_TARGET_ESP32S3) if (!echobase.init(44100 /*Sample Rate*/, 38 /*I2C SDA*/, 39 /*I2C SCL*/, 7 /*I2S DIN*/, 6 /*I2S WS*/, 5 /*I2S DOUT*/, 8 /*I2S BCK*/, Wire) != 0) { Serial.println("Failed to initialize EchoBase!"); while (true) { delay(1000); } } #elif defined(CONFIG_IDF_TARGET_ESP32) // Initialize the EchoBase with ATOM pinmap. if (!echobase.init(44100 /*Sample Rate*/, 25 /*I2C SDA*/, 21 /*I2C SCL*/, 23 /*I2S DIN*/, 19 /*I2S WS*/, 22 /*I2S DOUT*/, 33 /*I2S BCK*/, Wire) != 0) { Serial.println("Failed to initialize EchoBase!"); while (true) { delay(1000); } } #endif echobase.setSpeakerVolume(80); // Set speaker volume to 70%. echobase.setMicGain(ES8311_MIC_GAIN_0DB); // Set microphone gain to 0dB. buffer = (uint8_t *)malloc(RECORD_SIZE); // Allocate memory for the record buffer. // Check if memory allocation was successful. if (buffer == nullptr) { // If memory allocation fails, enter an infinite loop. while (true) { Serial.println("Failed to allocate memory :("); delay(1000); } } Serial.println("EchoBase ready, start recording and playing!"); // M5.Speaker.tone(2000, 2000); // delay(2000); } void loop() { Serial.println("Start recording..."); // Recording echobase.setMute(false); echobase.record(buffer, RECORD_SIZE); // Record audio into buffer. delay(100); Serial.println("Start playing..."); // Playing echobase.setMute(false); delay(10); echobase.play(buffer, RECORD_SIZE); // Play audio from buffer. //M5.Speaker.playRaw(buffer, RECORD_SIZE, 44100, false, 1, 0); delay(100); }
  • For topics on the M5Stack Atom.

    259 Topics
    847 Posts
    R
    Two years ago I set up 6 atom lites with moister sensors for my raised gardens. This year I added another garden. I have download the same program only with different client name and different topic to publish to. I'm using EMQX intergration within Home Assistant as my MQTT server. The Atom Lite logs into the server but is not publishing the topic for some reason. I went back to the old version of UIFlow that was working on the rest of my beds with the same results. I updated to the latest version of EMOX with the same effect. Does anyone have a clue as to what might be going on?
  • timer camera x battery

    2
    0 Votes
    2 Posts
    3k Views
    m5stackM
    if the camera keeps work send the video stream. it would not have a long time, the battery is small, that is the reason why we recommend use this product for the timer shooting situation.
  • Use rainmaker with m5stack-core-esp32

    1
    0 Votes
    1 Posts
    3k Views
    No one has replied
  • SIM7020G

    2
    0 Votes
    2 Posts
    3k Views
    felmueF
    Hello @anvup1 Searching through the SIM7020G AT command document the command AT+CCINFO is not listed. I don't think that command exists for SIM7020G. For most commands you can check if they are supported by adding =?. E.g. AT+CCINFO=?. Does that actually return OK? Thanks Felix
  • COMMU vs. Core2 - cannot flash

    1
    0 Votes
    1 Posts
    2k Views
    No one has replied
  • Timer Camera X: take a foto & record a video programatically

    1
    0 Votes
    1 Posts
    2k Views
    No one has replied
  • ATOM RS485 GPIO

    1
    0 Votes
    1 Posts
    2k Views
    No one has replied
  • TOF-HAT - How to use Xshut & Interrupt pin of VL53L0X

    3
    0 Votes
    3 Posts
    4k Views
    S
    Hello @felmue , Thanks for your response, Yes, I also saw this Schematic and that's why thought to confirm from M5Stack before proceeding. Thanks Sameer
  • Core.INK display refresh

    3
    0 Votes
    3 Posts
    7k Views
    T
    I faced common issue with core grey module, made a couple of titles and was feeding formatted data from light sensor and envII module. Had to spend some time playing with delays to make it work properly but was blaming raped micropython build. Long things short, don't try to understand it, try adding delays.
  • Atom Matrix with RGB LED string / NeoPixel Rainbow / MicroPython.

    2
    0 Votes
    2 Posts
    3k Views
    ajb2k3A
    In UIflow add rgb strip unit, set number of leds and program. It's not that hard in uiflow (which outputs to MP) the only issue is the power that can be supplied from the atom to strip. You made need to connect a second power supply to just the strip.
  • How to test if the M5Paper is attached to USB power?

    2
    0 Votes
    2 Posts
    5k Views
    D
    Answering my own question. This was trivially simple in my code. My code was doing deep sleep in the setup() function. When waking up from deep-sleep the setup function is called again. But if the device is powered by USB then deep sleep fails and we will reach the loop() function. So any special code that I want for USB power should simply be put in loop().
  • How to do partial refresh of the M5paper screen after deep sleep wakeup

    1
    0 Votes
    1 Posts
    4k Views
    No one has replied
  • Timer camera X getting power button state

    timercan x
    1
    3 Votes
    1 Posts
    5k Views
    No one has replied
  • 1 to 3 HUB Expansion Unit

    6
    0 Votes
    6 Posts
    9k Views
    C
    Thanks to both :) @ajb2k3 : as written also by @felmue I want to power all my system with 3.3V so there won't be around any 5V at all ! Of course I need to check the specific schematic in order to understand what to bypass, but my question was if the white enclosure of M5Stack modules (like the I2C hub, or the heart rate sensor) can be easily open - without damaging / breaking them - or not (is there something like a screw?). Any clue about that? thanks!
  • M5 Stick C - USB device not recognize

    1
    1
    0 Votes
    1 Posts
    3k Views
    No one has replied
  • Timer Camera F - battery doesn't charge

    2
    0 Votes
    2 Posts
    5k Views
    ZontexZ
    Hello, have you tried putting to sleep mode? how long you had the timer camera F ? it sounds like the battery is drained, have you tried to charge it for about an hour or so?
  • M5Go will not boot

    2
    0 Votes
    2 Posts
    5k Views
    ZontexZ
    Hello, have you tried other operation system? perhaps you could burn the test firmware and see what's going on and if m5burner can find it.
  • Timer Camera X and Micropython

    2
    0 Votes
    2 Posts
    6k Views
    ZontexZ
    Hello, please feel free to offer such feature in "future list" and we will consider adding it in the future based on customer demands for such application, currently, unfortunately, we don't support such a function.
  • Driver firmware - PbHUB

    7
    0 Votes
    7 Posts
    14k Views
    E
    @Skink do you still have the source code from https://github.com/m5stack/PbHUB/tree/master/PortB_HUB/Firmware ?
  • Can't burn fireware toTimer Camera X with M5burner

    4
    1
    0 Votes
    4 Posts
    7k Views
    P
    @dheike that does not help if you have a Mac
  • 0 Votes
    7 Posts
    17k Views
    felmueF
    Hi @Nili while reading the touch IC (GT911) documentation I found that there is a mechanism which allows to select which of two I2C addresses should be used. Depending on how the touch INT line is driven by the ESP32 (low or high) when the reset line goes back to high, either I2C address gets selected. But since the touch INT line is connected to GPIO36 of the ESP32 and GPIO36 is an input only GPIO the ESP32 cannot drive it. From the ESP32 documentation: GPIO34-39 can only be set as input mode and do not have software pullup or pulldown functions. I further found that the 10k pull-up resistor (R87) on the touch INT line, listed in the schematics, is not populated in my M5Paper. I guess this mean when the touch IC is not driving the INT line it is floating and the touch IC could end up with either I2C address. Now, in the GT911 library I found the following code in function begin() which I tries to figure out which I2C address the touch IC actually started up with: Wire.beginTransmission(0x14); if (Wire.endTransmission()) { Wire.beginTransmission(0x5D); if (Wire.endTransmission()) { log_e("Touch screen IIC connection error"); return ESP_FAIL; } _iic_addr = 0x5D; } I wonder if that auto detect mechanism fails sometimes leaving the touch IC with one I2C address and the ESP32 trying to talk to it with the other? Thanks Felix