Giter Club home page Giter Club logo

lilygo-tdisplays3-esphome's Introduction

Welcome to Lando's Website 👋


Name Date Message
marcusrbrown marcusrbrown 6/23/2023, 11:21:11 PM I used ChatGPT to analyze my GH profile, including profiles that follow mine. It has this to say about your profile:
<br...
Afterwalker99 Afterwalker99 4/5/2023, 6:49:22 PM Suppp!
sbur83 sbur83 4/1/2023, 12:28:07 PM I waz ere 23
landonr landonr 4/1/2023, 7:57:20 AM 🎇
landonr landonr 4/1/2023, 7:54:19 AM welcome friends 👫

Github stats Github stats

Visitor Count

lilygo-tdisplays3-esphome's People

Contributors

bradmck avatar fisheradam avatar guillempages avatar landonr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lilygo-tdisplays3-esphome's Issues

Latest TFT_eSPI library and dimmable backlight

This isn't a bug, I just wanted to share some info. I was able to get this working using the latest TFT_eSPI library - using the older custom_component method vs. the newer external_components method for now. I was also able to setup the backlight pin with ledc so it's dimmable. These were very simple changes to just a couple of header files in the TFT_eSPI library:

In User_Setup_Select.h comment out this line:

#include <User_Setup.h>

And uncomment this line:

//#include <User_Setups/Setup206_LilyGo_T_Display_S3.h>

In User_Setups/Setup206_LilyGo_T_Display_S3.h comment out these two lines:

#define TFT_BL 38  
#define TFT_BACKLIGHT_ON HIGH

Then in your ESPHome yaml file use this for the light - get rid of the GPIO switch and replace with this:

output:
  - platform: ledc
    pin: GPIO38
    id: gpio38
    frequency: 10000

light:
  - platform: monochromatic
    output: gpio38
    name: "Backlight"

More Instructions please

Im trying to install this through HomeAssistant ESPHome Plugin, but i am no savy and im not being able to do it, it says that the board doesnot exist...
Please help

Enable usage as an external component

It would be nice to be able to use this component as a standard display, supporting all the configuration options and lambdas that other displays support.

Couldn't find any component that can be used for 'display::DisplayBuffer'

Starting receiving the following error today 2024-01-11.

Couldn't find any component that can be used for 'display::DisplayBuffer'. Are you missing a hub declaration?.

Full error (the error is also present with 2023.12.5):

INFO ESPHome 2023.12.3
INFO Reading configuration /config/esphome/weather-display.yaml...
INFO Detected timezone 'America/New_York'
WARNING GPIO0 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
Failed config

binary_sensor.gpio: [source <unicode string>:96]
  platform: gpio
  id: boo_button
  pin: 
    number: 0
    inverted: True
    mode: 
      input: True
      output: False
      open_drain: False
      pullup: False
      pulldown: False
    ignore_strapping_warning: False
    drive_strength: 20.0
  name: Button 1
  on_press: 
    - then: 
        - if: 
            condition: 
              
              Couldn't find any component that can be used for 'display::DisplayBuffer'. Are you missing a hub declaration?.
              display.is_displaying_page: 
                page_id: magikarp
            then: 
              - display.page.show: 
                  id: weathertoday
            else: 
              - display.page.show: 
                  id: magikarp
  disabled_by_default: False
binary_sensor.gpio: [source <unicode string>:110]
  platform: gpio
  pin: 
    number: 14
    inverted: True
    mode: 
      input: True
      output: False
      open_drain: False
      pullup: False
      pulldown: False
    ignore_strapping_warning: False
    drive_strength: 20.0
  name: Button 2
  id: page_button
  on_press: 
    - then: 
        - if: 
            condition: 
              
              Couldn't find any component that can be used for 'display::DisplayBuffer'. Are you missing a hub declaration?.
              display.is_displaying_page: 
                page_id: pokemon
            then: 
              - display.page.show: 
                  id: weathertoday
            else: 
              - display.page.show_next: 
                  
                  ID 'weatherdisplay' of type tdisplays3::TDisplayS3 doesn't inherit from display::DisplayBuffer. Please double check your ID is pointing to the correct value.
                  id: weatherdisplay
  disabled_by_default: False

And the associated yaml:


esphome:
  name: weather-display
  friendly_name: weather_display
  platformio_options:
    board_build.f_flash: 80000000L
    board_build.partitions: default_16MB.csv
    board_build.arduino.memory_type: qio_opi

external_components:
  - source: github://landonr/lilygo-tdisplays3-esphome
    components: [tdisplays3]


esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  framework:
    type: arduino
  flash_size: 16MB


# Enable logging
logger:
  level: info

# Enable Home Assistant API
api:
  encryption:
    key: "x"

ota:
  password: "x"


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.x.x
    gateway: 192.168.86.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Weather-Display Fallback Hotspot"
    password: "x"



captive_portal:


switch:
  - platform: shutdown
    name: "Weather Display Shutdown"

  - platform: restart
    name: "Weather Display Restart"


time:
  - platform: homeassistant
    id: esptime

binary_sensor:
  - platform: gpio
    id: boo_button
    pin: 
      number: GPIO0
      inverted: true
    name: "Button 1"
    on_press:
    - if:
        condition:
          display.is_displaying_page: magikarp
        then:
          display.page.show: weathertoday
        else:
          display.page.show: magikarp
  - platform: gpio
    pin: 
      number: GPIO14
      inverted: true
    name: "Button 2"
    id: page_button
    on_press:
     - if:
        condition:
          display.is_displaying_page: pokemon
        then: 
          display.page.show: weathertoday
        else:
          display.page.show_next: weatherdisplay


output:
  - platform: ledc
    pin: GPIO38
    id: gpio38
    frequency: 2000

light:
  - platform: monochromatic
    output: gpio38
    name: "Backlight"
    restore_mode: RESTORE_DEFAULT_ON



text_sensor:

  - platform: homeassistant
    id: high_temp
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: high_temp
    internal: true

  - platform: homeassistant
    id: low_temp
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: low_temp
    internal: true

  - platform: homeassistant
    id: humidity
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: humidity
    internal: true

  - platform: homeassistant
    id: condition
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: condition
    internal: true

  - platform: homeassistant
    id: precip_prob
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: precip_prob
    internal: true

  - platform: homeassistant
    id: tomorrow_temp
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: tomorrow_temp
    internal: true

  - platform: homeassistant
    id: tomorrow_low
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: tomorrow_low
    internal: true

  - platform: homeassistant
    id: tomorrow_precip
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: tomorrow_precip
    internal: true

  - platform: homeassistant
    id: tomorrow_humidity
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: tomorrow_humidity
    internal: true

  - platform: homeassistant
    id: tomorrow_condition
    entity_id: sensor.forest_hills_daily_weather_forecast
    attribute: tomorrow_condition
    internal: true
    filters:
      substitute:
        - "Partlycloudy -> Partly Cloudy"
        - "Clearday -> Clear"

  - platform: homeassistant
    id: current_temp
    entity_id: sensor.pirateweather_temperature
    internal: true

  - platform: homeassistant
    id: feels_like
    entity_id: sensor.pirateweather_apparent_temperature
    internal: true

  - platform: homeassistant
    id: current_state
    entity_id: sensor.pirateweather_summary
    internal: true

  - platform: homeassistant
    id: weather_icon
    entity_id: sensor.pirateweather_icon
    internal: true

  - platform: homeassistant
    id: qotd_q
    entity_id: sensor.zen_quote_of_the_day
    attribute: q
    internal: true

  - platform: homeassistant
    id: qotd_a
    entity_id: sensor.zen_quote_of_the_day
    attribute: a
    internal: true

  - platform: homeassistant
    id: tomorrow_day
    entity_id: sensor.tomorrow_day
    internal: true

  - platform: homeassistant
    id: tomorrow_date
    entity_id: sensor.tomorrow_date
    internal: true

  - platform: homeassistant
    id: potd
    entity_id: sensor.pokemon_of_the_day
    internal: true
    filters:
      substitute:
        from: "-"
        to: " "

  - platform: homeassistant
    id: potd_id
    entity_id: sensor.pokemon_type_of_the_day
    attribute: id
    internal: true
  
  - platform: homeassistant
    id: potd_type
    entity_id: sensor.pokemon_type_of_the_day
    internal: true

font:

  - file: 
      type: gfonts
      family: JetBrains+Mono
      weight: 300
    id: jet14
    size: 14
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
      '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
      'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
      'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
      'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
      'u', 'v', 'w', 'x', 'y', 'z','å', 'ä', 'ö', '/','?','*','#',';','$','^','`','''']

  - file: 
      type: gfonts
      family: JetBrains+Mono
      weight: 300
    id: jet16
    size: 16
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
      '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
      'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
      'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
      'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
      'u', 'v', 'w', 'x', 'y', 'z','å', 'ä', 'ö', '/','?','*','#',';','$','^','`','''']

  - file: 
      type: gfonts
      family: JetBrains+Mono
      weight: 400
    id: jet20
    size: 20
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
      '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
      'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
      'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
      'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
      'u', 'v', 'w', 'x', 'y', 'z','å', 'ä', 'ö', '/','?','*','#',';','$','^','`','''']

  - file: 
      type: gfonts
      family: JetBrains+Mono
      weight: 400
    id: jet24
    size: 24
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
      '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
      'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
      'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
      'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
      'u', 'v', 'w', 'x', 'y', 'z','å', 'ä', 'ö', '/','?','*','#',';','$','^','`','''']


  - file: "Pokemon-Solid.ttf"
    id: pokemon17
    size: 17
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
      '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
      'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
      'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
      'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
      'u', 'v', 'w', 'x', 'y', 'z','å', 'ä', 'ö', '/','?','*','#',';','$','^','`','''']


image:
  - file: mdi:weather-sunny
    id: clear_day
    resize: 90x90

  - file: mdi:weather-night
    id: clear_night
    resize: 90x90

  - file: mdi:weather-cloudy
    id: cloudy
    resize: 90x90

  - file: mdi:weather-pouring
    id: rain
    resize: 90x90

  - file: mdi:weather-snowy-rainy
    id: sleet
    resize: 90x90

  - file: mdi:weather-snowy-heavy
    id: snow
    resize: 90x90

  - file: mdi:weather-windy-variant
    id: wind
    resize: 90x90

  - file: mdi:weather-fog
    id: fog
    resize: 90x90

  - file: mdi:weather-partly-cloudy
    id: partly_cloudy_day
    resize: 90x90  

  - file: mdi:weather-night-partly-cloudy
    id: partly_cloudy_night
    resize: 90x90

  - file: mdi:cloud-alert-outline
    id: error
    resize: 90x90
  
  - file: mdi:chevron-double-right
    id: next_page
    resize: 25x25

  - file: "pokemon/potd_normal.png"
    id: potd_normal
    type: RGBA
    resize: 80x80

  - file: "pokemon/potd_shiny.png"
    id: potd_shiny
    type: RGBA
    resize: 80x80

  - file: "pokemon/pokemon_logo.png"
    id: pokemon_logo
    type: RGBA

  - file: "pokemon/magikarp.png"
    id: magikarp_image
    type: RGBA

color:
 
  - id: red
    red_int: 255
    green_int: 0
    blue_int: 0

  - id: yellow
    red_int: 255
    green_int: 239
    blue_int: 0

  - id: blue
    red_int: 0
    green_int: 0
    blue_int: 255
    
  - id: grey
    red_int: 128
    green_int: 128
    blue_int: 128

  - id: lightgrey
    red_int: 224
    green_int: 224
    blue_int: 224

  - id: poke_yellow
    red_int: 255
    green_int: 203
    blue_int: 5

  - id: poke_blue
    red_int: 42
    green_int: 117
    blue_int: 187


display:
  - platform: tdisplays3
    id: weatherdisplay
    update_interval: 1s
    rotation: 0


#170x320
    pages:
      - id: weathertoday
        lambda: |-
          // Print "Weather Today" in top center.
          it.printf(85, 0, id(rubik), Color(255, 203, 5), TextAlign::TOP_CENTER, "WEATHER");
          
          // Print "Weather Today" in top center.
          it.printf(85, 25, id(rubik), Color(255, 203, 5), TextAlign::TOP_CENTER, "TODAY");

          // Print date in MM-DD-YYYY (from homeassistant sensor)
          it.strftime(85, 55, id(jet20), TextAlign::TOP_CENTER, "%A", id(esptime).now());

          // Print date in MM-DD-YYYY (from homeassistant sensor)
          it.strftime(85, 75, id(jet20), TextAlign::TOP_CENTER, "%b %d %Y", id(esptime).now());
          
          // Print time in HH:MM format
          it.strftime(85, 95, id(jet20), TextAlign::TOP_CENTER, "%H:%M", id(esptime).now());

          // Print current_state (from homeassistant sensor)
          it.printf(85, 120, id(jet20), TextAlign::TOP_CENTER , "%s", id(current_state).state.c_str());

          // Print "now" (from homeassistant sensor)
          it.printf(90, 150, id(jet14), TextAlign::TOP_LEFT , "Now");

          // Print current_temp (from homeassistant sensor)
          it.printf(90, 160, id(jet24), TextAlign::TOP_LEFT, "%s°F", id(current_temp).state.c_str());

          // Print "feels like" (from homeassistant sensor)
          it.printf(90, 185, id(jet14), TextAlign::TOP_LEFT , "Feels Like");

          // Print feels_like (from homeassistant sensor)
          it.printf(90, 195, id(jet24), TextAlign::TOP_LEFT , "%s°F", id(feels_like).state.c_str());

          // Print "high today" (from homeassistant sensor)
          it.printf(0, 225, id(jet14), TextAlign::TOP_LEFT , "Hi:");

          // Print high temperature (from homeassistant sensor)
          it.printf(30, 225, id(jet20), TextAlign::TOP_LEFT , "%s°F", id(high_temp).state.c_str());    

          // Print "low today" (from homeassistant sensor)
          it.printf(0, 245, id(jet14), TextAlign::TOP_LEFT , "Lo:");

          // Print low temperature (from homeassistant sensor)
          it.printf(30, 245, id(jet20), TextAlign::TOP_LEFT, "%s°F", id(low_temp).state.c_str());

          // Print "Humid" (from homeassistant sensor)
          it.printf(85, 225, id(jet14), TextAlign::TOP_LEFT , "Hum:");

          // Print humidity (from homeassistant sensor)
          it.printf(115, 225, id(jet20), TextAlign::TOP_LEFT, "%s%%", id(humidity).state.c_str());

          // Print "Precip" (from homeassistant sensor)
          it.printf(85, 245, id(jet14), TextAlign::TOP_LEFT , "Pre:");

          // Print weather_icon probability (from homeassistant sensor)
          it.printf(115, 245, id(jet20), TextAlign::TOP_LEFT, "%s%%", id(precip_prob).state.c_str());

          // Print weather icon
          // Aligned on left by default

          if ( (id(weather_icon).state) == "clear-day" ) {
            it.image(0, 140, id(clear_day), id(yellow));
          }
          else if ( (id(weather_icon).state) == "clear-night" ) {
            it.image(0, 140, id(clear_night));
          }
          else if ( (id(weather_icon).state) == "cloudy" ) {
            it.image(0, 140, id(cloudy), id(grey));
          }
          else if ( (id(weather_icon).state) == "rain" ) {
            it.image(0, 140, id(rain), id(grey));
          }
          else if ( (id(weather_icon).state) == "sleet" ) {
            it.image(0, 140, id(sleet));
          }
          else if ( (id(weather_icon).state) == "snow" ) {
            it.image(0, 140, id(snow));
          }
          else if ( (id(weather_icon).state) == "wind" ) {
            it.image(0, 140, id(wind));
          }
          else if ( (id(weather_icon).state) == "fog" ) {
            it.image(0, 140, id(fog), id(grey));
          }
          else if ( (id(weather_icon).state) == "partly-cloudy-day" ) {
            it.image(0, 140, id(partly_cloudy_day), id(lightgrey));
          }
          else if ( (id(weather_icon).state) == "partly-cloudy-night" ) {
            it.image(0, 140, id(partly_cloudy_night), id(lightgrey));
          }
          else {
            it.image(0, 140, id(error), id(red));
          }


          // Print next page button
          it.image(165, 320, id(next_page), ImageAlign::BOTTOM_RIGHT);


      - id: weathertomorrow
        lambda: |-
          // Print "Weather" in top center.
          it.printf(85, 0, id(rubik), Color(255, 203, 5), TextAlign::TOP_CENTER, "WEATHER");
          
          // Print "Tomorrow" in top center.
          it.printf(85, 25, id(rubik), Color(255, 203, 5), TextAlign::TOP_CENTER, "TOMORROW");

          // Print name of day tomorrow (from homeassistant sensor)
          it.printf(85, 55, id(jet20), TextAlign::TOP_CENTER, "%s", id(tomorrow_day).state.c_str());

          // Print date tomorrow
          it.printf(85, 75, id(jet20), TextAlign::TOP_CENTER, "%s", id(tomorrow_date).state.c_str());

          // Print tomorrorw's condition (from homeassistant sensor)
          it.printf(85, 120, id(jet20), TextAlign::TOP_CENTER , "%s", id(tomorrow_condition).state.c_str());

          // Print "Hi" (from homeassistant sensor)
          it.printf(90, 150, id(jet14), TextAlign::TOP_LEFT , "Hi");

          // Print tomorrow_temp (from homeassistant sensor)
          it.printf(90, 160, id(jet24), TextAlign::TOP_LEFT, "%s°F", id(tomorrow_temp).state.c_str());

          // Print "Lo" (from homeassistant sensor)
          it.printf(90, 185, id(jet14), TextAlign::TOP_LEFT , "Lo");

          // Print tomorrow_low (from homeassistant sensor)
          it.printf(90, 195, id(jet24), TextAlign::TOP_LEFT , "%s°F", id(tomorrow_low).state.c_str());

          // Print "Humid" (from homeassistant sensor)
          it.printf(85, 225, id(jet14), TextAlign::TOP_LEFT , "Hum:");

          // Print humidity (from homeassistant sensor)
          it.printf(115, 225, id(jet20), TextAlign::TOP_LEFT, "%s%%", id(tomorrow_humidity).state.c_str());

          // Print "Precip" (from homeassistant sensor)
          it.printf(0, 225, id(jet14), TextAlign::TOP_LEFT , "Pre:");

          // Print precip probability (from homeassistant sensor)
          it.printf(30, 225, id(jet20), TextAlign::TOP_LEFT, "%s%%", id(tomorrow_precip).state.c_str());

          // Print weather icon
          // Aligned on left by default

          if ( (id(tomorrow_condition).state) == "Sunny" ) {
            it.image(0, 140, id(clear_day), id(yellow));
          }
          else if ( (id(tomorrow_condition).state) == "Cloudy" ) {
            it.image(0, 140, id(cloudy), id(grey));
          }
          else if ( (id(tomorrow_condition).state) == "Rainy" ) {
            it.image(0, 140, id(rain), id(grey));
          }
          else if ( (id(tomorrow_condition).state) == "Sleet" ) {
            it.image(0, 140, id(sleet));
          }
          else if ( (id(tomorrow_condition).state) == "Snow" ) {
            it.image(0, 140, id(snow));
          }
          else if ( (id(tomorrow_condition).state) == "Wind" ) {
            it.image(0, 140, id(wind), id(lightgrey));
          }
          else if ( (id(tomorrow_condition).state) == "Fog" ) {
            it.image(0, 140, id(fog), id(grey));
          }
          else if ( (id(tomorrow_condition).state) == "Partly Cloudy" ) {
            it.image(0, 140, id(partly_cloudy_day), id(lightgrey));
          }
          else {
            it.image(0, 140, id(error), id(red));
          }


          // Print next page button
          it.image(165, 320, id(next_page), ImageAlign::BOTTOM_RIGHT);


      - id: pokemon

        lambda: |-

          // Print Pokemon logo in top center.
          it.image(85, 0, id(pokemon_logo), ImageAlign::TOP_CENTER);

          // Print "of the day" in top center.
          it.printf(85, 56, id(pokemon17), Color(id(poke_blue)), TextAlign::TOP_CENTER, "OF THE DAY");

          // Print POTD with line breaks 
          std::string s1 = id(potd).state;
          int limit = 13;
          int space = 0;
          int i = 0;
          int line = 0;
          int y = 80;

          while (i < s1.length()) {
            if (s1.substr(i, 1) == " " || s1.substr(i, 1) == "-") {
              space = i;
            }
            if (line > limit - 1) {
              s1 = s1.substr(0, space) + "~" + s1.substr(space + 1);
              line = 0;
            }
            i++;
            line++;
          }
          size_t pos = s1.find("~");
          int linecount = 1;
          int breakpositions[10];
          breakpositions[0] = -1;

          while (pos != std::string::npos) {
            s1.replace(pos, 1, "\n");
            breakpositions[linecount] = pos;
            pos = s1.find("~");
            linecount++;
          }

          breakpositions[linecount] = s1.length();

          std::string singleline;
          i = 0;

          while (i < linecount) {
            singleline = s1.substr(breakpositions[i] + 1, (breakpositions[i + 1] - breakpositions[i] - 1));
            it.printf(85, y, id(jet20), TextAlign::TOP_CENTER, "%s", singleline.c_str());
            y=y+20;
            i++;
          }


          // Print POTD type (from homeassistant sensor)
          it.printf(85, 125, id(jet16), TextAlign::TOP_CENTER , "%s type", id(potd_type).state.c_str());

          // Print POTD pokedex id (from homeassistant sensor)
          it.printf(85, 150, id(jet16), TextAlign::TOP_CENTER , "Pokedex #: %s", id(potd_id).state.c_str());

          // Draw the image the POTDs
          it.image(0, 175, id(potd_normal));
          it.image(90, 175, id(potd_shiny));

          // Print (from homeassistant sensor)
          it.printf(45, 265, id(jet14), TextAlign::TOP_CENTER, "%s", "Normal");
          it.printf(135, 265, id(jet14), TextAlign::TOP_CENTER, "%s", "Shiny");


          // Print next page button
          it.image(165, 320, id(next_page), ImageAlign::BOTTOM_RIGHT);

      - id: magikarp

        lambda: |-

          // Print magikarp in top center.
          it.image(85, 20, id(magikarp_image), ImageAlign::TOP_CENTER);

          // Print "Gotta Catch" in top center.
          it.printf(85, 220, id(pokemon17), Color(id(poke_blue)), TextAlign::TOP_CENTER, "Gotta Catch");
          // Print "em all" in top center.
          it.printf(85, 240, id(pokemon17), Color(id(poke_blue)), TextAlign::TOP_CENTER, "'em all!");

#          // Print next page button
#          it.image(165, 320, id(next_page), ImageAlign::BOTTOM_RIGHT);

Touch example resets/black screen

Hello,

I'm having trouble using the touch example. As a precursor, I tried the LCD only example, which works perfectly.

When the board powers up on the touch example, I get the following in the logs several times (and nothing else):

WARNING Decoded 0x42095aba: esp_pm_impl_waiti at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_pm/pm_impl.c:839
[12:21:49]SPIWP:0xee
[12:21:49]mode:DIO, clock div:1
[12:21:49]load:0x3fce3808,len:0x43c
[12:21:49]load:0x403c9700,len:0xbec
[12:21:49]load:0x403cc700,len:0x2a3c
[12:21:49]entry 0x403c98d8
[12:21:50]ESP-ROM:esp32s3-20210327
[12:21:50]Build:Mar 27 2021
[12:21:50]rst:0xc (RTC_SW_CPU_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)
[12:21:50]Saved PC:0x42095aba

This looks to me like the board is resetting a few times, but this stops after a few cycles. The board then sits there with a blank screen and is offline in Home Assistant. The red LED flickers (as with the LCD only example).

If it's any help, my board has the text "T_Display_S3 22-8-2 V12" on the back. Perhaps a different/newer version?

Please let me know of any more info I can provide to get this working.

Thanks in advance,

Rob

CONF_LOAD_SMOOTH_FONTS requires CONF_LOAD_FONTS to be true (otherwise it has no meaning).

          CONF_LOAD_SMOOTH_FONTS requires CONF_LOAD_FONTS to be true (otherwise it has no meaning).

It would be nice to add a custom validator to throw an error if smooth fonts are requested but "standard" fonts are not.

Another option would be to change the if below, so that if either of the options is set, the "standard" fonts defines are set. (and then change the type to "Exclusive"; so that either "LOAD_FONTS" or "LOAD_SMOOTH_FONTS" is set.

I'm unsure/undecided which of both options I find better, but it's @landonr's repository anyway :-D

Originally posted by @guillempages in #23 (comment)

After the ESPhome 2023.12.0 update, the ESP reboots in a loop.

Hi,
the compile worked, but ESP rebooted in a loop. I restore to version 2023.11.6, it's good ESP works.
I did a "clean build files" and recompiled, it's the same. I can't see the logs because I can't connect to the device.

I've the ESP32-S3 T-Display model without touch.

esphome:
  name: s3-display
  friendly_name: ESP32-S3 T-Display
  platformio_options:
    board_build.f_flash: 80000000L
    board_build.partitions: default_16MB.csv
    board_build.arduino.memory_type: qio_opi

external_components:
  - source: github://landonr/lilygo-tdisplays3-esphome
    components: [tdisplays3]

esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  framework:
    type: arduino
  flash_size: 16MB

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.xx
    gateway: !secret wifi_gtw
    subnet: !secret wifi_sub
    dns1: !secret wifi_dns1

web_server:

uart:
  tx_pin: 17
  rx_pin: 18
  baud_rate: 256000
  id: uart_1
  parity: NONE
  stop_bits: 1

ld2410:
  - uart_id: uart_1

time:
  - platform: homeassistant
    id: ha_time

sensor:
  - platform: homeassistant
    id: temp_1
    entity_id: sensor.atc_20a2_temperature

  - platform: homeassistant
    id: temp_2
    entity_id: sensor.atc_67c6_temperature

  - platform: homeassistant
    id: power
    entity_id: sensor.0xa4c1383a5eeb5542_power

  - platform: ld2410
    light: #intensité lumineuse
      name: light
    moving_distance: #distance cible en mouvement
      name : Moving Distance
    still_distance: #distance cible immobile
      name: Still Distance
    moving_energy: #quantité de mouvement
      name: Move Energy
    still_energy: #quantité d'immobilité ??
      name: Still Energy
    detection_distance: #distance de détection
      name: Detection Distance

binary_sensor:
  - platform: gpio
    pin: 
      number: GPIO0
      inverted: true
    name: "Button 1"
    on_press:
      then:
        - light.toggle: light_s3

  - platform: gpio
    pin: 
      number: GPIO14
      inverted: true
      mode:
         input: true
    name: "Button 2"
    filters:
    - delayed_on: 10ms
    on_press: 
      - lambda:  |-
          if (id(disp).get_active_page() == id(page1)) {
            ESP_LOGD("custom", "Switch to Page 2");
            id(disp).show_page(id(page2));
          } 
          else if (id(disp).get_active_page() == id(page2)) {
            ESP_LOGD("custom", "Switch to Page 1");
            id(disp).show_page(id(page1));
          }  
          else {
            // Might not need this but here for future
          }

  - platform: status
    name: "Statut"
    id: system_status
    entity_category: "diagnostic"

  - platform: homeassistant
    entity_id: binary_sensor.0x00158d0009439ec9_contact
    id: door_frigo

  - platform: ld2410
    has_target: #Présence
      name: Presence
    has_moving_target: #Cible mobile
      name: Moving Target
    has_still_target: #Cible immobile
      name: Still Target

switch:
  - platform: restart
    name: "Restart"
    entity_category: config

  - platform: ld2410
    engineering_mode:
      name: "engineering mode"

button:
  - platform: ld2410
    restart:
      name: "ld2410 restart"

text_sensor:
  - platform: template
    id: s3_uptime
    name: "Uptime"
    lambda: |-
      int seconds = (id(uptime_sec).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600); 
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      if ( days ) {
        return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s ").c_str() };
      } else if ( hours ) {
        return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s ").c_str() };
      } else if ( minutes ) {
        return { (String(minutes) +"m "+ String(seconds) +"s ").c_str() };
      } else {
        return { (String(seconds) +"s ").c_str() };
      }
    icon: mdi:clock-start
    update_interval: 60s
    entity_category: "diagnostic"

number:
  - platform: ld2410
    timeout: #Temps pour passer le binary sensor Présence à faux
      name: timeout
    light_threshold: #Seuil de lumière
      name: light threshold
    max_move_distance_gate: #Distance de détection du mouvemenet 2-8
      name: max move distance gate
    max_still_distance_gate: #Distance de détection d'immobilité 2-8
      name: max still distance gate

output:
  - platform: ledc
    pin: GPIO38
    id: gpio38
    frequency: 2000

light:
  - platform: monochromatic
    output: gpio38
    name: "Backlight"
    id: light_s3
    restore_mode: RESTORE_DEFAULT_ON

font:
  - file: "gfonts://Roboto"
    id: roboto
    size: 30

  - file: "gfonts://Roboto"
    id: roboto_12
    size: 12

  - file: "gfonts://Roboto"
    id: roboto_20
    size: 18

  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font
    size: 58
    glyphs: [
      "\U000F081B", # mdi-door-closed
      "\U000F081C", # mdi-door-open
      ]

  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font_po
    size: 55
    glyphs: [
      "\U000F0241", # mdi-flash
      "\U000F0243", # mdi-flash-off
      ]

  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_meteo
    size: 58
    glyphs: [
      "\U000F0594", # mdi-weather-night
      "\U000F0590", # mdi-weather-cloudy
      "\U000F0591", # mdi-weather-fog
      "\U000F0592", # mdi-weather-hail
      "\U000F0593", # mdi-weather-lightning
      "\U000F067E", # mdi-weather-lightning-rainy
      "\U000F0595", # mdi-weather-partly-cloudy
      "\U000F0596", # mdi-weather-pouring
      "\U000F0597", # mdi-weather-rainy
      "\U000F0598", # mdi-weather-snowy
      "\U000F067F", # mdi-weather-snowy-rainy
      "\U000F0599", # mdi-weather-sunny
      "\U000F059D", # mdi-weather-windy
      "\U000F059E", # mdi-weather-windy-variant
      ]

display:
  - platform: tdisplays3
    id: disp
    rotation: 90    
    update_interval: 1s
    pages:
      - id: page1
        lambda: |-
          it.printf(40, 1, id(roboto), Color(0, 0, 255), id(ha_time).now().strftime("%H:%M:%S %d/%m/%y").c_str());
          it.print(1,  40, id(roboto), Color(255, 255, 255), TextAlign::LEFT, "Congelateur:");  
          it.print(1,  80, id(roboto), Color(255, 255, 255), TextAlign::LEFT, "Refrigerateur:");
          it.printf(191, 40, id(roboto), Color(0, 255, 0), "%.1f°C", id(temp_1).state);
          it.printf(216, 80, id(roboto), Color(0, 255, 0), "%.1f°C", id(temp_2).state);
          it.print(1, 122, id(roboto), Color(255, 255, 255), TextAlign::LEFT, "Porte:");
          if (id(door_frigo).state == false) {
            it.print(88, 122, id(roboto), Color(0, 255, 0), TextAlign::LEFT, "Fermer");
          } else {
            it.print(88, 122, id(roboto), Color(255, 0, 0), TextAlign::LEFT, "Ouverte");
          }
          if (id(door_frigo).state == false) {
            it.printf(200, 112, id(icon_font), Color(0, 255, 0), TextAlign::LEFT, "\U000F081B");
          } else {
            it.printf(200, 112, id(icon_font), Color(255, 0, 0), TextAlign::LEFT, "\U000F081C");
          }
          if (id(power).state >= 1) {
            it.printf(260, 115, id(icon_font_po), Color(255, 0, 0), TextAlign::LEFT, "\U000F0241");
          } else {
            it.printf(260, 115, id(icon_font_po), Color(0, 255, 0), TextAlign::LEFT, "\U000F0243");
          }
      - id: page2
        lambda: |-
          it.rectangle(0,  0, it.get_width(), it.get_height(), Color(0, 0, 255));
          it.rectangle(0, 20, it.get_width(), it.get_height(), Color(0, 0, 255));
          it.print(8, 5, id(roboto_12), Color(255, 255, 0), TextAlign::LEFT, "Today");
          it.printf(85, 5, id(roboto_12), Color(255, 255, 0), TextAlign::LEFT, "%.0fh", id(weather_heure_h0).state);
          it.printf(149, 5, id(roboto_12), Color(255, 255, 0), TextAlign::LEFT, "%.0fh", id(weather_heure_h1).state);
          it.printf(213, 5, id(roboto_12), Color(255, 255, 0), TextAlign::LEFT, "%.0fh", id(weather_heure_h2).state);
          it.print(260, 5, id(roboto_12), Color(255, 255, 0), TextAlign::LEFT, "Tomorrow");
...

External power solution

GPIO15 need to be set to HIGH during boot to permit an external power on 5V pin. Without it, ESP don't turn on.
I've done this:

esphome:

...

on_boot:
priority: -100.0
# ...
then:
- switch.turn_off: power_en

switch:

  • platform: gpio
    pin: GPIO15
    id: power_en
    restore_mode: ALWAYS_ON

Configurable build flags

          Should those be made configurable? There are other displays (e.g. ili9xxx) that offer the possibility of configuring the DC, CS and reset pins.

OTOH, we could put this in a separate PR.

Originally posted by @guillempages in #23 (comment)

Issue with Touch Example

Trying to get the example running and I keep getting these errors:

Compiling .pioenvs/tdisplays3-test/src/main.cpp.o
In file included from .piolibdeps/tdisplays3-test/TFT_eSPI/TFT_eSPI.h:68,
                 from src/esphome/components/tdisplays3/t_display_s3.h:4,
                 from src/esphome.h:45,
                 from src/main.cpp:3:
.piolibdeps/tdisplays3-test/TFT_eSPI/Processors/TFT_eSPI_ESP32_S3.h:11:3: warning: #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update) [-Wcpp]
  #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update)
   ^~~~~~~
In file included from src/esphome/components/tdisplays3/t_display_s3.h:4,
                 from src/esphome.h:45,
                 from src/main.cpp:3:
.piolibdeps/tdisplays3-test/TFT_eSPI/TFT_eSPI.h:882:8: warning: #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available! [-Wcpp]
       #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available!

And this results, predictably, in the touch doing nothing.

Any ideas on what might be happening?

ESPHome Update 12.1 brick the device

After i have updateted my lilygo s3 (without Touch) to ESPHome 12.1 the device brick. It does not starts and is not reachable over wlan anymore. Since i've roll back the device to an earlyer backup it works normal. Anyone else with this issue here?

Best regards

Tobi

Touch x=0 y=0

I'm having trouble with touch. Everything works fine if I compile and flash the device. At the first restart the touch works but the coordinates are x=0 and y=0. What can it be ?

Very promising work just sending kudos :)

Hi there Landon and Adam

Just a heads-up from here, awaiting your work, so I can get started on deploying some TTGO S3 display devices on my setup.

It really looks promsing, but still over the top in terms of me getting it to work.

Thanks ;)

Compile errors

Noob here but hoping for some help. What exactly does "ensuring to change the s3.yaml api" to one's own credentials? My secrets.yaml should be fine as it has my correct wifi SSID and password info but I didn't know what to change in the s3.yaml file so I left it alone.

In any event, when trying to complete the manual download I'm getting a bunch of errors and eventual failure. Log attached.

logs_s3_compile.txt

Failed config with esphome 2023.11.x

Hi,
I just updated ESPhome to version 2023.11.2. (I was in version 2023.10.6).
I wanted to update the firmware, but I received this error:

INFO ESPHome 2023.11.2
INFO Reading configuration /config/esphome/s3-display.yaml...
Failed config

esp32: None
  
  Please specify flash_size within esp32 configuration only.
  board: esp32-s3-devkitc-1
  variant: ESP32S3
  framework: 
    version: 2.0.5
    source: ~3.20005.0
    platform_version: platformio/[email protected]
    type: arduino
  flash_size: 4MB

config fail

from what I understand, you have to pass the platformio option: for flash_size to esp32:

How to modify it?

esphome:
  name: s3-display
  friendly_name: ESP32-S3 T-Display
  platformio_options:
    board_build.f_flash: 80000000L
    board_upload.flash_size: 16MB
    board_build.partitions: default_16MB.csv
    board_build.arduino.memory_type: qio_opi

external_components:
  - source: github://landonr/lilygo-tdisplays3-esphome
    components: [tdisplays3]

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

No display when using battery power

Not sure if this is the right place for this issue, but it seems the display (or possibly just backlight) isn't working when running on battery for this module using code from this repo.

As soon as I reconnect USB, the display lights up again. On battery the module is powered on and responds to ping, etc.

Is anyone else experiencing this?

Update to esphome 12.6/12.7 fails

Hello,

since there is the esphome update to 12.6/12.7 out, i can't update on this version on my tdisplay s3. I get this error on my both Displays:

logs_example_run.txt

Someone know how i can fix it? Thanks a lot in advance!
Best regards

Tobi

Time does not sync with HA until interactive action

First thing, this project is awesome -- I am a total noob to esp32 and I'd be lost with this new board without these examples.

I have successfully installed the example w/touch template and everything works as advertised except one little thing... When the board boots, it displays the default (presumably null) time of 1969-12-31 18:00:00 ... It never pulls current time from HA on its own until I do something to interact with it like pulling logs via ESPHome (via HA). Once I begin pulling logs, it instantly refreshes to current time, but never until then.

Am I holding it wrong?

implement touch

Anyone know will the tdiasplay-s3-touch variant work with this component?

Black screen

Anyone has an Idea my screen show after last Compile & install a blackscreen:


INFO Reading configuration /config/esphome/s3.yaml...
WARNING The selected Arduino framework version is not the recommended one. If there are connectivity or build issues please remove the manual version.
WARNING The selected Arduino framework version is not the recommended one. If there are connectivity or build issues please remove the manual version.
INFO Detected timezone 'Europe/Berlin'
INFO Generating C++ source...
INFO Compiling app...
Processing s3 (board: esp32-s3-devkitc-1; framework: arduino; platform: platformio/espressif32 @ 5.0.0)
--------------------------------------------------------------------------------
Library Manager: Installing git+https://github.com/landonr/lilygo-tdisplays3-esphome.git
INFO Installing git+https://github.com/landonr/lilygo-tdisplays3-esphome.git
git version 2.30.2
Cloning into '/data/cache/platformio/cache/tmp/pkg-installing-la91mwkk'...
Library Manager: [email protected]+sha.986ca0a has been installed!
INFO [email protected]+sha.986ca0a has been installed!
HARDWARE: ESP32S3 240MHz, 320KB RAM, 8MB Flash
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch3 
 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch3
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
Dependency Graph
|-- SPI @ 2.0.0
|-- FS @ 2.0.0
|-- SPIFFS @ 2.0.0
|-- TFT_eSPI @ 2.4.71+sha.986ca0a
|-- WiFi @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- Update @ 2.0.0
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/api_connection.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/api_frame_helper.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/api_pb2.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/api_server.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/list_entities.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/proto.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/api/user_services.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/esp32/core.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/esp32/gpio.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/esp32/preferences.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/gpio/switch/gpio_switch.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/homeassistant/text_sensor/homeassistant_text_sensor.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/homeassistant/time/homeassistant_time.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/logger/logger.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/md5/md5.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/mdns/mdns_component.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/mdns/mdns_esp32_arduino.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/mdns/mdns_esp8266.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/mdns/mdns_esp_idf.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/mdns/mdns_rp2040.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/network/util.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/ota/ota_backend_arduino_esp32.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/ota/ota_backend_arduino_esp8266.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/ota/ota_backend_arduino_rp2040.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/ota/ota_backend_esp_idf.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/ota/ota_component.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/socket/bsd_sockets_impl.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/socket/lwip_raw_tcp_impl.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/socket/socket.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/switch/automation.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/switch/switch.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/text_sensor/filter.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/text_sensor/text_sensor.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/time/automation.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/time/real_time_clock.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/wifi/wifi_component.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/wifi/wifi_component_esp32_arduino.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/wifi/wifi_component_esp8266.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/wifi/wifi_component_esp_idf.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/components/wifi/wifi_component_pico_w.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/application.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/color.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/component.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/component_iterator.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/controller.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/entity_base.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/helpers.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/log.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/scheduler.cpp.o
Compiling /data/s3/.pioenvs/s3/src/esphome/core/util.cpp.o
Compiling /data/s3/.pioenvs/s3/src/main.cpp.o
Generating partitions /data/s3/.pioenvs/s3/partitions.bin
Compiling /data/s3/.pioenvs/s3/lib91f/SPI/SPI.cpp.o
Archiving /data/s3/.pioenvs/s3/lib91f/libSPI.a
In file included from /data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:68,
                 from src/tft_espi_display.h:2,
                 from src/main.cpp:30:
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.h:11:3: warning: #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update) [-Wcpp]
  #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update)
   ^~~~~~~
In file included from src/tft_espi_display.h:2,
                 from src/main.cpp:30:
/data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:882:8: warning: #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available! [-Wcpp]
       #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available!
        ^~~~~~~
Compiling /data/s3/.pioenvs/s3/lib572/FS/FS.cpp.o
Compiling /data/s3/.pioenvs/s3/lib572/FS/vfs_api.cpp.o
Compiling /data/s3/.pioenvs/s3/lib4d2/SPIFFS/SPIFFS.cpp.o
Compiling /data/s3/.pioenvs/s3/libf02/tdisplays3/TFT_eSPI.cpp.o
Archiving /data/s3/.pioenvs/s3/lib4d2/libSPIFFS.a
Archiving /data/s3/.pioenvs/s3/lib572/libFS.a
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFi.cpp.o
In file included from /data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:68,
                 from /data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.cpp:17:
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.h:11:3: warning: #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update) [-Wcpp]
  #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update)
   ^~~~~~~
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiAP.cpp.o
In file included from /data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.cpp:17:
/data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:882:8: warning: #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available! [-Wcpp]
       #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available!
        ^~~~~~~
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiClient.cpp.o
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiGeneric.cpp.o
In file included from /data/s3/.piolibdeps/s3/tdisplays3/User_Setup_Select.h:52,
                 from /data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:42,
                 from /data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.cpp:17:
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c: In member function 'uint8_t TFT_eSPI::readByte()':
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:32:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D0 39 // Must use pins in the range 0-31 for the data bus
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:115:16: note: in expansion of macro 'TFT_D0'
   b  = (((reg>>TFT_D0)&1) << 0);
                ^~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:33:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D1 40 // so a single register write sets/clears all bits.
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:116:16: note: in expansion of macro 'TFT_D1'
   b |= (((reg>>TFT_D1)&1) << 1);
                ^~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:34:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D2 41 // Pins can be randomly assigned, this does not affect
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:117:16: note: in expansion of macro 'TFT_D2'
   b |= (((reg>>TFT_D2)&1) << 2);
                ^~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:35:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D3 42 // TFT screen update performance.
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:118:16: note: in expansion of macro 'TFT_D3'
   b |= (((reg>>TFT_D3)&1) << 3);
                ^~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:36:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D4 45
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:119:16: note: in expansion of macro 'TFT_D4'
   b |= (((reg>>TFT_D4)&1) << 4);
                ^~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:37:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D5 46
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:120:16: note: in expansion of macro 'TFT_D5'
   b |= (((reg>>TFT_D5)&1) << 5);
                ^~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:38:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D6 47
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:121:16: note: in expansion of macro 'TFT_D6'
   b |= (((reg>>TFT_D6)&1) << 6);
                ^~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:39:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D7 48
                ^~
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:122:16: note: in expansion of macro 'TFT_D7'
   b |= (((reg>>TFT_D7)&1) << 7);
                ^~~~~~
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiMulti.cpp.o
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiSTA.cpp.o
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiScan.cpp.o
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiServer.cpp.o
Compiling /data/s3/.pioenvs/s3/lib7dc/WiFi/WiFiUdp.cpp.o
Compiling /data/s3/.pioenvs/s3/lib74a/ESPmDNS/ESPmDNS.cpp.o
Compiling /data/s3/.pioenvs/s3/libb5a/Update/HttpsOTAUpdate.cpp.o
Compiling /data/s3/.pioenvs/s3/libb5a/Update/Updater.cpp.o
Archiving /data/s3/.pioenvs/s3/lib7dc/libWiFi.a
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/Esp.cpp.o
Archiving /data/s3/.pioenvs/s3/libf02/libtdisplays3.a
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/FirmwareMSC.cpp.o
Archiving /data/s3/.pioenvs/s3/lib74a/libESPmDNS.a
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/FunctionalInterrupt.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/HWCDC.cpp.o
Archiving /data/s3/.pioenvs/s3/libb5a/libUpdate.a
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/HardwareSerial.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/IPAddress.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/IPv6Address.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/MD5Builder.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/Print.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/Stream.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/StreamString.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/Tone.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/USB.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/USBCDC.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/USBMSC.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/WMath.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/WString.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/base64.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/cbuf.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-adc.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-bt.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-cpu.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-dac.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-gpio.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-i2c-slave.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-i2c.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-ledc.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-matrix.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-misc.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-psram.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-rmt.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-sigmadelta.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-spi.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-time.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-timer.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-tinyusb.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-touch.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/esp32-hal-uart.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/firmware_msc_fat.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/libb64/cdecode.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/libb64/cencode.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/main.cpp.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/stdlib_noniso.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/wiring_pulse.c.o
Compiling /data/s3/.pioenvs/s3/FrameworkArduino/wiring_shift.c.o
Archiving /data/s3/.pioenvs/s3/libFrameworkArduino.a
Linking /data/s3/.pioenvs/s3/firmware.elf
RAM:   [=         ]  12.1% (used 39680 bytes from 327680 bytes)
Flash: [====      ]  41.3% (used 757289 bytes from 1835008 bytes)
Building /data/s3/.pioenvs/s3/firmware.bin
Creating esp32s3 image...
Successfully created esp32s3 image.
esp32_create_combined_bin(["/data/s3/.pioenvs/s3/firmware.bin"], ["/data/s3/.pioenvs/s3/firmware.elf"])
Warning: Image file at 0x0 is protected with a hash checksum, so not changing the flash size setting. Use the --flash_size=keep option instead of --flash_size=8MB in order to remove this warning, or use the --dont-append-digest option for the elf2image command in order to generate an image file without a hash checksum
Wrote 0xc8fb0 bytes to file /data/s3/.pioenvs/s3/firmware-factory.bin, ready to flash to offset 0x0
======================== [SUCCESS] Took 124.63 seconds ========================
INFO Successfully compiled program.
esptool.py v4.4
Serial port /dev/ttyACM0
Connecting...
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: 34:85:18:8b:6d:60
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 16MB
Flash will be erased from 0x00010000 to 0x000c8fff...
Flash will be erased from 0x00000000 to 0x00003fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Compressed 757680 bytes to 492858...
Wrote 757680 bytes (492858 compressed) at 0x00010000 in 5.2 seconds (effective 1160.4 kbit/s)...
Hash of data verified.
Warning: Image file at 0x0 is protected with a hash checksum, so not changing the flash size setting. Use the --flash_size=keep option instead of --flash_size=16MB in order to remove this warning, or use the --dont-append-digest option for the elf2image command in order to generate an image file without a hash checksum
Compressed 13824 bytes to 9619...
Wrote 13824 bytes (9619 compressed) at 0x00000000 in 0.2 seconds (effective 444.9 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 144...
Wrote 3072 bytes (144 compressed) at 0x00008000 in 0.1 seconds (effective 386.6 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 47...
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 568.5 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
INFO Successfully uploaded program.
INFO Starting log output from /dev/ttyACM0 with baud rate 115200

Touchscreen platform fails after upgrading to ESPHome 2023.12.0

Upon upgrading to ESPHome 2023.12.0, the touchscreen component shows the following error:

"Couldn't find any component that can be use for 'display::Display'. Are you missing a hub declaration?."

This appears under
touchscreen
- platform: tdisplays3

New T-Display-S3 AMOLED version

I just got this new board, which seems to be a variant of the original T-Display-S3 version. It has an AMOLED screen with a higher resolution (240*536)

Would it be possible to add support for this board in your code?

Ili9488 cannot be full screen

I have an esp32 and ili9488 connected in parallel, which have successfully lit up with your code, but did not fill the entire screen. When I tried to modify the resolution and chip model, it went black. Requesting help, what file should I use to make the screen full and display? thank you

Not able to use a Home Assistant C02 sensor

Hi,

Using this project I am already able to put something on the screen of the TFT.
Currently it is showing Hello Rein, and even the music that is playing on my Sonos is there.

I am trying to show the Co2 level of another ESP32 project on this screen. But after a day of trial and error, I still only have errors.
Can anyone help me?

I have entered the sensor like this:

sensor:

  • platform: homeassistant
    id: co2_sensor
    entity_id: sensor.mh_z19_co2_value
    internal: true

And Display like this:
interval:

  • interval: 1s
    then:
    • lambda: |-
      displayControllerComponent->clear();
      displayControllerComponent->tft.setFreeFont(FMB12);
      displayControllerComponent->tft.drawString(id(huiskamermusicartist).state.c_str(),10,105);
      displayControllerComponent->tft.drawString(id(huiskamermusictrack).state.c_str(),10,125);
      displayControllerComponent->tft.drawString("Hello Rein",10,10);
      displayControllerComponent->tft.drawFloat(co2_sensor,10,30);

Everything I try brings me a lot of error compiling.
Error on this setup is:

/config/esphome/s3.yaml: In lambda function:
/config/esphome/s3.yaml:69:65: error: no matching function for call to 'TFT_eSPI::drawFloat(esphome::homeassistant::HomeassistantSensor*&, int, int)'
displayControllerComponent->tft.drawFloat(co2_sensor,10,30);
^
In file included from src/tft_espi_display.h:2,
from src/main.cpp:33:
/data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:560:12: note: candidate: 'int16_t TFT_eSPI::drawFloat(float, uint8_t, int32_t, int32_t, uint8_t)'
drawFloat(float floatNumber, uint8_t decimal, int32_t x, int32_t y, uint8_t font), // Draw float using specified font number
^~~~~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:560:12: note: candidate expects 5 arguments, 3 provided
/data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:561:12: note: candidate: 'int16_t TFT_eSPI::drawFloat(float, uint8_t, int32_t, int32_t)'
drawFloat(float floatNumber, uint8_t decimal, int32_t x, int32_t y), // Draw float using current font
^~~~~~~~~
/data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:561:12: note: candidate expects 4 arguments, 3 provided

I have tried entering more arguments, but that is not solving this..

Screen turns on but doesn't display any content

I can't figure out how to get the display to show anything on my T-Display-S3 (non-touch). I've tried the example yaml here and it gives me this error when compiling:

...
Compiling .pioenvs/s3/libe96/TFT_eSPI/TFT_eSPI.cpp.o
In file included from .piolibdeps/s3/TFT_eSPI/TFT_eSPI.h:96,
                 from .piolibdeps/s3/TFT_eSPI/TFT_eSPI.cpp:16:
.piolibdeps/s3/TFT_eSPI/Processors/TFT_eSPI_ESP32_S3.h:110:3: warning: #warning >>>>------>> DMA is not supported in parallel mode [-Wcpp]
  #warning >>>>------>> DMA is not supported in parallel mode
   ^~~~~~~
In file included from .piolibdeps/s3/TFT_eSPI/TFT_eSPI.cpp:16:
.piolibdeps/s3/TFT_eSPI/TFT_eSPI.h:970:8: warning: #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available! [-Wcpp]
       #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available!
        ^~~~~~~

...

and then the screen turns on, but stays blank. The touch error makes sense as its not a touch screen.

Any suggestions?

Example with touch... not working?

Has anyone managed to get the example-with-touch to work? (with Lilygo T-Display-S3 Touch version)
Logs show this message: "[E][lilygo_tdisplay_s3.touchscreen:069]: Failed to communicate!" (8 times in a row, each time I touch the screen)
Any advice? Thank you.

Compile warnings and notes

I am trying to compile (esphome 2022.12.3) the s3.yaml example, and I am getting the following feedback:

C:\Users\bob\esphome\projects\chickencoupe>esphome compile compiletest.yaml
INFO Reading configuration compiletest.yaml...
WARNING The selected Arduino framework version is not the recommended one. If there are connectivity or build issues please remove the manual version.
WARNING The selected Arduino framework version is not the recommended one. If there are connectivity or build issues please remove the manual version.
INFO Detected timezone 'America/New_York'
INFO Generating C++ source...
INFO Compiling app...
Processing s3 (board: esp32-s3-devkitc-1; framework: arduino; platform: platformio/espressif32 @ 5.0.0)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Library Manager: Installing git+https://github.com/landonr/lilygo-tdisplays3-esphome.git
INFO Installing git+https://github.com/landonr/lilygo-tdisplays3-esphome.git
git version 2.34.1.windows.1
Cloning into 'C:\Users\bob\.platformio\.cache\tmp\pkg-installing-u68ws9zy'...
remote: Enumerating objects: 687, done.
remote: Counting objects: 100% (687/687), done.
remote: Compressing objects: 100% (461/461), done.
remote: Total 687 (delta 149), reused 677 (delta 149), pack-reused 0
Receiving objects: 100% (687/687), 3.73 MiB | 13.58 MiB/s, done.
Resolving deltas: 100% (149/149), done.
Updating files: 100% (569/569), done.
Library Manager: [email protected]+sha.986ca0a has been installed!
←[32mINFO ←[[email protected]+sha.986ca0a has been installed!←[0m←[0m
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-s3-devkitc-1.html
PLATFORM: Espressif 32 (5.0.0) > Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)
HARDWARE: ESP32S3 240MHz, 320KB RAM, 8MB Flash
DEBUG: Current (esp-builtin) On-board (esp-builtin) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-arduinoespressif32 @ 3.20003.220626 (2.0.3)
 - tool-esptoolpy @ 1.30300.0 (3.3.0)
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch3
 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch3
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ off, Compatibility ~ soft
Found 33 compatible libraries
Scanning dependencies...
Dependency Graph
|-- SPI @ 2.0.0
|-- FS @ 2.0.0
|-- SPIFFS @ 2.0.0
|-- TFT_eSPI @ 2.4.71+sha.986ca0a
|-- WiFi @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- Update @ 2.0.0
Building in release mode
Compiling .pioenvs\s3\src\esphome\components\api\api_connection.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\api_frame_helper.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\api_pb2.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\api_pb2_service.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\api_server.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\list_entities.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\proto.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\subscribe_state.cpp.o
Compiling .pioenvs\s3\src\esphome\components\api\user_services.cpp.o
Compiling .pioenvs\s3\src\esphome\components\esp32\core.cpp.o
Compiling .pioenvs\s3\src\esphome\components\esp32\gpio.cpp.o
Compiling .pioenvs\s3\src\esphome\components\esp32\preferences.cpp.o
Compiling .pioenvs\s3\src\esphome\components\gpio\switch\gpio_switch.cpp.o
Compiling .pioenvs\s3\src\esphome\components\homeassistant\time\homeassistant_time.cpp.o
Compiling .pioenvs\s3\src\esphome\components\logger\logger.cpp.o
Compiling .pioenvs\s3\src\esphome\components\md5\md5.cpp.o
Compiling .pioenvs\s3\src\esphome\components\mdns\mdns_component.cpp.o
Compiling .pioenvs\s3\src\esphome\components\mdns\mdns_esp32_arduino.cpp.o
Compiling .pioenvs\s3\src\esphome\components\mdns\mdns_esp8266.cpp.o
Compiling .pioenvs\s3\src\esphome\components\mdns\mdns_esp_idf.cpp.o
Compiling .pioenvs\s3\src\esphome\components\mdns\mdns_rp2040.cpp.o
Compiling .pioenvs\s3\src\esphome\components\network\util.cpp.o
Compiling .pioenvs\s3\src\esphome\components\ota\ota_backend_arduino_esp32.cpp.o
Compiling .pioenvs\s3\src\esphome\components\ota\ota_backend_arduino_esp8266.cpp.o
Compiling .pioenvs\s3\src\esphome\components\ota\ota_backend_arduino_rp2040.cpp.o
Compiling .pioenvs\s3\src\esphome\components\ota\ota_backend_esp_idf.cpp.o
Compiling .pioenvs\s3\src\esphome\components\ota\ota_component.cpp.o
Compiling .pioenvs\s3\src\esphome\components\socket\bsd_sockets_impl.cpp.o
Compiling .pioenvs\s3\src\esphome\components\socket\lwip_raw_tcp_impl.cpp.o
Compiling .pioenvs\s3\src\esphome\components\socket\socket.cpp.o
Compiling .pioenvs\s3\src\esphome\components\switch\automation.cpp.o
Compiling .pioenvs\s3\src\esphome\components\switch\switch.cpp.o
Compiling .pioenvs\s3\src\esphome\components\time\automation.cpp.o
Compiling .pioenvs\s3\src\esphome\components\time\real_time_clock.cpp.o
Compiling .pioenvs\s3\src\esphome\components\wifi\wifi_component.cpp.o
Compiling .pioenvs\s3\src\esphome\components\wifi\wifi_component_esp32_arduino.cpp.o
Compiling .pioenvs\s3\src\esphome\components\wifi\wifi_component_esp8266.cpp.o
Compiling .pioenvs\s3\src\esphome\components\wifi\wifi_component_esp_idf.cpp.o
Compiling .pioenvs\s3\src\esphome\components\wifi\wifi_component_pico_w.cpp.o
Compiling .pioenvs\s3\src\esphome\core\application.cpp.o
Compiling .pioenvs\s3\src\esphome\core\color.cpp.o
Compiling .pioenvs\s3\src\esphome\core\component.cpp.o
Compiling .pioenvs\s3\src\esphome\core\component_iterator.cpp.o
Compiling .pioenvs\s3\src\esphome\core\controller.cpp.o
Compiling .pioenvs\s3\src\esphome\core\entity_base.cpp.o
Compiling .pioenvs\s3\src\esphome\core\helpers.cpp.o
Compiling .pioenvs\s3\src\esphome\core\log.cpp.o
Compiling .pioenvs\s3\src\esphome\core\scheduler.cpp.o
Compiling .pioenvs\s3\src\esphome\core\util.cpp.o
Compiling .pioenvs\s3\src\main.cpp.o
Generating partitions .pioenvs\s3\partitions.bin
Compiling .pioenvs\s3\lib053\SPI\SPI.cpp.o
Compiling .pioenvs\s3\libff7\FS\FS.cpp.o
Compiling .pioenvs\s3\libff7\FS\vfs_api.cpp.o
Archiving .pioenvs\s3\lib053\libSPI.a
Compiling .pioenvs\s3\lib04f\SPIFFS\SPIFFS.cpp.o
In file included from .piolibdeps/s3/tdisplays3/TFT_eSPI.h:68,
                 from src/tft_espi_display.h:2,
                 from src/main.cpp:28:
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.h:11:3: warning: #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update) [-Wcpp]
  #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update)
   ^~~~~~~
In file included from src/tft_espi_display.h:2,
                 from src/main.cpp:28:
.piolibdeps/s3/tdisplays3/TFT_eSPI.h:882:8: warning: #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available! [-Wcpp]
       #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available!
        ^~~~~~~
Compiling .pioenvs\s3\libbd0\tdisplays3\TFT_eSPI.cpp.o
Archiving .pioenvs\s3\libff7\libFS.a
Compiling .pioenvs\s3\lib7b9\WiFi\WiFi.cpp.o
Archiving .pioenvs\s3\lib04f\libSPIFFS.a
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiAP.cpp.o
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiClient.cpp.o
In file included from .piolibdeps/s3/tdisplays3/TFT_eSPI.h:68,
                 from .piolibdeps/s3/tdisplays3/TFT_eSPI.cpp:17:
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.h:11:3: warning: #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update) [-Wcpp]
  #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update)
   ^~~~~~~
In file included from .piolibdeps/s3/tdisplays3/TFT_eSPI.cpp:17:
.piolibdeps/s3/tdisplays3/TFT_eSPI.h:882:8: warning: #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available! [-Wcpp]
       #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available!
        ^~~~~~~
In file included from .piolibdeps/s3/tdisplays3/User_Setup_Select.h:52,
                 from .piolibdeps/s3/tdisplays3/TFT_eSPI.h:42,
                 from .piolibdeps/s3/tdisplays3/TFT_eSPI.cpp:17:
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c: In member function 'uint8_t TFT_eSPI::readByte()':
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:32:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D0 39 // Must use pins in the range 0-31 for the data bus
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:115:16: note: in expansion of macro 'TFT_D0'
   b  = (((reg>>TFT_D0)&1) << 0);
                ^~~~~~
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:33:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D1 40 // so a single register write sets/clears all bits.
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:116:16: note: in expansion of macro 'TFT_D1'
   b |= (((reg>>TFT_D1)&1) << 1);
                ^~~~~~
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:34:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D2 41 // Pins can be randomly assigned, this does not affect
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:117:16: note: in expansion of macro 'TFT_D2'
   b |= (((reg>>TFT_D2)&1) << 2);
                ^~~~~~
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:35:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D3 42 // TFT screen update performance.
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:118:16: note: in expansion of macro 'TFT_D3'
   b |= (((reg>>TFT_D3)&1) << 3);
                ^~~~~~
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:36:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D4 45
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:119:16: note: in expansion of macro 'TFT_D4'
   b |= (((reg>>TFT_D4)&1) << 4);
                ^~~~~~
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:37:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D5 46
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:120:16: note: in expansion of macro 'TFT_D5'
   b |= (((reg>>TFT_D5)&1) << 5);
                ^~~~~~
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:38:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D6 47
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:121:16: note: in expansion of macro 'TFT_D6'
   b |= (((reg>>TFT_D6)&1) << 6);
                ^~~~~~
.piolibdeps/s3/tdisplays3/User_Setups/Setup24_ST7789.h:39:16: warning: right shift count >= width of type [-Wshift-count-overflow]
 #define TFT_D7 48
                ^~
.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.c:122:16: note: in expansion of macro 'TFT_D7'
   b |= (((reg>>TFT_D7)&1) << 7);
                ^~~~~~
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiGeneric.cpp.o
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiMulti.cpp.o
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiSTA.cpp.o
Archiving .pioenvs\s3\libbd0\libtdisplays3.a
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiScan.cpp.o
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiServer.cpp.o
Compiling .pioenvs\s3\lib7b9\WiFi\WiFiUdp.cpp.o
Compiling .pioenvs\s3\libd19\ESPmDNS\ESPmDNS.cpp.o
Compiling .pioenvs\s3\lib0f8\Update\HttpsOTAUpdate.cpp.o
Compiling .pioenvs\s3\lib0f8\Update\Updater.cpp.o
Archiving .pioenvs\s3\lib7b9\libWiFi.a
Compiling .pioenvs\s3\FrameworkArduino\Esp.cpp.o
Archiving .pioenvs\s3\libd19\libESPmDNS.a
Compiling .pioenvs\s3\FrameworkArduino\FirmwareMSC.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\HWCDC.cpp.o
Archiving .pioenvs\s3\lib0f8\libUpdate.a
Compiling .pioenvs\s3\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\IPAddress.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\IPv6Address.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\MD5Builder.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\Print.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\Stream.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\StreamString.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\Tone.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\USB.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\USBCDC.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\USBMSC.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\WMath.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\WString.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\base64.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\cbuf.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-i2c-slave.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-time.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-tinyusb.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pioenvs\s3\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pioenvs\s3\FrameworkArduino\firmware_msc_fat.c.o
Compiling .pioenvs\s3\FrameworkArduino\libb64\cdecode.c.o
Compiling .pioenvs\s3\FrameworkArduino\libb64\cencode.c.o
Compiling .pioenvs\s3\FrameworkArduino\main.cpp.o
Compiling .pioenvs\s3\FrameworkArduino\stdlib_noniso.c.o
Compiling .pioenvs\s3\FrameworkArduino\wiring_pulse.c.o
Compiling .pioenvs\s3\FrameworkArduino\wiring_shift.c.o
Archiving .pioenvs\s3\libFrameworkArduino.a
Linking .pioenvs\s3\firmware.elf
Retrieving maximum program size .pioenvs\s3\firmware.elf
Checking size .pioenvs\s3\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]  12.1% (used 39664 bytes from 327680 bytes)
Flash: [====      ]  41.1% (used 755025 bytes from 1835008 bytes)
Building .pioenvs\s3\firmware.bin
esptool.py v3.3
Creating esp32s3 image...
Merged 2 ELF sections
Successfully created esp32s3 image.
esp32_create_combined_bin([".pioenvs\s3\firmware.bin"], [".pioenvs\s3\firmware.elf"])
esptool.py v4.4
Warning: Image file at 0x0 is protected with a hash checksum, so not changing the flash size setting. Use the --flash_size=keep option instead of --flash_size=8MB in order to remove this warning, or use the --dont-append-digest option for the elf2image command in order to generate an image file without a hash checksum
Wrote 0xc86d0 bytes to file C:\Users\bob\esphome\projects\chickencoupe\.esphome\build\s3\.pioenvs\s3/firmware-factory.bin, ready to flash to offset 0x0
================================================================================= [SUCCESS] Took 266.10 seconds =================================================================================
←[32mINFO Successfully compiled program.←[0m

C:\Users\bob\esphome\projects\chickencoupe>

Is there anything that I can do to eliminate these?

OTA Flash dosent work.

My Tdsiplays3 is up and running, displaying the time and date.
I followed the Tutorial up until the part where we move the "TFT_eSPI tft = TFT_eSPI();" to the Public part.
Then Re-Compiled and tried to flash via the OTA this did not work, do we always need to connect it via usb to flash it?

INFO Reading configuration /config/esphome/s3.yaml...
WARNING The selected Arduino framework version is not the recommended one. If there are connectivity or build issues please remove the manual version.
WARNING The selected Arduino framework version is not the recommended one. If there are connectivity or build issues please remove the manual version.
INFO Detected timezone 'Europe/Berlin'
INFO Generating C++ source...
INFO Compiling app...
Processing s3 (board: esp32-s3-devkitc-1; framework: arduino; platform: platformio/espressif32 @ 5.0.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32S3 240MHz, 320KB RAM, 8MB Flash
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch3 
 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch3
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
Dependency Graph
|-- SPI @ 2.0.0
|-- FS @ 2.0.0
|-- SPIFFS @ 2.0.0
|-- TFT_eSPI @ 2.4.71+sha.986ca0a
|-- WiFi @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- Update @ 2.0.0
Compiling /data/s3/.pioenvs/s3/src/main.cpp.o
In file included from /data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:68,
                 from src/tft_espi_display.h:2,
                 from src/main.cpp:28:
/data/s3/.piolibdeps/s3/tdisplays3/Processors/TFT_eSPI_ESP32_S3.h:11:3: warning: #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update) [-Wcpp]
  #warning >>>>------>> DMA is not supported on the ESP32 S3 (possible future update)
   ^~~~~~~
In file included from src/tft_espi_display.h:2,
                 from src/main.cpp:28:
/data/s3/.piolibdeps/s3/tdisplays3/TFT_eSPI.h:882:8: warning: #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available! [-Wcpp]
       #warning >>>>------>> TOUCH_CS pin not defined, TFT_eSPI touch functions will not be available!
        ^~~~~~~
Linking /data/s3/.pioenvs/s3/firmware.elf
RAM:   [=         ]  12.1% (used 39664 bytes from 327680 bytes)
Flash: [====      ]  41.1% (used 755009 bytes from 1835008 bytes)
Building /data/s3/.pioenvs/s3/firmware.bin
Creating esp32s3 image...
Successfully created esp32s3 image.
esp32_create_combined_bin(["/data/s3/.pioenvs/s3/firmware.bin"], ["/data/s3/.pioenvs/s3/firmware.elf"])
Warning: Image file at 0x0 is protected with a hash checksum, so not changing the flash size setting. Use the --flash_size=keep option instead of --flash_size=8MB in order to remove this warning, or use the --dont-append-digest option for the elf2image command in order to generate an image file without a hash checksum
Wrote 0xc86c0 bytes to file /data/s3/.pioenvs/s3/firmware-factory.bin, ready to flash to offset 0x0
========================= [SUCCESS] Took 34.16 seconds =========================
INFO Successfully compiled program.
INFO Resolving IP address of s3.local
INFO  -> ********
INFO Uploading /data/s3/.pioenvs/s3/firmware.bin (755392 bytes)
Uploading: [============================================================] 100% Done...

INFO Waiting for result...
ERROR Error Update end: Error: Finishing update failed. See the MQTT/USB logs for more information.

example.yaml doesn't build anymore

the esphome configuration (example.yaml) doesn't build anymore with the esphome version 2023.11.2
the error I get is:

INFO ESPHome 2023.11.3
INFO Reading configuration /config/esphome/lilygo-display.yaml...
Failed config

esp32: None

Please specify flash_size within esp32 configuration only.
board: esp32-s3-devkitc-1
variant: ESP32S3
framework:
version: 2.0.5
source: ~3.20005.0
platform_version: platformio/[email protected]
type: arduino

Any idea what can cause this? Version 2023.11.1 did not have this

Scroll long text

Hello, I am trying to display artist and song info from HA sensor, but the value is too long to fit the width of the display and be readable. is there any way to make the text scroll across on this display?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.