Полоумный дом продолжение

В одном из старых своих постов я собрал метеостанцию для своей комнаты. Она состояла из датчика температуры и влажности и датчика CO2. Но как показала практика модуль датчика был на редкость глючным, поэтому я дождался новый и стал перебирать свою метеостанцию.

Начал с того, что поменял понижающий dc-dc преобразователь на послабее, и разъем питания вывел на заднюю сторону.

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

Так как от старого датчика температуры осталась огромная дыра сзади корпуса то решил через неё провести провода для нового модуля, а сам модуль закрепить сзади на винты.

Вид сзади целиком.

Как известно количество CO2 в воздухе измеряется в количестве частиц на миллион. Если количество до 1000 – все норм, с 1000 до 1500 появляется усталость, с 1500 – 2000 – головные боли и т.д., а дальше вообще все плохо. Было решено установить двухцветный светодиод, который горит зеленым при ppm CO2 меньше 1500 и красным если больше.

Сам диод взял из набора модулей для ардуино.

Уже с токоограничивающим резистором. После я спаял все проводами. Если вдруг кто будет повторять, что вряд ли, то соединил так.

D1 от NodeMCU к SCL дисплея и датчика cjmcu-811.

D2 к SDA этих же устройств.

D3 – данные с DHT11.

D4 – программируемый минус к wake cjmcu-811. Чтобы он работал на этом контакте должен быть минус. Но легенды гласят что если там будет постоянный минус, то датчик будет чахнуть и хиреть и его надобно перезагружать. Поэтому в программе создан счетчик, считающий итерации программы, если итерация стала больше 1000, то счетчик сбрасывается в 0, а на wake cjmcu подается логическая единица (3,3 вольта) на полсекунды, а потом снова ноль.

D5 и D6 – плюсы для красного и зеленого режима светодиода.

DHT11 и CJMCU-811 запитаны от 3.3 вольта с самой NODEMCU, а дисплей запитан от 5 вольт преобразователя, которыми же питается и сама NODEMCU.

Сам скетч.

#include <ESP8266WiFi.h>

#include <DHT.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <Adafruit_CCS811.h>

#define DHTPIN 0

#define respin 2

#define ledred 14

#define greenled 12

 

 

const char* ssid = "имя вашей сети";

const char* password = "пароль вашей сети";

 

DHT dht(DHTPIN, DHT11);

WiFiServer server(80);

 

 

 

String header;

float t = 0.0;

int h = 0;

int CO2;

int TVOC;

 

 

int count = 0; //счетчик

Adafruit_CCS811 ccs;

LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей

 

void resetccs() {

  digitalWrite (respin, HIGH);

  delay(500);

  digitalWrite (respin, HIGH);

  digitalWrite (respin, LOW);

  }

 

void setup() {

  pinMode (respin, OUTPUT);

  digitalWrite (respin, LOW);

  pinMode (ledred, OUTPUT);

  pinMode (greenled, OUTPUT);

    dht.begin();

    if(!ccs.begin()){

  

    while(1);

  }

 

  // Wait for the sensor to be ready

  while(!ccs.available());

     lcd.init();                  

  lcd.backlight();// Включаем подсветку дисплея

  // preparing GPIOs

 

 

 

 

 

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

   

  }

 

  server.begin();

 

  delay(1000);

 

  count = 10;

}

 

 

// runs over and over again

 

void loop() {

  t = dht.readTemperature();

  h = dht.readHumidity();

  // Listenning for new clients

 

 if (ccs.available()) {

    if(!ccs.readData()) {

      CO2 = ccs.geteCO2();

      TVOC = ccs.getTVOC();

    }

   

  }

 

 

//шапка экрана

  lcd.setCursor(0, 0);

  lcd.print("TempC");

  lcd.setCursor(7, 0);

  lcd.print("Vlaga");

  lcd.setCursor(13, 0);

  lcd.print("CO2");

//значения

lcd.setCursor(0, 1);

  lcd.print(t);

  lcd.setCursor(7, 1);

  lcd.print(h);

  lcd.setCursor(9, 1);

  lcd.print("%");

  lcd.setCursor(12, 1);

  lcd.print(CO2);

 

 

  WiFiClient client = server.available();

  if (client) {

   

    // boolean to locate when the http request ends

    boolean blank_line = true;

    while (client.connected()) {

      if (client.available()) {

        char c = client.read();

        header += c;

        if (c == '\n' && blank_line) {

          // checking if header is valid

          // dXNlcjpwYXNz = 'user:pass' (user:pass) base64 encode

         

         

            //successful login

            client.println("HTTP/1.1 200 OK");

            client.println("Content-Type: text/html");

            client.println("Connection: close");

            client.println();

            // turns the GPIOs on and off

           

                Serial.println("Main Web Page");

            

         

            // your web page

            client.println("<!DOCTYPE HTML>");

            client.println("<html>");

            client.println("<head>");

            client.println("<meta charset='utf-8'>");

            client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");

            client.println("<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css\">");                                                                   

            client.println("</head><div class=\"container\">");

            client.println("<h1>Важней всего погода в доме</h1>");

             client.println("<p>Температура воздуха <span id='t'>");

             client.println(t);

             client.println("&deg;С</span></p><p>Влажность воздуха <span id='v'>");

             client.println(h);

             client.println("%</span></p>");

             client.println("<p>Количество СО2 <span id='co2'>");

             client.println(CO2);

             client.println("</span>ppm</p>");

             client.println("<p>Количество летучих органических веществ <span id='tvoc'>");

             client.println(TVOC);

             client.println("</span></p>");

             client.println("</div></body></html>");

              

          

        header = "";

        break;

        }

        if (c == '\n') {

          // when starts reading a new line

          blank_line = true;

        }

        else if (c != '\r') {

          // when finds a character on the current line

          blank_line = false;

        }

      }

    } 

    // closing the client connection

    delay(1);

    client.stop();

   

  }

  if (CO2 >= 1500) {

    digitalWrite (ledred, HIGH);

    digitalWrite (greenled, LOW);

    } else if (CO2 < 1500) {

      digitalWrite (ledred, LOW);

    digitalWrite (greenled, HIGH);

      }

  count++;

  if (count >= 1000) {

    resetccs();

    count = 0;

    }

}

В скетче из нововведений на сайте платы показываются значения CO2, а также летучих органических соединений (tvoc). Для последних не нашлось места на дисплее и они будут только на сайте. Загружаем, проверяем…

Все работает. Приступаем к кабельменеджменту, для этого я использую термосопли.

А потом склеиваем все скотчем скручиваем все винтами и вуаля!

Для вишенки на торте я переписал файлик на сервере в котором парсятся эти значения и показываются в колонке справа на компьютерной версии моего сайта. Там все то же самое что и было в прошлой версии метеостанции делается все так же. Из минусов хочу отметить глюк с которым не смог справится. Если ppm выходит за тысячу, а потом спускается обратно, но на дисплее в конец числа добавляется некая цифра. Например на дисплее CO2 стоит 7427, а на сатйе 742, и диод горит зеленым, что свидетельствует о том что значение всё же ниже 1500. А на этом всё, все добра здоровья!

 

Вы не можете комментировать записи, для этого вам необходимо войти или зарегистрироваться
Последняя публикация
BST дерево опубликовано во вторник 31 августа 2021 года в 20:50
Последний комментарий

mcfirsachy написал к публикации QUAD405 из поднебесной cледующее:

Кто дочитал до конца - извините за огромное количество ошибок =)))) Хотелось бы добавить что на выпрямителе стоит защита акустики - подключение колонок с задержкой.
Самая просматриваемая публикация
сервер на малине просмотров: 1274
Самая комментируемая публикация
К публикации сервер на малине было написано 8 комментариев.
Погода за бортом

Сейчас в Сосновом Бору облачно с прояснениями

Скорость ветра 8.44 м/с

Влажность 81 %

Температура 12.32 °C


Система полуумного дома

Получение температуры...

Получение влажности...