* When you program in the arduino-cli In your sketch you simply put #include // U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); (The first is the low memory page mode. Second is standard and much better) The Arduino stuff is staged in .arduino15 The Arduino stuff is installed in /home/greg/Arduino/libraries/U8g2/src/U8g2lib.h U8g2lib.cpp From looking at the .h file we see that U8G2_R0 is a pointer to a constant u8g2_cb_t structure U8G2_SH1106_128X64_NONAME_F_HW_I2C is a derived class of U8G2 it defines a public contructor of the same name U8G2_SH1106_128X64_NONAME_F_HW_I2C it calls u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); we can see it really then comes down defining two MCU specific functions u8x8_byte_arduino_hw_i2c u8x8_gpio_and_delay_arduino * In order to get this tool chain to work sudo yum remove cmake sudo yum install cmake3 cd /usr/bin sudo ln -s cmake3 cmake * Compile and flash a program 1002 cd eework/ 1003 cd hello_world 1001 . $HOME/esp/esp-idf/export.sh 1004 idf.py set-target esp32 1009 \rm -rf build 1010 idf.py set-target esp32 1011 idf.py menuconfig 1012 idf.py build 1014 idf.py -p /dev/ttyUSB0 flash * Install Tool Chain https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#get-started-get-prerequisites mkdir -p ~/esp cd ~/esp git clone --recursive https://github.com/espressif/esp-idf.git cd ~/esp/esp-idf ./install.sh ****************************************** In the terminal where you will run code cd xyz . $HOME/esp/esp-idf/export.sh alias get_idf='. $HOME/esp/esp-idf/export.sh' cd ~/eework cp -r $IDF_PATH/examples/get-started/hello_world . cd hello_world idf.py set-target esp32 idf.py menuconfig idf.py build