Address strip WS2812B: различия между версиями

Нет описания правки
Строка 572: Строка 572:


==Финальный код скетча==
==Финальный код скетча==
<syntaxhighlight lang="c++">
#include <Arduino.h>
#include <Arduino.h>
#include <FastLED.h>
#include <FastLED.h>
Строка 582: Строка 581:
#include <ESPAsyncWebServer.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
#include <AsyncElegantOTA.h>
#define LED_PIN    27
#define NUM_LEDS    5
#define LED_TYPE    WS2811_400
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
#define UPDATES_PER_SECOND 50


uint8_t BRIGHTNESS = 50;
bool hueLoop = true;




Строка 605: Строка 594:
   server.begin();
   server.begin();
   Serial.println("HTTP server started");
   Serial.println("HTTP server started");
}
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "xxx"
void setupWifi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  char emptyMsg[1] = "";
  char pointMsg[2] = ".";
  Serial.println(emptyMsg);
    // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(pointMsg);
  }
  Serial.println(emptyMsg);
  char connectedToMsg[14] = "Connected to ";
  Serial.println(connectedToMsg);
  Serial.println(WIFI_SSID);
  char ipAddrMsg[30];
  sprintf(ipAddrMsg, "IP address: %s", WiFi.localIP().toString().c_str());
  Serial.println(ipAddrMsg);
}
}


Строка 625: Строка 637:
// Some notes on the more abstract 'theory and practice' of
// Some notes on the more abstract 'theory and practice' of
// FastLED compact palettes are at the bottom of this file.
// FastLED compact palettes are at the bottom of this file.
#define DIN_PIN    27
#define NUM_LEDS    5
#define LED_TYPE    WS2811_400
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
   
   
#define UPDATES_PER_SECOND 50
 
uint8_t BRIGHTNESS = 50;
bool hueLoop = true;
 
CRGBPalette16 currentPalette;
CRGBPalette16 currentPalette;
TBlendType    currentBlending;
TBlendType    currentBlending;
Строка 634: Строка 656:
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;
   
   
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "password"
void setupWifi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  char emptyMsg[1] = "";
  char pointMsg[2] = ".";
  Serial.println(emptyMsg);
    // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println(pointMsg);
  }
  Serial.println(emptyMsg);
  char connectedToMsg[14] = "Connected to ";
  Serial.println(connectedToMsg);
  Serial.println(WIFI_SSID);
  char ipAddrMsg[30];
  sprintf(ipAddrMsg, "IP address: %s", WiFi.localIP().toString().c_str());
  Serial.println(ipAddrMsg);
}
void setupFastLED(){
void setupFastLED(){
     delay( 3000 ); // power-up safety delay
     delay( 3000 ); // power-up safety delay
     FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
     FastLED.addLeds<LED_TYPE, DIN_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
     FastLED.setBrightness(  BRIGHTNESS );
     FastLED.setBrightness(  BRIGHTNESS );
      
      
Строка 667: Строка 666:




#define MODBUS_SERVER "192.168.0.10"
#define MODBUS_SERVER "10.50.0.253"
#define MODBUS_PORT 1883
#define MODBUS_PORT 1883
WiFiClient wifiClient;
WiFiClient wifiClient;
Строка 732: Строка 731:
}
}


void setup() {
    setupWifi();
    setupFastLED();
    setupModbus();
}
void ChangePalettePeriodically();
void ChangePalettePeriodically();
void FillLEDsFromPaletteColors( uint8_t colorIndex);
void FillLEDsFromPaletteColors( uint8_t colorIndex);


void loop()
{
    modbusLoop();
    if(!hueLoop) {
        return;
    }
    ChangePalettePeriodically();
   
    static uint8_t startIndex = 0;
    startIndex = startIndex + 1; /* motion speed */
   
    FillLEDsFromPaletteColors( startIndex);
   
    FastLED.show();
    FastLED.delay(1000 / UPDATES_PER_SECOND);
}
   
   
void FillLEDsFromPaletteColors( uint8_t colorIndex)
void FillLEDsFromPaletteColors( uint8_t colorIndex)
Строка 891: Строка 868:
// Green, followed by a smooth gradient from green-to-blue, and then Blue.
// Green, followed by a smooth gradient from green-to-blue, and then Blue.


#define LED_PIN    2
int led_status = HIGH;
void ledUpdate(int v) {
  digitalWrite(LED_PIN, v);
}
void ledBlink( void * parameter ) {
  const TickType_t xDelay = 1000 / portTICK_PERIOD_MS;
  for(;;) {
    switch (led_status)
    {
    case HIGH:
      led_status = LOW;
      break; 
    default:
      led_status = HIGH;
      break;
    }
    ledUpdate(led_status);
    vTaskDelay(xDelay);
    Serial.printf("blink %d\n", led_status);
  }
}
void setupLedBlink()  {
    pinMode(LED_PIN, OUTPUT);
    xTaskCreate(
                    ledBlink,          /* Task function. */
                    "ledBlink",        /* String with name of task. */
                    10000,            /* Stack size in bytes. */
                    NULL,            /* Parameter passed as input of the task */
                    1,                /* Priority of the task. */
                    NULL);            /* Task handle. */
}
void setup() {
    Serial.begin(9600);
    setupLedBlink();
    setupWifi();
    setupFastLED();
    setupModbus();
    setupOTA();
}
void loop()
{
    modbusLoop();
    if(!hueLoop) {
        return;
    }
    ChangePalettePeriodically();
   
    static uint8_t startIndex = 0;
    startIndex = startIndex + 1; /* motion speed */
   
    FillLEDsFromPaletteColors( startIndex);
   
    FastLED.show();
    FastLED.delay(1000 / UPDATES_PER_SECOND);
}
</syntaxhighlight>
</syntaxhighlight>
123

правки