NEWS
Драйвер Mqtt + Arduino
-
Пока возился в шкафу, видимо при перебоях в питании снова навалился мусор. Удалил драйвер, поставил заново, в объектах мусор ушел а вот в состояних непонятно как теперь удалить?
Может драйвер подправить чтобы мысор не пропускал и не заводил переменные с мусором?
266_sadsd.png
305_view_2.txt
305_view.jpg -
Использую модуль HanRun HR911105A и библиотеку UIPEthernet. С библиотекой Ethernet(как в примерах) не работает.
IP получаю по DHSP. как уменьшить размер скетча http://forum.iobroker.com/download/file.php?id=1102 (PLC3.zip).
вылазит за 30кБ. Если IP - статический то 27кБ. Или с какой библиотекой, меньшего размера, работает модуль HanRun HR911105A?
462_ardfull_schema-600x317.png -
Использую модуль HanRun HR911105A и библиотеку UIPEthernet. С библиотекой Ethernet(как в примерах) не работает.
IP получаю по DHSP. как уменьшить размер скетча http://forum.iobroker.com/download/file.php?id=1102 (PLC3.zip).
вылазит за 30кБ. Если IP - статический то 27кБ. Или с какой библиотекой, меньшего размера, работает модуль HanRun HR911105A? `
О_о, Alekseym6, насмешил, я даже прослезился)))HanRun HR911105A это маркировка http://www.electronshik.ru/item/hr911105a-552539!
А модуль у тебя, судя по фото, скорее всего на чипе http://www.microchip.com/wwwproducts/Devices.aspx?product=ENC28J60, типа http://www.youtube.com/watch?v=nb-7gvvX5c8.
В Arduino IDE используется библиотека https://github.com/knolleary/pubsubclient, там в документации написано:
> The library cannot currently be used with hardware based on the ENC28J60 chip – such as the Nanode or the Nuelectronics Ethernet Shield. For those, there is an alternative library available – but I do not know what state that is in.
Перевод в двух словах:Для чипа ENC28J60 не годится, надо использовать библиотеку https://github.com/njh/NanodeMQTT, но работает она или нет - хз…
-
Верно на чипе ENC28J60, библиотека UIPEthernet рабочая. Размер скетча больше 27кБ. Как оптимизировать?
-
Верно на чипе ENC28J60, библиотека UIPEthernet рабочая. Размер скетча больше 27кБ. Как оптимизировать? `
1. Для не-экстрасенсов можно текст скетча?))2. Попробуйте набор библиотек, что я привел в цитате…
-
линк на скетч я указал выше. Или вот он:
! ````
/
//------------------------------------------ Libraries ------------------------------------------//
//Подключаем библиотеки
#include <spi.h>
#include <uipethernet.h> //Arduino-uip-master
#include <pubsubclient.h> //https://github.com/knolleary/pubsubclient
//---------------------------------------- End libraries ----------------------------------------//
! //------------------------------------------- Ethernet ------------------------------------------//
//Глобальные константы для работы с сетью
byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };
byte mqttserver[] = { };
byte ip[] = { 192, 168, 0, 165 };
byte gateway[] = { 192,168,0,1 };
byte subnet[] = { 255,255,255,0 };
EthernetClient ethClient;
PubSubClient client(mqttserver, 1883, callback, ethClient);
//----------------------------------------- End ethernet ----------------------------------------//
! //------------------------------------------- Sensors -------------------------------------------//
#define LED_pin 6
int analogPinA0 = 0;
int analogPinA1 = 1;
int analogPinA2 = 2;
int SensorA0 = 0;
int SensorA1 = 0;
int SensorA2 = 0;
char buff[20];
//String PLC = "arduinoPLC71";
unsigned long lastTime = 0;
unsigned long poolTime = 5; // по-умолчанию интервал опроса 5 сек
unsigned long timeout = 10; // по-умолчанию таймаут перед восстановлением соединения 10 сек
boolean LED_st;
//----------------------------------------- End Sensors -----------------------------------------//
! //###############################################################################################//
//########################################## Functions ##########################################//
//###############################################################################################//
! //------------------------------------------- Callback -----------------------------------------//
//Функция обработки входящих соединений - прием данных по подписке
void callback(char topic, byte payload, unsigned int length) {
Serial.println ("");
//Serial.println ("---");
//Serial.println ("New callback of MQTT-broker");
//преобразуем тему(topic) и значение (payload) в строку
payload[length] = '\0';
String strTopic = String(topic);
String strPayload = String((char*)payload);
//значение целлочисленное, преобразем к типу данных int
//if (strTopic == "arduinoPLC71/timeout") {
//timeout = strPayload.toInt();
//}
if (strTopic == "arduinoPLC71/pollTimer") {
if (strPayload == "null" || strPayload == "0") {
//sprintf(buff,"%d",poolTime);
//client.publish("arduinoPLC71/pollTimer","0");
}
else {
poolTime = strPayload.toInt();
}
}
else if (strTopic == "common/led") {
if (strPayload == "OFF" || strPayload == "0" || strPayload == "false") digitalWrite(LED_pin, HIGH);
else if (strPayload == "ON" || strPayload == "1" || strPayload == "true") digitalWrite(LED_pin, LOW);
}
Serial.print (strTopic);
Serial.print (" ");
Serial.println (strPayload);
Serial.println ("-------");
}
//----------------------------------------- End callback ---------------------------------------//
! //------------------------------------------- connect PLC --------------------------------------//
//Функция connect PLC
void connPLC() {
Serial.print("Connect to MQTT-broker... ");
if (client.connect("arduinoPLC71")) {
Serial.println("success");
client.publish("arduinoPLC71/status","online");
client.subscribe("arduinoPLC71/pollTimer");
//client.subscribe("arduinoPLC71/timeout");
client.subscribe("common/led");
}
else {
Serial.println("failed!");
}
}
//----------------------------------------- End connect PLC ------------------------------------//
! //------------------------------------------ Void setup ----------------------------------------//
void setup() {
Serial.begin(57600);
pinMode(LED_pin, OUTPUT);
digitalWrite(LED_pin, HIGH);
Serial.println("mqtt-client arduinoPLC71... ");
//стартуем сетевое подключение
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip, gateway, subnet);
delay(3000);
}
Serial.print("PLC's IP: ");
Serial.println(Ethernet.localIP());
//Serial.print("Connect to MQTT-broker... ");
//подключаемся к MQTT-брокеру
connPLC();
}
//---------------------------------------- End void setup --------------------------------------//
! //------------------------------------------ Void loop -----------------------------------------//
void loop() {
client.loop(); //проверка входящих соединений по подписке
//если соединение не активно
if (!client.connected()) {
//Serial.print("Reconnect to MQTT-broker... ");
//пытаемся его восстановить
connPLC();
}
//проверяем условие интервала измерений
if (millis() > (lastTime + poolTime * 1000)) {
lastTime = millis();
//если соединение активно
if (client.connected()) {
//Serial.println(" ");
//считываем данные и публикуем их
SensorA0 = analogRead(analogPinA0);
sprintf(buff,"%d",SensorA0); //if float dtostrf(SensorA0, 5, 2, buff);
// Serial.println("Publish to MQTT-broker value sensor A0 is: ");
// Serial.println(buff);
client.publish("arduinoPLC71/sensorA0/value",buff);
client.publish("arduinoPLC71/sensorA0/status","OK");
SensorA1 = analogRead(analogPinA1);
sprintf(buff,"%d",SensorA1); //if float dtostrf(SensorA0, 5, 2, buff);
// Serial.print("Publish to MQTT-broker value sensor A1 is: ");
// Serial.println(buff);
client.publish("arduinoPLC71/sensorA1/value",buff);
client.publish("arduinoPLC71/sensorA1/status","OK");
SensorA2 = analogRead(analogPinA2);
sprintf(buff,"%d",SensorA2); //if float dtostrf(SensorA0, 5, 2, buff);
// Serial.print("Publish to MQTT-broker value sensor A2 is: ");
// Serial.println(buff);
client.publish("arduinoPLC71/sensorA2/value",buff);
client.publish("arduinoPLC71/sensorA2/status","OK");
//--------
}
}
}
//---------------------------------------- End void loop ---------------------------------------//</pubsubclient.h></uipethernet.h></spi.h> -
линк на скетч я указал выше. Или вот он: `
Пожалуйста, под спойлер.Да, библиотека походу "жирная".
Попробуйте библиотеки https://github.com/njh/NanodeMQTT.
Там и примеры есть публикации/подписки.
Если получится - отпишитесь, всем будет интересно узнать))
-
День добрый.
Сейчас озадачился автоматизацией управления отоплением своей двухкомнатной квартиры в многоэтажке (газовый котел BAXI). На данный момент собираюсь делать управление теплым полом (вкл/выкл), управление батареями (вкл/выкл), управление температурой системы отопления. В каждой комнате будет датчик температуры пола и воздуха (DS18B20). Будет измеряться уличная температура.
Сейчас изучаю arduino pro mini (5V 16MHz) и iskra neo (aka arduino leonardo). Ардуино и сервер будут располагаться рядом. Собираюсь начать изучать ioBroker.
Поделитесь вашим опытом каким образом мне лучше связать ардуино и ioBroker (firmata/mqtt или еще что-то)? Обязательно ли подсоединять ethernet shield или можно связать ардуинку и сервер через uart?
-
День добрый.
Сейчас озадачился автоматизацией управления отоплением своей двухкомнатной квартиры в многоэтажке (газовый котел BAXI). На данный момент собираюсь делать управление теплым полом (вкл/выкл), управление батареями (вкл/выкл), управление температурой системы отопления. В каждой комнате будет датчик температуры пола и воздуха (DS18B20). Будет измеряться уличная температура.
Сейчас изучаю arduino pro mini (5V 16MHz) и iskra neo (aka arduino leonardo). Ардуино и сервер будут располагаться рядом. Собираюсь начать изучать ioBroker.
Поделитесь вашим опытом каким образом мне лучше связать ардуино и ioBroker (firmata/mqtt или еще что-то)? Обязательно ли подсоединять ethernet shield или можно связать ардуинку и сервер через uart? `
А проводка протянута до радиаторов, до мест установки датчиков?Можно и по uart - есть примочка в node-red для управлния arduino по rs232, но я не ковырял, я вообще полностью откзался от node-red'а.
У себя использую arduino uno с ethernet'овсикими шилдами на чипе w5100 (Все из китая) были нюансы, но сейчас все работает норм. есть arduino pro mini - они отдают данные по uart(счетчики воды и электроэнергии) главным ардуинам а те в свою очередь все работают по mqtt. Сейчас работаю над pro mini + nrf24 которые будут стоят в стиральной машине, водонагревателе…. будут отдавать данные и управлять оборудованием по радиоканалу. В данный момент в квартире трудятся 9 ардуин).
Так что я бы советовал смотреть в строну mqtt, протокол быстрый и понятный.
282_expertenmodus.png -
А проводка протянута до радиаторов, до мест установки датчиков?
Можно и по uart - есть примочка в node-red для управлния arduino по rs232, но я не ковырял, я вообще полностью откзался от node-red'а.
У себя использую arduino uno с ethernet'овсикими шилдами на чипе w5100 (Все из китая) были нюансы, но сейчас все работает норм. есть arduino pro mini - они отдают данные по uart(счетчики воды и электроэнергии) главным ардуинам а те в свою очередь все работают по mqtt. Сейчас работаю над pro mini + nrf24 которые будут стоят в стиральной машине, водонагревателе…. будут отдавать данные и управлять оборудованием по радиоканалу. В данный момент в квартире трудятся 9 ардуин).
Так что я бы советовал смотреть в строну mqtt, протокол быстрый и понятный. `
У меня проводка протянута только к датчикам температуры по квартире и на коллекторах,а так же к герконам на окнах (витая пара FTP). К радиаторам к сожалению нет проводки. Да, читал про резисторы на ethernet шилдах. Спасибо за информацию. Тогда сначала освоюсь с установкой ioBroker, а потом уже буду изучать mqtt.
-
У меня проводка протянута только к датчикам температуры по квартире и на коллекторах,а так же к герконам на окнах (витая пара FTP). К радиаторам к сожалению нет проводки. Да, читал про резисторы на ethernet шилдах. Спасибо за информацию. Тогда сначала освоюсь с установкой ioBroker, а потом уже буду изучать mqtt. `
У меня к радиаторам есть проводка, пока только датчики температуры стоят ds'ки. Планирую покупать клапана eQ-3, отопление центральное, так что только регулировать на самих радиаторах. Теплых полов нет и не нужны они, единственный будет на балконе, пока не думал как им управлять но скорее всего заводским контроллером к которому пригамырить arduinkу). -
Так вот: Китайцы видимо не понимают разницы в маркировке чип резисторов между 510 и 511 либо не нашлось под рукой 510 и подумали что 511 это одно и тоже ведь 1 на конце добавляет 0 т.е. получается те же 510. Если внимательно посмотреть справочники, то там четко указано, что 510 это 51 Ом, а 511 это уже 510 Ом. `
Только что получил на почте W5100. Тоже стоит резистор 511
-
Подскажите, что-то я запутался между ардуино и брокером… Если я планирую измерять температуру (5-10 мест), давление, освещенность... мне лучше заводить датчики на ардуино и потом стыковать к брокеру, или (если установить брокер на odroid/кубик) завести все датчики на odroid/кубик и в ардуино вообще отпадает необходимость?
-
Подскажите, что-то я запутался между ардуино и брокером… Если я планирую измерять температуру (5-10 мест), давление, освещенность... мне лучше заводить датчики на ардуино и потом стыковать к брокеру, или (если установить брокер на odroid/кубик) завести все датчики на odroid/кубик и в ардуино вообще отпадает необходимость? `
Оба варианта работоспособны…С помощью ардуины можно делать более распределенные системы. Т.е. у меня к примеру одна ардуина отвечает за охрану/пожарку и передает данные на сервер. Вторая ардуина стоит на балконе и отправляет данные о погоде на сервер, включая датчики внутри квартиры. Была еще третья - занималась освещением, но я её "выдернул" под другой проект. И кстати - можно даже несколько плат с ioBroker объединить в пул - для обмена данными и работе на общую визуализацию...
Можно и на саму плату с помощью тех же GPIO повесить все датчики и исполнительные механизмы. Только если зависнет сервер - то пропадет все... У меня если зависнет сервак - то ардуины продолжат обрабатывать данные (хоть и не будут передавать на сервер) и работать по заложенному алгоритму.
-
Спасибо!
Стало меньше мусора в голове
-
Можно ли организовать работу с одной переменной (без IN и OUT) ? У меня контролер ловит свои же сообщения и отрабатывает …. это глюк или все как положено ?
как в iobroker организовать работу когда лампочка в vis отображает значение пришедшее в OUT а упровляющий надо посылать в IN ?
5076_2018_09_21_19_35_19_window.png -
кстати как убрать приставку из топика "mqtt.0." которую обязательно стал добавлять mqqt driver iobroker
-
кстати как убрать приставку из топика "mqtt.0." которую обязательно стал добавлять mqqt driver iobroker `
А зачем? а если у тебя будет два драйвера MQTT? (второй получится mqtt.1.) и в объектах проще искать. -
чтобы меньше в ардуино писать
-
чтобы меньше в ардуино писать `
:shock: А что ты туда пишешь?У меня так
client.publish("myhome/NRF/Vodonagrevatel/btn_Temp_Selector", "0"); client.publish("myhome/NRF/Vodonagrevatel/Status", "0"); client.subscribe("myhome/NRF/#");