AMS sensors

Модератор: Alex

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: AMS sensors

Сообщение serghei » Ср авг 24, 2016 5:51 pm

Alex, выложите пожалуйста код для умных сенсоров на всеобщее обозрение (даже как есть). Ничего сложного там нет. Я уже прицепил его к ESP)))). Много людей уже спрашивают.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: AMS sensors

Сообщение Alex » Чт авг 25, 2016 10:01 am

Сколько миллиампер потребляют AMS датчики в режиме ожидания и в режиме отправки данных?
В режиме сна 10 - 50 мкА, в режиме работы 20 мА, период активности от 20 мкс до 1 с. Расчётное время жизни от 1,5 до 4-6 лет, в зависимости от режима работы (скважности и прочих параметров, всё настраивается).
Для снижения энергопотребления удаляли встроенный стабилизатор на 5в и светодиоды на ардуине?
В обязательном порядке.
Исходники можно где посмотреть или это закрытый проект?
Всё очень сырое и я не вижу смысла это публиковать, если есть экстремальные энтузиасты — можно написать запрос на info@hi-lab.ru , и я вам вышлю код в индивидуальном порядке.
Показывает ресурс 61 секунда
Ресурс, если кто не понял, это суммарное отработанное время в режиме активности, т. е. сенсор суммарно потребил 20 мА * 61 сек. + полное реальное время * 50 мкА
За это сообщение автора Alex поблагодарил:
Profd (Чт авг 25, 2016 10:28 pm)
Рейтинг: 1.16%
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: AMS sensors

Сообщение serghei » Ср янв 25, 2017 12:49 am

Приветствую Всех. Благодаря Cahek2202 и его коду для сенсора viewtopic.php?f=19&t=2347&p=39409#p39412 удалось прикрутить DHT датчик и заодно исправить ошибку с отправкой температуры на сервер. На картинках выглядит так
СпойлерПоказать
Sensor_DHT_ESP.jpg
Sensor_DHT_ESP.jpg (88 КБ) 4885 просмотров
И в полный экран
СпойлерПоказать
Full_screen.jpg
Full_screen.jpg (120.72 КБ) 4885 просмотров
На стороне сенсора код для передачи данных с DHT добавлен по аналогии с далласом и большая проблема для меня только в формате пакета - если передавать одним пакетом влажность и температуру , то АМС пакет видит и отправляет эхо , но не может распарсить.
Если передавать по одиночке ,то на первый запрос температуры отвечает правильно , а на второй запрос влажности все равно отправляется температура. Меняю местами - вижу влажность.
СпойлерПоказать

Код: Выделить всё

    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 экран прошу помочь доделать код
ams_nrf24_yfs201_dht_vol_2.rar
код сенсора 2 DS 2 счетчика и DHT +LCD
(18.67 КБ) 189 скачиваний
И сам АМС
ams_Node_DHT_vol_work_4_vol.rar
NodeMcu + влажность с сенсора
(1.16 МБ) 204 скачивания
PS А как ссылку заменить каким нибудь словом на форуме ?
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 5 раз
Поблагодарили: 25 раз

Re: AMS sensors

Сообщение eGorka » Ср янв 25, 2017 9:26 am

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]
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: AMS sensors

Сообщение serghei » Ср янв 25, 2017 9:46 am

Спасибо, буду разбираться. Вариант с запросом по одному значению более простой. Смущает то, что DHT выдает сразу два числа. Сначала запросить влажность, потом температуру. Со счетчиками так получилось.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 5 раз
Поблагодарили: 25 раз

Re: AMS sensors

Сообщение eGorka » Ср янв 25, 2017 9:52 am

serghei писал(а):Спасибо, буду разбираться
Но строку лучше сделать так: первое значение - влажность, второе - температура

Код: Выделить всё

String data1 = String(humDHT, 1);  // 33
String data2 = String(tempDHT, 1);  // 44
String data = data1+data2;  // 3344     
Влажность как правило >10 и <100, т.е. двухзначное число(если конечно не Сахара и не тропики). А вот температура может быть и -10, и 0, и 10 градусов.
За это сообщение автора eGorka поблагодарил:
serghei (Ср янв 25, 2017 10:18 am)
Рейтинг: 1.16%
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: AMS sensors

Сообщение serghei » Ср янв 25, 2017 10:17 am

Со счетчиками то же не все кристально ясно. Рутину написал сам , а передачу строки помогли.Что бы вставить и передать число литров в пакете пришлось добавить новую переменную " 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
Ответить