Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

добавил некоторве функции и упростил настройку статического IP #5

Open
Yusupoff opened this issue Jul 4, 2019 · 2 comments

Comments

@Yusupoff
Copy link

Yusupoff commented Jul 4, 2019

Есть константа const char HOSTNAME[] = "GyverLamp";
Значение которую можно вводить вместо адреса в программе
HOSTNAME это имя клиента сети

/*
Скетч к проекту "Многофункциональный RGB светильник"
Страница проекта (схемы, описания): https://alexgyver.ru/GyverLamp/
Исходники на GitHub: https://github.com/AlexGyver/GyverLamp/
Нравится, как написан код? Поддержи автора! https://alexgyver.ru/support_alex/
Автор: AlexGyver, AlexGyver Technologies, 2019
https://AlexGyver.ru/
*/

/*
Версия 1.2:

  • Добавлена настройка статического IP
  • Добавлен эффект "Цвет"
  • Добавлен эффект "Снег"
  • Добавлен эффект "Матрица"
  • Добавлен эффект "Светлячки"
    */

// Ссылка для менеджера плат:
// http://arduino.esp8266.com/stable/package_esp8266com_index.json

// ============= НАСТРОЙКИ =============
// -------- ВРЕМЯ -------
#define GMT 3 // смещение (москва 3)
#define NTP_ADDRESS "europe.pool.ntp.org" // сервер времени

// -------- РАССВЕТ -------
#define DAWN_BRIGHT 200 // макс. яркость рассвета
#define DAWN_TIMEOUT 1 // сколько рассвет светит после времени будильника, минут

// ---------- МАТРИЦА ---------
#define BRIGHTNESS 40 // стандартная маскимальная яркость (0-255)
#define CURRENT_LIMIT 2000 // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

#define WIDTH 6 // ширина матрицы
#define HEIGHT 9 // высота матрицы

#define COLOR_ORDER GRB // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB

#define MATRIX_TYPE 1 // тип матрицы: 0 - зигзаг, 1 - параллельная
#define CONNECTION_ANGLE 2 // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION 3 // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
// при неправильной настройке матрицы вы получите предупреждение "Wrong matrix parameters! Set to default"
// шпаргалка по настройке матрицы здесь! https://alexgyver.ru/matrix_guide/

// --------- ESP --------
const char HOSTNAME[] = "GyverLamp";
#define ESP_MODE 1
// 0 - точка доступа
// 1 - локальный
byte IP_AP[] = {192, 168, 4, 1}; // статический IP точки доступа (менять только последнюю цифру)

//#define WIFIMGR_PORTAL_TIMEOUT 1
//#define WIFIMGR_SET_MANUAL_IP
#ifdef WIFIMGR_SET_MANUAL_IP
char static_ip[16] = "192.168.1.56";
char static_gw[16] = "192.168.1.1";
char static_sn[16] = "255.255.255.0";
#endif

// ----- AP (точка доступа) -------
#define AP_SSID "GyverLamp"
#define AP_PASS "12345678"
#define AP_PORT 8888

// -------- Менеджер WiFi ---------
#define AC_SSID "AutoAP"
#define AC_PASS "12345678"

// ============= ДЛЯ РАЗРАБОТЧИКОВ =============
#define LED_PIN 2 // пин ленты
#define BTN_PIN 3
#define MODE_AMOUNT 18

#define NUM_LEDS WIDTH * HEIGHT
#define SEGMENTS 1 // диодов в одном "пикселе" (для создания матрицы из кусков ленты)
// ---------------- БИБЛИОТЕКИ -----------------
#define FASTLED_INTERRUPT_RETRY_COUNT 0
#define FASTLED_ALLOW_INTERRUPTS 0
#define FASTLED_ESP8266_RAW_PIN_ORDER
#define NTP_INTERVAL 60 * 1000 // обновление (1 минута)

#include "timerMinim.h"
#include <FastLED.h>
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <WiFiUdp.h>
#include <EEPROM.h>
#include <NTPClient.h>
#include <GyverButton.h>

// ------------------- ТИПЫ --------------------
CRGB leds[NUM_LEDS];
WiFiServer server(88);
WiFiUDP Udp;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, GMT * 3600, NTP_INTERVAL);
timerMinim timeTimer(3000);
GButton touch(BTN_PIN, LOW_PULL, NORM_OPEN);

// ----------------- ПЕРЕМЕННЫЕ ------------------
const char AP_NameChar[] = AP_SSID;
const char WiFiPassword[] = AP_PASS;
unsigned int localPort = AP_PORT;
char packetBuffer[UDP_TX_PACKET_MAX_SIZE + 1]; //buffer to hold incoming packet
String inputBuffer;
static const byte maxDim = max(WIDTH, HEIGHT);
struct {
byte brightness = 50;
byte speed = 30;
byte scale = 40;
} modes[MODE_AMOUNT];

struct {
boolean state = false;
int time = 0;
} alarm[7];

byte dawnOffsets[] = {5, 10, 15, 20, 25, 30, 40, 50, 60};
byte dawnMode;
boolean dawnFlag = false;
long thisTime;
boolean manualOff = false;

int8_t currentMode = 0;
boolean loadingFlag = true;
boolean ONflag = true;
uint32_t eepromTimer;
boolean settChanged = false;
// Конфетти, Огонь, Радуга верт., Радуга гориз., Смена цвета,
// Безумие 3D, Облака 3D, Лава 3D, Плазма 3D, Радуга 3D,
// Павлин 3D, Зебра 3D, Лес 3D, Океан 3D,

unsigned char matrixValue[8][16];

void setup() {
//ESP.wdtDisable();
//ESP.wdtEnable(WDTO_8S);
wifi_station_set_hostname(const_cast<char*>(HOSTNAME));
// ЛЕНТА
FastLED.addLeds<WS2812B, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS)/.setCorrection( TypicalLEDStrip )/;
FastLED.setBrightness(BRIGHTNESS);
if (CURRENT_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CURRENT_LIMIT);
FastLED.clear();
FastLED.show();

touch.setStepTimeout(100);
touch.setClickTimeout(500);

Serial.begin(115200);
Serial.println();

// WI-FI
if (ESP_MODE == 0) { // режим точки доступа
WiFi.softAP(AP_NameChar, WiFiPassword);
IPAddress myIP = WiFi.softAPIP();
Serial.print("Access point Mode");
Serial.print("AP IP address: ");
Serial.println(myIP);
server.begin();
} else { // подключаемся к роутеру
Serial.print("WiFi manager");
WiFiManager wifiManager;

#ifdef WIFIMGR_SET_MANUAL_IP
  IPAddress _ip,_gw,_sn;
  _ip.fromString(static_ip);
  _gw.fromString(static_gw);
  _sn.fromString(static_sn);
  wifiManager.setSTAStaticIPConfig(_ip, _gw, _sn);
#endif
#ifdef WIFIMGR_PORTAL_TIMEOUT
wifiManager.setConfigPortalTimeout(WIFIMGR_PORTAL_TIMEOUT);
#endif    
wifiManager.autoConnect(HOSTNAME);
wifiManager.setDebugOutput(false);
//wifiManager.resetSettings();

Serial.print("Connected! IP address: ");
Serial.println("local ip");
Serial.println(WiFi.localIP());
Serial.println(WiFi.gatewayIP());
Serial.println(WiFi.subnetMask());
server.begin();

}

Serial.printf("UDP server on port %d\n", localPort);
Udp.begin(localPort);

// EEPROM
EEPROM.begin(202);
delay(50);
if (EEPROM.read(198) != 20) { // первый запуск
EEPROM.write(198, 20);
EEPROM.commit();

for (byte i = 0; i < MODE_AMOUNT; i++) {
  EEPROM.put(3 * i + 40, modes[i]);
  EEPROM.commit();
}
for (byte i = 0; i < 7; i++) {
  EEPROM.write(5 * i, alarm[i].state);   // рассвет
  eeWriteInt(5 * i + 1, alarm[i].time);
  EEPROM.commit();
}
EEPROM.write(199, 0);   // рассвет
EEPROM.write(200, 0);   // режим
EEPROM.commit();

}
for (byte i = 0; i < MODE_AMOUNT; i++) {
EEPROM.get(3 * i + 40, modes[i]);
}
for (byte i = 0; i < 7; i++) {
alarm[i].state = EEPROM.read(5 * i);
alarm[i].time = eeGetInt(5 * i + 1);
}
dawnMode = EEPROM.read(199);
currentMode = (int8_t)EEPROM.read(200);

// отправляем настройки
sendCurrent();
char reply[inputBuffer.length() + 1];
inputBuffer.toCharArray(reply, inputBuffer.length() + 1);
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(reply);
Udp.endPacket();

timeClient.begin();
memset(matrixValue, 0, sizeof(matrixValue));

randomSeed(micros());
}

void loop() {
parseUDP();

effectsTick();
eepromTick();
timeTick();
buttonTick();
//ESP.wdtFeed(); // пнуть собаку
yield();
}

void eeWriteInt(int pos, int val) {
byte* p = (byte*) &val;
EEPROM.write(pos, *p);
EEPROM.write(pos + 1, *(p + 1));
EEPROM.write(pos + 2, *(p + 2));
EEPROM.write(pos + 3, *(p + 3));
EEPROM.commit();
}

int eeGetInt(int pos) {
int val;
byte* p = (byte*) &val;
*p = EEPROM.read(pos);
*(p + 1) = EEPROM.read(pos + 1);
*(p + 2) = EEPROM.read(pos + 2);
*(p + 3) = EEPROM.read(pos + 3);
return val;
}

kesha4 added a commit to kesha4/GyverLamp that referenced this issue Jul 12, 2019
@kesha4
Copy link

kesha4 commented Jul 18, 2019

Спасибо, полезная доработка, задействовал у себя

@0purple
Copy link

0purple commented Nov 28, 2020

Для этого есть ПРы, но спасибо

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants