Часы на ESP-12(NodeMCU) + MAX7219 + WEB интерфейс

Тема в разделе "Глядите, что я сделал", создана пользователем IvanUA, 28 авг 2017.

?

Вы повторили это проект?

  1. Нет (просто ознакомился)

    14 голосов
    11,1%
  2. Да, один раз (попробовал)

    55 голосов
    43,7%
  3. Да, не однократно

    58 голосов
    46,0%
Можно выбрать сразу несколько вариантов.
  1. Юра 80

    Юра 80 Нерд

    Господа, а с перезагрузкой (пропаданием) сети WiFi-Clock никто, кроме меня не сталкивался? У меня реально проблемно первоначальную (wifi и ключ к нему) настройку провести
     
  2. Юра 80

    Юра 80 Нерд

    D_rain, не могли бы вы целиком часть измененную показать?
    от сюда
    // =======================================================================//
    // Беремо ПРОГНОЗ!!! погоди з сайту openweathermap.org //
    // =======================================================================//
    void getWeatherDataz() {
    и до сюда
    }
    //----------------------
    показать? Для темных?
    откуда \то - нашел
    void getWeatherDataz(){
    ....
    ESPclient.println(String("GET /data/2.5/forecast?id=")+...
    куда вставляется след часть - не понял.
     
  3. Юра 80

    Юра 80 Нерд

    так должно быть?
    // =======================================================================//
    // Беремо ПРОГНОЗ!!! погоди з сайту openweathermap.org //
    // =======================================================================//
    void getWeatherDataz() {
    if(!WIFI_connected) {
    updateForecasttomorrow++;
    if(updateForecast >= 360) weatherStringZ = "";
    return;
    }
    if(printCom) printTime();
    if(printCom) Serial.println("Getting weather forecast for tomorrow...");
    if(ESPclient.connect(weatherHost.c_str(), 80)) {
    ESPclient.println(String("GET /data/2.5/forecast?id=")+cityID + "&units=metric&appid=" + weatherKey + "&lang=" + weatherLang + "&cnt=2" + "\r\n" +
    "Host: " + weatherHost + "\r\nUser-Agent: ArduinoWiFi/1.1\r\n" +
    "Connection: close\r\n\r\n");
    } else {
    if(printCom) Serial.println(" No connection server (for tomorrow)!!!");
    updateForecasttomorrow++;
    if(updateForecast >= 360) weatherStringZ = "";
    return;
    }
    String line;
    int repeatCounter = 0;
    while(!ESPclient.available() && repeatCounter < 10) {
    delay(500);
    repeatCounter++;
    }
    while(ESPclient.connected() && ESPclient.available()) {
    char c = ESPclient.read();
    if(c == '[' || c == ']') c = ' ';
    line += c;
    }
    line = ESPclient.readString();
    ESPclient.stop();
    DynamicJsonBuffer jsonBuf;
    JsonObject& root = jsonBuf.parseObject(line);

    if(!root.success()){
    if(printCom) Serial.println(" Parse weather forecast for tomorrow - failed!!!");
    updateForecasttomorrow++;
    if(updateForecast >= 360) weatherStringZ = "";
    return;
    }

    JsonArray& list = root ["list"];
    JsonObject& now = list[0];
    JsonObject& forecast = list[1];
    float tempMin=forecast["main"]["temp_min"];
    float tempMax=forecast["main"]["temp_max"];
    float wSpeed=forecast["wind"]["speed"];
    int wDeg=forecast["wind"]["deg"];
    weatherDescription=forecast["weather"][0]["description"].asString();
    if(lang!=5) convertWeatherDes();
    String wDegString;
    if(wDeg >= 345 || wDeg <= 22) wDegString = "\211"; //"Північний";
    if(wDeg >= 23 && wDeg <= 68) wDegString = "\234"; //"Північно-східний";
    if(wDeg >= 69 && wDeg <= 114) wDegString = "\230"; //"Східний";
    if(wDeg >= 115 && wDeg <= 160) wDegString = "\235"; //"Південно-східний";
    if(wDeg >= 161 && wDeg <= 206) wDegString = "\210"; //"Південний";
    if(wDeg >= 207 && wDeg <= 252) wDegString = "\232"; //"Південно-західний";
    if(wDeg >= 253 && wDeg <= 298) wDegString = "\231"; //"Західний";
    if(wDeg >= 299 && wDeg <= 344) wDegString = "\233"; //"Північно-західний";
    weatherStringZ = tTom + ": \212" + String(tempMin, 1) + "...." + String(tempMax, 1) + "\202" + "C";
    weatherStringZ += " \214 " + wDegString + String(wSpeed, 1) + tSpeed + " " + weatherDescription + " ";
    if(printCom) Serial.println(" Getting weather forecast for tomorrow - is OK.");
    updateForecasttomorrow = 0;
    }
    //------------------------------------
     
  4. D_rain

    D_rain Нерд

     
    Юра 80 нравится это.
  5. Юра 80

    Юра 80 Нерд

    сейчас попробую, спасибо!
     
  6. Юра 80

    Юра 80 Нерд

    а с отваливанием вайфай никто не сталкивался?
    И еще один косяк - сейчас часы загрузились, написали адрес в моей сети - 192.168.100.19
    Потом сами перегрузились и написали 192.168.100.20
    Загадочно такое поведение :)
    Еще странно, что при перепрошивке мова возвращается на украинскую, датчики отключенные снова включаются, а код города не слетает

    Получилось с прогнозом!!!
    D_rain, все работает!

    Прогноз только чуть с толку сбивает.
    Сейчас в Минске +12 (это понятно, сентябрь, 10 число, 7 утра)
    Завтра в Минске +21-22 (это тоже понятно, завтра днем будет тепло.
    А где на сегодняшний день прогноз?
    Было бы логично видеть так: Сейчас в Минске +12, днем до 22, Завтра в Минске +21-22

    У меня что-то не отображается или этого никто не заметил?
     
    Последнее редактирование: 10 сен 2018
  7. D_rain

    D_rain Нерд

    ну и отлично :)
    ps а у Вас какая еспшка? у меня esp-01 все настройки терялись.
     
  8. Юра 80

    Юра 80 Нерд

    NodeMCU. 12 стало быть
     
  9. D_rain

    D_rain Нерд

    Тут Вы правы. А хуже того, не правильно работает мой способ получения прогноза. В моём варианте openweather выдает прогноз на каждые следующие 3 часа и так 40 раз. Короче, переделаю правильно, и Ваши пожелания добавлю.
     
    Юра 80 нравится это.
  10. kiv69

    kiv69 Нерд

    Всё, от этой прошивки я ушёл. Так как в прошивке voldemar2005 и шрифты меняются через веб, и DS3231 присутствует.
    Да и железо используется более разумно - вайфай включается для настройки кнопкой, а в работе отключен и кратковременно включается только для обновления времени. Плюс яркость настраивается по уровню сигнала с фоторезистора, а не в попугаях, как здесь.
    Из излишеств присутствует только 18B20, который я не ставил.
     
  11. D_rain

    D_rain Нерд

    Поправил прогноз погоды для тех у кого новые ключи.
    Теперь на завтра выводится три температуры на 9, 15 и 21 час, остальное в прогнозе выводится на 15 часов.
    Код (C++):
    void getWeatherDataz() {
      if(!WIFI_connected) {
        updateForecasttomorrow++;
        if(updateForecast >= 360) weatherStringZ = "";
        return;
      }
      if(printCom) printTime();
      if(printCom) Serial.println("Getting weather forecast for tomorrow...");
      if(ESPclient.connect(weatherHost.c_str(), 80)) {
        ESPclient.println(String("GET /data/2.5/forecast?id=") + cityID + "&units=metric&appid=" + weatherKey + "&lang=" + weatherLang + "&cnt=18" + "\r\n" +
                    "Host: " + weatherHost + "\r\nUser-Agent: WiFiClock/1.1\r\n" +
                    "Connection: close\r\n\r\n");
      } else {
        if(printCom) Serial.println("          No connection server (for tomorrow)!!!");
        updateForecasttomorrow++;
        if(updateForecast >= 360) weatherStringZ = "";
        return;
      }
      int  repeatCounter = 0;
      while(!ESPclient.available() && repeatCounter < 10) {
        delay(500);
        repeatCounter++;
      }
      String line = ESPclient.readString();
      Serial.println(line);

      ESPclient.stop();
      DynamicJsonBuffer jsonBuf;
      JsonObject& root = jsonBuf.parseObject(line.c_str());
      JsonArray& list = root ["list"];

      if(!root.success()){
        if(printCom) Serial.println("          Parse weather forecast for tomorrow - failed!!!");
        updateForecasttomorrow++;
        if(updateForecast >= 360) weatherStringZ = "";
        return;
      }

      JsonObject& now = list[0];

      byte current_shift = hour % 3;
      if (current_shift != 0) {
       current_shift = 1;
      };
      byte shift_morning = 4 + (24 - hour) / 3 + current_shift - 1;
      byte shift_day = 6 + (24 - hour) / 3 + current_shift - 1;
      byte shift_evening = 8 + (24 - hour) / 3 + current_shift - 1;

      JsonObject& forecast_next_morning = list[shift_morning];
      JsonObject& forecast_next_day = list[shift_day];
      JsonObject& forecast_next_evening = list[shift_evening];

      float tempMorning=forecast_next_morning["main"]["temp"];
      float tempDay=forecast_next_day["main"]["temp"];
      float tempEvening=forecast_next_evening["main"]["temp"];
      float wSpeed=forecast_next_day["wind"]["speed"];
      int wDeg=forecast_next_day["wind"]["deg"];
      weatherDescription =  forecast_next_day["weather"][0]["description"].asString();
      weatherDescription.toLowerCase();
      if(lang!=5) convertWeatherDes();
      String wDegString;
      if(wDeg >= 345 || wDeg <= 22)  wDegString = "\211";    //"Північний";
      if(wDeg >= 23  && wDeg <= 68)  wDegString = "\234";    //"Північно-східний";
      if(wDeg >= 69  && wDeg <= 114) wDegString = "\230";    //"Східний";
      if(wDeg >= 115 && wDeg <= 160) wDegString = "\235";    //"Південно-східний";
      if(wDeg >= 161 && wDeg <= 206) wDegString = "\210";    //"Південний";
      if(wDeg >= 207 && wDeg <= 252) wDegString = "\232";    //"Південно-західний";
      if(wDeg >= 253 && wDeg <= 298) wDegString = "\231";    //"Західний";
      if(wDeg >= 299 && wDeg <= 344) wDegString = "\233";    //"Північно-західний";
      weatherStringZ = tTom + ":   \212" + String(tempMorning, 1) + ".." + String(tempDay, 1) + ".." + String(tempEvening, 1) + "\202" + "C";
      weatherStringZ += "     \214 " + wDegString + String(wSpeed, 1) + tSpeed + "     " + weatherDescription + "             ";
      if(printCom) Serial.println("          Getting weather forecast for tomorrow - is OK.");
      updateForecasttomorrow = 0;
    }
     
    Последнее редактирование: 11 сен 2018
    Valerchik, Estet, Юра 80 и 2 другим нравится это.
  12. RealArty

    RealArty Нерд

    У меня каждый день отваливался вай фай, решил просто - поставил прошивку от 05.2018 и вот счастье ни чего не отваливается и при перегрузки роутера все само восстанавливается
     
  13. ПетрЧ

    ПетрЧ Нерд

    Это какая прошивка voldemar2005 ?
    если та что я видел.. то это мрак
     
  14. buba911

    buba911 Гик

  15. ПетрЧ

    ПетрЧ Нерд

    Вот бы Иван запилил контроллер управления вентилятором в ванной... а то что я собирал с http://samopal.pro/esp8266-hcontroller2/ работает коряво.
     
  16. Paly4

    Paly4 Нерд

    а активный бузер с каким напряжением нужен ? 3,3 в или подойдет и 5 вольтовый ?
     
  17. chipmoca

    chipmoca Гик

    Проще проверить самому. Подать 3.3V на безер, соблюдая полярность, скорее всего заработает.
     
  18. Paly4

    Paly4 Нерд

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

    chipmoca Гик

    Ни разу не видел на бузерах маркировки напряжения. Вот лежит под рукой , тоже без маркировки с материнки. Проверил - начинает пищать от 0.7V. Чем меньше напряжение - тише пищит. 3.3 и 5 разница по громкости не большая на слух.
     
    Юра 80 нравится это.
  20. Paly4

    Paly4 Нерд