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

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

Модератор: immortal

Ответить
mikhail
Сообщения: 15
Зарегистрирован: Вс июн 12, 2016 4:57 pm
Благодарил (а): 3 раза
Поблагодарили: 8 раз

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

Сообщение mikhail » Вс июн 12, 2016 5:48 pm

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

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

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

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

Код в Arduino IDE
СпойлерПоказать

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

#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);
}
Фотки
СпойлерПоказать
IMG_20160612_172153_1.jpg
IMG_20160612_172153_1.jpg (446.8 КБ) 7475 просмотров
IMG_20160612_171928_2.jpg
IMG_20160612_171928_2.jpg (427.78 КБ) 7475 просмотров
IMG_20160612_172252_3.jpg
IMG_20160612_172252_3.jpg (377.16 КБ) 7475 просмотров
буду рад если кто нибудь улучшит устройство , например сделает автономным, чтобы можно было смотреть данные как на сервере majordomo, так и заходя на ESP8266, настроенного в качестве WEB сервера
ivannag
Сообщения: 146
Зарегистрирован: Вт апр 12, 2016 12:19 am
Благодарил (а): 18 раз
Поблагодарили: 27 раз

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

Сообщение ivannag » Вс июн 12, 2016 6:40 pm

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

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

Сообщение mikhail » Вс июн 12, 2016 9:21 pm

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

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

Сообщение ivannag » Пн июн 13, 2016 3:52 pm

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

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

Сообщение devoff » Ср июн 15, 2016 8:49 am

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

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

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

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

Сообщение MaksMS82 » Ср июн 15, 2016 9:18 am

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

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

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

Сообщение devoff » Ср июн 15, 2016 11:32 am

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

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