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

    (SOLVED) Change I2C pin in M5GFX Library (to use With ATOM LITE)

    Arduino
    3
    6
    10.3k
    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
      cepics
      last edited by cepics

      where are the pins assignements for I2C???

      I think I have to modify the library ...

      1 Reply Last reply Reply Quote 0
      • C
        cepics
        last edited by

        I tryed to change this lines in the M5UnitOLED.h file from

         static constexpr std::uint8_t M5_UNIT_OLED_SDA = 21;
         static constexpr std::uint8_t M5_UNIT_OLED_SCL = 22;
        

        to

         static constexpr std::uint8_t M5_UNIT_OLED_SDA = 26;
         static constexpr std::uint8_t M5_UNIT_OLED_SCL = 32;
        

        to match the ATOM GROVE I2C pin ....

        but no joy........

        1 Reply Last reply Reply Quote 0
        • F
          flypeek
          last edited by

          https://community.m5stack.com/topic/1842/m5atom-and-grove-sensors/3

          1 Reply Last reply Reply Quote 0
          • C
            cepics
            last edited by

            tnks for the reply

            I tried to add wire.h library and call Wire.begin(26, 32) but no joy....

            //The Game of Life, also known simply as Life, is a cellular automaton
            //devised by the British mathematician John Horton Conway in 1970.
            // https://en.wikipedia.org/wiki/Conway's_Game_of_Life
            #include <Wire.h>
            #include "M5Atom.h"
            //#include <Wire.h>
            #include <Arduino.h>
            //#include <Wire.h>
            #include <M5GFX.h>
            #include <M5UnitOLED.h>
            //#include <M5UnitLCD.h>
            
            //M5GFX display;
            M5UnitOLED display;
            //M5UnitLCD display;
            
            M5Canvas canvas[2];
            
            void setup(void)
            {
                M5.begin();            // Wire.begin() must be after M5.begin()
              Wire.begin(26, 32);    // Atom Matrix I2C GPIO Pin is 26 and 32 <- Important
              display.begin();
              display.setEpdMode(epd_mode_t::epd_fastest);
            
              if (display.width() < display.height())
              {
                display.setRotation(display.getRotation() ^ 1);
                display.setPivot(display.width() /2 -0.5, display.height() /2 - 0.5);
              }
            
              for (int i = 0; i < 2; i++)
              {
                canvas[i].setColorDepth(8);
                canvas[i].createSprite(std::min(192, display.width()>>1), std::min(160, display.height()>>1));
                canvas[i].createPalette();
                canvas[i].setPaletteColor(1, TFT_WHITE);
                canvas[i].setPivot(canvas[i].width() /2 -0.5, canvas[i].height() /2 - 0.5);
              }
              canvas[0].setTextColor(1);
              canvas[0].setTextDatum(textdatum_t::bottom_center);
              canvas[0].drawString("Conway's", canvas[0].width() >> 1, canvas[0].height() >> 1);
              canvas[0].setTextDatum(textdatum_t::top_center);
              canvas[0].drawString("Game of Life", canvas[0].width() >> 1, canvas[0].height() >> 1);
              canvas[0].pushRotateZoom(&display, 0,  (float)display.width() / canvas[0].width(), (float)display.height() / canvas[0].height());
              delay(1000);
            }
            
            void loop(void)
            {
              bool flip = false;
              int width = canvas[flip].width();
              int height = canvas[flip].height();
            
              int y = 1;
              do
              {
                int x = 1;
                do
                {
                  if (random(6) == 0) { canvas[flip].drawPixel(x, y, 1); }
                } while (++x < width - 1);
              } while (++y < height - 1);
            
              int diff;
              do
              {
                flip = !flip;
                diff = 0;
            
                auto old_buf = (uint8_t*)canvas[!flip].getBuffer();
                auto new_buf = (uint8_t*)canvas[ flip].getBuffer();
                int width  = canvas[flip].width();
                int height = canvas[flip].height();
                int py;
                int y  = height - 1;
                int ny = 0;
                do
                {
                  py = y;
                  y = ny;
                  if (++ny == height) ny = 0;
            
                  int px;
                  int x  = width - 1;
                  int nx = 0;
                  do
                  {
                    px = x;
                    x = nx;
                    if (++nx == width) nx = 0;
            
                    int neighbors = old_buf[px + py * width]
                                  + old_buf[ x + py * width]
                                  + old_buf[nx + py * width]
                                  + old_buf[px +  y * width]
                                  + old_buf[nx +  y * width]
                                  + old_buf[px + ny * width]
                                  + old_buf[ x + ny * width]
                                  + old_buf[nx + ny * width];
                    int idx = x + y * width;
                    bool flg = (neighbors == 3) || (neighbors == 2 && old_buf[idx]);
                    if (flg != new_buf[idx])
                    {
                      new_buf[idx] = flg;
                      ++diff;
                    }
                  } while (nx);
                } while (ny);
            
                canvas[flip].pushRotateZoom(&display, 0,  (float)display.width() / width, (float)display.height() / height);
              } while (diff);
            }
            

            with a I2C scanner and the screen connected I found the oled address

            
            
            #include <Wire.h>
            
            
            void setup()
            {
              Wire.begin(26, 32);  
              
              Serial.begin(115200);
              while (!Serial);             // Leonardo: wait for serial monitor
              Serial.println("\nI2C Scanner");
            }
            
            
            void loop()
            {
              byte error, address;
              int nDevices;
            
              Serial.println("Scanning...");
            
              nDevices = 0;
              for(address = 1; address < 127; address++ ) 
              {
                // The i2c_scanner uses the return value of
                // the Write.endTransmisstion to see if
                // a device did acknowledge to the address.
                Wire.beginTransmission(address);
                error = Wire.endTransmission();
            
                if (error == 0)
                {
                  Serial.print("I2C device found at address 0x");
                  if (address<16) 
                    Serial.print("0");
                  Serial.print(address,HEX);
                  Serial.println("  !");
            
                  nDevices++;
                }
                else if (error==4) 
                {
                  Serial.print("Unknown error at address 0x");
                  if (address<16) 
                    Serial.print("0");
                  Serial.println(address,HEX);
                }    
              }
              if (nDevices == 0)
                Serial.println("No I2C devices found\n");
              else
                Serial.println("done\n");
            
              delay(5000);           // wait 5 seconds for next scan
            }
            

            serial moniror output:

            I2C Scanner
            Scanning...
            I2C device found at address 0x3C  !
            done
            
            1 Reply Last reply Reply Quote 0
            • m5stackM
              m5stack
              last edited by

              if you wanna change the I2C pin. you could use this code.

              #include <M5UnitOLED.h>
              
              //M5UnitOLED display; // default setting
              
              M5UnitOLED display ( 21, 22, 400000 ); // SDA, SCL, FREQ
              
              
              C 1 Reply Last reply Reply Quote 0
              • C
                cepics @m5stack
                last edited by

                @m5stack said in Change I2C pin in M5GFX Library (to use With ATOM LITE):

                if you wanna change the I2C pin. you could use this code.

                #include <M5UnitOLED.h>
                
                //M5UnitOLED display; // default setting
                
                M5UnitOLED display ( 21, 22, 400000 ); // SDA, SCL, FREQ
                
                

                tnks a lot !!!

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post