AMS sensors
Модератор: Alex
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: AMS sensors
Alex, выложите пожалуйста код для умных сенсоров на всеобщее обозрение (даже как есть). Ничего сложного там нет. Я уже прицепил его к ESP)))). Много людей уже спрашивают.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: AMS sensors
В режиме сна 10 - 50 мкА, в режиме работы 20 мА, период активности от 20 мкс до 1 с. Расчётное время жизни от 1,5 до 4-6 лет, в зависимости от режима работы (скважности и прочих параметров, всё настраивается).Сколько миллиампер потребляют AMS датчики в режиме ожидания и в режиме отправки данных?
В обязательном порядке.Для снижения энергопотребления удаляли встроенный стабилизатор на 5в и светодиоды на ардуине?
Всё очень сырое и я не вижу смысла это публиковать, если есть экстремальные энтузиасты — можно написать запрос на info@hi-lab.ru , и я вам вышлю код в индивидуальном порядке.Исходники можно где посмотреть или это закрытый проект?
Ресурс, если кто не понял, это суммарное отработанное время в режиме активности, т. е. сенсор суммарно потребил 20 мА * 61 сек. + полное реальное время * 50 мкАПоказывает ресурс 61 секунда
- Рейтинг: 1.16%
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: AMS sensors
Приветствую Всех. Благодаря Cahek2202 и его коду для сенсора viewtopic.php?f=19&t=2347&p=39409#p39412 удалось прикрутить DHT датчик и заодно исправить ошибку с отправкой температуры на сервер. На картинках выглядит так
И в полный экран
На стороне сенсора код для передачи данных с DHT добавлен по аналогии с далласом и большая проблема для меня только в формате пакета - если передавать одним пакетом влажность и температуру , то АМС пакет видит и отправляет эхо , но не может распарсить.
Если передавать по одиночке ,то на первый запрос температуры отвечает правильно , а на второй запрос влажности все равно отправляется температура. Меняю местами - вижу влажность.
Вопрос собственно - как разложить строчку с двумя данными. В коде для мульти сенсоров на стороне АМС вижу строчку
Но там и запрос идет только один
Проблема сильно не напрягает, но неприятный осадок от не знания остается ((( . Мой уровень программирования чуть выше плинтуса, но очень хочется смотреть на графики из-под АМС....
Если кого то заинтересует реализация двух температур далласов, двух счетчиков ( сей час электросчетчиков) и влажности с температурой + вывод всего этого богатства на LCD экран прошу помочь доделать код И сам АМС PS А как ссылку заменить каким нибудь словом на форуме ?
СпойлерПоказать
СпойлерПоказать
Если передавать по одиночке ,то на первый запрос температуры отвечает правильно , а на второй запрос влажности все равно отправляется температура. Меняю местами - вижу влажность.
СпойлерПоказать
Код: Выделить всё
String data1 = String(tempDHT, 1);
String data2 = String(humDHT, 1);
String data = data1+data2;
switch (DHTNeedSend) {
case NEED_SEND_DHT: makePacket(&sendDHTtemp, TYPE_DATA, DTA_TEMP_DHT, 255, "", data1); break;
case NEED_SEND_ALARM_UP: makePacket(&sendDHTtemp, TYPE_ALARM, DTA_TEMP_DHT, 255, "", data1); break;
case NEED_SEND_ALARM_DOWN: makePacket(&sendDHTtemp, TYPE_ALARM, DTA_TEMP_DHT, 255, "", data1); break;
}
СпойлерПоказать
Код: Выделить всё
void parseLpTemp() {
String s = "";
s = rxData.substring(0, 5); lpTempTemp = s.toFloat();// что значит субстринг и цифры ?
s = rxData.substring(5, 8); lpTempBattery = s.toInt();
s = rxData.substring(8, 15); lpTempWork = s.toInt();
Serial.println(F("parseLpTemp"));
Serial.print(F("Temp: ")); Serial.println(lpTempTemp);
Serial.print(F("Batt: ")); Serial.println(lpTempBattery);
Serial.print(F("Work: ")); Serial.println(lpTempWork);
lpTempUpdate = (millis() - lpTempOldUpdate) / 1000;
Serial.print(F("Update: ")); Serial.println(lpTempUpdate);
lpTempOldUpdate = millis();
}
СпойлерПоказать
Код: Выделить всё
#ifdef NRF24_FEATURE
// commands
#define GET_NAME 1
#define DTA_NAME 2
#define SET_NAME 3
#define GET_ADDR 4
#define DTA_ADDR 5
#define SET_ADDR 6
#define GET_FREE_MEM 7
#define DTA_FREE_MEM 8
#define GET_BATTERY 9
#define DTA_BATTERY 10
#define GET_SELF_TEMP 11
#define DTA_SELF_TEMP 12
#define GET_TEMP_1 13 // Запрос данных с сенсора температуры
#define DTA_TEMP_1 14
#define GET_HEALTH 15
#define DTA_HEALTH 16
#define GET_CONT_1 17
#define DTA_CONT_1 18
#define GET_SET_1 19
#define DTA_SET_1 20
#define GET_LEAK 21
#define DTA_LEAK 22
#define GET_SMOKE 23
#define DTA_SMOKE 24
#define GET_RELAY 25
#define DTA_RELAY 26
#define SET_RELAY 27
#define GET_ID 100
#define DTA_ID 101
#define SET_ID 102
#define GEN_ID 103
#define BAK_ECHO 200
Если кого то заинтересует реализация двух температур далласов, двух счетчиков ( сей час электросчетчиков) и влажности с температурой + вывод всего этого богатства на LCD экран прошу помочь доделать код И сам АМС PS А как ссылку заменить каким нибудь словом на форуме ?
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
- Благодарил (а): 5 раз
- Поблагодарили: 25 раз
Re: AMS sensors
serghei писал(а):как разложить строчку с двумя даннымиКод: Выделить всё
String data1 = String(tempDHT, 1); // 44 String data2 = String(humDHT, 1); // 33 String data = data1+data2; // 4433
Код: Выделить всё
data.substring(0, 2); // от начала строки по второй символ (44)
data.substring(2); // от второго символа и до конца строки (33)
serghei писал(а):А как ссылку заменить каким нибудь словом на форуме ?
Код: Выделить всё
[url=http://arduino.ru/Reference/StringSubstring]Почитать[/url]
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: AMS sensors
Спасибо, буду разбираться. Вариант с запросом по одному значению более простой. Смущает то, что DHT выдает сразу два числа. Сначала запросить влажность, потом температуру. Со счетчиками так получилось.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
- Благодарил (а): 5 раз
- Поблагодарили: 25 раз
Re: AMS sensors
Но строку лучше сделать так: первое значение - влажность, второе - температураserghei писал(а):Спасибо, буду разбираться
Код: Выделить всё
String data1 = String(humDHT, 1); // 33
String data2 = String(tempDHT, 1); // 44
String data = data1+data2; // 3344
- Рейтинг: 1.16%
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: AMS sensors
Со счетчиками то же не все кристально ясно. Рутину написал сам , а передачу строки помогли.Что бы вставить и передать число литров в пакете пришлось добавить новую переменную " ss " и изменить string . В чем разница - я не понял.
СпойлерПоказать
Код: Выделить всё
void makePacketVol() {
String data1 = (String)vol1; //не понятно как , но иначе не вставляется data ??????????????????????????????????
switch (vol1NeedSend) {
case NEED_SEND_VOL: makePacket(&sendVol1, TYPE_DATA, DTA_VOL_1, 255, "", data1); break;// надо дописать условия передачи при изменении на 1 литр
// case NEED_SEND_ERROR: makePacket(&sendVol1, TYPE_ALARM, DTA_VOL_1, 255, "", "err"); break;
//case NEED_SEND_REMOVED: makePacket(&sendVol1, TYPE_ALARM, DTA_VOL_1, 255, "", "rem"); break;
//case NEED_SEND_NOT_PRESENT: makePacket(&sendVol1, TYPE_ALARM, DTA_VOL_1, 255, "", "not pres"); break;
// case NEED_SEND_ALARM_UP: makePacket(&sendVol1, TYPE_ALARM, DTA_VOL_1, 255, "", data); break;
// case NEED_SEND_ALARM_DOWN: makePacket(&sendVol1, TYPE_ALARM, DTA_VOL_1, 255, "", data); break;
}
СпойлерПоказать
Код: Выделить всё
void ss() {
setNotRequired(&sendVol1); setPacketType(&sendVol1, TYPE_ANSWER); vol1NeedSend = NEED_SEND_VOL; sendPacket(DTA_VOL_1); setPacketType(&sendVol1, TYPE_DATA);
setNotRequired(&sendVol2); setPacketType(&sendVol2, TYPE_ANSWER); vol2NeedSend = NEED_SEND_VOL; sendPacket(DTA_VOL_2); setPacketType(&sendVol2, TYPE_DATA);
}
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS