// скетч автоматического управления шаговым двигателем 28BYJ-48-5V по температуре от датчиков ds18b20
#include<AccelStepper.h>
#define HALFSTEP 8
#define motorPin1 14 // пины шагового двигателя
#define motorPin2 12
#define motorPin3 13
#define motorPin4 15
AccelStepper mystepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <TimeLib.h>
#include <SimpleTimer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 04 // пин для ds18b20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
bool buttl = 0; // команда открыть
bool buttr = 0; // команда закрыть
bool buttll = 0; // команда открыть полностью
bool buttrr = 0; // команда закрыть полностью
int turn = 226; // угол 20' по умолчанию, шагов по автоматике
int turnm = 8500; // 845 градусов (2 оборота - 720 градусов)
bool turn_stop;
float temp_def; // ds18b20
float temp_par;
float temp_cub;
int temp_def_max; // верхняя критическая температура дефа
int temp_def_min; // нижняя критическая температура дефа
unsigned long time_reed_temp = 0; // время измерения температуры перед регулировкой
bool butt_auto_on = 0; //кнопка включения автоматики
int time_auto_period = 30000;
float timeout = (millis() / 1000);
unsigned long TimeLightOffOn = 0;
SimpleTimer timer;
char auth[] = "***";
char ssid[] = "speakme";
char pass[] = "183461..";
BLYNK_CONNECTED()
{
Blynk.syncAll();
}
BLYNK_WRITE(V6) //открыть
{
buttl = param.asInt();
}
BLYNK_WRITE(V4) //закрыть
{
buttr = param.asInt();
}
BLYNK_WRITE(V9) //открыть макс
{
buttll = param.asInt();
}
BLYNK_WRITE(V10) //закрыть макс
{
buttrr = param.asInt();
}
BLYNK_WRITE(V5) // вкл автоматики
{
butt_auto_on = param.asInt();
}
BLYNK_WRITE(V8) // слайдер шага двигателя
{
turn = param.asInt();
}
BLYNK_WRITE(V11) // слайдер дефа мин
{
temp_def_min = param.asInt();
}
BLYNK_WRITE(V12) // слайдер дефа макс
{
temp_def_max = param.asInt();
}
BLYNK_WRITE(V14) // стоп вращение
{
turn_stop = param.asInt();
}
/*BLYNK_WRITE(V15) // период действия автоматики
{
time_auto_period = param.asInt();
}*/
void setup()
{
mystepper.setMaxSpeed(200.0);
mystepper.setAcceleration(300.0);
mystepper.setCurrentPosition (0); // Установить счетчик как текущую позицию.
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
// Blynk.connect();
sensors.begin();
timer.setInterval (50, butt); // считывание кнопок Blynk
timer.setInterval (3000, sendBlynk); // отправка данных в Blynk
timer.setInterval (time_auto_period, automatic); // запуск автоматической корекции двигателя по температуре
// timer.setInterval (1000, prints); //Serial.print
/* while (Blynk.connect() == false) {
if(((millis()/1000) - timeout) > 10){ // issue msg if not connected to Blynk in more than 10 seconds
break;
}
}*/
}
void sendBlynk() // отправка данных в Blynk
{
if ((Blynk.connected()) && (mystepper.isRunning() == 0))
{
Blynk.virtualWrite(V8, turn);
Blynk.virtualWrite(V7, mystepper.currentPosition() / 11.3216); // 11,3215912208333 положение двигателя в градусах
sensors.requestTemperatures();
temp_def = sensors.getTempCByIndex(0);
temp_par = sensors.getTempCByIndex(1);
temp_cub = sensors.getTempCByIndex(2);
unsigned long time_reed_temp = 0; // время начала
int time_out = 1000; // время задержки
if (millis() - time_reed_temp > time_out)
{
time_reed_temp = millis();
Blynk.virtualWrite(V1, temp_def);
Blynk.virtualWrite(V2, temp_par);
Blynk.virtualWrite(V3, temp_cub);
}
// Время с момента перезагрузки
// byte Seconds = ((millis()+TimeLightOffOn)/1000UL)%60;
byte Minutes = (((millis()+TimeLightOffOn)/1000UL)/60UL)%60;
byte Hours = (((millis()+TimeLightOffOn)/1000UL)/3600UL)%24;
Blynk.virtualWrite(V16, Hours);
Blynk.virtualWrite(V17, Minutes);
// Blynk.virtualWrite(V18, Seconds);
/* Serial.print(Hours);
Serial.print(':');
Serial.print(Minutes);
Serial.print(':');
Serial.println(Seconds);*/
}
}
void automatic() // запуск автоматической корекции положения двигателя по температуре
{
// деф
if (butt_auto_on == 1)
{
if (temp_def <= temp_def_min)
{
mystepper.move(turn);
}
if (temp_def >= temp_def_max)
{
mystepper.move(-turn);
}
mystepper.disableOutputs();
}
if ((temp_def_min <= temp_def) && (temp_def <= temp_def_max))
{
Blynk.setProperty(V1, "color", "#66ccff"); // голубой
}
else
{
Blynk.setProperty(V1, "color", "#ff3333"); // красный
}
// Пар
if ((temp_par >= 78.3) && (temp_par <= 78.5))
{
Blynk.setProperty(V2, "color", "#66ccff"); // голубой
}
if ((temp_par > 78.5) && (temp_par <= 98))
{
Blynk.setProperty(V2, "color", "#ffff33"); // желтый
}
if ((temp_par < 78.3) || (temp_par > 98))
{
Blynk.setProperty(V2, "color", "#ff3333"); // красный
}
}
void loop()
{
// if(Blynk.connect() == true)
// {
Blynk.run();
// }
timer.run();
mystepper.run();
}
void butt() // ручное управление двигателем
{
if (butt_auto_on == 0)
{
if (buttl == 1)
{
mystepper.move(turn); // Переместиться в относительно указанное положение. Открыть
}
if (buttr == 1)
{
mystepper.move(-turn); // Закрыть
}
if (buttll == 1)
{
mystepper.moveTo(turnm); // Переместиться в абсолютно указанное положение против часовой, открыть вентиль.
}
if (buttrr == 1)
{
mystepper.moveTo(0); // закрыть вентиль
}
mystepper.disableOutputs();
}
if (turn_stop == 1)
{
mystepper.stop();
}
}
/*void prints()
{
Serial.print("max = ");
Serial.println(temp_def_max);
Serial.print("min = ");
Serial.println(temp_def_min);
Serial.print("угол = ");
Serial.println(angle);
// Serial.println(temp_def);
// Serial.println(temp_par);
// Serial.println(temp_cub);
}*/
Так речь про баню?// Пар
Можно покритиковать код? Понимаю, что его еще допиливать и допиливать
Вот когда "начинается" надо для начала полазить по всем устройствам с мультимером - хотя бы проверить питание. Попытаться потом проверить сигнальные цепи...То все четко работает, то начинается..
Нет, это автоматика самогонного аппарата.Так речь про баню?
Высокие влажность, температура...
Ну, если про питание - попробуйте esp и датчики питать от разных зарядниковНет, это автоматика самогонного аппарата.
Задача регулировать напор охлаждающей воды с контролем температуры.
Питание 12В/1,6А для двигателя через LM2596s DC-DC преобразователь, 5В/2,1А для ESPшки от зарядного моб.телефона. Пока так. Потом все от DC-DC запитаю..
Понял, ща попробую.Ну, если про питание - попробуйте esp и датчики питать от разных зарядников
Только землю не забыть соединить...
// скетч автоматического управления шаговым двигателем 28BYJ-48-5V по темпратуре от датчиков ds18b20
#include<AccelStepper.h>
#define HALFSTEP 8
#define motorPin1 14 // пины шагового двигателя
#define motorPin2 12
#define motorPin3 13
#define motorPin4 15
AccelStepper mystepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
//#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <TimeLib.h>
#include <SimpleTimer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 04 // пин для ds18b20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
bool buttl = 0; // команда открыть
bool buttr = 0; // команда закрыть
bool buttll = 0; // команда открыть полностью
bool buttrr = 0; // команда закрыть полностью
int turn; // шагов по автоматике, угол 10' по умолчанию
int turnm = 8500; // 750 градусов (это максимум)
int turn_temp; //шагов. считывается со слайдера в градусах
int steps; // положение двигателя
float temp_def; // ds18b20
float temp_par;
float temp_cub;
unsigned long time_reed_temp = 0; // время измерения температуры перед регулировкой
bool butt_auto_on = 0; //кнопка включения автоматики
float timeout = (millis() / 1000);
unsigned long TimeLightOffOn = 0;
int time_out = 1000; // время задержки
int temp_def_calc; // расчетная температура дэфа
int temp_def_delta_min = 2;
int temp_def_delta_max = 3;
int temp_cub_def_delta = 4;
SimpleTimer timer;
char auth[] = "***";
char ssid[] = "speakme";
char pass[] = "183461..";
BLYNK_CONNECTED()
{
Blynk.syncAll();
}
BLYNK_WRITE(V6) //открыть
{
buttl = param.asInt();
}
BLYNK_WRITE(V4) //закрыть
{
buttr = param.asInt();
}
BLYNK_WRITE(V9) //открыть макс
{
buttll = param.asInt();
}
BLYNK_WRITE(V10) //закрыть макс
{
buttrr = param.asInt();
}
BLYNK_WRITE(V5) // вкл автоматики
{
butt_auto_on = param.asInt();
}
BLYNK_WRITE(V8) // слайдер шага двигателя
{
turn_temp = param.asInt();
}
void setup()
{
mystepper.setMaxSpeed(200.0);
mystepper.setAcceleration(300.0);
mystepper.setCurrentPosition (0); // Установить счетчик как текущую позицию.
Blynk.begin(auth, ssid, pass);
sensors.begin();
timer.setInterval (50, butt); // считывание кнопок Blynk
timer.setInterval (2000, sendBlynk); // отправка данных в Blynk
timer.setInterval (10000, automatic); // запуск автоматической корекции двигателя по температуре
}
void sendBlynk() // отправка данных в Blynk
{
if (Blynk.connected() && mystepper.isRunning() == 0)
{
// Blynk.virtualWrite(V8, turn);
sensors.requestTemperatures();
temp_def = sensors.getTempCByIndex(0);
temp_par = sensors.getTempCByIndex(1);
temp_cub = sensors.getTempCByIndex(2);
if (millis() - time_reed_temp > time_out) // задержка после запроса датчикам
{
Blynk.virtualWrite(V1, temp_def);
Blynk.virtualWrite(V2, temp_par);
Blynk.virtualWrite(V3, temp_cub);
time_reed_temp = millis();
}
// Время с момента перезагрузки
byte Minutes = (((millis()+TimeLightOffOn)/1000UL)/60UL);
Blynk.virtualWrite(V17, Minutes);
}
steps = mystepper.currentPosition(); // положение двигателя
/* byte hi = highByte(steps); // старший байт
byte low = lowByte(steps); // младший байт
EEPROM.write(1, hi); // записываем в ячейку 1 старший байт
EEPROM.write(2, low); // записываем в ячейку 2 младший байт
for (int addr=0; addr<1024; addr++)
{
byte val = EEPROM.read(addr); // считываем 1 байт по адресу ячейки
}
val = word(hi, low);
*/
float angle = steps / 11.3216;
Blynk.virtualWrite(V7, angle); // 11,3215912208333 шагов на 1 градус
}
void loop()
{
Blynk.run();
timer.run();
mystepper.run();
}
void butt() // ручное управление двигателем
{
if (mystepper.isRunning() == 0)
{
mystepper.disableOutputs();
}
if (butt_auto_on == 0)
{
turn = round (turn_temp * 11.3216);
if (buttl == 1)
{
mystepper.move(turn); // Переместиться в относительно указанное положение. Открыть
}
if (buttr == 1)
{
mystepper.move(-turn); // Закрыть
}
if (buttll == 1)
{
mystepper.moveTo(turnm); // Переместиться в абсолютно указанное положение против часовой, открыть вентиль.
}
if (buttrr == 1)
{
mystepper.moveTo(0); // закрыть вентиль
}
}
}
void automatic() // запуск автоматической корекции положения двигателя по температуре
{
// деф
temp_def_calc = temp_cub - temp_cub_def_delta; //31-4=27
if (butt_auto_on == 1) // && (temp_cub > 75))
{
turn = round (turn_temp * 11.3216);
if (temp_def_calc - temp_def >= temp_def_delta_max) //27-22=4
{
mystepper.move(turn*2); //открыть, темп дефа увеличить
}
if ((temp_def_calc - temp_def > temp_def_delta_min) && (temp_def_calc - temp_def < temp_def_delta_max)) //19-22=-3
{
mystepper.move(turn); //открыть, темп дефа увеличить
}
if (temp_def_calc - temp_def <= -temp_def_delta_max) //19-22=-3 = -3!
{
mystepper.move(-turn*2); //закрыть, темп дефа уменьшить
}
if ((temp_def_calc - temp_def < temp_def_delta_min) && (temp_def_calc - temp_def > -temp_def_delta_max))
{
mystepper.move(-turn); //закрыть, темп дефа уменьшить
}
mystepper.disableOutputs();
}
if (abs(temp_def_calc - temp_def) < temp_def_delta_min)
{
Blynk.setProperty(V1, "color", "#66ccff"); // голубой
}
if ((abs(temp_def_calc - temp_def) <= temp_def_delta_max) && (abs(temp_def_calc - temp_def) >= temp_def_delta_min))
{
Blynk.setProperty(V1, "color", "#ffff33"); // желтый
}
if (abs(temp_def_calc - temp_def) > temp_def_delta_max)
{
Blynk.setProperty(V1, "color", "#ff3333"); // красный
}
// Пар
if ((temp_par >= 78.3) && (temp_par <= 78.5))
{
Blynk.setProperty(V2, "color", "#66ccff"); // голубой
}
if ((temp_par > 78.5) && (temp_par <= 98))
{
Blynk.setProperty(V2, "color", "#ffff33"); // желтый
}
if ((temp_par < 78.3) || (temp_par > 98))
{
Blynk.setProperty(V2, "color", "#ff3333"); // красный
}
}
/*void prints()
{
}*/
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "64ed973d132b4a3bb5.........";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Silver";
char pass[] = "00000000";
void setup()
{
// Debug console
Serial.begin(1152
00);
// Send e-mail when your hardware gets connected to Blynk Server
// Just put the recepient's "e-mail address", "Subject" and the "message body"
Blynk.email("your_email@mail.com", "Subject", "My Blynk project is online.");
Blynk.begin(auth, ssid, pass);
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
}
void loop()
Blynk.email("your_email@mail.com", "Subject", "My Blynk project is online.");
Скетч нормально компилится. Попробуйте обновить Blynk библиотеку.При попытке скомпилировать такой код, компилятор ругается...
В общем то проблема в этой строчке:
Подскажите.Что не так?Код:Blynk.email("your_email@mail.com", "Subject", "My Blynk project is online.");
Там шестеренка сверху (Project settings)Нужна помощь , установил локальный сервер на orangepi , захожу на сервер через приложение , но не вижу токена , где мне его посмотреть?
Буду признателен за ответы сильно не пинайте.
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
char auth[] = "----------------------";
char ssid[] = "----------------------";
char pass[] = "----------------------";
#define DHTPIN D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
Adafruit_BMP085 bmp;
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
float p = bmp.readPressure();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
Blynk.virtualWrite(V7, p/100);
}
void setup()
{
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find BMP180 sensor at 0x77");
while (1) {}
}
Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080); // адрес вашего блинк сервера
dht.begin();
// данные обновляются каждые 10 сек
timer.setInterval(10000L, sendSensor);
}
void loop()
{
Blynk.run();
timer.run(); // Initiates SimpleTimer
}
Вот такая команда в сетапе должна востановить все пины на устройстве:Так должно быть?