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

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

?

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

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

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

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

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

    IvanUA Гуру

    Предполагаю что вы просто использовали не тот тип датчика что автор скетча.
    Просто поменяйте блок получения температуры на аналогичный блок из скетча часов.
    Набросал на скорую руку, а проверять вам.
    Код (C++):
    float getTemp(){                                      // возвращает температуру с градусника ds18b20
      byte i;                                                               //
      byte present=0;                                                       //
      byte type_s;                                                          //
      byte data[12];                                                        //
      byte addr[8];                                                         //
      if(!ds.search(addr)){                                                 // Поиск датчиков даллас на шине ванваер
        ds.reset_search();                                                  // если датчики не найдены сбрасываем поиск
        delay(250);                                                         // пауза не обязательна
        return false;                                                             // выход из программы
      }                                                                     //
      if(OneWire::crc8(addr, 7)!=addr[7]) return false;                      //
      ds.reset();                                                           //
      ds.select(addr);                                                      //
      ds.write(0x44, 1);                                                    // начало коммуникации
      delay(500);                                                           //
      present=ds.reset();                                                   //
      ds.select(addr);                                                      //
      ds.write(0xBE);                                                       // читаем значение
      String aDDr="";                                                       //
      for(i=0; i<9; i++) {                                                  // смотрим 9 байтов
        if(i>1&&i<8) aDDr+=String (addr[i]);                                //
        data[i]=ds.read();                                                  // записываем данные в масив
      }                                                                     //
      Serial.println(aDDr);                                                 //
      int16_t raw=(data[1]<<8) | data[0];                                   //
      if(type_s){                                                           //
        raw=raw<<3;                                                         //
        if(data[7]==0x10){                                                  //
          raw=(raw&0xFFF0)+12-data[6];                                      //
        }                                                                   //
      }                                                                     //
      else{                                                                 //
        byte cfg=(data[4]&0x60);                                            //
        if(cfg==0x00) raw=raw& ~7;                                          //
        else if(cfg==0x20) raw=raw& ~3;                                     //
        else if(cfg==0x40) raw=raw& ~1;                                     //
      }                                                                     //
      return raw / 16.0;
       
    }
    //////////////////////
     
  2. IvanUA

    IvanUA Гуру

    Мне нет на чем проверить, но по крайней мере компилируется вот этот (немного поправленный) скетч:
     

    Вложения:

    • ulica.ino
      Размер файла:
      7,7 КБ
      Просмотров:
      1.239
  3. torbik

    torbik Нуб

    ок, спасибо большое за труды, буду уже завтра пробовать. И за часы спасибо!
     
  4. torbik

    torbik Нуб

    Все заработало! Спасибо большое!!!!
     
  5. IvanUA

    IvanUA Гуру

    Да не за что ;) пользуйтесь.
     
  6. vist

    vist Нуб

    Подскажите по версии v4, как отобразить отрицательную температуру.
     
  7. IvanUA

    IvanUA Гуру

    Берите последнюю версию.
     
  8. Dave Beckham

    Dave Beckham Нерд

  9. IvanUA

    IvanUA Гуру

    https://drive.google.com/open?id=1BqQqUSksGjMXBnew6j5933XnxdJ2kSj9
    For you, blocked the ability to change the rotation angle of the matrix.
    Now it can be set only here:
    Код (C++):
    const int rotate = 90;
     
    Dave Beckham нравится это.
  10. Dave Beckham

    Dave Beckham Нерд

    Great Ivan. Thanks for the quick response.

    Will check and update.
     
  11. Dave Beckham

    Dave Beckham Нерд

    I'm not getting proper rotation with 0, 90, 180, 270 and 360. The updated value is getting reflected In the serial monitor only after the save option update in the GUI.
     
  12. IvanUA

    IvanUA Гуру

    Let's have a video.
     
  13. vist

    vist Нуб

    constint rotate =90; попробовал на своем дисплеи, все кувыркается. Версия V5, Тд показывает -4гр.С, датчик на улице, Ту показывает +0,0 гр.С, ставлю параллельно, еще один ds18b20, показывает Тд гр., - 4 гр.С, через 0,5 с, Тд +25гр.С, Ту +0,0 гр.С.
     
  14. IvanUA

    IvanUA Гуру

    Что значит "кувыркается"? Постоянно меняет направление? Или не можете развернуть в нужном направлении?
    По температурным датчикам:
    - на шине 1Wire - должен стоять только один датчик - хотите больше - надо разделять в программе
    - уличный датчик - если не подключен по MQTT протоколу, то показывает 0,0С
    - если данные с вашего уличного датчика приходят не в формате цифровом или с какими то пробелами и прочим - то соответственно не будут корректно отображаться.

    ПС. По уличным датчикам - возможно придется разбираться с каждым индивидуально. Если нет уличного датчика, то лучше закоментить в коде строки вывода уличной температуры, По крайней мере пока. В следующей версии если не забуду, то постараюсь в веб мордашку включить функцию включения/выключения отображения температуры с уличного датчика.

    ППС. Если у вас два датчика на одной шине показывают большую разницу в температуре, то возможно либо датчики разные, либо какой то из них поврежден.
     
  15. vist

    vist Нуб

    Спасибо, я предполагал, что уличная температура завязана на MQTT. Как я уже говорил я подключил параллельно еще один датчик DS18B20, и у меня выскакивают три температуры Темп.д. +25гр.С, Темп.д - 2,5 гр.С, Темп.у + 0,0 гр.С., А иногда две температуры Темп.д. +25гр.С , Темп.у +0,0 гр.С . Я про пост 154 constint rotate =90, что все работает в зависимости от угла поворота изображения матрицы, у меня вращается изображение при 180, 270.
     
  16. IvanUA

    IvanUA Гуру

    У разных матриц может быть разный угол поворота. Этот угол мы выставляем в переменной rotate. Изначально планировалось что можно будет через веб устанавливать это значение, но сейчас вижу что стоит жестко прописать это в скетче. Ну и в коим то веке доберусь и переделаю функцию хранения значений во флеш памяти, а то с текущей функцией иногда возникают проблемки.
     
  17. IvanUA

    IvanUA Гуру

    Программа считывания показаний с датчика температуры (в комнате), устроена таким образом, что она перебирает все возможные адреса датчиков, и когда находит датчик, то опрашивает его. В следующей секунде, она ищет следующий датчик, находит, опрашивает и выводит показания. Если датчик один. то вы и будет всегда видеть только его показания. Если датчиков несколько, то нужно их как то обозначить при выводе его значений на экран. У меня предполагалось что на данной шине будет находиться только один датчик. Так что оставьте только тот датчик что у вас показывает верные показания. Со вторым датчиком надо смотреть что не так.
     
    Последнее редактирование: 22 ноя 2017
  18. Dave Beckham

    Dave Beckham Нерд

    [QUOTE = "IvanUA, post: 138355, member: 13613"] Let's have a video. [/ QUOTE]

    Dear Ivan,

    Good Morning.

    The display issue was due to the configuration of CS_PIN and CLK_PIN to buzzer pin and onewire ds for the Wemos by me. I'm getting the proper display after changing to as below. - Many thanks for your help. Is there any standard pin configuration to be followed for ESP01, NodeMcu and Wemos D1 mini? If any please share the details.

    #defines DIN_PIN 13 // D7
    #define CS_PIN 0 // D3
    #define CLK_PIN 14 // D5

    // # define buzzerPin 14 // D5
    #define buzzerPin 2 // D4

    // OneWire ds (D3);
    OneWire ds (D2);

    This has been tested in V5.2 and earlier version. Now I am using the earlier version as the rotation is allowed through GUI.
    int rotate = 0;

    Also I have noticed "p" is added at the end of the year.

    // date = "" + dw + "," + String (day) + "" _month + "" + String (year) + "r."; // 2B2
    date = "" + dw + "," + String (day) + "" _month + "" + String (year) + "";

    I'm very glad that the new display module is working with your code.

    Thanks a lot for your excellent support.

    [​IMG]

    https://drive.google.com/file/d/1ST35wzB_jG4MBFjj4MMtipd7we8Tkr45/view?usp=sharing
     
    Последнее редактирование: 23 ноя 2017
  19. IvanUA

    IvanUA Гуру

    Yes. But only for modules with ESP12. (Bus - SPI)
    This reduction from the Ukrainian "year" (рік). At us so it is accepted. You can clean.
     
    Dave Beckham нравится это.
  20. Dave Beckham

    Dave Beckham Нерд

    Many thanks, Ivan.
     
    IvanUA нравится это.