diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master.zip b/anemostat/AC_dimmer-dmr-0.2.1-master.zip new file mode 100644 index 0000000..8d66b90 Binary files /dev/null and b/anemostat/AC_dimmer-dmr-0.2.1-master.zip differ diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer.zip b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer.zip new file mode 100644 index 0000000..fde9c0e Binary files /dev/null and b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer.zip differ diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer.cpp b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer.cpp new file mode 100644 index 0000000..416bfaf --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer.cpp @@ -0,0 +1,253 @@ +//20.02.2019 +//by Reptiloid software + +#include "Arduino.h" +#include "AC_Dimmer.h" + +#define DIMM_MAX 5 +#define AC_FREQ 50 +#define MAX_HEAT_DIV 10 + +//====================================== + +#define ZERO_VAL 19850 +#define K 77 + +#define SSR 0 +#define DIMM 1 +#define HEAT 2 + +//======================================= + +struct dimmer + { + unsigned char flag; + unsigned char val; + unsigned char pin; + unsigned char SSR_state; + unsigned char heat_val; + }; + +struct sort + { + unsigned char val; + unsigned char pin; + }; + + +//========================================== + + volatile unsigned char cnt; + volatile unsigned char dims; + volatile unsigned char lim; + volatile unsigned char not_z; + volatile unsigned char heat_cnt = 0; + + dimmer dimmer[DIMM_MAX]; + sort sort_vals[DIMM_MAX]; + sort sort[DIMM_MAX*2]; + +//=============================================== + + + + +void Dimmer_init_begin() +{ + TCCR1A=0; + TCCR1B=2; + TIMSK1=1; + + EICRA=3; + EIMSK=1; + EIFR=1; + + for(unsigned char i=0; i 240) power = 240; + + dimmer[dim_num].flag = DIMM; + dimmer[dim_num].val = power; + unsigned char j; + + for(unsigned char i = 0; i sort_vals[i+1].val && i sort_vals[i+j].val) && (i+j0) + { + for(j = 1; ((power < sort_vals[i-j].val) && (i-j>=0)); j++) + { + sort_vals[i-j+1] = sort_vals[i-j]; + } + + sort_vals[i-j+1].val = power; + sort_vals[i-j+1].pin = dimmer[dim_num].pin; + } + else sort_vals[i].val = power; + + i = dims; + } + +} + + + + +void Heater(unsigned char dim_num, unsigned char heat_power) +{ + Dimm_value(dim_num, 0); + + dimmer[dim_num].flag = HEAT; + dimmer[dim_num].heat_val = heat_power; + + if(heat_power == 0) digitalWrite(dimmer[dim_num].pin, 0); +} + + +//====================================================================== + + +ISR(INT0_vect) +{ + if(sort_vals[dims-1].val != 0 && dims > 0) + { + tim_form(); + cnt=lim*2-1; + TCNT1 = 0xffff - (ZERO_VAL - K*sort[cnt].val); + } + + for(unsigned char i = 0; i heat_cnt) digitalWrite(dimmer[i].pin, 1); + else digitalWrite(dimmer[i].pin, 0); + } + else + { + if(dimmer[i].SSR_state > 0) digitalWrite(dimmer[i].pin, 1); + } + } + } + + if(heat_cnt < MAX_HEAT_DIV-1) heat_cnt++; + else heat_cnt = 0; + +} + + +ISR(TIMER1_OVF_vect) +{ + if(sort_vals[dims-1].val != 0 && dims > 0) + { + + digitalWrite(sort[cnt].pin, 1); + delayMicroseconds(30); + digitalWrite(sort[cnt].pin, 0); + + while(sort[cnt-1].val == 0) + { + cnt--; + digitalWrite(sort[cnt].pin, 1); + delayMicroseconds(30); + digitalWrite(sort[cnt].pin, 0); + } + + cnt--; + TCNT1 = 0xffff - K*sort[cnt].val; + } +} + + + + \ No newline at end of file diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer.h b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer.h new file mode 100644 index 0000000..b509080 --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer.h @@ -0,0 +1,32 @@ +//20.02.2019 +//by Reptiloid software + +/* +: +- D2 +- D9 D10 (Analog.Write()) + / digitalWrite() +*/ + +//==================================================== + +#ifndef AC_Dimmer_h +#define AC_Dimmer_h + +#include +#include + +#include "Arduino.h" + +//================================================= + + + void Dimmer_init_begin(); + void Dimmer_pin_assign(unsigned char dim_num, unsigned char dim_pin); + void Dimmer_init_end(); + void Dimm_value(unsigned char dim_num, unsigned char power); + void SSR_switch(unsigned char dim_num, unsigned char state); + void Heater(unsigned char dim_num, unsigned char heat_power); + + +#endif \ No newline at end of file diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer_FADE/AC_Dimmer_FADE.ino b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer_FADE/AC_Dimmer_FADE.ino new file mode 100644 index 0000000..403a9ee --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer_FADE/AC_Dimmer_FADE.ino @@ -0,0 +1,110 @@ +//20.02.2019 +//by Reptiloid software + +/* +Ограничения: +- Для контроля фазы использовать только D2 (прерывание INT0) + (порт M2 диммера подключать к порту D2 АРДУИНО)!!! +- Не использовать пины D9 и D10 для ШИМ Analog.Write()!!! + только цифровой выход/вход digitalWrite() и digitalRead() + +Функционал: +- Данная библиотека позволяет регулировать нагрузку(и), + подключенную в промышленную сеть 220В с помощью АУРДУИНО + различными встроенными функциями описанными ниже + +Как работать: +1) Чтобы начать работу нужно подключить библиотеку AC_Dimmer.h +2) Обозначить и раздать номера диммерам (нумерация от 0!!!), используемым в проекте: + #define <"имя димера"> <"порядковый номер"> + + Например: + #include + + #define Dimmer_1 0 + #define Dimmer_2 1 + #define Dimmer_3 2 + +3) Инициализировать димер(ы) в void setup(). + - Инициализацию выполнять строго между функций Dimmer_init_begin() и Dimmer_init_end(); + - Инициализировать с помощью функции Dimmer_pin_assign(): + Dimmer_pin_assign(<"имя димера">, <"порт(пин) ардуино димера">); + + Например: + void setup() + { + Dimmer_init_begin(); + + Dimmer_pin_assign(Dimmer_1, 3); + Dimmer_pin_assign(Dimmer_2, A3); + Dimmer_pin_assign(Dimmer_3, A2); + + Dimmer_init_end(); + } + + +3) В void loop() использовать нужную функцию: + + - Dimm_value(<"имя димера">, <"значение мощности от 0 до 255">) + - Heater(<"имя димера">, <"значение мощности от 0 до 10">) + - SSR_switch(<"имя димера">, <значения 1 или 0 (HIGH/LOW)>) + +Например: void loop() + { + Dimm_value(Dimmer_3, 64); // 25% мощность на диммере№3 + Heater(Dimmer_2, 3); //30% мощности на диммере№2 (при условии что там ТЕН или другая низкоинерциооная нагрузка) + Dimm_value(Dimmer_1, 128); //50% мощности на диммере№1 + + delay(1000); //установленные высше параметры удерживаются 1сек + + SSR_switch(Dimmer_3, LOW); // отключим все диммеры на 1сек + SSR_switch(Dimmer_2, LOW); + SSR_switch(Dimmer_1, LOW); + + delay(1000); + } + +Код даного примера предполагает плавное поочередное зажигание и +и тушение трех ламп накаливания, подключенных к ардуино каждая через независимый диммер + +Демонстрацию работы библиотеки на тестовом стенде и схему можно посмотреть здесь: +https://www.youtube.com/watch?v=9fhkJQIRmEA + +Так же можно использовать для теста одиночного диммера +*/ + + +#include +#include //если Вы хотите использовать данную библитеку в своем в проекте, + //математическая библиотека не обязательна к включению + +#define Dimmer_1 0 +#define Dimmer_2 1 +#define Dimmer_3 2 + +unsigned char i = 0; +unsigned char range = 70; // Диапазон регулировки + // (255 - максимальное значение) + +void setup() +{ + Dimmer_init_begin(); + + Dimmer_pin_assign(Dimmer_1, 3); + Dimmer_pin_assign(Dimmer_2, A3); + Dimmer_pin_assign(Dimmer_3, A2); + + Dimmer_init_end(); +} + + +void loop() +{ + i++; + + Dimm_value(Dimmer_1, range*fabs(sin(i*2*3.14/255))); + Dimm_value(Dimmer_2, range*fabs(sin((i+(255/3))*2*3.14/255))); + Dimm_value(Dimmer_3, range*fabs(sin((i+(255*2/3))*2*3.14/255))); + + delay(25); +} diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer_Regulators/AC_Dimmer_Regulators.ino b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer_Regulators/AC_Dimmer_Regulators.ino new file mode 100644 index 0000000..1744eb3 --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/AC_Dimmer_Regulators/AC_Dimmer_Regulators.ino @@ -0,0 +1,51 @@ +//30.03.2019 +//by Reptiloid software + +/* + +Данный скетч реализует ручную независимую регулировку мощности для каждого диммера +с помощью соответствующего потенциометра на аналоговых пинах +(рекомендуемы номинал 1-100К) + +Так же можно использовать для теста одиночного диммера + +Подробное описание работы и синтаксиса библиотеки можете +посмотреть в примере AC_DIMMER_FADE + +Демонстрацию работы библиотеки на тестовом стенде и схему можно посмотреть здесь: +https://www.youtube.com/watch?v=9fhkJQIRmEA + +*/ + + +#include + +#define Dimmer_1 0 +#define Dimmer_2 1 +#define Dimmer_3 2 + + +void setup() +{ + Dimmer_init_begin(); + + Dimmer_pin_assign(Dimmer_1, 3); + Dimmer_pin_assign(Dimmer_2, A3); + Dimmer_pin_assign(Dimmer_3, A2); + + Dimmer_init_end(); +} + +int adc_read; + +void loop() +{ + adc_read = analogRead(A4)/4; + Dimm_value(Dimmer_1, adc_read); // потенциометры на пинах А4, А5, А6 + adc_read = analogRead(A5)/4; + Dimm_value(Dimmer_2, adc_read); // для ручной регулировки мощности + adc_read = analogRead(A6)/4; + Dimm_value(Dimmer_3, adc_read); // на каждый диммер + + delay(50); +} diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/esp8266_dimmer_fade/esp8266_dimmer_fade.ino b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/esp8266_dimmer_fade/esp8266_dimmer_fade.ino new file mode 100644 index 0000000..b6bd2e2 --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/esp8266_dimmer_fade/esp8266_dimmer_fade.ino @@ -0,0 +1,78 @@ +/* +Данный скетч позволяет запустить димер в режиме FADE для платы ESP8266 +- 2сек диммер плавно увеличивает мощность +- 2сек диммер плавно уменьшает мощность + +Для того чтобы успешно прошить даный скетч Вам нужно: +- скачать дистрибутив для работу с ESP8266 в Arduino IDE +- скачать библиоеки Ticker.h +- подключить димер на соответствующие пины или назначить свои + +При работе с ESP8266 подключать библиотеку AC_Dimmer и использовать ее функции не нужно +Достаточно прошить лишь данный пример +Для управления можностью используется переменная val (смотрите ниже) + + */ + +#include +#include + +Ticker blinker; + +const byte interruptPin = D7; // пин диммера М2 +const byte dimPin = D5; // пин диммера М1 +int val = 0; // переменная, которая определяет мощность от 0 до 10000 + +int power = 0; +int rise = 0; + +void ICACHE_RAM_ATTR handleInterrupt(); + +void ICACHE_RAM_ATTR onTimerISR() // обработчик прерывания таймера +{ + digitalWrite(dimPin, HIGH); + delayMicroseconds(40); + digitalWrite(dimPin, LOW); + + timer1_write(50000);//10мс +} + + +void handleInterrupt() // обработчик прерывания по фронту (от пина детекции фазы димера) +{ + power = 49000 - 4.785*val; + timer1_write(power); + + if(val < 10000 && rise == 1) val = val + 100; // плавное наростание + else rise = 0; + + if(val > 0 && rise == 0) val = val - 100; // плавное угасание + else rise = 1; +} + + + +void setup() +{ + + pinMode(interruptPin, INPUT_PULLUP); + pinMode(dimPin, OUTPUT); + + attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, RISING); + + timer1_attachInterrupt(onTimerISR); + timer1_enable(TIM_DIV16, TIM_EDGE, TIM_SINGLE); + + // здесь можно писать свой код (setup()) + // + // здесь можно писать свой код (setup()) +} + + +void loop() +{ + // здесь можно писать свой код + // + // здесь можно писать свой код +} + diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/esp8266_dimmer_wifi_control/esp8266_dimmer_wifi_control.ino b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/esp8266_dimmer_wifi_control/esp8266_dimmer_wifi_control.ino new file mode 100644 index 0000000..c97c04e --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/esp8266_dimmer_wifi_control/esp8266_dimmer_wifi_control.ino @@ -0,0 +1,99 @@ +/* + +Даный скетч позволяет управлять сетевым диммером DMR-02 через WiFi +с помощью ESP8266 и смартфона с любой точки планеты, где есть доступ в интернет + +Скетч позволит управлять нагрузкой (лампой) с помощью ползунка на Вашем смартфоне по WiFi + +Код работает в неблокирующем режиме (можно добавлять свой код) + +Управление со смартфона будет происходить с помощью программы Blynk (Play market/APP store) +Перед началом работы рекомендуется разобраться с функионалом данного софта + +пример работы (ВИДЕО) +https://www.youtube.com/watch?v=Z_Vvgx4QuSY + +Для того чтобы успешно прошить даный скетч Вам нужно: +- скачать дистрибутив для работу с ESP8266 в Arduino IDE +- скачать библиоеки Blynk и Ticker.h +- скачать приложение Blynk на смартфон +- создать проект в приложении Blynk для управления димером +- получить на почту Ваш ЛИЧНЫЙ токен с приложения Blynk и вписать его ниже +- вписать имя и пароль WiFi для подключения ESP8266 (смотрите ниже) +- подключить димер на соответствующие пины или назначить свои + +При работе с ESP8266 подключать библиотеку AC_Dimmer и использовать ее функции не нужно +Достаточно прошить лишь данный пример +Для управления можностью используется переменная val (смотрите ниже) + */ + +#include +#include +#include + +Ticker blinker; + +const byte interruptPin = D7; // пин диммера М2 +const byte dimPin = D5; // пин диммера М1 + +int power = 0; +int val = 0; // переменная задающая мощность от 0 до 10000 + +char auth[] = "7wE5GzzU2zs83pOZKSbMxfEu_G53y4V6"; // Ваш ЛИЧНЫЙ токен от приложения Blynk +char ssid[] = "AndroidAP"; // имя WiFi +char pass[] = "23412123"; // пароль WiFi + +void ICACHE_RAM_ATTR handleInterrupt(); + +void ICACHE_RAM_ATTR onTimerISR() // обработчик прерывания таймера +{ + digitalWrite(dimPin, HIGH); + delayMicroseconds(40); + digitalWrite(dimPin, LOW); + + timer1_write(50000);//10мс +} + + +void handleInterrupt() // обработчик прерывания по фронту (от пина детекции фазы димера) +{ + power = 49000 - 4.75*val; + timer1_write(power); +} + + + +void setup() +{ + Serial.begin(9600); + Blynk.begin(auth, ssid, pass); + + pinMode(interruptPin, INPUT_PULLUP); + pinMode(dimPin, OUTPUT); + + attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, RISING); + + timer1_attachInterrupt(onTimerISR); + timer1_enable(TIM_DIV16, TIM_EDGE, TIM_SINGLE); + + // здесь можно писать свой код (setup()) + // + // здесь можно писать свой код (setup()) +} + + +void loop() +{ + +Blynk.run(); // функция поллинга данных по WiFi + + // здесь можно писать свой код + // + // здесь можно писать свой код +} + + +BLYNK_WRITE(V0) // функция считывания данных по WiFi + { + val = param.asInt(); + } diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/keywords.txt b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/keywords.txt new file mode 100644 index 0000000..3c909e3 --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer/AC_Dimmer/keywords.txt @@ -0,0 +1,9 @@ +#include KEYWORD1 +Dimmer_pin_assign KEYWORD1 +Dimmer_init_end KEYWORD1 +Dimmer_init_begin KEYWORD1 +Heater KEYWORD2 +Dimm_value KEYWORD2 +SSR_switch KEYWORD2 + + diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer_Docum.docx b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer_Docum.docx new file mode 100644 index 0000000..1cb6718 Binary files /dev/null and b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/AC_Dimmer_Docum.docx differ diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/README.md b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/README.md new file mode 100644 index 0000000..461c48f --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/README.md @@ -0,0 +1,28 @@ +# AC_dimmer-dmr-0.2.1 + +Последняя версия библиотеки на сетевой диммер dmr-0.2.x + +Пример работы (Demo-video): https://www.youtube.com/watch?v=9fhkJQIRmEA + +Пример работы c ESP8266 (управление диммером через Wifi с помощью смартфона) (Demo-video): https://www.youtube.com/watch?v=Z_Vvgx4QuSY + +- Работа в трех режимах: + - режим трердотелого реле (вкл/выкл с учетом фазы) + - фазовая регулировка (классический режим) + - полуволновый режим (для повышеных мощностей для мощных нагревателей) + +- позволяет параллельную работу нескольких димеров на одной плате Ардуино + +- Добавлен пример работы с ESP8266 по Wifi + +Библиотека Ардуино: [AC_Dimmer.zip](https://github.com/serhiy23412/AC_dimmer-dmr-0.2.1/blob/master/AC_Dimmer.zip) + +Простой пример на Raspberry Pi (by Andy): [Raspberry Pi example.txt](https://github.com/serhiy23412/AC_dimmer-dmr-0.2.1/blob/master/Raspberry_Pi_example.txt) + +Более детальная информация: [AC_Dimmer_Docum.docx](https://github.com/serhiy23412/AC_dimmer-dmr-0.2.1/blob/master/AC_Dimmer_Docum.docx) + + + + + + diff --git a/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/Raspberry Pi example.txt b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/Raspberry Pi example.txt new file mode 100644 index 0000000..49f912f --- /dev/null +++ b/anemostat/AC_dimmer-dmr-0.2.1-master/AC_dimmer-dmr-0.2.1-master/Raspberry Pi example.txt @@ -0,0 +1,45 @@ +import RPi.GPIO as GPIO +import time +import math + +PHASE_DFREQ = 100 +DRIVER_MIN = 0.3 +DRIVER_MAX = 0.95 + +power = DRIVER_MIN + +def phase_callback(channel): +global power +if power < DRIVER_MIN: +power = DRIVER_MIN +if power > DRIVER_MAX: +power = DRIVER_MAX + +time.sleep(math.acos(2.0 * power - 1.0) / (math.pi * PHASE_DFREQ)) +GPIO.output(23, GPIO.HIGH) +time.sleep(0.00003) +GPIO.output(23, GPIO.LOW) + +GPIO.setmode(GPIO.BCM) +GPIO.setwarnings(False) + +GPIO.setup(23, GPIO.OUT) # dimmer control +GPIO.setup(24, GPIO.IN) # phase control + +GPIO.add_event_detect(24, GPIO.BOTH, callback=phase_callback, bouncetime=9) + + +try: +print(power) +time.sleep(15) + +while True: +power += 0.05 +print(power) +time.sleep(10) +except KeyboardInterrupt: +pass + +finally: +GPIO.remove_event_detect(24) +GPIO.cleanup() \ No newline at end of file diff --git a/anemostat/Body12.stl b/anemostat/Body12.stl new file mode 100644 index 0000000..b619f1b Binary files /dev/null and b/anemostat/Body12.stl differ diff --git a/anemostat/P1.stl b/anemostat/P1.stl new file mode 100644 index 0000000..f672026 Binary files /dev/null and b/anemostat/P1.stl differ diff --git a/anemostat/P2.stl b/anemostat/P2.stl new file mode 100644 index 0000000..f0f9601 Binary files /dev/null and b/anemostat/P2.stl differ diff --git a/anemostat/Slider.stl b/anemostat/Slider.stl new file mode 100644 index 0000000..a186f07 Binary files /dev/null and b/anemostat/Slider.stl differ diff --git a/Новая папка/desktop.ini b/anemostat/desktop.ini similarity index 100% rename from Новая папка/desktop.ini rename to anemostat/desktop.ini diff --git a/scd30mh/19.bin b/scd30mh/19.bin new file mode 100644 index 0000000..278ac1f Binary files /dev/null and b/scd30mh/19.bin differ diff --git a/scd30mh/co2_17.bin b/scd30mh/co2_17.bin new file mode 100644 index 0000000..c8dba06 Binary files /dev/null and b/scd30mh/co2_17.bin differ diff --git a/scd30mh/scd30mh.ino b/scd30mh/scd30mh.ino index 31412cd..4db2fcb 100644 --- a/scd30mh/scd30mh.ino +++ b/scd30mh/scd30mh.ino @@ -42,9 +42,11 @@ MHZ19 myMHZ19; SoftwareSerial mySerial(RX_PIN, TX_PIN); -unsigned int VersionSW = 17; +unsigned int VersionSW = 20; //17 - локальный брокер +//19 - какие то траблы в офисе +//20 - Ручное удаление Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); @@ -63,7 +65,7 @@ WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "192.168.89.210", 0, 20000); //Собственно сервер времени смещение и частоат запроса, но он вручную const PROGMEM char *willmess = "{\"conn\":\"err\"}"; const char *mqttHostName = "metrics"; //Хостнейм брокера metrics.local cctv.automation.art //192.168.89.210 -unsigned int mqttPort = 1883; //Порт брокера 1883 8889 +unsigned int mqttPort = 1883; //Порт брокера 1883 8889 String getMacAddress(); String macc = getMacAddress(); @@ -72,9 +74,9 @@ String willTopicTemp = "aastudio/sens/" + macc + "/status"; const PROGMEM char *mqttLogin = "AA_Lab", *mqttPass = "automation.art$"; const char *mqttIPHost; //тут хранится IP хоста по хостнейму -unsigned long timingUpdate, timingReqSensor, timingSendMqtt; //Таймеры для millis() -int PROGMEM nextM5Update = 450000; //каждые 7.5 минут запрос обновления с сервера //опрос датчиков раз в 10 секунд -int PROGMEM nextMqttSend = 10000; //Отправка +unsigned long timingUpdate=0, timingReqSensor=0, timingSendMqtt=0; //Таймеры для millis() +int PROGMEM nextM5Update = 450000, nextMqttSend = 60000; //каждые 7.5 минут запрос обновления с сервера + //Отправка bool typeSensor = false, GlobalOled = false; bool mqttSendFlag = false; bool safetyStateNow = false, safetyStateOld = false; @@ -115,7 +117,7 @@ void setup() { Serial.begin(115200); Serial.setDebugOutput(true); - + M5.begin(true, false, true); Wire.begin(32, 26); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 @@ -165,7 +167,7 @@ void setup() myMHZ19.autoCalibration(false); } - M5.begin(true, false, true); + delay(50); pinMode(TRIGGER_PIN, INPUT); @@ -246,6 +248,8 @@ int setMqttServer(const char *mqttHostNameF, unsigned int mqttPortF) IPAddress ipaddr; OTApreferences.begin("ota-config"); + OTApreferences.putString("mqttip", "0"); + delay(1000); String keyIpMqtt = OTApreferences.getString("mqttip", "0"); Serial.print("keyIpMqtt: "); Serial.println(keyIpMqtt); @@ -340,7 +344,7 @@ void checkButton() OTApreferences.begin("ota-config"); OTApreferences.putString("mqttip", "0"); - OTApreferences.end(); + OTApreferences.end(); ESP.restart(); } @@ -358,7 +362,8 @@ void OTAUpdate() { HTTPClient http; - String serverPath = "http://meteosence.s-host.net/airqa/airquality.php?meteopas=84sdi5239dfkg4&mac=" + macc + "&meteodata=gethash"; + String serverPath = "http://meteosence.s-host.net/airqa/airquality.php?meteopas= + &mac=" + macc + "&meteodata=gethash"; http.begin(serverPath.c_str()); int httpResponseCode = http.GET(); @@ -565,7 +570,7 @@ int SendMqttReq(bool sendVal = true, bool sendStatus = true, byte statusConn = 1 doc["bsid"] = WiFi.BSSIDstr(); doc["ts"] = timeNow; doc["exp"] = timeNow + 600; - doc["sv"] = VersionSW; + doc["sv"] = VersionSW; JsonData = ""; serializeJson(doc, JsonData); diff --git a/scd30mh/scd30mh.ino.m5stack_atom.bin b/scd30mh/scd30mh.ino.m5stack_atom.bin index c8dba06..8a34cda 100644 Binary files a/scd30mh/scd30mh.ino.m5stack_atom.bin and b/scd30mh/scd30mh.ino.m5stack_atom.bin differ