Подключение железа к AMS

Модератор: Alex

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

Re: Подключение железа к AMS

Сообщение serghei » Вс мар 03, 2019 3:02 pm

Я каждый DHT сажу на свой пин.

Для того чтобы вывести любую переменную на страницу надо соблюдать 5 правил :

1. Получить её в коде

Конкретно в твоем случае

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

            float h = dht.readHumidity();
            float t = dht.readTemperature();
2. В сервере ажакс придумать название и приписать ему переменную

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

    #ifdef DHT_FEATURE
    
     s += makeTag("humDHT",   "", String(dht.readHumidity(), 1));
     s += makeTag("tempDHT",  "", String(dht.readTemperature(), 1)   
     
    #endif
Вставить в нужное место. Если вывод в даш панели то

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

// Dash

void respDash(EthernetClient cl) {
  String s = tagXmlVersion();
  s += openInputs();
    s += makeModules();
    ----------------
    
Сюда после, например , далласов

3. Проверить на странице ( в инспекторе браузера ) что в XML таблице появилась искомое имя и значение.

4. Прописать в скрипте

5. Вывести в HTML на странице в нужное место.

PS/ кода под рукой нет , пишу в слепую уже шестой раз. Три сообщения выше.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение shemnik69 » Вт мар 05, 2019 12:45 am

Всем доброе время суток!
Не давно, попал в Чип и Дип (магазин электронных компонентов, Москва) и увидел плату Мега256 с ds1307 и микросхемой ЕЕРROM дополнительно на самой плате. Производство "Электронные войска" , приобрёл для пробы.
Для АМС отличное решение. Главное чем понравилось, основные выходы совпадают с аналогом.и блок питания на борту импульсный т.е можно смело питание заводить нестандартное например 12 в от АКБ.
schel4ok
Сообщения: 136
Зарегистрирован: Вс сен 02, 2018 8:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Подключение железа к AMS

Сообщение schel4ok » Ср мар 06, 2019 1:31 pm

ну да вот она
https://www.chipdip.ru/product/magonija ... st_product

но только большой пользы не вижу
там памяти всего 64кБ - AMS не влезет
всё равно SD карта нужна

вот если бы они сделали памяти хотя бы 100Мб и встроенный порт RJ-45 и WIFI, тогда действительно никаких доп шилдов особо не нужно было бы
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Подключение железа к AMS

Сообщение nick7zmail » Ср мар 06, 2019 2:42 pm

И ds1307 говорят херня)) Лучше 3231
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Подключение железа к AMS

Сообщение serghei » Ср мар 06, 2019 8:35 pm

Самый маленький и адекватный RTC_DS3231
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение shemnik69 » Чт мар 07, 2019 11:54 pm

Ну тут что сказать?.
1. Если память под программы то да мало. А если хранить скажем суточные данные или недельные то нормально. Ресурса по циклам перезаписи в таком случае за глаза....
2. Порт 485!. Полезная штука, согласен. Но! Тогда будет стандарт к какому пину её подключать ? Т.е управление приём передача, а также задействован один UART порт!. Поэтому тут не все просто. Хотя по моим меркам это хороший был бонус.
3. Почему _ds1307 плох? Ранее эта микруха стояла на материнках и ничего. Точность, секунда в год, для чего? Открыть ворота? Выдать данные о времени передачи в порт или?
Потом ведь есть синхронизация ntp. Кому как, я пока не гонюсь за (айфоном500-800).... Мне и этого звонить хватит. Так и здесь. Реальное железо под реальные задачи и потом проверенное.
А вот из полезных опций которые реально могут повысить функциональные возможности AMC как управляющий и контрольный комплекс это DFPlayer. Я вживил такой девайс в свой монстр ( см выше) и именно его возможности меня радуют.
Смысл в том, что на его флешку пишем звуковые файлы формата мр3, которые он воспроизводит в динамик. Причём, количество файлов, это в общем объём флешки и тут можно накрутить любую медиотеку. Пробовал и голосовую (супруга сама озвучила (чтоб сама на себя не ругалась :D )) и сигналку типа сирены, музыку, да что хочешь в интернете полно любых файлов на все случаи. Короче Весч! Рекомендую.
Кстати управление его простое. Файлы на флешку маркируется номерами и в сериал порт отправлена простоиего номер. Есть порт BUSY (ожидание) который можно использовать как управляющий при необходимости полного проигрывания мелодии либо файла до отправления следубщего. Либо он сразу играет тот который номер который сброшен в ком порт. На нем есть свой усилитель. Выход стерео. Можно регулировать громкость и пр. Короче простая и полезная игрушка которая смело берёт самую сильную опцию МД на себя. Ну и не забываем что это управляющий модуль а не просто показометр.
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение alexsis_76 » Пт мар 08, 2019 4:04 am

там памяти всего 64кБ - AMS не влезет
так это память M24C64 и не 64кБ а 8, в такой памяти хранятся медленные данные но никак не код, а памяти программ как раз той в какой хранится программа 256к и расположена она физически внутри микроконтроллера, ну и своей EEPROM у него 4к и sram 8, так что M24C64 мне кажется лишнее, только удорожает плату.
schel4ok
Сообщения: 136
Зарегистрирован: Вс сен 02, 2018 8:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Подключение железа к AMS

Сообщение schel4ok » Вс мар 10, 2019 10:09 am

Если мне надо считывать данные с нескольких датчиков DHT, чтобы потом по их значениям индивидуально управлять отоплением в каждой комнате, то код будет такой?



arduino_mega_server.ino

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

// Features
#define DHT_FEATURE

// Modules
byte moduleDHT      = NOT_COMPILLED;

void setup() {

  #ifdef DHT_FEATURE
    initDHT();
  #endif

}

void loop() {

    #ifdef DHT_FEATURE
      workDHT();
    #endif

}

temp_dht.ino

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

#ifdef DHT_FEATURE
#include "DHT.h"

#define MAX_DHT_SENSORS  14
#define DHTTYPE DHT22     // DHT 22  (AM2302), AM2321

// DHT Sensors
const int DHTKuhPin = 40;
const int DHTKladPin = 41;
const int DHTShowerPin = 42;
const int DHTHallPin = 43;
const int DHTCabinetPin = 44;
const int DHTCorridorPin = 45;
const int DHTStairsPin = 46;
const int DHTBathroomPin = 47;
const int DHTRoom1Pin = 48;
const int DHTRoom2Pin = 49;
const int DHTRoom3Pin = 50;
const int DHTBoilerPin = 51;
const int DHTBasementPin = 52;
const int DHTOutdoorPin = 53;

// Initialize DHT sensors.
DHTKuhnja   dht(DHTKuhPin, DHTTYPE);
DHTKladovka dht(DHTKladPin, DHTTYPE);
DHTShower   dht(DHTShowerPin, DHTTYPE);
DHTHall     dht(DHTHallPin, DHTTYPE);
DHTCabinet  dht(DHTCabinetPin, DHTTYPE);
DHTCorridor dht(DHTCorridorPin, DHTTYPE);
DHTStairs   dht(DHTStairsPin, DHTTYPE);
DHTBathroom dht(DHTBathroomPin, DHTTYPE);
DHTRoom1    dht(DHTRoom1Pin, DHTTYPE);
DHTRoom2    dht(DHTRoom2Pin, DHTTYPE);
DHTRoom3   	dht(DHTRoom3, DHTTYPE);
DHTBoiler   dht(DHTBoiler, DHTTYPE);
DHTBasement dht(DHTBasement, DHTTYPE);
DHTOutdoor  dht(DHTOutdoor, DHTTYPE);

// массив objDHTSens хранит названия датчиков
char objDHTSens[MAX_DHT_SENSORS] = {"Kuh", "Klad", "Shower", "Hall", "Cabinet", "Corridor", "Stairs", "Bathroom", "Room1", "Room2", "Room3", "Boiler", "Basement", "Outdoor"};

// Temporary variables
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];


void initDHT() {
  moduleDHT = MODULE_ENABLE;
  started("DHT");
}
void workDHT() {
  if (cycle5m) {

		  for (int i = 0; i < MAX_DHT_SENSORS; i++) {

            float h = dht.readHumidity();
            float t = dht.readTemperature();
            float f = dht.readTemperature(true);

            if (isnan(h) || isnan(t) || isnan(f)) {
              Serial.println("Failed to read from DHT sensor!");
              strcpy(celsiusTemp,"Failed");
              strcpy(fahrenheitTemp, "Failed");
              strcpy(humidityTemp, "Failed");         
            }
            else{            	
              float hic = dht.computeHeatIndex(t, h, false);       
              dtostrf(hic, 6, 2, celsiusTemp);             
              float hif = dht.computeHeatIndex(f, h);
              dtostrf(hif, 6, 2, fahrenheitTemp);         
              dtostrf(h, 6, 2, humidityTemp);
              


              // выводи в монитор порта название датчика и его показания
			  Serial.print(objDHTSens[i]); 
              Serial.print("Humidity: ");
              Serial.print(h);
              Serial.print(" %\t Temperature: ");
              Serial.print(t);
              Serial.println(" *C ");

		  		}

           }
      }
   }

#endif



server_ajax.ino

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

// Make Response
#ifdef DHT_FEATURE
    for (int i = 0; i < MAX_DHT_SENSORS; i++) {
      s += makeTag(objDHTSens[i], "temp",     String(t, 1));
      s += makeTag(objDHTSens[i], "hum",      String(h, 1));
    }
#endif


dash.js

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

// DHT's temperature
var dhtTName = ['Кухня', 'Кладовка', 'Душевая', 'Зал', 'Кабинет', 'Коридор', 'Лестница', 'Ванная', 'Комната 1', 'Комната 2', 'Комната 3', 'Котельная', 'Подвал', 'Улица'];
var dhtTXml  = ['Kuhtemp', 'Kladtemp', 'Showertemp', 'Halltemp', 'Cabinettemp', 'Corridortemp', 'Stairstemp', 'Bathroomtemp', 'Room1temp', 'Room2temp', 'Room3temp', 'Boilertemp', 'Basementtemp', 'Outdoortemp'];
var dhtTId   = ['dash-Kuhtemp', 'dash-Kladtemp', 'dash-Showertemp', 'dash-Halltemp', 'dash-Cabinettemp', 'dash-Corridortemp', 'dash-Stairstemp', 'dash-Bathroomtemp', 'dash-Room1temp', 'dash-Room2temp', 'dash-Room3temp', 'dash-Boilertemp', 'dash-Basementtemp', 'dash-Outdoortemp'];

// DHT's humidity
var dhtHName = ['Кухня', 'Кладовка', 'Душевая', 'Зал', 'Кабинет', 'Коридор', 'Лестница', 'Ванная', 'Комната 1', 'Комната 2', 'Комната 3', 'Котельная', 'Подвал', 'Улица'];
var dhtHXml  = ['Kuhhum', 'Kladhum', 'Showerhum', 'Hallhum', 'Cabinethum', 'Corridorhum', 'Stairshum', 'Bathroomhum', 'Room1hum', 'Room2hum', 'Room3hum', 'Boilerhum', 'Basementhum', 'Outdoorhum'];
var dhtHId   = ['dash-Kuhhum', 'dash-Kladhum', 'dash-Showerhum', 'dash-Hallhum', 'dash-Cabinethum', 'dash-Corridorhum', 'dash-Stairshum', 'dash-Bathroomhum', 'dash-Room1hum', 'dash-Room2hum', 'dash-Room3hum', 'dash-Boilerhum', 'dash-Basementhum', 'dash-Outdoorhum'];




function getDashData() {


	          // DHT's temp

          for (var i = 0; i < dhtTName.length; i++) {
            try {
              var ddht = this.responseXML.getElementsByTagName(dhtTXml[i])[0].childNodes[0].nodeValue;
            } catch (err) {
                ddht = '-1';
                //alert('Error' + err.name + ':' + err.message + '\n' + err.stack);
              }
            try {
              document.getElementById(dhtTId[i]).innerHTML        = ddht[i];
            } catch (err) { }
          }


          // DHT's hum

          for (var i = 0; i < dhtHName.length; i++) {
            try {
              var ddht = this.responseXML.getElementsByTagName(dhtHXml[i])[0].childNodes[0].nodeValue;
            } catch (err) {
                ddht = '-1';
                //alert('Error' + err.name + ':' + err.message + '\n' + err.stack);
              }
            try {
              document.getElementById(dhtHId[i]).innerHTML        = ddht[i];
            } catch (err) { }
          }


}
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение alexsis_76 » Вс мар 10, 2019 10:58 am

нет
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение shemnik69 » Вс мар 10, 2019 12:25 pm

Если мне надо считывать данные с нескольких датчиков DHT,
Сразу уточню.
Датчики типа DHT, должны при опросе, иметь паузу , желательно несколько секунд.
Поэтому, в loop добавляется таймер, скажем 10 сек. При его активации (true), выполняем чтение данных с датчиков. Правильный алгоритм, должен только по таймеру получать запуск, перебор датчиков, а также логика работы по полученным данным должна быть уже в отдельной функции.
Т.е. у Вас например 8 датчиков. Каждые 10 сек. Таймер переходит на функцию опроса и опрашивается один датчик скажем первый. Во второй заход второй и пр. Так решается вопрос времени, минимальной нагрузки на расчёт данных, а поскольку библиотека dht довольно сильно отбирает процессорную память и стек а также ещё и регистры то одновременном опрашивать последовательно, скажем восемь датчиков, приведёт к возможным тормозам.
Есть много примеров, как реализовать такие алгоритмы, см. Форумы на ардуино.ру или амперка.ру.
Я например целиком пишу скетч на прерываниях, по таймерам и по сколько например если не использовать выше описанные рекомендации, то например модбус, будет терять данные из за превышения времени ответа.
Прерывания решают данный вопрос. Т.е задачи которые должны выполнятся в реальном времени это как раз опрос по сети модбус то тут только прерывания. Также смотрите примеры библиотек опроса датчиков в которых отсутствует задержка (delay) например это относится к датчиками ds18b20 и dht.
Я сейчас не дома и не могу показать пример этого скетча но сама идее как это сделать описана вот тут mypractik.ru урок начиная с 60. Там и примеры и подробно расписан сама имдея. Рекомендуется почитать.
Ответить