УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

BME280


Автор Сообщение
Сообщение создано: 05. 11. 2017 [10:12]
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
добрый день, форумчане! Реализовал опрос датчика давления температуры влажности BME280 на базе BMP180. может кому пригодится. Роман, к вам пару вопросов:
1) в bmp180 49ая строка наверно pressure, a не temperature
2) сделал простейший скрипт чтения ID(приложено так же):
JAVASCRIPT
tr = SYS.Transport.Serial["out_"+transport];
t_err = "0";
 
if(!tr)	t_err = "1:"+tr("Output transport '%1' error.").replace("%1",transport);
else if(addr < 0 || addr > 119)	t_err = "2:"+tr("Device address '%1' out of range [0...119].").replace("%1",addr);
	else {
	resp = Special.FLibSYS.IO("", "", "b");
	//read data from register 0xD0
	resp.string = tr.messIO(SYS.strFromCharCode(addr,0xD0), 0, 1);
	length = resp.string.length;
	if(resp.string.length != 1) t_err = "3:"+tr("Wrong or empty respond to the calibration request.");
	else {
		data = resp.read("int8",1);	
	}
}

указываю нормальный transport: читает 96(0x60) - верно. указываю любой другой читает(!) 48. т.е. мало того что ошибка транспорта не отслеживается, так и читает откуда-то мусор.
Вложенный файл

meteo1.db (Тип файла: application/octet-stream, Размер: 43 килобайт) — 2816 загрузок
Сообщение создано: 05. 11. 2017 [20:50]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"arcsin" wrote:

добрый день, форумчане! Реализовал опрос датчика давления температуры влажности BME280 на базе BMP180. может кому пригодится.

OK, попробую на своём, до которого сам ещё не добрался.

"arcsin" wrote:

Роман, к вам пару вопросов:
1) в bmp180 49ая строка наверно pressure, a не temperature

Да.

"arcsin" wrote:

2) сделал простейший скрипт чтения ID(приложено так же):
JAVASCRIPT
tr = SYS.Transport.Serial["out_"+transport];
t_err = "0";
 
if(!tr)	t_err = "1:"+tr("Output transport '%1' error.").replace("%1",transport);
else if(addr < 0 || addr > 119)	t_err = "2:"+tr("Device address '%1' out of range [0...119].").replace("%1",addr);
	else {
	resp = Special.FLibSYS.IO("", "", "b");
	//read data from register 0xD0
	resp.string = tr.messIO(SYS.strFromCharCode(addr,0xD0), 0, 1);
	length = resp.string.length;
	if(resp.string.length != 1) t_err = "3:"+tr("Wrong or empty respond to the calibration request.");
	else {
		data = resp.read("int8",1);	
	}
}

указываю нормальный transport: читает 96(0x60) - верно. указываю любой другой читает(!) 48. т.е. мало того что ошибка транспорта не отслеживается, так и читает откуда-то мусор.

Ну да, массивный-объектный доступ при отсутствии элемента возвращает EVAL, что не false и что по объективным причинам было сделано позже.
Собственно в них всех нужно или проверять на isEVal() или подключать транспорт так (как сейчас принято):
JAVASCRIPT
tr = SYS.Transport.Serial.nodeAt("out_"+transport);


Learn, learn and learn better than work, work and work.
Сообщение создано: 06. 11. 2017 [19:46]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
Проверил — работает.
Почистил, добавил oversampling и включил в библиотеку.

Learn, learn and learn better than work, work and work.
Сообщение создано: 06. 11. 2017 [21:42]
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
спасибо, Роман!

[Сообщение редактировалось 1 раз(а), в последний раз 06.11.2017 в 21:43.]
Сообщение создано: 10. 11. 2017 [19:18]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"arcsin" wrote:

спасибо, Роман!

Пожалуйста, выгрузил.

Learn, learn and learn better than work, work and work.
Сообщение создано: 11. 11. 2017 [22:51]
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
Как правильно обновляться? ОС: Raspberian 8.
делаю
sudo apt-get update
sudo apt-get upgrade
в проектах опенскады номер версии после этого свежайший, но папка LibsDB не обновляется. удалял все через sudo apt-get remove --purge, LibsDB остается. когда её уже явно переименовал тогда при установке скачались свежие библиотеки. надеюсь есть более культурный способ, подскажите.

вопрос по модулю: в строке№13
JAVASCRIPT
tr = SYS.Transport.Serial.nodeAt("out_"+transport);

наверно точка пропущена, хотя компилися и так

и последний вопрос какой пароль у root в проекте KramMill.
op:op
user:user
ITW:ITW
root:?
интересно посмотреть на связывание нескольких проектов

[Сообщение редактировалось 1 раз(а), в последний раз 11.11.2017 в 22:56.]
Сообщение создано: 12. 11. 2017 [08:22]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"arcsin" wrote:

Как правильно обновляться? ОС: Raspberian 8.
делаю
sudo apt-get update
sudo apt-get upgrade
в проектах опенскады номер версии после этого свежайший, но папка LibsDB не обновляется. удалял все через sudo apt-get remove --purge, LibsDB остается. когда её уже явно переименовал тогда при установке скачались свежие библиотеки. надеюсь есть более культурный способ, подскажите.

Правильно, если-бы это был демон, то он увидел-бы сразу новую, в /usr/share/openscada/LibsDB
АРМовые запускаются от непривилегированного пользователя и имеют туда доступ только на чтение, соответственно и копируют LibsDB себе локально в ~/.openscada/LibsDB. И соответственно не копируют, если оно там есть, и не проверяют актуальности.

"arcsin" wrote:

вопрос по модулю: в строке№13
JAVASCRIPT
tr = SYS.Transport.SerialnodeAt("out_"+transport);

наверно точка пропущена, хотя компилися и так

Да, пропустил. Динамический доступ и не будет выдавать ошибок компиляции.

"arcsin" wrote:

и последний вопрос какой пароль у root в проекте KramMill.
op:op
user:user
ITW:ITW
root:?
интересно посмотреть на связывание нескольких проектов

Этот проект не для широкого круга и что там такого про связывание нескольких проектов? Если речь про ПЛК, то там их конфигурации и нет.

Learn, learn and learn better than work, work and work.
Сообщение создано: 15. 11. 2017 [21:22]
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
несколько дней начало выдавать ноль по влажности. думал накрылась микросхема. но проверив под питоном увидел что все норм. начал ковырять и сравнивать.
нашел следующие ошибки
39:dig_H3 = resp.read("uint8", 1); //а не unt8
69:adc_T = resp.read("uint32", 1) >> 12;
84:adc_P = resp.read("uint32", 1) >> 12;
109:adc_H = resp.read("uint16", 1);
в общем смысл такой. пока adc_h был < 32768 было все норм. а когда влажность подросла перевалилло. и значение АЦП стало отрицательное. а из-за "насыщения" показывало вместо -300% 0%.


в приложении питоновская библиотека по которой сверялся.


[Сообщение редактировалось 1 раз(а), в последний раз 15.11.2017 в 21:25.]
Вложенный файл

weather.py (Тип файла: text/x-python, Размер: 239 байт) — 2778 загрузок
BME280.py (Тип файла: text/x-python, Размер: 6.81 килобайт) — 2805 загрузок
Сообщение создано: 16. 11. 2017 [09:37]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"arcsin" wrote:

несколько дней начало выдавать ноль по влажности. думал накрылась микросхема. но проверив под питоном увидел что все норм. начал ковырять и сравнивать.
нашел следующие ошибки
39:dig_H3 = resp.read("uint8", 1); //а не unt8
69:adc_T = resp.read("uint32", 1) >> 12;
84:adc_P = resp.read("uint32", 1) >> 12;
109:adc_H = resp.read("uint16", 1);
в общем смысл такой. пока adc_h был < 32768 было все норм. а когда влажность подросла перевалилло. и значение АЦП стало отрицательное. а из-за "насыщения" показывало вместо -300% 0%.

OK, внёс изменения в библиотеку.

Learn, learn and learn better than work, work and work.



11364