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

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

?

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

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

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

    57 голосов
    44,2%
  3. Да, не однократно

    60 голосов
    46,5%
Можно выбрать сразу несколько вариантов.
  1. IvanUA

    IvanUA Гуру

    В первый топик добавил ссылки на скетчи версий 4 и 5.
     
  2. avmt31

    avmt31 Нуб

    Часы классные, большое спасибо IvanUA за его проект. Есть 2 вопроса:
    1 Не могу вывести прогноз на завтра
    2 Можно ли сделать автоматом переход на зимнее/летнее время.
    Заранее благодарен за ответ
     
  3. IvanUA

    IvanUA Гуру

    1. Вы второй человек с такой проблемой - попробуйте в скетче заменить блоки сбора погоды на следующий блок и что вам после этого модуль пишет в СОМ порт?
    Код (C++):
    //==========БЕРЕМО ПОГОДУ З САЙТУ api.openweathermap.org================================
    void getWeatherData(){                                                                  //
      if(!WIFI_connected) return;                                                           //
      if(printCom) Serial.print("connecting to prognoz na segodnya");                       //
    //  if(printCom) Serial.println(weatherHost);                                             //
      if(ESPclient.connect(weatherHost.c_str(), 80)){                                       //
        ESPclient.println(String("GET /data/2.5/weather?id=")+cityID+"&units=metric&appid="+weatherKey+"&lang="+weatherLang+"\r\n"+
                    "Host: "+weatherHost+"\r\nUser-Agent: ArduinoWiFi/1.1\r\n"+
                    "Connection: close\r\n\r\n");                                           //
      } else{                                                                               //
        if(printCom) Serial.println("connection failed prognoz na segodnya");                                   //
        return;                                                                             //
      }                                                                                     //
      //Якщо було підключення та запрос було відправлено, перевіряємо чи маємо відповідь (чекаємо 0,5с * 10 разів)
      int repeatCounter = 0;                                                                //
      while(!ESPclient.available() && repeatCounter < 10) {                                 //
        delay(500);                                                                         //
        if(printCom) Serial.println("w.");                                                  //
        repeatCounter++;                                                                    //
      }                                                                                     //
      //Якщо було підключення то була получена відповідь, то в змінну line записуємо отримані символи окрім ( [ та ] )
      String line;                                                                          //
      while(ESPclient.connected() && ESPclient.available()){                                //
        char c=ESPclient.read();                                                            //
        if(c=='[' || c==']') c=' ';                                                         //
        line+=c;                                                                            //
      }                                                                                     //
      //---------------Зупеняемо роботу WiFi клієнта----------------------------------------
      ESPclient.stop();                                                                     //
      if(printCom) Serial.println(line);                                                    //
      //---------------Зтворюємо json буфер, та парсимо в ньго дані зі змінної line---------
      DynamicJsonBuffer jsonBuf;                                                            //
      JsonObject &root=jsonBuf.parseObject(line);                                           //
      if(!root.success()){                                                                  //
        if(printCom) Serial.println("parseObject() failed");                                //
        return;                                                                             //
      }                                                                                     //
      weatherDescription = root["weather"]["description"].as<String>();                     //
      weatherDescription.toLowerCase(); convertWeatherDes();                                //
      cityName = root ["name"] .as<String>();                                               //
      cityId = root ["id"]; convertCity();                                                  //
      temp = root["main"]["temp"];                                                          //
      humidity = root["main"]["humidity"];                                                  //
      pressure = root["main"]["pressure"];                                                  //
      pressure = (pressure/1.3332239) - 24;                                                 //
      windDeg = root["wind"]["deg"];                                                        //
      windSpeed = root["wind"]["speed"];                                                    //
      clouds = root["clouds"]["all"];                                                       //
      String windDegString;                                                                 //
      if(windDeg>=345 || windDeg<=22)  windDegString="\211";                                //"Північний";          
      if(windDeg>=23 && windDeg<=68)   windDegString="\234";                                //"Північно-східний";
      if(windDeg>=69 && windDeg<=114)  windDegString="\230";                                //"Східний";
      if(windDeg>=115 && windDeg<=160) windDegString="\235";                                //"Південно-східний";
      if(windDeg>=161 && windDeg<=206) windDegString="\210";                                //"Південний";
      if(windDeg>=207 && windDeg<=252) windDegString="\232";                                //"Південно-західний";
      if(windDeg>=253 && windDeg<=298) windDegString="\231";                                //"Західний";
      if(windDeg>=299 && windDeg<=344) windDegString="\233";                                //"Північно-західний";
      weatherString="         "+cityName+", зараз:    \212 "+String(temp,0)+("\202")+"C   ";  //
      weatherString+="  \213 "+String(humidity)+"%   ";                                     //
      weatherString+="  \215 "+String(pressure, 0)+"ммРс   ";                               //
      weatherString+="  \214 "+windDegString+" "+String(windSpeed,1)+"м/с   ";              //
      weatherString+="  \216 "+String(clouds)+"%   ";                                       //
      weatherString+=weatherDescription+"        ";                                         //
      if(printCom) Serial.println("prognoz na segodnya - OK");                                   //
    }                                                                                       //
     
     
  4. IvanUA

    IvanUA Гуру

    Весь текст не влез в одно сообщение, по этому продолжение кода:
    Код (C++):
    //==========Беремо ПРОГНОЗ!!! погоди з сайту openweathermap.org=========================
    void getWeatherDataz(){                                                                 //
      if(!WIFI_connected) return;                                                           //
      if(printCom) Serial.print("connecting to prognoz na zavtra");                       //
      if(ESPclient.connect(weatherHost.c_str(), 80)){                                       //
        ESPclient.println(String("GET /data/2.5/forecast/daily?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("connection failed niet prognoza na zavtra");                      //
        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;                                                                            //
      }                                                                                     //
      tvoday(line);                                                                         //
      ESPclient.stop();                                                                     //
      DynamicJsonBuffer jsonBuf;                                                            //
      JsonObject &root = jsonBuf.parseObject(tempz);                                        //
      if(!root.success()){                                                                  //
        if(printCom) Serial.println("parseObject() failed");                                //
        return;                                                                             //
      }                                                                                     //
      float tempMin=root ["temp"]["min"];                                                   //
      float tempMax=root ["temp"]["max"];                                                   //
      float wSpeed=root ["speed"];                                                          //
      int wDeg=root ["deg"];                                                                //
      weatherDescription=root ["weather"]["description"].as<String>();                      //
      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";                                         //"Північно-західний";
      weatherString+="Завтра:   \212"+String(tempMin,1)+"-"+String(tempMax,1)+"\202"+"C  "+weatherDescription;  //
      weatherString+="  \214 "+wDegString+" "+String(wSpeed,1)+"м/с       ";                //
      if(printCom) Serial.println("prognoz na zavtra - OK");                      //
    }                                                                                       //
    2. в самой программе возможность автоматического перехода на летнее время предусмотрена поменяйте значение переменной isDayLightSaving на true и будет вам счастье. Если хотите, по аналогии можете добавить эту переменную на WEB страничку.
     
  5. avmt31

    avmt31 Нуб

    Спасибо огромное, вечером буду проверять
     
  6. Про погоду, Попробуйте ключ погоды АРI в настройках 0d95d60df98e84ec2b4070be53c4d580. У меня все сразу заработало
     
  7. avmt31

    avmt31 Нуб

    Уважаемый Владимир, Спасибо за ключ. С Вашим ключом всё заработало сразу. Сейчас попробую получить новый ключ
     
  8. Oleksandr54

    Oleksandr54 Нерд

    Чем отличается Ваш ключ от остальных?
     
  9. Dave Beckham

    Dave Beckham Нерд

    Dear Ivan Greetings.

    Thanks for sharing the wonderful project.

    I'm not able to set the time zone as 9.30, 10.30 or 5.30 through the web interface. I've changed the "float timeZone = 5.30" in the code as well. Could you please help. I'm with LED_clock_weath_v5.ino.

    Thanks in advance.
     
  10. IvanUA

    IvanUA Гуру

    Good afternoon.
    Updated the code.
    Download again from the first post.
    Do not forget to specify the time zone as: 5.50, 6.50 and so on.
     
  11. ИгорьК

    ИгорьК Давно здесь Команда форума

    Ну ребята, ждите продаж часов на AlI... Неспроста это...
     
  12. IvanUA

    IvanUA Гуру

    Если будут за вменяемую цену, то почему бы и нет))))))
     
  13. avmt31

    avmt31 Нуб

    Я не знаю, чем отличаются ключи, например один из ключей d937960d95eacd91d23c6c0a8dd1e905. Когда ввожу его - прогноза нет. Ввожу ключ Владимира - есть. Как это объяснить - не знаю
     
  14. Dave Beckham

    Dave Beckham Нерд

    Thanks for the quick response Ivan.

    Now it's working. Find below observations.

    1) In order to get the exact time for +5: 30, I have to enter 5.50 (not 5.30) through the web interface.

    2) Upon clicking Auto detect Time Zone, I'm getting 5.5 in the GUI.

    Thanks again.
     
  15. IvanUA

    IvanUA Гуру

    Good afternoon.

    Yes, you understood correctly.
     
  16. Dave Beckham

    Dave Beckham Нерд

    Good Morning.

    I've interfaced DS18B20 successfully without any issue. The temperature is getting displayed under "D" now. Could you please let me know what is "y" where you will see what is the function of the buzzer. (Will be connecting it today)

    Thanks a lot for the wonderful project. The indentation mentioned in the code is awesome and very useful. The symbol used to indicate temp and humid are really great. - innovative thinking.

    Currently, I've connected 4 matrix display and would like to try with 8 as well.

    Thanks and Have a Good Day.
     
    vovkoon нравится это.
  17. IvanUA

    IvanUA Гуру

    Good Morning.

    "y" - is the temperature in the street.
    It comes from a street thermometer.
    Indicate the parameters of the street thermometer in the code.
    This will give you the opportunity to see its temperature.

    Код (C++):
    const char *mqtt_server = "m13.cloudmqtt.com";      // Name MQTT server
    const int mqtt_port = 10011;      // the Port to connect to the mqtt server
    const char *mqtt_user = "user_name";       // Login from the server
    const char *mqtt_pass = "password";        // Password from the server
     
  18. navig2201

    navig2201 Нерд

    Вопрос к повторившим проект - камрады , а выводится ли у вас название второго города ? У меня пишет название 1-го города , температура и идет темпа второго города , без означения оного.. Где косяк у меня ? прошивка 4 версии . Вдогонку - проскакивало от автора - режим вывода валют - как запустить ?
    Из своего - были жалобы на слет настроек - у себя такое ловил , пользую алишные стабы для макетки , так вот , пришлось менять бп на 6-ти вольтовый - перегрев стабов давал косяки с есп-хой .( матрицы кушают много) + дикий нагрев
     
  19. IvanUA

    IvanUA Гуру

    Режим вывода курса валют я пока убрал. Пока нет времени его закончить.
    По питанию использую обычное ЗУ для мобильных телефонов на 5V, 0,55А
    Стабилизатор на 3,3 для питания ESP - обычный линейный AMS1117.
     
  20. navig2201

    navig2201 Нерд

    Понятно. У меня тож на 1117 .. А вот насчет вывода названия 2-го города ?