Барометр (Troyka-модуль)+ IskraJS

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Protos911, 16 янв 2017.

  1. Protos911

    Protos911 Нерд

    Погода и самочувствие. Как мы воспринимаем изменение атмосферного давления!
    http://www.aif.ru/health/life/pogod...vosprinimaem_izmenenie_atmosfernogo_davleniya



    Тайная библиотека под
    Барометр (Troyka-модуль)
    Для IskraJs

    https://github.com/amperka/espruino-modcat/blob/master/modules/@amperka/barometer.js
    основа чип LPS331AP от STMicroelectronics
    Features
    ■ 260 to 1260 mbar absolute pressure range
    ■ High-resolution mode: 0.020 mbar RMS
    ■ Low power consumption: – Low resolution mode: 5.5 µA – High resolution mode: 30 µA ■ High overpressure capability: 20x full scale
    ■ Embedded temperature compensation
    ■ Embedded 24-bit ADC
    ■ Selectable ODR from 1 Hz to 25 Hz
    ■ SPI and I2C interfaces
    ■ Supply voltage: 1.71 to 3.6 V
    ■ High shock survivability: 10,000 g
    ■ Small and thin package
    ■ ECOPACK® lead-free compliant
    Пример использования библиотеки @amperka/barometer' барометра:
    http://wiki.amperka.ru/js:barometer
    В проекте "Кухонный Барометр" будет использоваться модуль барометра+датчик MQ-9+Troyka Slot Shield+Четырёхразрядный семисегментный индикатор+Модуль с пьезодинамиком+светодиодный модуль "Пиранья"из линейки Troyka-модулей
    Часть скрипта выводящая на Troyka QuadDisplay поочерёдно температуру или давление:
    Код (Javascript):
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    var baro = require('@amperka/barometer').connect({i2c: I2C1});
    var qd = require('@amperka/quaddisplay').connect(P11);
    baro.init();
    setInterval(function() {
    var i = parseInt(baro.read('mmHg'));
      qd.display(i);
    }, 4000);
    setInterval(function() {
    var i = parseInt(baro.temperature('C'));
    qd.display(i);
    }, 8000);
     
    Последнее редактирование: 12 фев 2017
  2. ИгорьК

    ИгорьК Гуру

    Это просто интересный вопрос :)
     
  3. acos

    acos Официальный гик Администратор

    А разве плохо иметь много разных библиотек под много разных железок? И чем не нравится наша библиотека на нашу железку? https://github.com/amperka/espruino-modcat/blob/master/modules/@amperka/barometer.js
    П.С.
    @Protos911 Если вы будете постить и далее партнёрские ссылки на свой любимый магазин на aliexpress, я возьмусь за банхаммер. Я не против ссылок на интересные железки, но партнёрки - некрасиво. Я почистил партнёрские ссылки в ваших предыдущих сообщениях.
     
    Последнее редактирование: 16 янв 2017
    zealot01 и Protos911 нравится это.
  4. Protos911

    Protos911 Нерд

    Да это пример просто (я ещё ничего ни разу не заказал с "партнёрки", так-что "партнёрки" - это скорей вы ("Матрёшка-Z"- 3шт ,"Йодо"-3 шт ;)), я могу такие-же постить с "Мастер Кит", например (но они как раз большие конкуренты, чем китайки) :)
    А где ссыль с Faq на эту библиотеку на станицах барометра?!
    http://wiki.amperka.ru/продукты:troyka-barometer
    http://amperka.ru/product/troyka-barometer
     
    Последнее редактирование: 18 янв 2017
  5. Morgan

    Morgan Гик

    Барометр появился раньше, чем Iskra JS, вот и не во всех продуктах есть ссылки на библиотеки
    http://wiki.amperka.ru/js:start — тут есть
     
    Protos911 нравится это.
  6. Protos911

    Protos911 Нерд

    Ура:)
    Может подскажите где взять библиотеку для четырёхразрядного симисигментника http://amperka.ru/product/troyka-quad-display для JS ?
    Вообще проектам на JS не хватает дисплеев для визуализации:(
    В вики библиотек на них просто нет, а ведь с ними всё становиться намного наглядней;)
     
    Последнее редактирование: 16 янв 2017
  7. Morgan

    Morgan Гик

    Модуль устарел и скоро выйдет новая версия. Под него и будем делать документацию
    а пока можете использовать этот пример
    Код (Javascript):

    var q = require('@amperka/quaddisplay').connect(P5);

    var i = 0;

    setInterval(()=>{
      q.display(i++, 1);
    }, 100);
     
    display(str, align);
    str — строка для отображения
    align — если false, выравнивание по левому краю, если true, выравнивание по правому краю
     
    Protos911 нравится это.
  8. Protos911

    Protos911 Нерд

    Спасибо, так мне пока его не заказывать?
     
    Последнее редактирование: 17 янв 2017
  9. Morgan

    Morgan Гик

    Как хотите. Дисплей работает, либа есть. Если нужен, берите.
     
  10. Protos911

    Protos911 Нерд

    Решил заказать, бо светодиоды всё-же визуальнее ЖК :)
    И спасибо за обратную связь, буду с вами!
     
    Последнее редактирование: 18 янв 2017
  11. Protos911

    Protos911 Нерд

    Багрепорт навскидку (будет пополняться) в процессе курения доков...:cool:
    1. - пофикшено
    2. - пофикшено
    3. Вики - Барометр (Troyka-модуль)
    Скетч:
    // создаём переменную и присваиваем ей значения абсолютного давления
    float pressure = barometer.readPressureMillibars();
    // создаём переменную и присваиваем ей значения высоты над уровнем море
    float altitude = barometer.pressureToAltitudeMeters(pressure);
    // создаём переменную и присваиваем ей температуру окружающей среды
    float temperature = barometer.readTemperatureC();
    Скрипт:
    baro.read(); // вернёт давление во внутренних единицах
    baro.read('Pa'); // вернёт давление в паскалях
    baro.read('mmHg'); // вернёт давление в миллиметрах ртутного столба
    print(baro.temperature()); // вернёт температуру во внутренних единицах
    print(baro.temperature('K')); // вернёт температуру в градусах Кельвина
    print(baro.temperature('C')); // вернёт температуру в градусах Цельсия
    print(baro.temperature('F')); // вернёт температуру в градусах Фаренгейта

    Где оплаченная мной "значения высоты над уровнем море" для IskraJS ??!!! :D
    Это дискриминация по JS признаку!!!!
    4. В пришедшей мне Troyka Slot Shield пришлось часть штырьков перепаивать самому, т.к. они были не полностью пропаяны и вылезли через несколько перетыканий модуля.
    Так-что без пайки как всегда не обошлось...
    И посадите на монтаж женщин, из моего опыта работы на радиозаводе даже около гениальных инженеров-регулировщиков сидели девушки-монтажницы (которые и делали аккуратно всю монтажную работу) ;)

    ПС
    АМПЕРКА - Вы Лучшие!!!
    Только написал ...уже почти всё пофиксили :)
     
    Последнее редактирование: 2 фев 2017
  12. SafeSound

    SafeSound Нуб

    Доброго времени суток!
    Дабы не создавать тему с аналогичным названием, напишу здесь.
    Полагаю у меня проблема с модулем (но не уверен), прошу помощи разобраться.

    Симптомы следующие:
    1. Периодически (ожидание не длится более 1 минуты) выскакивают ошибки. Сначала одна - две, потом сплошняком, чем видимо вешают искру.
    2. Показания датчиков почти всегда 42.5 °C и 570 mmHg соответственно (предыдущую проблема в этом случае так же актуальна). Реальные данные видел всего пару раз.
    Подключал как в описании здесь:
    [​IMG]

    Скетчи использовал разные и те что по ссылке и немного измененные. Пробовал выгрузить библиотеку в оффлайн - тот же результат. Прошивку обновил до актуальной версии (1.91), тоже безрезультатно.

    До этого с ардуиноподобными вещами дело не имел, соответственно с I²C / TWI тоже. Прошу направить новичка в нужную степь :)

    Примеры скетчей, ошибок и показаний:

    Скетч
    Код (Javascript):
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    var baro = require('@amperka/barometer').connect({i2c: I2C1});

    setInterval(function() {
    var bar = baro.read('mmHg');
    console.log(
    bar.toFixed(0),
    'mmHg'
    );
    }, 1000);

    setInterval(function() {
    var celsius = baro.temperature('C');
    console.log(
    celsius.toFixed(1),
    '°C'
    );
    }, 1000);
    Ошибка
    Код (Text):
    42.5 °C
    570 mmHg
    42.5 °C
    570 mmHg
    42.5 °C
    570 mmHg
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(43,2),c=b[0]|b[1]<<8;return c>=32767&&(c-...
                           ^
    in function "temperature" called from line 1 col 35
    var celsius = baro.temperature('C');
                                      ^
    in function called from system
    570 mmHg
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(43,2),c=b[0]|b[1]<<8;return c>=32767&&(c-...
                           ^
    in function "temperature" called from line 1 col 35
    var celsius = baro.temperature('C');
                                      ^
    in function called from system
    570 mmHg
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(43,2),c=b[0]|b[1]<<8;return c>=32767&&(c-...
                           ^
    in function "temperature" called from line 1 col 35
    var celsius = baro.temperature('C');
                                      ^
    in function called from system
    570 mmHg
    42.5 °C
    570 mmHg
    42.5 °C
    570 mmHg
    42.5 °C
    570 mmHg
    42.5 °C
    Скрин скетча из примера
    [​IMG]

    P.S. Искра из набора Йодо, набор супер:)
     
  13. Protos911

    Protos911 Нерд

    Навскидку: а где скрипте строка инициализации сенсора???
    baro.init();


    Из вики:
    LPS331.init()
    Включает сенсор.

    Просто подано несколько через ж... для продвинутых, а потому в описании обьект называется "LPS331", а в скрипте (который типа пример ;)) "baro" http://wiki.amperka.ru/js:barometer, просто программистам кажется, что нам (схемотехникам) и так должно быть всё понятно (это как с вождением через пять лет) :D

    ПС
    Cвой сенсор побывал пока только на "Метеостация" AndruinoUNO R3 http://wiki.amperka.ru/slot-box:meteo - у меня в Крыму
    давление: 752мм рт. ст.
    температура в помещении: 22*С

    Попробовал подключил к JS как у вас...
    Script:
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    var baro = require('@amperka/barometer').connect({i2c: I2C1});

    baro.init();
    print(baro.read('mmHg'));

    print(baro.temperature('C'));


    в консоли вывалило :

    ____ __
    / _/_____ / /__ _____ ____ _
    / / / ___// //_// ___// __ `/
    _/ / (__ )/ ,< / / / /_/ /
    /___//____//_/|_|/_/ \__,_/
    Based on Espruino 1v91.126
    (c) 2016 G.Williams, Amperka LLC
    Support the work of core developers:
    http://espruino.com/Donate
    >Erasing Flash....
    Writing....
    Compressed 87200 bytes to 1131
    Checking...
    Done!
    Loading 1131 bytes from flash...
    753.06401319892 ---------давление в мм рт.ст.

    21.01458333333 -----------температура в С*
    >
    =undefined
    >
    Как-то так, мне аперка скоро пиво должна будет за техподдержку :)
     
    Последнее редактирование: 25 янв 2017
    SafeSound нравится это.
  14. SafeSound

    SafeSound Нуб

    Всё верно, про инициализацию я позабыл! Огромное вам спасибо!)
    А вот что делать с первой проблемой? Таки датчик или опять руки?

    Скетч
    Код (Javascript):
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    var baro = require('@amperka/barometer').connect({i2c: I2C1});
    baro.init();

    setInterval(function() {
    var bar = baro.read('mmHg');
    console.log(
    bar.toFixed(0),
    'mmHg'
    );
    }, 1000);

    setInterval(function() {
    var celsius = baro.temperature('C');
    console.log(
    celsius.toFixed(1),
    '°C'
    );
    }, 1000);
    Ошибка
    Код (Text):
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(43,2),c=b[0]|b[1]<<8;return c>=32767&&(c-...
                           ^
    in function "temperature" called from line 1 col 35
    var celsius = baro.temperature('C');
                                      ^
    in function called from system
    752 mmHg
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
    26.6 °C
    752 mmHg
     
    Еще примеры
    Код (Text):
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(40,3),c=b[1]<<8|b[2]<<16||b[0];switch(c>2...
                           ^
    in function "read" called from line 1 col 27
    var bar = baro.read('mmHg');
                              ^
    in function called from system
    [​IMG]
     
    Последнее редактирование: 26 янв 2017
  15. Protos911

    Protos911 Нерд

    Попробуйте конкретно мой скрипт, только закольцуйте его.
    Думаю у вас в функции погрешность накапливается какая-то.
     
    SafeSound нравится это.
  16. SafeSound

    SafeSound Нуб

    Попробовал, результат прежний:(

    Скетч
    Код (Javascript):
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    var baro = require('@amperka/barometer').connect({i2c: I2C1});

    baro.init();

    setInterval(function() {
    print(baro.read('mmHg'));
    }, 1000);

    setInterval(function() {
    print(baro.temperature('C'));
    }, 1000);
    Консоль
    Код (Text):
    44.18333333333
    750.86070090931
    44.19583333333
    750.95445887908
    44.20625
    750.95445887908
    44.225
    751.00133786396
    44.2375
    751.00133786396
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(43,2),c=b[0]|b[1]<<8;return c>=32767&&(c-...
                           ^
    in function "temperature" called from line 1 col 27
    print(baro.temperature('C'));
                              ^
    in function called from system
    751.00133786396
    44.19583333333
    751.00133786396
    44.22916666666
    750.95445887908
    44.24166666666
    751.00133786396
    44.28541666666
    751.00133786396
    44.29375
    750.95445887908
    44.30625
    Так же пробовал "разнести" по времени функции вывода. Тоже не то.
     
  17. Protos911

    Protos911 Нерд

    циклом попробуйте.
    Да ещё забыл шейте искру два раза подряд, одним и тем-же скриптом!
     
    SafeSound нравится это.
  18. SafeSound

    SafeSound Нуб

    Протестировал еще раз (прошивая дважды предыдущие скетчи), те же ошибки.
    While прогнал отдельно на давление и температуру:

    Скетч (давление)
    Код (Javascript):
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    var baro = require('@amperka/barometer').connect({i2c: I2C1});

    baro.init();

    while (true) {
    print(baro.read('mmHg'));
    }
    Ошибка (давление)
    Код (Text):
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(40,3),c=b[1]<<8|b[2]<<16||b[0];switch(c>2...
                           ^
    in function "read" called from line 9 col 23
    print(baro.read('mmHg'));
                          ^
    >
    =undefined
    Скетч (температура)
    Код (Javascript):
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    var baro = require('@amperka/barometer').connect({i2c: I2C1});

    baro.init();

    while (true) {
    print(baro.temperature('C'));
    }
    Ошибка (температура)
    Код (Text):
    Uncaught InternalError: Timeout on I2C Read Receive
    at line 1 col 92
    ...2c.readFrom(this._address,b)
                                  ^
    in function "readI2C" called from line 1 col 24
    var b=this.readI2C(43,2),c=b[0]|b[1]<<8;return c>=32767&&(c-...
                           ^
    in function "temperature" called from line 9 col 27
    print(baro.temperature('C'));
                              ^
    >
    =undefined
    Скрин
    [​IMG]

    Так же заменил провода - тоже мимо(
     
  19. Protos911

    Protos911 Нерд

    Ща попробую ваш скрипт запилить...
    да, то-же, что и у вас:(
    Похоже где-то буфер переполняеться!
     
    Последнее редактирование: 2 фев 2017
    SafeSound нравится это.
  20. SafeSound

    SafeSound Нуб

    То есть проблема воспроизводится? Что означает с сенсором всё в порядке)
    Буду пытаться увеличивать время опроса и читать можно ли очищать буфер.
    Огромное спасибо за помощь!
    Если бы в Московском регионе, сам бы проставил :)