ESP32 C6 pierwsze kroki

Patryk
Posts: 2944
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

Nigdy jeszcze nie miałem styczności z ESP32.
Kupiłem ESP32 C6 16M (zdjęcie poniżej).
Zaznaczyłem w Generic Builder ESP32C6 oraz podstawowe opcje:
Konfiguracja (LED, CONFIG);
Aktualizacja przez WWW
Dostępne GUI podczas pracy

Soft się wygenerował.
Wgrałem za pomocą Flash Download Tool v3.9.8

Wszystko było by ok, tylko jak teraz "zmusić" diodę LED (RGB), żeby działała.
Wyczytałem, że te moduły mają LED RBG pod gpio8.
Wybrałem gpio8 i nic.
Może jakieś wskazówki.
You do not have the required permissions to view the files attached to this post.
robertklepacki94
Posts: 1931
Joined: Thu Sep 02, 2021 1:06 pm
Has thanked: 5 times
Been thanked: 14 times

Post

Patryk wrote: Mon Mar 03, 2025 7:11 pm Nigdy jeszcze nie miałem styczności z ESP32.
Kupiłem ESP32 C6 16M (zdjęcie poniżej).
Zaznaczyłem w Generic Builder ESP32C6 oraz podstawowe opcje:
Konfiguracja (LED, CONFIG);
Aktualizacja przez WWW
Dostępne GUI podczas pracy

Soft się wygenerował.
Wgrałem za pomocą Flash Download Tool v3.9.8

Wszystko było by ok, tylko jak teraz "zmusić" diodę LED (RGB), żeby działała.
Wyczytałem, że te moduły mają LED RBG pod gpio8.
Wybrałem gpio8 i nic.
Może jakieś wskazówki.
GG nie obsługuje diod RBG jako statusowych, po drugie nie wybrałeś innych funkcji jak przekaźnik czy przycisk tak więc w Cloud nic ci się nie pokaże :)
Wziąłem udział w Supla Offline Party 2023
Patryk
Posts: 2944
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

Dzięki za info.
Mi na razie chodziło, żeby tylko dioda LED sygnalizowała, w jakim trybie jest moduł.
Czyli (na razie) ta dioda LED RGB jest bezużyteczna.
Szkoda.
User avatar
Zibi_007
Posts: 3985
Joined: Tue Oct 31, 2023 10:06 pm
Has thanked: 10 times
Been thanked: 31 times

Post

Patryk wrote: Mon Mar 03, 2025 7:28 pm Dzięki za info.
Mi na razie chodziło, żeby tylko dioda LED sygnalizowała, w jakim trybie jest moduł.
Czyli (na razie) ta dioda LED RGB jest bezużyteczna.
Szkoda.
Nie jest. Tutaj https://github.com/h4fide/ESP32-C6-RGB-LED-Control masz, jak użyć we własnych projektach. Działa całkiem OK.

EDIT: nie wszystkie ESP32 C6 mają diodę RGB. Są też takie (np. mini), które mają zwykłą i wtedy działa standardowo.
Image Wiesz, że Supla obsługuje Zigbee? Wstąp do Klubu Promila: https://forum.supla.org/viewtopic.php?t=18018
Image Szukasz nowego GG? Jest tutaj: https://forum.supla.org/viewtopic.php?t=18036
rysieks
Posts: 30
Joined: Tue Feb 25, 2025 12:22 pm

Post

Bawiłem się trochę więc proszę.
Umieść poniższy kod w pliku o nazwie f_RGBLed.h tam gdzie masz główny program *.ino,
postępuj zgodnie z instrukcją na początku,
i niech nie będzie Ci szkoda ;)
Tylko musisz dokonać kompilacji programu u siebie niestety.

Code: Select all

//==============================================================================
/*
Na podstawie sketchu przykładowego Arduino
- umieść ten plik w katalogu sketchu
- zainstaluj bibliotekę;  Adafruit NeoPixel

// w głównym programie ???????????.ino dopisz poniższą linijkę aby uwzględnić ten plik;
#include "f_RGBLed.h"  

//na końcu w funkcji setup() wpisz;
  rgbLed.begin();  // Initialize the RGB LED
  rgbLed.show();   // Turn off the LED (as it's initialized to all 0s)
  startTime = millis();

// w funkcjii loop() wpisz;
  RGB_loop();

// i możesz pobawić się ustawieniami, a dioda będzie się świecić ;)  
*/
//==============================================================================

#include <Adafruit_NeoPixel.h>
#include <cmath>

constexpr uint8_t LED_PIN = 8;                  // Pin LED RGB na pokładzie 
constexpr uint8_t NUM_LEDS = 1;

constexpr unsigned long CYCLE_DURATION = 5000;  // 10 000 10 seconds for a full color cycle
constexpr unsigned long STEPS = 500;            // Number of steps in the cycle
unsigned long startTime;                        // = millis();
unsigned long currentTime;
unsigned long next_time = 0;

Adafruit_NeoPixel rgbLed(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); // NeoPixel object
// Color structure
struct RGB {
    uint8_t r, g, b;
};

void setColor(const RGB& color) {
    rgbLed.setPixelColor(0, rgbLed.Color(color.r, color.g, color.b));
    rgbLed.show();
}

// Convert HSV to RGB
RGB hsvToRgb(float h, float s, float v) {
  float c = v * s;
  float x = c * (1 - std::abs(std::fmod(h / 60.0, 2) - 1));
  float m = v - c;
  float r, g, b;

  if (h >= 0 && h < 60)         { r = c, g = x, b = 0; }
  else if (h >= 60 && h < 120)  { r = x, g = c, b = 0; }
  else if (h >= 120 && h < 180) { r = 0, g = c, b = x; }
  else if (h >= 180 && h < 240) { r = 0, g = x, b = c; }
  else if (h >= 240 && h < 300) { r = x, g = 0, b = c; }
  else {                          r = c, g = 0, b = x; }
  
  return {
      static_cast<uint8_t>((r + m) * 255),
      static_cast<uint8_t>((g + m) * 255),
      static_cast<uint8_t>((b + m) * 255)
  };
}

void RGB_loop() {
  currentTime = millis();
  if ( currentTime > next_time ) {
    float progress = static_cast<float>((currentTime - startTime) % CYCLE_DURATION) / CYCLE_DURATION;
    float hue = progress * 360.0f;                       // Hue ranges from 0 to 360
    RGB color = hsvToRgb(hue, 1.0f, 0.01f);  // Kolor, Full saturation , value (jasność)
    setColor(color);
    next_time = currentTime + (CYCLE_DURATION / STEPS);  //Small delay for smooth transition
  }
}

Return to “Pomoc”