Перейти к публикации
iT4iT.CLUB

RusD

Пользователи
  • Публикации

    15
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем RusD


  1. Всем привет. Датчик bme280 начал выпендриваться еще в марте, а недавно ураганным ветром сорвало корпус, в котором был датчик и залило. Теперь показывает неверные данные по температуре и влажности. Я так понимаю, что теперь только на выброс. Что можете посоветовать из неприхотливых и точных датчиков для внешнего размещения? BMP280 или есть что то лучше? Мне, в принципе, влажность и не нужна.


  2. Здравствуйте. Обновился на 2.0 бета. Сначала все было нормально, но сегодня стало показывать плюс 10 градусов на улице и влажность 28 и десятые и сотые доли бегают туда-сюда. Показания стали явно некорректными. Датчик bme280.


  3. 12 часов назад, Kitsum сказал:

    Попробуйте поиграться с этими значениями.

    Спасибо за подсказку. Попытка поменять значения приводит к артефактам в нижней части дисплея. Поищу еще доработанные либы. А касательно adafruit либы нашел много упоминаний о том, что она проблемная.


  4. В общем, поиски привели меня к данному примеру http://wikihandbk.com/wiki/ESP8266:Примеры/Использование_0,96-дюймового_OLED-дисплея_с_ESP8266_при_помощи_IDE_Arduino

    На его основе удалось инициализировать дисплей и вывести текст типа температура, влажность, давление. Остались 2 проблемы. Либа для разрешения 128х64 и из за этого текст сплющенный и что добавить после строк текста для вывода информации с датчиков.

    UPDATE:

    Чуть-чуть изменил, пойду тестировать.

    Вот что добавил в код:

    #include "SSD1306.h" // добавил библиотеку
      
    // инициализация OLED-дисплея с помощью библиотеки Wire:
     SSD1306  display(0x3c, D2, D1);
    
    В void setup добавил
      
      display.init();
      display.flipScreenVertically();
      display.setFont(ArialMT_Plain_16);
      display.setTextAlignment(TEXT_ALIGN_LEFT);
    
    В void readSensors() изменил и добавил строки:
    
    /* BME280 */
    #ifdef TG_BME_280_I2C_H
        if (temperature.status) BME.read(pressure.data, temperature.data, humidity.data, BME280::TempUnit_Celsius, BME280::PresUnit_torr);
        display.clear();
        display.drawString(0, 0, "Temperature: " + String(temperature.data) + "C");
        display.drawString(0, 16, "Humidity: " + String(humidity.data) + "%\t");
        display.drawString(0, 32, "Pressure: " + String(pressure.data) + "mmHg");
      #endif
    
    И добавил в
      
    void loop() {
      
      display.display();

    UPD2:

    Я все же добился работы дисплея. Все выводит как надо. Код выше работает.  Осталась 1 проблема. Сплющенный и плохо разборчивый текст из за другого разрешения. Или искать эту либу под 128х32(не нашел), или купить 128х64 дисплей.


  5. 8 минут назад, Alex_DIY сказал:

    Вам надо всего лишь указать библиотеку дисплея там же где объявляют я другие библиотеки. 

    Добавил строки

    #include <SPI.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    9 минут назад, Alex_DIY сказал:

    В месте, где происходит инициализация i2c датчиков добавить код инициализации дисплея. 

    Добавил после bme280:

    // BME280
      #ifdef TG_BME_280_I2C_H
        Wire.beginTransmission(0x76);
        if (Wire.endTransmission() == 0) {
          temperature.status = humidity.status = pressure.status = BME.begin();
        }
      #endif
      
      // Инициализация дисплея.
      display.begin(pin_sda, pin_scl, 0x3C);

     

    12 минуты назад, Alex_DIY сказал:

    В функцию readsensors() добавить строки, которые будут отправлять на дисплей то, что Вы хотите на нем видеть. 

    Ниже этих строк

    void readSensors() {
      timerReadSensors = millis();
      /* BH1750 */
      #ifdef BH1750_h
        if (light.status) light.data = BH1750.readLightLevel();
      #endif
      /* HDC1080 */
      #ifdef _CLOSEDCUBE_HDC1080_h
        if (temperature.status) temperature.data = HDC1080.readTemperature();
        if (humidity.status) humidity.data = HDC1080.readHumidity();
      #endif
      /* SI7021 */
      #ifdef si7021_h
        if (temperature.status) temperature.data = SI7021.getCelsiusHundredths() * 0.01;
        if (humidity.status) humidity.data = SI7021.getHumidityPercent();
      #endif
      /* HTU21D */
      #ifdef HTU21D_ADDRESS
        if (temperature.status) temperature.data = HTU21D.readTemperature();
        if (humidity.status) humidity.data = HTU21D.readHumidity();
      #endif
      /* BMP085 */
      #ifdef ADAFRUIT_BMP085_H
        if (pressure.status) pressure.data = BMP085.readPressure() / 133.3;
      #endif
      /* BME280 */
      #ifdef TG_BME_280_I2C_H
        if (temperature.status) BME.read(pressure.data, temperature.data, humidity.data, BME280::TempUnit_Celsius, BME280::PresUnit_torr);
      #endif

     добавил эти строки:

     

    // Вывод данных с датчика.
      display.setTextSize(1);
      display.setCursor(0,0);
      display.println("temperature.data");
      display.setTextSize(1);
      display.setCursor(0,1);
      display.println("humidity.data");
      display.setTextSize(1);
      display.setCursor(0,2);
      display.println("pressure.data");
      display.display();
    }

    Верно ли поступил?


  6. 1 час назад, Alex_DIY сказал:

    Далее нет подключения к i2c шине.

     Нет, это код, который надо встроить в основной.

    Под подключением вы имеете ввиду эти строки?

    /*
       i2c шина
       задейстованные пины SDA и SCL
    */
    #define pin_sda 4 // default sda pin
    #define pin_scl 5 // default scl pin

    Если да, то эти строки есть в скетче метеостанции.

    Буду копаться еще... Дорогу осилит идущий. :)


  7. 5 часов назад, Kitsum сказал:

    Добавить поддержку дисплее не сложно. В текущей версии прошивки Вы можете обновлять информацию на дисплее каждый раз когда вызывается функция readSensors(). Добавить Ваш код можно прямо в неё.

    Доброе утро. В коде, как я уже говорил, совершенно не понимаю. Попытался сваять скетч, который нужно интегрировать в ваш основной код. При добавлении компилируется без ошибок, но при прошивке датчик bme280 перестает обнаруживаться. Sda и scl дисплея подключены в те же пины, что и датчик. Пробовал другие пины, пытаясь их прописать при инициализации дисплея - так же не работает ни датчик, ни дисплей. Скетч ковырял на основе примера из либы adafruit Adafruit_SSD1306. Чувствую, что я просто навертел там полную чушь. :)

    #include <SPI.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    void setup()
    {
      // Инициализация дисплея.
      display.begin(0x3C);
      // Вывод приветствия при включении питания если нужно
      display.setCursor(3, 0);
      display.print("Hello!");
      display.display();
      delay (300);//Задержка приветствия
    }
    
    void readSensors() {
      timerReadSensors = millis();
      /* BH1750 */
      #ifdef BH1750_h
        if (light.status) light.data = BH1750.readLightLevel();
      #endif
      /* HDC1080 */
      #ifdef _CLOSEDCUBE_HDC1080_h
        if (temperature.status) temperature.data = HDC1080.readTemperature();
        if (humidity.status) humidity.data = HDC1080.readHumidity();
      #endif
      /* SI7021 */
      #ifdef si7021_h
        if (temperature.status) temperature.data = SI7021.getCelsiusHundredths() * 0.01;
        if (humidity.status) humidity.data = SI7021.getHumidityPercent();
      #endif
      /* HTU21D */
      #ifdef HTU21D_ADDRESS
        if (temperature.status) temperature.data = HTU21D.readTemperature();
        if (humidity.status) humidity.data = HTU21D.readHumidity();
      #endif
      /* BMP085 */
      #ifdef ADAFRUIT_BMP085_H
        if (pressure.status) pressure.data = BMP085.readPressure() / 133.3;
      #endif
      /* BME280 */
      #ifdef TG_BME_280_I2C_H
        if (temperature.status) BME.read(pressure.data, temperature.data, humidity.data, BME280::TempUnit_Celsius, BME280::PresUnit_torr);
      #endif
    
      // Вывод данных с датчика.
      display.setTextSize(1);
      display.setCursor(0,0);
      display.println("temperature.data");
      display.setTextSize(1);
      display.setCursor(0,1);
      display.println("humidity.data");
      display.setTextSize(1);
      display.setCursor(0,2);
      display.println("pressure.data");
      display.display();
    }

     


  8. Добрый вечер. А в дальнейшем не планируется добавить поддержку дисплеев как опцию? Т.е. в скетче раскоментируешь нужный тебе дисплей(к примеру, ssd1306 128х32), компилируешь, заливаешь, подсоединяешь дисплей и в настройках метеостанции выбираешь вкл/выкл, когда необходимо. 

    P.S. Был бы благодарен, если бы кто нибудь помог в подключении ssd1306 OLED 128x32. Я в программировании полный ноль. Если не ошибаюсь, для него подходит библиотека https://github.com/adafruit/Adafruit_SSD1306. Наверняка кто то реализовывал вывод давления, температуры и влажности на дисплей? Или если кто нибудь реализует подключение в будущем, был бы рад мануалу, как это сделать.  :)


  9. 42 минуты назад, EVG сказал:

    Какой ип-адрес получает ноут, с которого удается подключиться (и пингуется) к метеостанции ?

    Как этот ноут подключается к роутеру, по вифи или кабелем ?

    Включен ли режим изоляции клиентов вифи в роутере ?

    Ну и для общей информации - какие ип-адрес получают устройства, каторые не видят метеостанции ?

     

    Видят ли другие устройства, подключенные к роутеру , другие устройства к нему же подключенные, помимо метеостанции ?

    Большое спасибо вам и Kitsum за отзывчивость. Проблема оказалась в неродной прошивке роутера(PandoraBox). Смена прошивки на родную обновленную решила все проблемы.


  10. 1 час назад, Kitsum сказал:

    К сожалению данной информации, недостаточно.

    • Как организована Ваша сеть?
    • С проблемных устройств подключаетесь к web интерфейсу метеостанции по имени или по адресу?
    • Проходит ли ping по имени? А по адресу?

    О, моя сеть необычна из за безысходности. ) Живу в селе, из за отсутствия возможности протянуть кабель, пришлось изворачиваться. В результате в комнате АТС села лежит adsl модем, подключенный к оборудованию. От него организован Wi-Fi мост с помощью двух Ubiquiti Nanostation M2 до моего дома, далее кабель с rj-45 в wan роутера. Роутер по wi-fi раздает интернет. IP adsl модема 192.168.1.1, убиков 192.168.1.2 и 1.3. IP домашнего роутера(прошит PandoraBox) 192.168.31.1, раздает по dhcp ip адреса подключившимся клиентам. ip адрес подключенной станции 192.168.31.197. По ip могу подключиться только с ноутбука. Остальные устройства не могут подключиться к данному ip. По поводу подключения по имени я не понял(не судите строго). С других устройств ip не пингуется, что очень странно.


  11. 12 минуты назад, Forester сказал:

    Спасибо за быстрый ответ =) Но там решение такое сложное... Я, как настоящий дуремар, решил проблему таким способом:

     

    
     #ifdef TG_BME_280_I2C_H
        BME280I2C::Settings settings;
        //settings.bme280Addr = 0x76; // 0x76 0x77
        BME.setSettings(settings);
        Wire.beginTransmission(0x76);
        if (Wire.endTransmission() == 0) {
          temperature.status = humidity.status = pressure.status = BME.begin();
        }
      #endif

    Строки с BMP180 все закомментировал.

    Да нет же... ) Там все просто. Заместо строки 

    settings.bme280Addr = 0x76;

    надо было вставить 

    settings.bme280Addr = BME280I2C::I2CAddr_0x76;

    и на этом все. После этого у меня все собралось без проблем.


  12. 20 минут назад, Kitsum сказал:

    @RusD Доброе время суток. Чтобы быстро избавиться от данной проблемы, я бы рекомендовал уменьшить число отображаемых знаков после запятой. Внесите следующие изменения в файл index.htm

    Найдите описание элемента визуализации температуры

    
    <div class="sensor">
        <div class="title">Температура</div>
        <div class="unit">&deg;C</div>
        <input class="knob temperature" data-width="200" data-displayPrevious=true data-fgColor="#FFF" data-skin="tron" data-thickness=".1" value="0" data-min="-40" data-max="125" data-step=".01" readonly>
    </div>

    В описании элемента input измените значение data-step с ".01" на ".1"

    Для более корректного исправления необходимо внести изменения в библиотеку Knob и учесть дополнительный символ "-". Я займусь работой над визуализацией после окончания работы над обновлением кода микроконтроллера.

    Добрый вечер. Большое спасибо за ответ. А что касаемо отключения вывода датчика Освещения? Я пробовал закомментировать Освещение в index.htm и сократить ширину с 800 на 600px для выравнивания датчиков, но при этом пропадает вывод данных у датчика давления. Как более корректно удалить или отключить визуализацию Освещения, не подскажете?


  13. 15 минут назад, Forester сказал:

    Не могу связать с датчиком BME280. Если раскомментировать строчки 

    
    //#include <BME280I2C.h>
    //BME280I2C BME;

    Arduino IDE ругается:

    А если оставить, как есть, то ESP находит датчик по адресу 0х76, но данные с датчика на главную страницу не выводит.

    Добрый вечер. Я тоже столкнулся с данной проблемой. Решение нашел в данной теме по адресу 

     


  14. Большое спасибо за отличную реализацию метеостанции! Основной текст с просьбой удален из за того, что во всем разобрался с помощью гугла(скетчи, ардуино и т.д.), но появился вопрос. У меня есть 0.91 Inch 128x32 IIC I2C Blue OLED LCD Display(SSD1306 Driver), возможно ли реализовать подключение для вывода 3 строчек(температура, влажность, давление)и сложно ли будет? Просто я хочу собрать в компактном корпусе с дисплеем(пока какой есть) и только датчик вывести на улицу.

    P.S. Еще небольшая проблема в том, что данные температуры заезжают за границу визуализации. Возможно ли исправить и плюс к этому корректно удалить или отключить пункт освещенность из скетча, чтобы его нигде не было?

    P.S.2. Проявилась проблема. На ноутбуке веб интерфейс метеостанции открывается нормально, другие же устройства(компы, ноутбуки, смартфоны) не могут открыть, появляется ошибка соединения. Все устройства подключены к одной wi-fi сети, использую ip адрес метеостанции, выданный ей роутером(192.168.31.179).

    5a59688b02516_.PNG.5d1402663bc8e27ce5f67ea27d6d4874.PNG

×
×
  • Создать...