• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Создание управления теплицей на основе ESP 8266+Blynk.

Добрый день, уважаемые форумчане! Начал делать управление теплицей на основе есп 8266, датчика DHT11, фоторезистора, крана с электроприводом штока, четырехканального реле, управление через Блунк. Но к сожалению имею весьма скромные познания в программировании вообще и С++ в частности. Поэтому скетч составляю из примеров Ардуино ИДЕ. Сначало в пример ЕСП8266_Standalone, который вместо мигания светодиодом приспособил под включение крана с блунк, добавил отображение температуры и в цикл loop добавил включение выключение реле освещения от значений фоторезитора. Все это прекрасно работало, но затем я решил добавить обратную связь от ЕСП 8266, для того чтобы быть уверенным что кран действительно открылся и закрылся, потому что от сбоев в инете никто не застрахован. Обратную связь решил сделать через виджет Блунк "Терминал" и соответствующий скетч из примеров, с такой логикой: если на пине D6(управляет краном) High, то посылать сообщение "Кран включен", иначе "Кран выключен". Но когда добавил пример "Терминал" в предыдущий скетч, то вышла ошибка связаная с каким то "конфликтом библиотек" (я так думаю):
Несколько библиотек найдено для "Ethernet.h"
Используется: C:\Users\Вячеслав\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\Ethernet
Не используется: C:\Program Files (x86)\Arduino\libraries\Ethernet
exit status 1
invalid conversion from 'char*' to 'uint16_t {aka short unsigned int}' [-fpermissive]


Как сделать, чтобы если на пине Д6 был высокий сигнал, в терминал шло сообщение "Кран открыт". И как убрать "конфликт библиотек".Скетч прилагаю, надеюсь на помощь.

#include <SPI.h>
#include <Ethernet.h>

#include <BlynkSimpleEthernet.h>
#include <Adafruit_Sensor.h>

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#include <DHT.h>


/*************************************************************
Download latest Blynk library here:
https://github.com/blynkkk/blynk-library/releases/latest

Blynk is a platform with iOS and Android apps to control
Arduino, Raspberry Pi and the likes over the Internet.
You can easily build graphic interfaces for all your
projects by simply dragging and dropping widgets.

Downloads, docs, tutorials: http://www.blynk.cc
Sketch generator: http://examples.blynk.cc
Blynk community: http://community.blynk.cc
Follow us: http://www.fb.com/blynkapp
http://twitter.com/blynk_app

Blynk library is licensed under MIT license
This example code is in public domain.

*************************************************************
This example runs directly on ESP8266 chip.

Note: This requires ESP8266 support package:
https://github.com/esp8266/Arduino

Please be sure to select the right ESP8266 module
in the Tools -> Board menu!

Change WiFi ssid, pass, and Blynk auth token to run :)
Feel free to apply it to any other example. It's simple!
*************************************************************/

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial



// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "SWLthDgNRtQgT8I0lcKSWoicWvArZAmK";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "RT-WiFi_70C0";// семь ноль С ноль
char pass[] = "08051985";
#define DHTPIN D9 // вход на ДНТ11
#define PIN_LED 13// пин на реле освещения
#define PIN_PHOTO_SENSOR A0// аналоговый выход с фоторезистора

// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21 // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}

// Attach virtual serial terminal to Virtual Pin V1
WidgetTerminal terminal(V1);

// You can send commands from Terminal to your hardware. Just use
// the same Virtual Pin as your Terminal Widget
BLYNK_WRITE(V1)
{

// if you type "Marco" into Terminal Widget - it will respond: "Polo:"
if (String("Marco") == param.asStr()) {
terminal.println("You said: 'Marco'") ;
terminal.println("I said: 'Polo'") ;
} else {

// Send it back
terminal.print("You said:");
terminal.write(param.getBuffer(), param.getLength());
terminal.println();
}

// Ensure everything is sent
terminal.flush();
}
void setup()
{
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);


dht.begin();
// Setup a function to be called every second
timer.setInterval(2000L, sendSensor);
pinMode(PIN_LED, OUTPUT);// выход на реле освещения

// This will print Blynk Software version to the Terminal Widget when
// your hardware gets connected to Blynk Server
terminal.println(F("Blynk v" BLYNK_VERSION ": Device started"));
terminal.println(F("-------------"));
terminal.println(F("Type 'Marco' and get a reply, or type"));
terminal.println(F("anything else and get it printed back."));
terminal.flush();
}

void loop()
{
Blynk.run();
timer.run();

int val = analogRead(PIN_PHOTO_SENSOR);
Serial.println(val);
delay(1000);
if (val < 900) {
digitalWrite(PIN_LED, HIGH);
} else {
digitalWrite(PIN_LED, LOW);
}
}
 

CodeNameHawk

Moderator
Команда форума
Последнее редактирование:
Да, я тоже думал что библиотека #include <Ethernet.h> , нужна для подключения по кабелю. Но фишка в том, что без этой библиотеки скетч не работает, есп не коннектится к вай фай, почему не знаю, но это точно.
 

CodeNameHawk

Moderator
Команда форума
Но фишка в том, что без этой библиотеки скетч не работает, есп не коннектится к вай фай, почему не знаю, но это точно.
Вам не кажется странным, что в примере блик они не используют библиотеку, без которой у вас не работает?

Что бы было понятно, что вы делаете, показывайте код, вывод в ардуиноиде и лог из сериал.
 
Да, ошибся, работает скетч без этой библиотеки. Код пытаюсь довести до ума, не совсем удачно. правда.

#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

#define BLYNK_PRINT Serial



// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "";// семь ноль С ноль
char pass[] = "";
#define DHTPIN D9 // вход на ДНТ11
#define PIN_LED 13// пин на реле освещения
#define PIN_PHOTO_SENSOR A0// аналоговый выход с фоторезистора
#define PIN_KRAN 12// пин крана
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21 // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}

// Attach virtual serial terminal to Virtual Pin V1
WidgetTerminal terminal(V1);

// You can send commands from Terminal to your hardware. Just use
// the same Virtual Pin as your Terminal Widget
BLYNK_WRITE(V1)
{

// if you type "Marco" into Terminal Widget - it will respond: "Polo:"
// if (String("Marco") == param.asStr()) {
// terminal.println("You said: 'Marco'") ;
// terminal.println("I said: 'Polo'") ;
// } else {

// Send it back
// terminal.print("You said:");
// terminal.write(param.getBuffer(), param.getLength());
// terminal.println();
int val1 = digitalRead(PIN_KRAN);
Serial.println(val1);
delay(1000);
if (PIN_KRAN,HIGH) {
terminal.println("KRAN VKLUCHEN");
} else {
terminal.println("KRAN VIKLUCHEN");
}

// Ensure everything is sent
terminal.flush();
}

void setup()
{
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);


dht.begin();
// Setup a function to be called every second
timer.setInterval(2000L, sendSensor);
pinMode(PIN_LED, OUTPUT);// выход на реле освещения

// This will print Blynk Software version to the Terminal Widget when
// your hardware gets connected to Blynk Server


}

void loop()
{
Blynk.run();
timer.run();

int val = analogRead(PIN_PHOTO_SENSOR);
Serial.println(val);
delay(1000);
if (val < 900) {
digitalWrite(PIN_LED, HIGH);
} else {
digitalWrite(PIN_LED, LOW);
}

}
 
Цель: добиться чтобы при изменении состояния PIN_KRAN терминал присылал сообщение кран открыт или закрыт.
 
Спасибо, я методом "научного тыка" дописал скетч, все работает, попозже выложу если кому-то будет нужно.
 
Сверху Снизу