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

ESP12e +ds18b20 + датчик влажности (емкостной )

makcumym

New member
Доброго времени суток ! Собираю потихоньку систему автополива для растений .Решил сделать на базе esp12e датчик влажности + температуры .Предполагается использовать следующие компоненты :
ESP8266 12Е https://aliexpress.ru/item/4000281170342.html
Датчик температуры https://aliexpress.ru/item/32380378618.html
Датчик влажности емкостной https://aliexpress.ru/item/1005001350110950.html
Схема устройства ниже :

esp12e+ds18b20.JPG

Возник вопрос использование прошивки . Есть ли готовая прошивка (поиском пользовался ) с функционалом отсылки показаний датчиков на сервер mqtt (локальный home assiant) +вебмордой ?
Может кто делал нечто подобное и есть пример кода .
 

CodeNameHawk

Moderator
Команда форума
Дорожки под антенной не кошерно, уменьшается дальность связи.
Там даже полезно текстолит убрать.
 

nikolz

Well-known member
какой смысл в этой плате?
датчики будете ставить в землю. ESP12 уже имеет контакты для подключения проводов.
В итоге у вас плата на плате и провода к датчикам и блоку питания.
Я делают без подобной прокладки
ESP12+датчики+блок питания(батарейка)+плоский цветной кабель.
И нет проблем и собирается за 15 минут и ничего лишнего.
 

edw

New member
Ничего не понял о каком емкостном датчике идет речь, кроме того что он возможно цепляется к ADC.
 

makcumym

New member
какой смысл в этой плате?
датчики будете ставить в землю. ESP12 уже имеет контакты для подключения проводов.
В итоге у вас плата на плате и провода к датчикам и блоку питания.
Я делают без подобной прокладки
ESP12+датчики+блок питания(батарейка)+плоский цветной кабель.
И нет проблем и собирается за 15 минут и ничего лишнего.
У меня так сделано в общей системе .ESP (nodemcu+ relay4шт +2 датчика )
Да я делаю с расчетом датчик можно поменять .Питание думаю сделать о лития + повышайка (пока в теории ) .

Датчик ds18b20 уже имеется ,я для примера вставил ссылки чтоб показать какие компоненты .

И распиновку ds18b20 на плате сделайте соответствующую
А в чем она неправильная ? Через резистор 4.7к подключенный к 3.3в идет на GPIO5

Дорожки под антенной не кошерно, уменьшается дальность связи.
Там даже полезно текстолит убрать.
Хм об этом не подумал .Сейчас переделаю перемещу.
Ничего не понял о каком емкостном датчике идет речь, кроме того что он возможно цепляется к ADC.
Картинка ниже : Как правильно выше заметили esp12e будет цепляться к плате и отсылать показания влажности почвы и текущую температуру

-.jpg
 

CodeNameHawk

Moderator
Команда форума
Собрал похожую систему, правда без полива.
Только у меня датчик влажности и датчики температуры(уличный и комнатный) подключены к атмега16, к которому подключен индикатор 16*2 и часы DS3231.

Работает так: раз в минуту, по сигналу от DS3231, запускается атмега16, считывает значение с датчика влажности, с датчиков температуры, время с DS3231 и отображает на индикаторе и уходит в сон.
Раз в десять минут атмега16 будит есп и посылает ей данные датчиков и значение времени.
есп по быстрому сбрасывает это все в базу данных на сервере в интернете и уходит в сон.

Питается это все от аккума 18650, стоит повышающий преобразователь МТ3608
https://aliexpress.ru/item/32279772484.html?spm=a2g0v.12010612.8148356.17.5b2e7e043ZZovp (на холостом ходу потребляет 150 mka)
до 5в (для питания атмега16) и понижающий до 3.3в на XC6206P332MR 3,3 В.
https://aliexpress.ru/item/32825125321.html

rys.png
 

makcumym

New member
Собрал похожую систему, правда без полива.
Только у меня датчик влажности и датчики температуры(уличный и комнатный) подключены к атмега16, к которому подключен индикатор 16*2 и часы DS3231.

Работает так: раз в минуту, по сигналу от DS3231, запускается атмега16, считывает значение с датчика влажности, с датчиков температуры, время с DS3231 и отображает на индикаторе и уходит в сон.
Раз в десять минут атмега16 будит есп и посылает ей данные датчиков и значение времени.
есп по быстрому сбрасывает это все в базу данных на сервере в интернете и уходит в сон.

Питается это все от аккума 18650, стоит повышающий преобразователь МТ3608
https://aliexpress.ru/item/32279772484.html?spm=a2g0v.12010612.8148356.17.5b2e7e043ZZovp (на холостом ходу потребляет 150 mka)
до 5в (для питания атмега16) и понижающий до 3.3в на XC6206P332MR 3,3 В.
https://aliexpress.ru/item/32825125321.html

Посмотреть вложение 9983
MT3608 тоже имеется ,но он что-то громоздкий получается ...в этой системе .Но пока идти с Китая что-то более мелкое буду с ним работать. По прошивке что-то никто не подсказал в какую строну лучше посмотреть ?

Общую систему думаю делать по схеме представленной ниже .Но пока с Китая идет MCP23017 ,использую pcf8574 для реле и сделано все на макетке .

Schematic_poliv_nodemcu_2020-10-18_13-55-25.png
 

CodeNameHawk

Moderator
Команда форума
MT3608 тоже имеется ,но он что-то громоздкий получается ...в этой системе .Но пока идти с Китая что-то более мелкое буду с ним работать. По прошивке что-то никто не подсказал в какую строну лучше посмотреть ?
У вас напрашивается блок питания, одно реле потребляет 70ма, есп с WiFi 70ма, или 10ма без WiFi.
У меня прошивки свои, на этом сайте найдете примеры для работы с MQTT
 

edw

New member
В качестве механизма полива что используете, мини погружной моторчик со шлангом?
Собирал себе что-то подобное, но без датчика влажности, запускается по MQTT команде на заранее прописанное количество секунд.
 

makcumym

New member
У вас напрашивается блок питания, одно реле потребляет 70ма, есп с WiFi 70ма, или 10ма без WiFi.
У меня прошивки свои, на этом сайте найдете примеры для работы с MQTT
Для схемы приведенной выше ,думаю поставить бп 5В 1А . Гляну ваши сообщения возможно упустил .На данный момент использую прошивку от wifi-iot ,а автономные розетки крутятся на espurna .

В качестве механизма полива что используете, мини погружной моторчик со шлангом?
Собирал себе что-то подобное, но без датчика влажности, запускается по MQTT команде на заранее прописанное количество секунд.
Да именно так погружной насос на каждую линию (всего 3 линии ) .Также и со светом .Буду благодарен если покажите пример кода .

p.s датчик влажности предполагаю использовать вне системы и автономно .Чтоб была возможность переставить его на другой цветок .
 

svs2007m

Active member
Как вариант автомобильный насос для омывателя стекол (отличное давление на 10-15м одной трубкой ). На тройники у растения поставить ограничитель потока как у капельницы (для каждого растения свое кол-во воды или физ.раствора или подвесной вариант для слива излишней жидкости для повторного полива) Полив лучше разбить на несколько мини циклов что-бы не получилось болото.
Блок питания адекватный ! :)
 

nikolz

Well-known member
Как вариант автомобильный насос для омывателя стекол (отличное давление на 10-15м одной трубкой ). На тройники у растения поставить ограничитель потока как у капельницы (для каждого растения свое кол-во воды или физ.раствора или подвесной вариант для слива излишней жидкости для повторного полива) Полив лучше разбить на несколько мини циклов что-бы не получилось болото.
Блок питания адекватный ! :)
еще интересно посчитать затраты электроэнергии на выращивание такого цветка.
можно стоит от солнышка все питать?
 

makcumym

New member
Как вариант автомобильный насос для омывателя стекол (отличное давление на 10-15м одной трубкой ). На тройники у растения поставить ограничитель потока как у капельницы (для каждого растения свое кол-во воды или физ.раствора или подвесной вариант для слива излишней жидкости для повторного полива) Полив лучше разбить на несколько мини циклов что-бы не получилось болото.
Блок питания адекватный ! :)
Тоже изначально хотел такой вариант ,но держать такой насос на окне избыточно .Для 3х цветков хватает погружного насоса .
 

nikolz

Well-known member
Номинальное напряжение: DC3V или 4,5 V (3-6V может работать)
Номинальный ток без нагрузки: менее 0,05a
Объем выгруженного плюша: 100 л/ч
Подъем: 3V спецификация подъема 0,35 m,
5 В Спецификация подъема 0,55 м
Номинальный ток при нагрузке: 0.18A
Использование жидкостей: водопроводная вода, грунтовые воды, морская вода,
Температура воды: - 20 C ~ 50 C
Влажность окружающей среды: 45%-90%
 

makcumym

New member
Народ подскажите по коду .Необходимо отправлять на mqtt два топика вида :
plant01/temp (значение температуры )
plant01/hum (значение влажности )
Ниже мой корявый код собранный из всего .

C++:
#include "ESP8266WiFi.h"
#include "PubSubClient.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define SensorPin A0   // контакт для датчика влажности
#define ONE_WIRE_BUS 0 // Пин подключения OneWire шины, 0 (D3)
#define MIN 300 // значение полного полива
#define MAX 700 // значение критической сухости
float tempC = 0;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
// WiFi
const char* ssid = "wifi_ssid";
const char* wifi_password = "wifi_password";
// MQTT
const char* mqtt_server = "192.168.0.100";
const char* plant_temp = "plant01/temp";
const char* plant_hum = "plant01/hum";
const char* mqtt_username = "user";
const char* mqtt_password = "user";
const char* clientID = "client_ESP8266_2";


// Initialise the WiFi and MQTT Client objects
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient); // 1883 is the listener port for the Broker
void connect_MQTT(){
  Serial.print("Connecting to ");
  Serial.println(ssid);
  // Connect to the WiFi
  WiFi.begin(ssid, wifi_password);

  // Wait until the connection has been confirmed before continuing
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // Debugging - Output the IP Address of the ESP8266
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // Connect to MQTT Broker
  // client.connect returns a boolean value to let us know if the connection was successful.
  // If the connection is failing, make sure you are using the correct MQTT Username and Password (Setup Earlier in the Instructable)
  if (client.connect(clientID, mqtt_username, mqtt_password)) {
    Serial.println("Connected to MQTT Broker!");
  }
  else {
    Serial.println("Connection to MQTT Broker failed...");
  }
}


void setup() {
  Serial.begin(9600);

  DS18B20.begin();

  connect_MQTT();
  Serial.setTimeout(2000);
  DS18B20.requestTemperatures();
  tempC = DS18B20.getTempCByIndex(0);  // Замеры температур с DS18B20
  delay(50);// Необязательная задержка
  float sensorValue = analogRead(SensorPin);
  // масштабируем значение в проценты
  //int wil = map(sensorValue,MIN,MAX, 100, 20);

  Serial.println(sensorValue);
  Serial.println(tempC);
 

  // PUBLISH to the MQTT Broker
  if (client.publish(plant_hum, String(sensorValue).c_str()),(plant_temp , tempC))
       {
    Serial.println("Moisture sent!");
    Serial.println(sensorValue);
    Serial.println(tempC);
   
  }
  // Again, client.publish will return a boolean value depending on whether it succeded or not.
  // If the message failed to send, we will try again, as the connection may have broken.
  else {
    Serial.println("Moisture failed to send. Reconnecting to MQTT Broker and trying again");
    client.connect(clientID, mqtt_username, mqtt_password);
    delay(10); // This delay ensures that client.publish doesn't clash with the client.connect call
    client.publish(plant_hum, String(sensorValue).c_str()),(plant_temp , tempC);
  }

  delay(1000);
  ESP.deepSleep(0.2*60e6);
}

void loop() {
}
 
Сверху Снизу