🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    ATOM Lite - broker status LED? (with two devices)

    Scheduled Pinned Locked Moved SOFTWARE
    5 Posts 3 Posters 8.2k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C Offline
      ckohrt
      last edited by

      Hi all!

      I would really appreciate your help. I am new to M5Stack devices and tried to program an IR/WLAN gateway. When I programmed with my first device, I didn't realize that the status LED is not working any more. It worked at the beginning - I am sure. Then, with the same program I tried it on teh second device where the LED turned on with the first plug in of USB cable.
      Now, also the second device LED is probably brokern.

      I tried the simple demos blink.ino etc but could not get the LEDs running.

      My program looks as follows:

      #include <M5Atom.h>
      #include <WiFi.h>
      #include <WiFiMulti.h>

      // External library: IRRemoteESP8266, https://github.com/crankyoldgit/IRremoteESP8266
      #include <IRrecv.h>
      #include <IRremoteESP8266.h>

      // HW: Pin assignments
      const byte PIN_BUTTON = 39; // M5Stack Atom Lite: internal button
      const byte PIN_LEDATOM = 27; // M5Stack Atom Lite: internel Neopixel LED
      const byte PIN_LEDSTRIP = 26; // M5SAtack Atom Lite: Grove connector GPIO pin (yellow cable) -> Neopixel LED strip
      const byte PIN_IRRECV = 32; // M5SAtack Atom Lite: Grove connector GPIO pin (white cable) -> IR Receiver

      // Type declarations
      enum State {OFF = 0, ON = 1, ECO = 2}; // Main system states
      typedef enum State t_State;

      // Switch to receive debug messages via serial monitor
      const bool DEBUG_ON = false;

      // Status LED: color definitions
      const uint8_t COLOR_OFF[3] = {255, 0, 0}; // System state: OFF
      const uint8_t COLOR_ON[3] = {0, 255, 0}; // System state: ON
      const uint8_t COLOR_ECO[3] = {0, 255, 0}; // System state: ECO

      // Status LED and LED strip: Brightness constants
      const uint8_t BRIGHTNESS_OFF = 8; // System state: OFF
      const uint8_t BRIGHTNESS_ON = 20; // System state: ON
      const uint8_t BRIGHTNESS_ECO = 10; // System state: ECO

      const uint8_t BRIGHTNESS_MIN = 2; // Lowest brightness
      const uint8_t BRIGHTNESS_MAX = 50; // Highest brightness --> maximum current
      const uint8_t BRIGHTNESS_STEP = 2; // Increment for brightness adjustement via IR remote

      // Time constant, i.e. time after which light effects are updated
      const int TIME_CYCLE = 5; // ms

      // IR Commands (values depend on the remote control used)
      const uint64_t IR_CHminus = 0xFFA25D;
      const uint64_t IR_CH = 0xFF629D;
      const uint64_t IR_CHplus = 0xFFE21D;

      const uint64_t IR_PREV = 0xFF22DD;
      const uint64_t IR_NEXT = 0xFF02FD;
      const uint64_t IR_PLAY = 0xFFC23D;

      const uint64_t IR_MINUS = 0xFFE01F;
      const uint64_t IR_PLUS = 0xFFA857;
      const uint64_t IR_EQ = 0xFF906F;

      const uint64_t IR_ZERO = 0xFF6897;
      const uint64_t IR_HUNDRET = 0xFF9867;
      const uint64_t IR_TWOHUNDRET = 0xFFB04F;

      const uint64_t IR_ONE = 0xFF30CF;
      const uint64_t IR_TWO = 0xFF18E7;
      const uint64_t IR_THREE = 0xFF7A85;

      const uint64_t IR_FOUR = 0xFF10EF;
      const uint64_t IR_FIVE = 0xFF38C7;
      const uint64_t IR_SIX = 0xFF5AA5;

      const uint64_t IR_SEVEN = 0xFF42BD;
      const uint64_t IR_EIGHT = 0xFF4AB5;
      const uint64_t IR_NINE = 0xFF52AD;

      // IR receiver library parameters
      const uint16_t IR_BUFFER_SIZE = 1024;
      const uint8_t IR_MSG_TIMEOUT = 15;

      // ------------------------
      // Homematic stuff
      // ------------------------
      String ISE_ID = "24561"; //testvar

      String ip = "192.168.66.64"; // Arduino IP-Adresse
      const char * HomematicIP = "192.168.66.65"; // Homematic IP-Adresse
      const uint16_t HomematicPort = 80; //The port of the TCP server is specified.

      // -----------------------------------------------------------------------------
      // Object and variable definitions
      // -----------------------------------------------------------------------------

      //EthernetClient client;
      WiFiMulti WiFiMulti;
      WiFiClient client;
      bool connected;

      //IR receive
      IRrecv IrRecv(PIN_IRRECV, IR_BUFFER_SIZE, IR_MSG_TIMEOUT, true);

      // Buffer for decoded IR command
      decode_results irCmd;

      // IR command status
      bool irCmdAvailable = false; // True, if new IR code has been received and decoded

      // Last IR command received and decoded
      uint64_t irCmdValue = 0;

      // -----------------------------------------------------------------------------
      // Setup routine
      // -----------------------------------------------------------------------------

      void setup()
      {
      delay(1000);

      if (DEBUG_ON)
      {
      Serial.begin(115200);
      Serial.print("\nWaiting connect to WiFi...");
      }

      M5.begin(true, false, true); //Init Atom(Initialize serial port, LED).

      M5.dis.setBrightness(10); // tried to set this - also to 100. But was not there when I damaged the status LED.

      WiFiMulti.addAP("mywlan", "mypass"); //Add wifi configuration information.

      while (WiFiMulti.run() != WL_CONNECTED) { //If the connection to wifi is not established successfully.
      if (DEBUG_ON) Serial.print(".");
      delay(300);
      }

      if (DEBUG_ON)
      {
      Serial.println("\nWiFi connected");
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
      }
      // initialize the button object
      M5.update();

      IrRecv.enableIRIn(); // Switch on IR receiver after initialization

      M5.dis.drawpix(0, 0x00ff00); //GREEN
      }

      // -----------------------------------------------------------------------------
      // Main routine
      // -----------------------------------------------------------------------------

      void SendHttp(String IRVal)
      {
      M5.dis.drawpix(0, 0xfff000);
      if (client.connect(HomematicIP, HomematicPort)) {
      if (DEBUG_ON) Serial.println("connected");
      if (DEBUG_ON) Serial.println("Value: (dec)" + IRVal);

      client.println("GET /config/xmlapi/statechange.cgi?ise_id=24561&new_value=" + IRVal + " HTTP/1.0");
      client.println(); // end HTTP header
      
      /*while (client.available()) {
        char c = client.read();
        if (DEBUG_ON) Serial.print(c);
        }
      */
      
      client.stop();
      

      } else {
      if (DEBUG_ON) Serial.println("connection failed");
      M5.dis.drawpix(0, CRGB::Red); //RED
      delay(1000);
      }
      M5.dis.drawpix(0, CRGB::Green); //GREEN

      }

      void loop()
      {
      bool irCmdOnOff = false;

      // Determine the IR command state
      irCmdAvailable = IrRecv.decode(&irCmd);

      if (irCmdAvailable)
      {
      M5.dis.drawpix(0, CRGB::Blue); //BLUE
      if (irCmd.repeat) // Is it a repetition of the previous IR command?
      {
      irCmdAvailable = false;
      irCmdValue = 0x0;
      M5.dis.drawpix(0, CRGB::Green); //GREEN
      }
      else {
      // No repetition: retrieve the IR command
      irCmdValue = irCmd.value;
      }

      IrRecv.resume();
      
      if (irCmdAvailable)
      {
        if (DEBUG_ON) Serial.print("IR: ");
        if (DEBUG_ON) Serial.println((unsigned long) irCmd.value, HEX);
      
        String IRValue = String((unsigned long)irCmd.value, HEX);
        SendHttp(IRValue);
      }
      

      }

      // Process events "button released" or "IR on/off" respectively
      if (M5.Btn.wasPressed() )
      {
      M5.dis.drawpix(0, CRGB::White); //GREEN
      if (DEBUG_ON) Serial.println("Button pressed");
      }

      delay(TIME_CYCLE); // Pause before next pass through loop
      }

      I use the Arduino IDE and tried to get the IR Unit running. The functionality is there, so my gateway is working. But when I order new ATOM LITEs I'd like to know which failure I did....

      Thanx
      Christian

      1 Reply Last reply Reply Quote 0
      • felmueF Online
        felmue
        last edited by

        Hello @ckohrt

        the LED in your M5Atoms are most likely not broken. Try this example.

        From that example it looks like a delay(50); is required before the first call to M5.dis.drawpix(); else the LED stays dark.

        Thanks
        Felix

        GPIO translation table M5Stack / M5Core2
        Information about various M5Stack products.
        Code examples

        1 Reply Last reply Reply Quote 1
        • C Offline
          ckohrt
          last edited by

          @felmue said in ATOM Lite - broker status LED? (with two devices):

          delay(50);

          Thanks, I'll try that...

          1 Reply Last reply Reply Quote 0
          • C Offline
            ckohrt
            last edited by ckohrt

            Ok, I copied the program and uploaded it, the LED stays dark. :(

            I am using the M5Stack-ATOM Board, I don't know if I have to use another one. But I couldn't find the "M5Stack-ATOM LITE". Do I need this?

            The M5Atom library is up to date version 0.0.7.

            It seems that there is an issue on git....

            I tried to downgrade to M5Atom Version 0.0.5 - didn't work. I also downgraded FastLED to 3.3.3 (from 3.4.0) with current M5Atom version 0.0.7- YES IT DID WORK!!!!!

            Thank you VERY MUCH @felmue for your hint which led me to the right direction!

            1 Reply Last reply Reply Quote 0
            • P Offline
              paulhdietz
              last edited by

              @ckohrt - I also posted about this issue last week: https://community.m5stack.com/topic/3812/atom-lite-led

              I had to downgrade the installed M5Stack-ATOM board to pre 2.0.0 to get it to work.

              1 Reply Last reply Reply Quote 0

              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

              With your input, this post could be even better 💗

              Register Login
              • First post
                Last post