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

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

?

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

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

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

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

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

    IvanUA Гуру

    Здесь нужно смотреть "железные" отличия этих плат. В принципе и там, и там используется модуль ЕСП12, так что в принципе должно работать)))
     
  2. viktor6

    viktor6 Нерд

    З наступаючим Новим роком!!!
    Попробовал и у меня не чего не получилось В монитор порта при изменении топика не чего не приходит
    char mqtt_sub2[25]="Inform/bright";
    Код (C++):

    //======================================================================================
    void callback(char* topic, byte* payload, unsigned int length) { // получаем знаковое число с десятичной плавающей запятой
      if(!senss.mqttOn) return;
      String Text;
      for(int i=0; i<length; i++) Text+=((char)payload[i]);
      if((String(topic)==mqtts.mqtt_sub_inform)&&(sgpCo2Livel<sgps.sgpCo2LivelAlarm||sgpTvocLivel<sgps.sgpTvocLivelAlarm)){
        for(byte i=0; i<leds.NUM_MAX0;i++){
          Text+="   ";
        }
        bip();
        bip();
        bip();
        bip();
        if(senss.printCom){
          printTime();
          Serial.println("MQTT Incoming Message: "+Text);
        }
        clr(leds.NUM_VER_X);
        refreshAll();
        printStringWithShift(Text.c_str(),30);
        return;
      }
    //======================================================================================
    // управления подсветкой
        if(String(topic) == mqtts.mqtt_sub2) {
          //tMqtt2 = Text.substring(0, length+1).toInt();
            int levelBridhtness = Text.substring(0,length+1).toInt();
          if(senss.printCom){
            printTime();
            Serial.println("MQTT  Incoming: " + String(levelBridhtness));
          }
            sendCmdAll(CMD_INTENSITY, levelBridhtness);
        }
    //======================================================================================
      for(byte i=0;i<8;i++){
        if(String(topic)==mqtts.mqtt_sub[i]){
          tMqtt[i]=Text.substring(0,length+1).toFloat();
          if(senss.printCom){
            printTime();
            Serial.println("MQTT "+String(i+1)+" Incoming: " + String(tMqtt[i]));
          }
          counterMqtt[i]=millis();
          counterMqttTimeout[i]=false;
          sensorses();
        }
      }
    }

    //======================================================================================
     
     
    Последнее редактирование: 31 дек 2022
  3. viktor6

    viktor6 Нерд

    C меня прогер не какой, буду ждать ваших правок
    Код (C++):
    //======================================================================================
    void callback(char* topic,byte* payload,unsigned int length){ // получаем знаковое число с десятичной плавающей запятой
      if(!senss.mqttOn) return;
      String Text;
      for(int i=0;i<length;i++) Text+=((char)payload[i]);
      if((String(topic)==mqtts.mqtt_sub_inform)&&(sgpCo2Livel<sgps.sgpCo2LivelAlarm||sgpTvocLivel<sgps.sgpTvocLivelAlarm)){
        for(byte i=0;i<leds.NUM_MAX0;i++){
          Text+="   ";
        }
        bip();
        bip();
        bip();
        bip();
        if(senss.printCom){
          printTime();
          Serial.println("MQTT Incoming Message: "+Text);
        }
        clr(leds.NUM_VER_X);
        refreshAll();
        printStringWithShift(Text.c_str(),30);
        return;
      }
     
     
      if (strcmp(topic,"nodeNTP_1/bright")==0) {
      String Text;
      for(int i=0; i<length; i++){
        Text+=((char)payload[i]);
        }

        int aNumber = Text.substring(0,length+1).toInt();
        Serial.print("Brightness set to: ");
        Serial.println(aNumber);

        sendCmdAll(CMD_INTENSITY, aNumber);
         
      }
      for(byte i=0;i<8;i++){
        if(String(topic)==mqtts.mqtt_sub[i]){
          tMqtt[i]=Text.substring(0,length+1).toFloat();
          if(senss.printCom){
            printTime();
            Serial.println("MQTT "+String(i+1)+" Incoming: " + String(tMqtt[i]));
          }
          counterMqtt[i]=millis();
          counterMqttTimeout[i]=false;
          sensorses();
        }
      }
    }
    //======================================================================================
     
  4. IvanUA

    IvanUA Гуру

    Для начала нужно определиться где не работает.
    1. Посмотреть приходит ли топик с нашим названием.
    Код (C++):
    //======================================================================================
    void callback(char* topic, byte* payload, unsigned int length) { // получаем знаковое число с десятичной плавающей запятой
    Serial.print(топик) можно также для ясности вывести и его содержимое и длину.
     
    Если вам приходит правильное название и содержание к примеру "10", то здесь
    Код (C++):

    // управления подсветкой
        if(String(topic) == mqtts.mqtt_sub2) {
     
    сложить число в одно целое
    if(length<=2){
    int levelBridhtness = Text.substring(0,0).toInt();
    } else {
    int levelBridhtness = Text.substring(0,1).toInt();
    }
    Хотя я конечно же сделал бы проверку на то что первый и второй символы точно - цифры, ведь могут прийти буквы, и фунция тоИнт() - скорее всего вернет "0".
    Можно перед вычислением вывести в ком порт
    Serial.println(String(Text.substring(0,1))) - посмотреть что вы точно то что планируете будете переводить в цифры)))

    В любом месте где не уверенны что получаете необходимый результат ставьте вывод в компорт, так сказать легкий дебаг)))
     
  5. Pitruxa

    Pitruxa Гик

    Добрый день, уважаемые форумчане!
    Давно ничего не делал с часами, теперь вот возникла необходимость обновить прошивку, после некоторых изменений в скетче, но при компиляции постоянно выдаёт ошибки.
    Не могли бы Вы напомнить, при каких настройках среды Ардуино, при компиляции VZ_Clock_v5.0.2 всё компилируется без проблем.
    Интересует конкретно, какая установлена версия ESP8266 и какая версия ArduinoJson.
    Заранее благодарю за помощь!
     
  6. viktor6

    viktor6 Нерд

    А где вы взяли VZ_Clock_v5.0.2? На гигхабе 5,0,1
    esp 2,7,4
    ArduinoJson 6.14.1
     
  7. Pitruxa

    Pitruxa Гик

    Спасибо, компиляция прошла успешно (записал чтобы не забыть ;))

    Не Гитхабом единым жив программист, есть ещё Гугл диск
    VZ_Clock_v5.0.2 на Гугле как минимум с МАЯ 2022г лежит !
    https://drive.google.com/drive/folders/11ziGBp9WEz6XR9jGMwWIMmJEbAhigKyr
     
    Последнее редактирование: 2 янв 2023
  8. Pitruxa

    Pitruxa Гик

    После прошивки VZ_Clock_v5.0.2 из скетча, выявился глюк в показаниях датчиков
    при выставлении "Коррекции" ноль или положительное значение - всё отображается корректно
    но стоит выставить любое отрицательное значение в поле "Коррекция" и в значении показывает белеберду
    До этого стояла эта же прошивка VZ_Clock_v5.0.2 но из бинарников - там всё работало корректно!
    Вот показания с нулями в поле "Коррекция"
    https://ibb.co/KL6V0tx
    [​IMG]
    А это показания с отрицательными значениями в поле "Коррекция"
    https://ibb.co/9YZ5h6B
    [​IMG]
     
  9. Pitruxa

    Pitruxa Гик

    Причём не важно какое отрицательное число выставлено, всё равно выводит одно и тоже фейковое значение.
    Заметил, что если выставить не целое значение (к примеру вместо минус 3 поставить минус 3,01), то тогда отображается всё правильно.
    Почему то косяк именно при целых числах.
     
    Последнее редактирование: 2 янв 2023
  10. viktor6

    viktor6 Нерд

    А печатную плату уже ктото делал можете поделится?
     
  11. SteinMark

    SteinMark Гик

    viktor6 нравится это.
  12. viktor6

    viktor6 Нерд

  13. viktor6

    viktor6 Нерд

    Давайте с начала я правильно делаю.
    1 добавляю через веб интерфейс топик Inform/bright
    Opera Снимок_2023-01-08_100940_192.168.0.5.png

    потом добавляю в скетч
    Код (C++):
    void callback(char* topic,byte* payload,unsigned int length){ // получаем знаковое число с десятичной плавающей запятой
      Serial.print("Inform/bright");
      if(!senss.mqttOn) return;
    то приходит
    14:13:50.156 -> Inform/bright14:13:47 MQTT 4 Incoming: 7.00
    Код (C++):
    14:13:46.448 -> 14:13:44  fnCount=  11   period[fnCount]=  5     millis()=  8815608     fnTimer=  8820608
    14:13:46.448 -> 14:13:44  fnCount=  0   period[fnCount]=  50     millis()=  8815610     fnTimer=  8865609
    14:13:50.156 -> Inform/bright14:13:47  MQTT 4 Incoming: 7.00
    14:13:50.156 -> 14:13:47  senss.sensors[0](+corr)=0.00
    14:13:50.189 -> 14:13:47  senss.sensors[1](+corr)=0.00
    14:13:56.404 -> 14:13:54  Publish sensors[0]: 0.00
    14:13:56.404 -> 14:13:54  Publish sensors[1]: 0.00
    14:13:56.404 -> ======== START GET SENSORS DATA =======================
    14:13:57.206 -> 14:13:54  Temperature DS18B20: 20.00 *C
    14:13:57.206 -> 14:13:54  senss.sensors[0](+corr)=0.00
    14:13:57.206 -> 14:13:54  senss.sensors[1](+corr)=0.00
    14:13:57.206 -> ======== END ==========================================
    потом добавил

    после
    char mqtt_sub_inform[25]="Inform/mess";
    такую
    char mqtt_sub_bright[25]="Inform/bright";
    перед
    for(byte i=0;i<8;i++){
    Код (C++):
      // управления подсветкой
      if(String(topic) == mqtts.mqtt_sub_bright) {
      if(length<=2){
    int levelBridhtness = Text.substring(0,0).toInt();
    } else {
    int levelBridhtness = Text.substring(0,1).toInt();
    }
    }
    Serial.println(String(Text.substring(0,1)));
    и получил

    15:49:55.818 -> Inform/bright7
    15:49:55.818 -> 15:49:53 MQTT 4 Incoming: 7.00
    15:49:55.818 -> 15:49:53 senss.sensors[0](+corr)=0.00
    15:49:55.852 -> 15:49:53 senss.sensors[1](+corr)=0.00



    Короче у меня не чего не получается
     
    Последнее редактирование: 8 янв 2023
  14. S_Sergey_G

    S_Sergey_G Нерд

    Всё оказалось просто. Всегда думал, что у меня Wemos D1 mini pro, и в настройках при прошивки выбирал эту плату. Начал сравнивать платы, оказалось у меня просто Wemos D1 mini. Выбрав эту плату все описанные проблемы отпали.
     
  15. viktor6

    viktor6 Нерд

    Подскажите а датчик AM2320 должен работать или нет?
    У меня он не заработал. Я подключил его на D1 D2 и подтянул сопротивлением на 10к к +3,в
    Но не чего не помогло
    Код (C++):
    11:59:40.045 -> Huraaa!!! Connected to "Plusnet"(192.168.0.5)
    11:59:40.045 ->
    11:59:42.901 -> 11:52:32  Proba #1   11:59:42
    11:59:44.572 ->           Proba #2   11:59:43
    11:59:45.354 ->           Proba #3   11:59:43
    11:59:45.354 -> 11:59:43  Save /stime.json: {"hour":11,"minute":59,"second":43,"year":2023,"month":1,"day":12}
    11:59:45.354 -> 11:59:43  12.01.2023 DW=5
    11:59:45.354 ->           Time update OK.
    11:59:45.354 -> Did not find sensor BMP180!
    11:59:45.870 -> Did not find sensor BMP280!
    11:59:46.854 -> Did not find sensor BME280!
    11:59:47.369 -> Did not find sensor Si7021!
    11:59:47.917 -> Did not find sensor AHT10 or AHT20!
    11:59:48.431 -> [BH1750] ERROR: received NACK on transmit of address
    11:59:48.431 -> BH1750 Not Found
    11:59:48.901 -> MAX44009 Not Found
    11:59:48.901 -> 11:59:46  senss.sensors[0](+corr)=0.00
    11:59:48.901 -> 11:59:46  senss.sensors[1](+corr)=0.00
    11:59:48.901 -> 11:59:46  senss.sensors[2](+corr)=0.00
    11:59:48.948 -> mqtts.mqtt_sub[0]=Ulica/temp
    11:59:48.948 -> mqtts.mqtt_sub[1]=Ulica/hum
    11:59:48.948 -> mqtts.mqtt_sub[2]=Ulica/press
    11:59:48.948 -> Sensor SGP30 not found :(
    11:59:48.948 -> ======== START GET SENSORS DATA =======================
    11:59:49.743 -> 11:59:47  Temperature DS18B20: 20.63 *C
    11:59:49.743 -> 11:59:47  senss.sensors[0](+corr)=0.00
    11:59:49.743 -> 11:59:47  senss.sensors[1](+corr)=0.00
    11:59:49.743 -> 11:59:47  senss.sensors[2](+corr)=20.63
    11:59:49.743 -> ======== END ==========================================
     
     
  16. Retro

    Retro Нерд

    Всем доброго времени суток.
    Решил немного допилить прошивку под свои нужды (праздники я хочу :)) и корпус тоже наконец домоделировать до логического конца. Но прежде нужно разобраться как заливать прошивку из Arduino IDE. Мучаю прошивку 5.0.1
    1. Поставил версию 1.8.19 (портабельную)
    2. Поставил драйвера для моей платы NodeMcu
    3. Залил библиотеки тех версий которые тут выкладывали именно для 5.0.1
    4. Настроил IDE чтобы видел мою NodeMcu v3
    5. Стоит ESP8266 Boards (3.0.2) и выбрано NodeMCU 1.0 (ESP-12E Module)
    6. Выбрал в настройках Flash Size: "4MB (FS:1 MB OTA:~1019KB)"
    7. Установил плагин для ESP8266 Sketch Data Upload
    Больше никакие настройки не трогал.
    Открываю проект, компилирую, заливаю. Заливаю раздел DATA. Всё проходит без ошибок.
    Но при коннекте страница настроек дико тормозит. И не отображается в заголовке страницы версия прошивки и текущее время. И в разделе ВРЕМЯ при попытке чтото изменить и сохранить выскакивают поочередно ошибки: "Получены не полные данные" или "Ошибочный запрос".

    Если заливать прошивку из готовых BIN (выложенных тут или на github) с помощью флэшера, то всё работает без проблем.
    Подскажите, пожалуйста, что делаю не так? Спасибо!

    Как только разберусь с этой проблемой оформлю проект корпуса для печати и выложу где-нибудь для общего доступа.
    Фото того что планируется. Повторяю уже за кем-то смоделериванный но не устраивающий по некоторым параметрам проект. Выкладывать буду с исходниками, если кто захочет допилить под свои нужды.
    IMG_6133.JPG
     
  17. ur5ncb

    ur5ncb Нуб

    не могу прошить
     

    Вложения:

  18. Retro

    Retro Нерд

    Попробуйте программу прошивки разместить в корне диска. Чтобы путь был как можно короче и не было в пути директорий с русскими названиями. Это касается и файлов самой прошивки.
     
    ur5ncb нравится это.
  19. Kim

    Kim Нерд

    Попробуйте изменить версию ядра. С версией 2.7.4 все работает стабильно
     
    Retro нравится это.
  20. Retro

    Retro Нерд

    Спасибо. Попробую.