Датчик Co2 на базе ESP8266

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
mikhail
Сообщения: 15
Зарегистрирован: Вс июн 12, 2016 4:57 pm

Датчик Co2 на базе ESP8266

Сообщение mikhail »

Собрал устройство которое отправляет данные с датчика Co2 MH-Z19 на сервер majordomo

код позаимствовал https://geektimes.ru/post/272090/

в majordomo данные передает скрипту espdata http://majordomo.smartliving.ru/forum/v ... f=8&t=2830

питание от зарядки для сотового

Код в Arduino IDE
SPOILERSPOILER_SHOW

Код: Выделить всё

#include <SoftwareSerial.h>;
// пин встроенного светодиода   
#define LedPin 2 
// соединяем перемычкой gpio 16  и ресет
#define ResetPin 16

SoftwareSerial mySerial(13, 15); // gpio 13 - к TX сенсора, gpio 15 - к RX

byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; 
unsigned char response[9];


#include <ESP8266WiFi.h>
char ssid[] = "SSID";          //  your network SSID (name) 
char pass[] = "PASS";   // your network password
int status = WL_IDLE_STATUS;
WiFiClient  rclient;

byte ip[] = { 192, 168, 1, 55 }; // задается только для информации

// ip-адрес удалённого сервера
byte server[] = { 192, 168, 1, 100 }; //Адрес сервера MAJORDOMO 
char buf[80];
char ipbuff[16];

void sendHTTPRequest() {
  Serial.println(buf); 
  if (rclient.connect(server, 80)) { 
   rclient.print(buf);
   rclient.println(" HTTP/1.0");
   Serial.println("Send http get request");
   Serial.println(buf);
   rclient.print("Host: ");
   sprintf(ipbuff, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
   rclient.println(ipbuff); // ip адрес нашего контроллера в текстовом виде
   rclient.print("Content-Type: text/html\n");
   rclient.println("Connection: close\n");
   delay(2000);
   rclient.stop();
  } else {
   Serial.println("FAILED");     
  }
}


void setup() {
WiFi.mode(WIFI_STA) ; 
WiFi.begin(ssid, pass);
  
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(LedPin, OUTPUT);
  pinMode(ResetPin, OUTPUT);
  digitalWrite(LedPin, HIGH); //гасим светодиод (у него инвесное управление)
  digitalWrite(ResetPin, HIGH);
  
}

void loop() 
{
  mySerial.write(cmd, 9);
  memset(response, 0, 9);
  mySerial.readBytes(response, 9);
  int i;
  byte crc = 0;
  for (i = 1; i < 8; i++) crc+=response[i];
  crc = 255 - crc;
  crc++;

  if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
    Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
    digitalWrite(LedPin, LOW); // зажигаем светодиод при ошибке
    delay(200);
    digitalWrite(ResetPin, LOW); // ресетим ESP8266 если  ошибка ( если не ресетить то в режим нормального приема- передачи ESP8266 не переходило в течении суток)

  } else {
    unsigned int responseHigh = (unsigned int) response[2];
    unsigned int responseLow = (unsigned int) response[3];
    unsigned int ppm = (256*responseHigh) + responseLow;
    Serial.println(ppm);

   // при инициализации первое значение часто равно 5000
    if ( ppm != 5000 ) {
    sprintf(buf, "GET /objects/?script=espdata&idesp=MON-CO2&bmpp=%i",ppm); //данные передаются в переменную bmpp ( можно выбрать любую другую)
    sendHTTPRequest();
    }
  }
  delay(10000);
}
Фотки
SPOILERSPOILER_SHOW
IMG_20160612_172153_1.jpg
IMG_20160612_172153_1.jpg (446.8 КБ) 7702 просмотра
IMG_20160612_171928_2.jpg
IMG_20160612_171928_2.jpg (427.78 КБ) 7702 просмотра
IMG_20160612_172252_3.jpg
IMG_20160612_172252_3.jpg (377.16 КБ) 7702 просмотра
буду рад если кто нибудь улучшит устройство , например сделает автономным, чтобы можно было смотреть данные как на сервере majordomo, так и заходя на ESP8266, настроенного в качестве WEB сервера
ivannag
Сообщения: 146
Зарегистрирован: Вт апр 12, 2016 12:19 am

Re: Датчик Co2 на базе ESP8266

Сообщение ivannag »

mikhail писал(а): буду рад если кто нибудь улучшит устройство , например сделает автономным, чтобы можно было смотреть данные как на сервере majordomo, так и заходя на ESP8266, настроенного в качестве WEB сервера
MaksMS это уже сделал, его прошивка поддерживает данный датчик... (только платная версия правда) и еще много других... https://wifi-iot.com данные отсылаются на разные сервера , отображаются на дисплеях и доступны на страничке самого модуля.
mikhail
Сообщения: 15
Зарегистрирован: Вс июн 12, 2016 4:57 pm

Re: Датчик Co2 на базе ESP8266

Сообщение mikhail »

Ключевое слово "платная версия". Я же обращаюсь к альтруистам :) ( в этом смысле я уважаю Сергея за его MajorDomo ). В принципе ничего сложного, наработки есть на сайте http://esp8266-arduinoide.ru/ . Только надо время, а его сейчас нет :)
ivannag
Сообщения: 146
Зарегистрирован: Вт апр 12, 2016 12:19 am

Re: Датчик Co2 на базе ESP8266

Сообщение ivannag »

mikhail писал(а):Ключевое слово "платная версия". Я же обращаюсь к альтруистам :) ( в этом смысле я уважаю Сергея за его MajorDomo ). В принципе ничего сложного, наработки есть на сайте http://esp8266-arduinoide.ru/ . Только надо время, а его сейчас нет :)
Во многом согласен с Вами, но иногда при единичном использовании например, проще заплатить 100р (цена прошивки) за огромный функционал, чем тратить часы и дни на поиски и пробы... ничего не рекламирую, выбор всегда за Вами))
devoff
Сообщения: 181
Зарегистрирован: Пт апр 04, 2014 10:17 pm

Re: Датчик Co2 на базе ESP8266

Сообщение devoff »

ivannag - уже не раз писал, прошивка Макса крутая, пока тебе хватает его функционала, а вот когда нужен свой алгоритм, например при превышение параметра включить сирену, закрыть газ, написать смску, включить вытежку, через 15 минут проверить снова уровень газа, если не превышает то выключить вентиляцию. Это как пример, это все можно через МЖД сделать, но если вдруг что то с сервером, то все сломается.

У меня прошивка Макса в туалете свет включает и вытежку, стоит параметр включать свет на 60 секунд, он включает, но через 60 секунд вырубает, и есть там кто то в туалете или нет, это не важно, сидим потом руками машем что бы включить. В настройках нет возобновляемого таймера по движению, а надо то всего строчку поставить, есть сигнал с датчика, таймер на 0 и опять 60 секунд отматываем.

Поэтому не надо категорично, что Макс панацея, можно, но лучше изучить и попробовать сделать самому.
MaksMS82
Сообщения: 422
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Контактная информация:

Re: Датчик Co2 на базе ESP8266

Сообщение MaksMS82 »

devoff писал(а):ivannag - уже не раз писал, прошивка Макса крутая, пока тебе хватает его функционала, а вот когда нужен свой алгоритм, например при превышение параметра включить сирену, закрыть газ, написать смску, включить вытежку, через 15 минут проверить снова уровень газа, если не превышает то выключить вентиляцию. Это как пример, это все можно через МЖД сделать, но если вдруг что то с сервером, то все сломается.
.
На самом деле многое из этого прошивка умеет. Если что-то не умеет, то можно дописать в конструкторе кода. Документация имеется, по запросу подсказываю в чате переменные и функции, которые требуются для конкретной задачи.

Конечно сейчас с развитием Arduino IDE для ESP8266 стало проще писать свой код, но для меня ардуино - это просто прототирование - она менее стабильная чем чистый код на Си , код на ардуино тяжелее получается, но для простых задач пойдет.
devoff
Сообщения: 181
Зарегистрирован: Пт апр 04, 2014 10:17 pm

Re: Датчик Co2 на базе ESP8266

Сообщение devoff »

MaksMS82 - я удивляюсь вашей энергии, мало того что пишете код, стабильную прошивку, осуществляете поддержку, так еще форумы мониторите. :shock: :shock:

Со всем полностью согласен.
С конструктором прошивки не разобрался, уже было проще написать в знакомой среде ардуино, работает так же стабильно, но за такую возможность спасибо, попробую изучить.
Ответить