Датчик температуры, влажности, давления, движения и освещенности на ESP-12F

Тема в разделе "Глядите, что я сделал", создана пользователем kmaximv, 17 янв 2016.

  1. ИгорьК

    ИгорьК Гуру

    Четыре разных запроса. Самый длительный ответ... о напряжении. Точнее порядок уже не помню.
     
  2. jia

    jia Нуб

    Я так понимаю, для начала задаю новую почередность и делаю первым всегда мощщу?
    PZEM_ENUM pzem_current_read = PZEM_POWER;

    Код (C++):

    #if defined(PZEM_ON)
      #include "PZEM004T.h"
      PZEM004T pzem(&Serial);
      IPAddress ip_pzem(192,168,1,1);
      float coil_ratio = 1.84; // Если используем разные катушки, подбираем коэффициент
      enum PZEM_ENUM {PZEM_POWER, PZEM_VOLTAGE, PZEM_POWER2, PZEM_CURRENT, PZEM_POWER3, PZEM_ENERGY};
      PZEM_ENUM pzem_current_read = PZEM_POWER;
      enum PZEM_RESET_ENUM {PZEM_STAGE1, PZEM_STAGE2, PZEM_STAGE3, PZEM_STAGE4};
      PZEM_RESET_ENUM pzem_reset_stage = PZEM_STAGE1;
    #endif
     
    Потом добавляю функции

    Код (C++):

    void GetPzemSerialRead() {

      char log[LOGSZ];
      unsigned long start_time = millis();
      addLog_P(LOG_LEVEL_DEBUG_MORE, "Func: GetPzemSerialRead Start");

      switch (pzem_current_read) {
        case PZEM_POWER:
          if (GetPzemData(pzem.power(ip_pzem), &pzemPowerString)) {
            snprintf_P(log, sizeof(log), PSTR("GetPzemSerialRead: Power: %s W"), pzemPowerString.c_str());
            addLog(LOG_LEVEL_INFO, log);
            pzem_current_read = PZEM_VOLTAGE;
          }
          break;
         case PZEM_VOLTAGE:
          if (GetPzemData(pzem.voltage(ip_pzem), &pzemVoltageString)) {
            snprintf_P(log, sizeof(log), PSTR("GetPzemSerialRead: Voltage: %s V"), pzemVoltageString.c_str());
            addLog(LOG_LEVEL_INFO, log);
            pzem_current_read = PZEM_POWER2;
          }
          break;
        case PZEM_POWER2:
          if (GetPzemData(pzem.power(ip_pzem), &pzemPowerString)) {
            snprintf_P(log, sizeof(log), PSTR("GetPzemSerialRead: Power: %s W"), pzemPowerString.c_str());
            addLog(LOG_LEVEL_INFO, log);
            pzem_current_read = PZEM_CURRENT;
          }
          break;
        case PZEM_CURRENT:
          if (GetPzemData(pzem.current(ip_pzem), &pzemCurrentString)) {
            snprintf_P(log, sizeof(log), PSTR("GetPzemSerialRead: Current: %s A"), pzemCurrentString.c_str());
            addLog(LOG_LEVEL_INFO, log);
            pzem_current_read = PZEM_POWER3;
          }
          break;
        case PZEM_POWER3:
          if (GetPzemData(pzem.power(ip_pzem), &pzemPowerString)) {
            snprintf_P(log, sizeof(log), PSTR("GetPzemSerialRead: Power: %s W"), pzemPowerString.c_str());
            addLog(LOG_LEVEL_INFO, log);
            pzem_current_read = PZEM_ENERGY;
          }
          break;

        case PZEM_ENERGY:
          if (GetPzemData(pzem.energy(ip_pzem), &pzemEnergyString)) {
            snprintf_P(log, sizeof(log), PSTR("GetPzemSerialRead: Energy: %s Wh"), pzemEnergyString.c_str());
            addLog(LOG_LEVEL_INFO, log);
          }
          pzem_current_read = PZEM_POWER;
          break;
        default:
          pzem_current_read = PZEM_POWER;
      }

      unsigned long load_time = millis() - start_time;
      snprintf_P(log, sizeof(log), PSTR("Func: GetPzemSerialRead load time: %d"), load_time);
      addLog(LOG_LEVEL_DEBUG_MORE, log);
    }
     
    Окинте оком плз, все так?
     
  3. kmaximv

    kmaximv Гик

    Да, так должно заработать.
     
    jia нравится это.
  4. jia

    jia Нуб

    По команде резет, вы подаете логическою еденицу с GPIO на лапу микрухи?
    Не будет проблем, если питаю модуль от 5В?
     
  5. kmaximv

    kmaximv Гик

    С GPIO ESP модуля сигнал идет на оптопару, а уже с оптопары на кнопку сброса PZEM.
     
    jia нравится это.
  6. jia

    jia Нуб

    На ОТДЕЛЬНУЮ оптопару?
    Я так понял, одна лапа на ноль, вторая на GPIO?
    С другой стороны по сути на лапы кнопки?
    Резисторов не нужно?
    [​IMG]
     
    Последнее редактирование: 18 апр 2017
  7. kmaximv

    kmaximv Гик

    Всё правильно. Резистор ставим на выход GPIO, у меня стоит на обратной стороне этой платы. Номинал сейчас не помню, посчитайте ток по даташиту используемой оптопары.
     
    РоманC и jia нравится это.
  8. Annakin

    Annakin Нуб

    только начал разбираться в коде.
    Автор тебе огромное спасибо за проект.
    Теперь вопрос:
    Я ESPшка отправляет данные по MQTT о том что есть движение OpenHab2 их принимает и обрабатывает, вот пример что я получаю на сервере OpenHab2^
    Код (Bash):
    /stateSub/MotionSensor_BedM ON
    Но либо тут косяк автора либо в коде не предусмотрено отправка данных о том что движение прекратилось.

    Где копать в коде что бы добавить данные о том что движения прекратились.
     
  9. kmaximv

    kmaximv Гик

    Вы используете старую версию, в последней прошивке он присылает 1 и 0
     
  10. Annakin

    Annakin Нуб

    Скачал с ГитХаба 12 версию и с ней работаю.
    Там по MQTT приходит только :
    Код (Bash):
    /stateSub/MotionSensor_BedM ON
     
    Может что-то нужно гдето включить или допилить ну или я не оттуда качаю проект.
     
  11. kmaximv

    kmaximv Гик

    Самую последнюю версию нужно собирать с исходников мастер ветки. esp_sensor.1.12.bin не содержит этих изменений.
     
  12. Annakin

    Annakin Нуб

    Спасибо за оперативный ответ.
    Я вообще брал отсюда:
    https://github.com/kmaximv/Wi-Fi-Sensor/archive/1.12.zip
    Но шас буду собирать из мастера.
     
  13. jia

    jia Нуб

    Спасибо автору, на днях PZEM поедет мониторить входящую мощщу в дом родителей в рамках проекта
    http://www.stroimdom.com.ua/forum/showthread.php?t=210260

    Переделал алгоритм, теперь нужная мне мощща отдается в 3 раза чаще

    Паралельно перешил Sonoff POW под прошивку Sonoff-Tasmota, будет ставится на бойлер и стиралку, для мониторинга потребления и балансного отключения бойлера и части отопления, когда нужна стиралка и отключения бойлера, когда КРИТИЧНО (переходные режимы) нужно отопление

    [​IMG]
     
  14. serenky

    serenky Нерд

    С русским языком разобрался. Может кому пригодится. Все дело компиляторе, т.е. IDE Arduino версии 1.8.1. После неоднократных компиляций, получаются кракозябры вместо русских букв. Если перезагрузить IDE, тот же код компилируется нормально.
     
  15. mdmarad

    mdmarad Нуб

    подскажите пожалуйста, есть что-то по свежее на ESP8266-07?а то не стартует хоть убей , завелась https://yadi.sk/d/d7s9OozB32L3qH эта , но староватая .
     
  16. woow

    woow Гик

    а я как то и не осилил пере прошить на Tasmota. Уже сбился с толку шаманить но максимальный результат- сериал монитор показывает мою сеть но не может зацепится и пень знает чего ему не хватает но userconfig ввёл все атрибуты моей сети. Может быть с начало что то не правильно начал...
    Извиняюсь автора ветки за офф топ ... наболело ;)
    [/QUOTE]
     
  17. Alal

    Alal Нуб

    Может кто подскажет - на какие пины какие датчики вешаються?
     
  18. Alal

    Alal Нуб

    Может кто подскажет плиз, не работает gy21. Температуру показывает правильно, а влажность отрицательная ( с датчиком и платой все гуд). Попытался последнюю библиотеку использовать - ошибки в компиляции twoware?
     
  19. woow

    woow Гик

    в основном датчики используются на шине 2IC (GPIO4 , GPIO5), датчик движения на -GPIO14.
     
  20. Bagunda

    Bagunda Нуб

    Как это установить на ESP?
    5 страниц прочитал.
    Нигде не написано