Подключение железа к AMS
Модератор: Alex
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Подключение железа к AMS
Да, но при этом пропала и передача состояния в МД. Впрочем как и статус живости AMS. Теперь восстанавливаю во всех новых дистрибутивах.
PS Не прошло и 3 года как это стало актуальным и для меня
PS Не прошло и 3 года как это стало актуальным и для меня
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Подключение железа к AMS
Передача удалена по тем же соображениям. Все эти состояния и статусы — мои поделки на коленке для моей конкретной ситуации в то время (кроме того, они весьма спорны как концептуально, так и по исполнению) и к дистрибутиву не имеют никакого отношения. Но это не мешает прикрутить их обратно тому, кому это нужно.Да, но при этом пропала и передача состояния в МД. Впрочем как и статус живости AMS. Теперь восстанавливаю во всех новых дистрибутивах.
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Подключение железа к AMS
Концептуально соглашусь , в исполнении знаю ( но не доделал) как отдать одним запросом. С MQTT только начинаю разбираться. Пример реализации выложили.
По поводу контактов. Правильную тему задумал ser009 ( работать через массив ).Надеюсь на публикацию. А пока подправленный код для двух контактов. Пины можно назначать любые свободные.Только не нарваться на SPI.
Код: Выделить всё
#ifdef CONTACTS_FEATURE
#define cont1pin 27 // HOM
#define cont2pin 31 // CLO
#define OPEN 1
#define CLOSE 0
char cont1object[] = "cont1";
char cont2object[] = "cont2";
char cont1openMess[] = "Open"; char cont1closeMess[] = "Closed";
char cont2openMess[] = "Open"; char cont2closeMess[] = "Closed";
// states
// 0 - open
// 1 - close
// 2 - not defined
// 3 - not defined and not contXstatus
byte cont1state = 2; byte old_cont1state = 3; byte cont1objectState = 2;
byte cont2state = 2; byte old_cont2state = 3; byte cont2objectState = 2;
void contactsInit() {
pinMode(cont1pin, INPUT);
pinMode(cont2pin, INPUT);
moduleContacts = MODULE_ENABLE;
started("Contacts");
}
void printContMess(char obj[], char mess[]) {
timeStamp(); Serial.print(obj); Serial.print(F(": ")); Serial.println(mess);
}
void contactsWorks() {
// cont1 (HOM)
cont1state = digitalRead(cont1pin);
if (cont1state != old_cont1state) {
old_cont1state = cont1state;
if (cont1state == 0) {
cont1objectState = OPEN;
printContMess(cont1object, cont1openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, OPEN);
#endif
} else {
cont1objectState = CLOSE;
printContMess(cont1object, cont1closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, CLOSE);
#endif
}
}
if (cycle1m) {
old_cont1state = cont1state;
if (cont1state == 0) {
printContMess(cont1object, cont1openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, OPEN);
#endif
} else {
printContMess(cont1object, cont1closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, CLOSE);
#endif
}
}
// cont2 (CLO)
cont2state = digitalRead(cont2pin);
if (cont2state != old_cont2state) {
old_cont2state = cont2state;
if (cont2state == 0) {
cont2objectState = OPEN;
printContMess(cont2object, cont2openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, OPEN);
#endif
} else {
cont2objectState = CLOSE;
printContMess(cont2object, cont2closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, CLOSE);
#endif
}
}
if (cycle1m) {
old_cont2state = cont2state;
if (cont1state == 0) {
printContMess(cont2object, cont2openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, OPEN);
#endif
} else {
printContMess(cont2object, cont2closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, CLOSE);
#endif
}
}
}
#endif // CONTACTS_FEATURE
- 2018-08-07 23:37:18 Host 192.168.2.108 GET /objects/?object=ncDue01&op=m&m=update&v=1
2018-08-07 23:37:18 (duration 1 min 0 sec)2018-08-07 23:37:18 cont1: Open
2018-08-07 23:37:18 Host 192.168.2.108 GET /objects/?object=cont1&op=m&m=update&v=1
2018-08-07 23:37:18 cont2: Open
2018-08-07 23:37:18 Host 192.168.2.108 GET /objects/?object=cont2&op=m&m=update&v=1
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 148
- Зарегистрирован: Ср июл 25, 2018 10:37 pm
- Благодарил (а): 43 раза
- Поблагодарили: 8 раз
Re: Подключение железа к AMS
Ребят, ткните в пример - подключил датчик движения к AMS в XRAY получаю 10:37:09 0.19678900 object [pirHAL] not found что делать чтобы сработало реле освещения которое включается (http://192.168.1.37/?rele20=0)? А потом в зависимости от времени суток или включать или не включать если светло
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Подключение железа к AMS
Для начала объяснить Алисе что у Вас появился новый класс , например AMS_PIR. Если в лоб , то в Объектах создать новый класс по образу температуры. Посмотри Тут.Пишу по памяти , конкретней только ночью.
Вот как принимаются 3 температуры , так же принять и PIR датчики. А вот что с ними делать дальше - увы еще не дорос (((.
Вот как принимаются 3 температуры , так же принять и PIR датчики. А вот что с ними делать дальше - увы еще не дорос (((.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 230
- Зарегистрирован: Чт фев 12, 2015 2:34 pm
- Благодарил (а): 36 раз
- Поблагодарили: 6 раз
Re: Подключение железа к AMS
А что надо будет еще править в новой версии кроме скетча Contacts что бы связь с МД оставалась?
Не считая тех моментов связанных с IP МД и IP устройства.
server i5, OS-Ubuntu Server 16., 1-wire
php 7, AMS,broadlink rm2,rm3 mini.
php 7, AMS,broadlink rm2,rm3 mini.
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Подключение железа к AMS
Первое , что бросается в глаза - Что Мега существует и она жива. Дописать на главной вкладке (если нет)
На самой вкладке Major
И в самом конце вкладки
Остальное по необходимости. Еще момент . В 017 версии изменены названия градусников. ( И опять же с ошибкой)).
Поэтому надо изменить имена и у Алисы.
PS И еще одна фишка - отдать все значения одним залпом. Для BME280 и DHT будет так
Код: Выделить всё
// Work mode
#define MODE_SERVER 1
#define MODE_UPDATE 2
byte modeWork = MODE_SERVER;
// Durations
time_t prevEventElectroCycle;
time_t prevEventMegaLive;
time_t prevEventRequest;
Код: Выделить всё
#ifdef MAJORDOMO_FEATURE
char majorMegaObject[] = "ncMega01";// Имя Меги
char majorCommObject[] = "comm_mega01";
byte MAJOR_IP[] = {192, 168, 2, 108};// Адрес Алисы
#define MAJOR_PORT 80
EthernetClient mclient;
Код: Выделить всё
void majorWorks() {
}
/* ------------------------------------------------------
Function majordomoMegaLive
Уведомление MajorDomo о том, что Mega жива и работает
--------------------------------------------------------- */
void majordomoMegaLive() {
if (cycle1m) {
sendRequestM(majorMegaObject, 1);
checkEvent(&prevEventMegaLive);
}
}
#endif // MAJORDOMO_FEATURE
Код: Выделить всё
char objSens[MAX_DS18B20_SENSORS][12] = {"temp1", "temp2", "temp2"};
PS И еще одна фишка - отдать все значения одним залпом. Для BME280 и DHT будет так
Код: Выделить всё
void sendBMEMajor(char obj[]) {//Создаем Объект " BMEPack
sprintf(buf, "GET /objects/?object=%s&op=m&m=update&%s=%.2f&%s=%.2f&%s=%.2f&%s=%.2f&%s=%.2f& HTTP/1.0",
obj, "Temp", temp, "Pres", pres, "Hum", hum, "TempDHT", dht11_t, "HumDHT", dht11_h);
#ifdef MAJORDOMO_FEATURE
sendBuffToMajor();
#endif
=====
void getUIP(char obj[]) {
sendBMEMajor(obj);
}
========
if (cycle1m) {
getUIP("packBME");// Отдаем каждую минуту
}
}
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Подключение железа к AMS
Вот добавил. Но у меня старая версия на Винде и чего то Дую она вообще не видит , а PIR только время апдейта. Попробую еще на Апельсине.lihodeev писал(а): ↑Чт авг 09, 2018 10:47 amРебят, ткните в пример - подключил датчик движения к AMS в XRAY получаю 10:37:09 0.19678900 object [pirHAL] not found что делать чтобы сработало реле освещения которое включается (http://192.168.1.37/?rele20=0)? А потом в зависимости от времени суток или включать или не включать если светло
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Подключение железа к AMS
Долго не мог понять ( да и сейчас не понимаю )), почему не работал LCD_20*4 экран совместно с ESP32. Цифры были видны , но очень бледно выглядели. На экран подавал 3.3 вольта. При этом с Дуей и ESP8266 никаких проблем не было - все работало идеально.
Пока не понял, что на экран надо подать 5 вольт питания. Код ничем не отличается от Меги .
Если прикрутить кнопки на аналоговый вход , то можно с экрана заносить данные в EEPROM и добить наконец то тему термостата
Сам экран почти идеально устанавливается в корпус D9MG ( только полмиллиметра подпилить у платы).
Пока не понял, что на экран надо подать 5 вольт питания. Код ничем не отличается от Меги .
Код: Выделить всё
#include <Wire.h>
#include <LiquidCrystal_I2C.h>// перед setup объявляем библиотеки
LiquidCrystal_I2C lcd(0x27,20,4);
==================
lcd.begin();// initialize the lcd with SDA and SCL pins в setup
// Print a message to the LCD.
lcd.backlight();
// lcd.clear();
// Print a message to the LCD.
lcd.setCursor(0,0);
lcd.print("AMS_ESP32 V_0.17");
lcd.setCursor(0,1);
lcd.print("TIME");
=========================
lcd.setCursor(10, 3);
lcd.print(uptimeString()); // в loop
Сам экран почти идеально устанавливается в корпус D9MG ( только полмиллиметра подпилить у платы).
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 136
- Зарегистрирован: Вс сен 02, 2018 8:03 am
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: Подключение железа к AMS
здравствуйте,nick7zmail писал(а): ↑Вс апр 24, 2016 10:31 am1) Оборудование: Датчик температуры DHT11/DHT22DHT22-PinOut.png
2) Возможности: Снятие показаний температуры/влажности. Отправка их в MD, если активен модуль MD, вывод показаний в монитор порта.
3) Для установки достаточно активировать модуль TEMP_FEATURE (если он не активирован), и заменить в папке со скетчем для ардуино файл rtemp.ino (во вложенном архиве). Показания храняться в dht1_temp, dht1_hum. По аналогии можно добавить несколько датчиков.
4) Пока не придумал как совместить со стандартным rtemp, т.к. там датчики ds18b20, и с них записываются только показания только температуры, и для 1 датчика ds нужно 1 место в массиве, а для DHT нужно 2 места под температуру и влажность...чуть позже подумаю над этим вопросом.
Никак не получается подключить DHT22 к AMS017.
Я взял скетч из сообщения, переименовал его в temp_dht.ino
Изменил там пин 28, так как пин 22 вроде как занят под PIR1. Ноги DHT22 подключил так 1 - 5V, 2 - пин 28, 4 - GND.
Скомпилировал успешно. Я уже не надеялся увидеть результат в браузере на странице AMS, но хотя бы в мониторе порта.
Но ничего не появилось.
Хотя в скетче есть код вывода чего-то в монитор.
Код: Выделить всё
Serial.println(current_temp[n]);
И каждая строчка кода неясна. Я надеялся найти какое-то пояснение по функциям в библиотеке, но не нашел библиотеку DHT.h, которая подключается в шапке файла.
Если пытаюсь подгрузить через менеджер библиотеку DHT от Adafruit, то компиляция вываливается с ошибкой.
Даже названия переменных непонятны:
byte tempSensorHealth - что значит эта переменная? при чем тут health = здоровье?
byte tempModulHealth; - тоже самое
не возникнет ли конфликта между этими массивами? имя же у них одинаковое
objSens[MAX_TEMP_SENSORS][12]
objSens[MAX_DS18B20_SENSORS][12] (из файла temp_ds18b20.ino)
current_temp[MAX_TEMP_SENSORS]
current_temp[MAX_DS18B20_SENSORS];
temp_[MAX_TEMP_SENSORS];
temp_[MAX_DS18B20_SENSORS];
и между функциями tempInit() файла temp_ds18b20.ino и файла temp_dht.ino