Часы на esp8266 и max7219 + android управление

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

?

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

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

    35 голосов
    13,3%
  2. Да, один раз (попробовал)

    111 голосов
    42,0%
  3. Да, не однократно

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

    IvanUA Гуру

    В таком случае Пекин должен выводиться так, как он прописан на сайте, латинскими буквами.
    И только в том случае, если сайт передает вашему устройству латинское название данного города.
    Но может и не передавать - это мне не известно.

    Если же вас интересует какой то определенный город, то добавьте его код и название на русском/украинском/английском в таблицу по аналогии с моими городами

    Код (C++):
    // ===========================КОНВЕРТАЦІЯ НАЗВ МІСТ НА УКРАЇНСЬКУ МОВУ============================================
    void convertCity(){
      switch(cityId){
        case 756135 : cityName = "Варшава";    break;
        case 703845 : cityName = "Кривий Ріг"; break;
        case 703448 : cityName = "Київ";       break;
        case 698740 : cityName = "Одеса";      break;
        case 709930 : cityName = "Дніпро";     break;
        case 710791 : cityName = "Черкаси";    break;
        case 702550 : cityName = "Львів";      break;

    и так далее
     
    Последнее редактирование: 15 ноя 2017
  2. torbik

    torbik Нуб

    Добрый день, подскажите, не могу вывести информацию температуры с уличного датчика по mqtt. К mqtt конектится а на часах все время 0.0 с датчика улица. С часов на сервер mqtt данные датчика DS18B20 передает нормально.
     
  3. IvanUA

    IvanUA Гуру

    С ваших часов температура поступает на MQTT сервер?
    А с уличного датчика туда же поступает температура?
    Если с обоих датчиков температура приходит, то проверьте правильно ли вы пописали топик в своих часа для приема уличной температуры.
     
  4. torbik

    torbik Нуб

    да, с обоих датчиков приходит информация на mqtt. Когда вписываю Inform/mess с текстом на сервере, на часах выводится бегущая строка. С топиками игрался по разному, все правильно вписано, один раз получилось на mqtt сервере отправить Ulica/temp и вписал 55, тогда отобразило на часах температуру улици 55. Но это было один раз, больше не захотело. Топик прописан правильно. Уже везде сократил топик до "ulica" и всеравно на часаз 0.0. Даже с датчика выставил каждую секунду слать температуру, и ничего.
     
  5. IvanUA

    IvanUA Гуру

    В какой топик у вас публикуется информация с уличного датчика? Такой же топик должен быть прописан и в часах. У меня это Ulica/temp
    Inform/mess - это информационный топик, я туда публикую информацию с аварийных датчиков. У меня в частности туда приходит информация о том что датчик газа зафиксировал превышение уровня газа. Если у вас к примеру есть датчик воды (протечки) то можете туда публиковать эту информацию.
    [​IMG]
    загрузка изображений
     
    Последнее редактирование: 16 ноя 2017
  6. torbik

    torbik Нуб

    на датчике топик "ulica" и на часах "ulica"
     

    Вложения:

  7. torbik

    torbik Нуб

    может здесь что-то не так?
     

    Вложения:

    Последнее редактирование: 16 ноя 2017
  8. IvanUA

    IvanUA Гуру

    в коде добавьте вот такой цикл, и посмотрите что приходит в сериал порт
    Код (C++):
    //======================================================================================
    void callback(char* topic, byte* payload, unsigned int length){                         //
     
      for(int i = 0; i < length; i++){
        Serial.println(payload[i]);
      }
     
      if(String(topic)=="Inform/mess"){                                                     //
    Давайте его сюда, будем разбираться
     
  9. torbik

    torbik Нуб

    получаю вот такие данные
     

    Вложения:

    • 1111.jpg
      1111.jpg
      Размер файла:
      28 КБ
      Просмотров:
      642
  10. IvanUA

    IvanUA Гуру

    У вас внешний температурный датчик первым символом почему то передает пробел. Видимо он резервирует место для минуса "-" при отрицательных температурах.
    Если я прав, то запихните ваш датчик в холодильник и вы увидите показания температуры. В вашем же случае вам нужно избавиться от первого пробела.
    Можете что-то сами придумать?
    Ну или попробовать мой вариант решения
    Код (C++):
      if(String(topic)=="Ulica/temp"){                                                      //
        t3=-0;                                                                              //
        t4=0;                                                                               //
        int ttt = (payload[0]==32?1:0);
        if((payload[0+ttt]>=48&&payload[0+ttt]<58)||payload[0]==45){                                //
          if(payload[0]==45){                                                               //
            if(payload[1]>=48&&payload[1]<58){                                              //
              t3=payload[1]-48;                                                             //
              if(payload[2]>=48&&payload[2]<58){                                            //
                t3=t3*10+(payload[2]-48);                                                   //
              }                                                                             //
              t3=t3*-1;                                                                     //
              if(payload[2]==46){                                                           //
                if(payload[3]>=48&&payload[3]<58) t4=payload[3]-48;                         //
              }                                                                             //
              if(payload[3]==46){                                                           //
               if(payload[4]>=48&&payload[4]<58) t4=payload[4]-48;                          //
              }                                                                             //
            }                                                                               //
          }                                                                                 //
          else{                                                                             //
            t3=payload[0+ttt]-48;                                                               //
            if(payload[1+ttt]>=48&&payload[1+ttt]<58){                                              //
              t3=t3*10+(payload[1+ttt]-48);                                                     //
              if(payload[1+ttt]==46){                                                           //
                if(payload[2+ttt]>=48&&payload[2+ttt]<58) t4=payload[2+ttt]-48;                         //
              }                                                                             //
              if(payload[2+ttt]==46){                                                           //
               if(payload[3+ttt]>=48&&payload[3+ttt]<58) t4=payload[3+ttt]-48;                          //
              }                                                                             //
            }                                                                               //
          }                                                                                 //
        }                                                                                   //
      }                                                                                     //
    }                                                                                       //
    //======================================================================================
     
  11. torbik

    torbik Нуб

    C Вашим кодом заработало, но когда уходит в минус температура то идут цифры 4066... и.т.д. .Если Вам не тяжело , гляньте скетч с датчика
     

    Вложения:

    • ulica.ino
      Размер файла:
      5,2 КБ
      Просмотров:
      841
  12. IvanUA

    IvanUA Гуру

    Мне проще глянуть что вам датчик присылает при отрицательных температурах
     
  13. torbik

    torbik Нуб

    с датчика уличного на mqtt при отрицательной температуре приходят значения
    ulica 4075.00
    ulica 4075.00
    ulica 4075.00
    ulica 4075.00
    komnata30.7
    ulica 4075.00
    ulica 4075.00
    ulica 4074.00
    ulica 4074.00


    4080.00 в монитор порта часов приходит
    52
    48
    56
    48
    46
    48
    48
     
  14. IvanUA

    IvanUA Гуру

    Ваш код я бы попробовал в таком виде
    Код (C++):
    void loop() {
    //  char msg[5];              // удаляем
      float tmp = getTemp();      // каждый раз объявлять переменную не обязательно, можно это сделать в глобальных настройках
    //  dtostrf(tmp, 6, 2, msg);  // встроенный конвертер - удаляем
     
      if (!client.connected()) {  // проверяем подключение к брокеру
        reconnect();              // еще бы проверить подкючение к wifi...
      }
      client.loop();

      long now = millis();         // каждые 10 секунд
      if (now - lastMsg > 10000) {
        lastMsg = now;
        client.publish(mqtt_topic, String(tmp).c_str); // мне удобнее удобнее так конвертировать и отправлять в виде строки
      }
    }
    И еще, в коде нет проверки на доступность сети WiFi - если вдруг у вас отвалится вайфай, то вы навечно зависните на while в реконекте. Короче только рестарт


    ПС... поправил еще раз код
     
    Последнее редактирование: 16 ноя 2017
  15. IvanUA

    IvanUA Гуру

    Меня интересовали данные которые приходят в сериал порт от ваших часов, при получении от градусника отрицательной температуры. Ну как вы делали с положительной температурой))))


    ПС. Не плохая у вас температура в комнате, вы случайно не на Кипре живете)))) Шутка.
     
  16. IvanUA

    IvanUA Гуру

    Да реально то и приходит. Не знаю в чем была задумка автора, но в вашем варианте только править код уличного датчика (как я дал выше) что бы можно было подружить его с вашими часами.
     
    Последнее редактирование: 16 ноя 2017
  17. IvanUA

    IvanUA Гуру

    Посмотрел видео по ссылке из вашего скетча... Видать какая то задумка у ардуинолаб была, рас такие циферки выписывает при отрицательных температурах.))))
     
  18. torbik

    torbik Нуб

    программа ругается на client.publish(mqtt_topic, String(tmp).c_str);
    137: error: no matching function for call to 'PubSubClient::publish(const char [6], <unresolved overloaded function type>)'

    client.publish(mqtt_topic, String(tmp).c_str);
     
  19. IvanUA

    IvanUA Гуру

    Ах да, прошу прощения, упустил что мы вызываем функцию
    Код (C++):
    client.publish(mqtt_topic, (String(tmp)).c_str());
     
  20. torbik

    torbik Нуб

    увы, всеравно с датчика приходит при минусовых температурах, а часы берут первые цифры и показывает 40 градусов )
    ulica 4089.00
    ulica 4086.00
    ulica 4083.00
    ulica 4081.00