NEWS
Arduino+Mqtt FAQ для начинающих.
-
На всякий случай http://forum.iobroker.net/viewtopic.php?f=33&t=1609, мало ли) `
не посмотришь где я косячу ?
! ````
#include <spi.h> // Ethernet shield
#include <ethernet.h> // Ethernet shield
#include <pubsubclient.h> // MQTT
#include <virtualwire.h>
#include <easytransfervirtualwire.h>
#include <wire.h>
#include <liquidcrystal_i2c.h>
LiquidCrystal_I2C lcd(0x27,16,2);
///
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte server[] = {192, 168, 0, 102}; //IP Брокера
IPAddress ip(192, 168, 0, 112);
! EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "UNO_1"
#define Prefix_subscribe "UNO/Detskaya/"
! ////////////////////////////////////////////////////////////////////////////
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
// Serial.print(topic);
// Serial.print("=");
String strTopic = String(topic);
String strPayload = String((char*)payload);
// Serial.println(strPayload);
callback_iobroker(strTopic, strPayload);
}
! ////////////////////////////////////////////////////////////////////////////
//create object
EasyTransferVirtualWire ET;
! struct SEND_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to send
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
//Struct can'e be bigger then 26 bytes for VirtualWire version
byte ID;
long TemperatureBMP = 0;
long TemperatureDS = 0;
long Pressure = 0;
! };
! //give a name to the group of data
SEND_DATA_STRUCTURE mydata;
byte ID;
long TemperatureBMP = 0;
long TemperatureDS = 0;
long Pressure = 0;
! void setup(){
//start the library, pass in the data details
ET.begin(details(mydata));
Serial.begin(9600);
// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec Скорость порта
vw_set_rx_pin(8); //порт к которому подключен приемник 433 мГц
vw_rx_start(); // Start the receiver PLL runninglcd.init(); // Инициализируем экран
lcd.backlight(); //Включаем подсветку! Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
client.publish("UNO/Detskaya/Temp", "0");
client.publish("UNO/Detskaya/Pressure", "0");
client.subscribe("UNO/Detskaya/#");
}}
! void loop(){
//check and see if a data packet has come in.
if(ET.receiveData()){
//this is how you access the variables. [name of the group].[variable name]
//since we have data, we will blink it out.
if (mydata.ID == 1)
{
int TempBMP= (mydata.TemperatureBMP);
TempBMP = ((TempBMP)/100);
float TempDS= (mydata.TemperatureDS);
TempDS = ((TempDS)/100);
float Pressure2= (mydata.Pressure);
Pressure2 = ((Pressure2)/100);client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { client.publish("UNO/Detskaya/Temp", TempDS); client.publish("UNO/Detskaya/Pressure", Pressure2); client.subscribe("UNO/Detskaya/#"); } }
// Serial.print(TempBMP); //Вывод информации в COM порт
// Serial.println(", TempBMP:");
// Температуру в градусах Цельсия
Serial.print(TempDS);
Serial.print(" C°,");
// Температуру в градусах Цельсия
Serial.print(Pressure2);
Serial.print(" mm/");
//Выводим давление в мм.рт ст
Serial.println();
Serial.println();
delay(1000);//Вывод информации на LCD Экран
lcd.clear();//очищаем экран от старых данных
lcd.setCursor(0,0);//Устанавливаем курсор в начало первой строки
lcd.print("T1:");//Выводим первую температуру
lcd.print(TempDS);
lcd.setCursor(8,0);// устанавливаем курсор на 8 позицию в первой строке
lcd.print(" T2:");//Выводим вторую температуру
lcd.print(TempBMP);
//аналогично выводим вторую строку
lcd.setCursor(0,1);//Устанавливаем курсор в начало второй строки
lcd.print("Davlenie:");//Выводим давление
lcd.print(Pressure2);
}}
! }</liquidcrystal_i2c.h></wire.h></easytransfervirtualwire.h></virtualwire.h></pubsubclient.h></ethernet.h></spi.h>
Ругается - >! priemnik433_E2.ino: In function 'void callback(char*, byte*, unsigned int)': >! priemnik433_E2:28: error: 'callback_iobroker' was not declared in this scope >! priemnik433_E2.ino: In function 'void loop()': >! priemnik433_E2:96: error: no matching function for call to 'PubSubClient::publish(const char [18], float&)' >! priemnik433_E2.ino:96:47: note: candidates are: >! In file included from priemnik433_E2.ino:3:0: >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: boolean PubSubClient::publish(const char*, const char*) >! boolean publish(const char* topic, const char* payload); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: no known conversion for argument 2 from 'float' to 'const char*' >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: boolean PubSubClient::publish(const char*, const char*, boolean) >! boolean publish(const char* topic, const char* payload, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: candidate expects 4 arguments, 2 provided >! priemnik433_E2:97: error: no matching function for call to 'PubSubClient::publish(const char [22], float&)' >! priemnik433_E2.ino:97:55: note: candidates are: >! In file included from priemnik433_E2.ino:3:0: >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: boolean PubSubClient::publish(const char*, const char*) >! boolean publish(const char* topic, const char* payload); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: no known conversion for argument 2 from 'float' to 'const char*' >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: boolean PubSubClient::publish(const char*, const char*, boolean) >! boolean publish(const char* topic, const char* payload, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: candidate expects 4 arguments, 2 provided >! 'callback_iobroker' was not declared in this scope `
Типы переменных передаваемые в функцию не совпадают.
Пробуй так
if (!client.connected()) { if (client.connect(id_connect)) { char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } } ```` `
Остались только эти ошибки
priemnik433_E2.ino: In function 'void callback(char*, byte*, unsigned int)':
priemnik433_E2:28: error: 'callback_iobroker' was not declared in this scope
'callback_iobroker' was not declared in this scope
но судя по всему дело все в тех же переменных
-
не посмотришь где я косячу ?
! ````
#include <spi.h> // Ethernet shield
#include <ethernet.h> // Ethernet shield
#include <pubsubclient.h> // MQTT
#include <virtualwire.h>
#include <easytransfervirtualwire.h>
#include <wire.h>
#include <liquidcrystal_i2c.h>
LiquidCrystal_I2C lcd(0x27,16,2);
///
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte server[] = {192, 168, 0, 102}; //IP Брокера
IPAddress ip(192, 168, 0, 112);
! EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "UNO_1"
#define Prefix_subscribe "UNO/Detskaya/"
! ////////////////////////////////////////////////////////////////////////////
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
// Serial.print(topic);
// Serial.print("=");
String strTopic = String(topic);
String strPayload = String((char*)payload);
// Serial.println(strPayload);
callback_iobroker(strTopic, strPayload);
}
! ////////////////////////////////////////////////////////////////////////////
//create object
EasyTransferVirtualWire ET;
! struct SEND_DATA_STRUCTURE
{
//put your variable definitions here for the data you want to send
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
//Struct can'e be bigger then 26 bytes for VirtualWire version
byte ID;
long TemperatureBMP = 0;
long TemperatureDS = 0;
long Pressure = 0;
! };
! //give a name to the group of data
SEND_DATA_STRUCTURE mydata;
byte ID;
long TemperatureBMP = 0;
long TemperatureDS = 0;
long Pressure = 0;
! void setup(){
//start the library, pass in the data details
ET.begin(details(mydata));
Serial.begin(9600);
// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec Скорость порта
vw_set_rx_pin(8); //порт к которому подключен приемник 433 мГц
vw_rx_start(); // Start the receiver PLL runninglcd.init(); // Инициализируем экран
lcd.backlight(); //Включаем подсветку! Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
client.publish("UNO/Detskaya/Temp", "0");
client.publish("UNO/Detskaya/Pressure", "0");
client.subscribe("UNO/Detskaya/#");
}}
! void loop(){
//check and see if a data packet has come in.
if(ET.receiveData()){
//this is how you access the variables. [name of the group].[variable name]
//since we have data, we will blink it out.
if (mydata.ID == 1)
{
int TempBMP= (mydata.TemperatureBMP);
TempBMP = ((TempBMP)/100);
float TempDS= (mydata.TemperatureDS);
TempDS = ((TempDS)/100);
float Pressure2= (mydata.Pressure);
Pressure2 = ((Pressure2)/100);client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { client.publish("UNO/Detskaya/Temp", TempDS); client.publish("UNO/Detskaya/Pressure", Pressure2); client.subscribe("UNO/Detskaya/#"); } }
// Serial.print(TempBMP); //Вывод информации в COM порт
// Serial.println(", TempBMP:");
// Температуру в градусах Цельсия
Serial.print(TempDS);
Serial.print(" C°,");
// Температуру в градусах Цельсия
Serial.print(Pressure2);
Serial.print(" mm/");
//Выводим давление в мм.рт ст
Serial.println();
Serial.println();
delay(1000);//Вывод информации на LCD Экран
lcd.clear();//очищаем экран от старых данных
lcd.setCursor(0,0);//Устанавливаем курсор в начало первой строки
lcd.print("T1:");//Выводим первую температуру
lcd.print(TempDS);
lcd.setCursor(8,0);// устанавливаем курсор на 8 позицию в первой строке
lcd.print(" T2:");//Выводим вторую температуру
lcd.print(TempBMP);
//аналогично выводим вторую строку
lcd.setCursor(0,1);//Устанавливаем курсор в начало второй строки
lcd.print("Davlenie:");//Выводим давление
lcd.print(Pressure2);
}}
! }</liquidcrystal_i2c.h></wire.h></easytransfervirtualwire.h></virtualwire.h></pubsubclient.h></ethernet.h></spi.h>
Ругается - >! priemnik433_E2.ino: In function 'void callback(char*, byte*, unsigned int)': >! priemnik433_E2:28: error: 'callback_iobroker' was not declared in this scope >! priemnik433_E2.ino: In function 'void loop()': >! priemnik433_E2:96: error: no matching function for call to 'PubSubClient::publish(const char [18], float&)' >! priemnik433_E2.ino:96:47: note: candidates are: >! In file included from priemnik433_E2.ino:3:0: >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: boolean PubSubClient::publish(const char*, const char*) >! boolean publish(const char* topic, const char* payload); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: no known conversion for argument 2 from 'float' to 'const char*' >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: boolean PubSubClient::publish(const char*, const char*, boolean) >! boolean publish(const char* topic, const char* payload, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: candidate expects 4 arguments, 2 provided >! priemnik433_E2:97: error: no matching function for call to 'PubSubClient::publish(const char [22], float&)' >! priemnik433_E2.ino:97:55: note: candidates are: >! In file included from priemnik433_E2.ino:3:0: >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: boolean PubSubClient::publish(const char*, const char*) >! boolean publish(const char* topic, const char* payload); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:117:12: note: no known conversion for argument 2 from 'float' to 'const char*' >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: boolean PubSubClient::publish(const char*, const char*, boolean) >! boolean publish(const char* topic, const char* payload, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:118:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:119:12: note: candidate expects 3 arguments, 2 provided >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean) >! boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained); >! ^ >! C:\Users\Bond-PC\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:120:12: note: candidate expects 4 arguments, 2 provided >! 'callback_iobroker' was not declared in this scope `
Типы переменных передаваемые в функцию не совпадают.
Пробуй так
if (!client.connected()) { if (client.connect(id_connect)) { char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } } ```` `
Остались только эти ошибки
priemnik433_E2.ino: In function 'void callback(char*, byte*, unsigned int)':
priemnik433_E2:28: error: 'callback_iobroker' was not declared in this scope
'callback_iobroker' was not declared in this scope
но судя по всему дело все в тех же переменных `
Ну ругается же на 28 строку - callback_iobroker(strTopic, strPayload);Где в коде сама функция, вызываешь функуию callback_iobroker(strTopic, strPayload); а самой функции нету
-
Типы переменных передаваемые в функцию не совпадают.
Пробуй так
if (!client.connected()) { if (client.connect(id_connect)) { char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } } ```` `
Остались только эти ошибки
priemnik433_E2.ino: In function 'void callback(char*, byte*, unsigned int)':
priemnik433_E2:28: error: 'callback_iobroker' was not declared in this scope
'callback_iobroker' was not declared in this scope
но судя по всему дело все в тех же переменных `
Ну ругается же на 28 строку - callback_iobroker(strTopic, strPayload);Где в коде сама функция, вызываешь функуию callback_iobroker(strTopic, strPayload); а самой функции нету `
как раз хотел спросить что делает эта функция
/////////////////////////////////От Брокера////////////////////////////////////////////// void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "0"){ } }
добавил, ошибок больше стало аааааааа….........
6907_bildschirmfoto_2018-11-13_um_11.24.02.png
6907_bildschirmfoto_2018-11-13_um_11.23.52.png
6907_bildschirmfoto_2018-11-13_um_11.22.48.png
6907_bildschirmfoto_2018-11-13_um_11.22.24.png
6907_bildschirmfoto_2018-11-13_um_11.22.08.png
6907_bildschirmfoto_2018-11-13_um_11.25.35.png -
как раз хотел спросить что делает эта функция
/////////////////////////////////От Брокера////////////////////////////////////////////// void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "0"){ } }
добавил, ошибок больше стало аааааааа…......... `
Эта функция принимает strTopic от iobroker. -
как раз хотел спросить что делает эта функция
/////////////////////////////////От Брокера////////////////////////////////////////////// void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "0"){ } }
добавил, ошибок больше стало аааааааа….........
Эта функция принимает strTopic от iobroker.Для примера:
/////////////////////////////////От Брокера////////////////////////////////////////////// void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "myhome/Lighting/BedRoom_Main") { if (strPayload == "0") { digitalWrite(23, 0); delay(pause); client.publish("myhome/Lighting/BedRoom_Main", "0"); } else if (strPayload == "1") { digitalWrite(23, 1); delay(pause); client.publish("myhome/Lighting/BedRoom_Main", "1"); } }
-
как раз хотел спросить что делает эта функция
/////////////////////////////////От Брокера////////////////////////////////////////////// void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "0"){ } }
добавил, ошибок больше стало аааааааа….........
Эта функция принимает strTopic от iobroker.Для примера:
/////////////////////////////////От Брокера////////////////////////////////////////////// void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "myhome/Lighting/BedRoom_Main") { if (strPayload == "0") { digitalWrite(23, 0); delay(pause); client.publish("myhome/Lighting/BedRoom_Main", "0"); } else if (strPayload == "1") { digitalWrite(23, 1); delay(pause); client.publish("myhome/Lighting/BedRoom_Main", "1"); } } ```` `
как понял это обратная связь, если на брокере значение поменять она передает его ардуине так ??
я эту функцию временно закоментил и залил скетч.
объекты создались но данные не приходят везде стоит - 0
!
-
как понял это обратная связь, если на брокере значение поменять она передает его ардуине так ??
я эту функцию временно закоментил и залил скетч.
объекты создались но данные не приходят везде стоит - 0
! filename="77.JPG" index="0">~~ `
Правильно понял, это callback.а данные у тебя и не будут передаватся брокеру (в коду у тебя так написано), только если ты кабель из ардуины выдернишь и заново вставишь, тогда передадутся данные в iobroker.
добавь строки в общий луп
char b[5];
String char_TempDS = String(TempDS);
char_TempDS.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b);
String char_Pressure2 = String(Pressure2);
char_Pressure2.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b);
-
как понял это обратная связь, если на брокере значение поменять она передает его ардуине так ??
я эту функцию временно закоментил и залил скетч.
объекты создались но данные не приходят везде стоит - 0
! filename="77.JPG" index="0">~~ `
Правильно понял, это callback.а данные у тебя и не будут передаватся брокеру (в коду у тебя так написано), только если ты кабель из ардуины выдернишь и заново вставишь, тогда передадутся данные в iobroker.
добавь строки в общий луп
char b[5];
String char_TempDS = String(TempDS);
char_TempDS.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b);
String char_Pressure2 = String(Pressure2);
char_Pressure2.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b); `
А разве сейчас не так ?
void loop(){ //check and see if a data packet has come in. if(ET.receiveData()){ //this is how you access the variables. [name of the group].[variable name] //since we have data, we will blink it out. if (mydata.ID == 1) { int TempBMP= (mydata.TemperatureBMP); TempBMP = ((TempBMP)/100); float TempDS= (mydata.TemperatureDS); TempDS = ((TempDS)/100); float Pressure2= (mydata.Pressure); Pressure2 = ((Pressure2)/100); client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } }
-
как понял это обратная связь, если на брокере значение поменять она передает его ардуине так ??
я эту функцию временно закоментил и залил скетч.
объекты создались но данные не приходят везде стоит - 0
! filename="77.JPG" index="0">~~ `
Правильно понял, это callback.а данные у тебя и не будут передаватся брокеру (в коду у тебя так написано), только если ты кабель из ардуины выдернишь и заново вставишь, тогда передадутся данные в iobroker.
добавь строки в общий луп
char b[5];
String char_TempDS = String(TempDS);
char_TempDS.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b);
String char_Pressure2 = String(Pressure2);
char_Pressure2.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b); `
А разве сейчас не так ?
void loop(){ //check and see if a data packet has come in. if(ET.receiveData()){ //this is how you access the variables. [name of the group].[variable name] //since we have data, we will blink it out. if (mydata.ID == 1) { int TempBMP= (mydata.TemperatureBMP); TempBMP = ((TempBMP)/100); float TempDS= (mydata.TemperatureDS); TempDS = ((TempDS)/100); float Pressure2= (mydata.Pressure); Pressure2 = ((Pressure2)/100); client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } } ```` `
нет, не ужели нельзя чуток подумать и вникнуть в код?
void loop(){ char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); //check and see if a data packet has come in. if(ET.receiveData()){ //this is how you access the variables. [name of the group].[variable name] //since we have data, we will blink it out. if (mydata.ID == 1) { int TempBMP= (mydata.TemperatureBMP); TempBMP = ((TempBMP)/100); float TempDS= (mydata.TemperatureDS); TempDS = ((TempDS)/100); float Pressure2= (mydata.Pressure); Pressure2 = ((Pressure2)/100); client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } }
-
Правильно понял, это callback.
а данные у тебя и не будут передаватся брокеру (в коду у тебя так написано), только если ты кабель из ардуины выдернишь и заново вставишь, тогда передадутся данные в iobroker.
добавь строки в общий луп
char b[5];
String char_TempDS = String(TempDS);
char_TempDS.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b);
String char_Pressure2 = String(Pressure2);
char_Pressure2.toCharArray(b,5);
client.publish("UNO/Detskaya/Temp", b); `
А разве сейчас не так ?
void loop(){ //check and see if a data packet has come in. if(ET.receiveData()){ //this is how you access the variables. [name of the group].[variable name] //since we have data, we will blink it out. if (mydata.ID == 1) { int TempBMP= (mydata.TemperatureBMP); TempBMP = ((TempBMP)/100); float TempDS= (mydata.TemperatureDS); TempDS = ((TempDS)/100); float Pressure2= (mydata.Pressure); Pressure2 = ((Pressure2)/100); client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } } ```` `
нет, не ужели нельзя чуток подумать и вникнуть в код?
void loop(){ char b[5]; String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); //check and see if a data packet has come in. if(ET.receiveData()){ //this is how you access the variables. [name of the group].[variable name] //since we have data, we will blink it out. if (mydata.ID == 1) { int TempBMP= (mydata.TemperatureBMP); TempBMP = ((TempBMP)/100); float TempDS= (mydata.TemperatureDS); TempDS = ((TempDS)/100); float Pressure2= (mydata.Pressure); Pressure2 = ((Pressure2)/100); client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { String char_TempDS = String(TempDS); char_TempDS.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); String char_Pressure2 = String(Pressure2); char_Pressure2.toCharArray(b,5); client.publish("UNO/Detskaya/Temp", b); client.subscribe("UNO/Detskaya/#"); } } ```` `
Пришлось еще объявить в начале программы (глобально)
float TempDS и float Pressure2,
иначе выдавал ошибку
но легче не стало на брокер ничего не передает.
на LCD всё отображает. :roll: :?
-
Пришлось еще объявить в начале программы (глобально)
float TempDS и float Pressure2,
иначе выдавал ошибку
но легче не стало на брокер ничего не передает.
на LCD всё отображает. :roll: :? `
замени строки :#define id_connect "UNO_1"
#define Prefix_subscribe "UNO/Detskaya/"
на
#define id_connect "UNO-Detskaya"
#define Prefix_subscribe "UNO/Detskaya/"
-
Похоже проблема в подключении к локалке, пока что не вижу шилда в сети …
Спасибо, сейчас попробую голый скетч залить.
На всякий случай [http://forum.iobroker.net/viewtopic.php?f=33&t=1609](http://forum.iobroker.net/viewtopic.php?f=33&t=1609), мало ли)
Проверил резисторную сборку стоят резы на 250 Om
И еще, подключил и комп и сеть, раскомментировал отладочные строки
тут Serial.print(topic);
и
тутvoid callback_iobroker(String strTopic, String strPayload){
if (strTopic == "UNO/Detskaya/Temp") {
Serial.println(strPayload);
Так вот в СОМ порт кроме температуры больше ничего не сыпится, по соединению вообще ноль информации.
P.S. Вообще странно, потому что при заливке стандартного скетча вэб сервера, все работает прекрасно :roll: :?:
-
подскажите, что могу делать не так?
данные на брокер приходят исправно. но я не могу ничего отправить обратно.
беру к примеру выключатель, лампочку, прописываю их на топик их состояния, нажимаю выключатель, на экране лампочки зажигаются, гаснут. а данные от брокера на mqtt сервер не уходят.
-
подскажите, что могу делать не так?
данные на брокер приходят исправно. но я не могу ничего отправить обратно.
беру к примеру выключатель, лампочку, прописываю их на топик их состояния, нажимаю выключатель, на экране лампочки зажигаются, гаснут. а данные от брокера на mqtt сервер не уходят. ` вы что то путаете наверное. Иоб выступает в качестве сервера mqtt. Он отправит значение всем подписавшимся на топик клиентам.
-
вы что то путаете наверное. Иоб выступает в качестве сервера mqtt. Он отправит значение всем подписавшимся на топик клиентам.
я ничего не путаю. в качестве сервера у меня стоит mosquitto. Иоб выступает в качестве клиента. С проблемой разобрался :). По умолчанию в клиенте mqtt не стоит галочка "publish" (на топике).
сейчас возник вопрос. можно ли отключить получение своих же сообщений? т.е. я публикую сообщение, и оно тут же приходит мне обратно.
-
instalator - Доброго времени! Есть вопрос по скетчу - скомпилировался, загрузился… работает. НО! температуру кажет -127, типа датчика не видит, а это не правда, запускаем типовой ТЕстер от Ардуино 1.0.6 - датчик есть температуру кажет.
Dallas Temperature IC Control Library Demo
Locating devices...Found 1 devices.
Parasite power is: ON
Found device 0 with address: 2880E93A04000010
Setting resolution to 9
Resolution actually set to: 9
Requesting temperatures...DONE
Temperature for device: 0
Temp 25.00 Temp F: 77.00
Requesting temperatures...DONE
Temperature for device: 0
Temp 25.00 Temp F: 77.00
Requesting temperatures...DONE
Temperature for device: 0
Temp 25.00 Temp F: 77.00
Как видно - адрес найден...
Вбиваем его сюда:
#define ONE_WIRE_BUS 8
#define TEMPERATURE_PRECISION 9 - сам добавил, без нее то же -127
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS_sensors(&oneWire);
// 28 80 E9 3A 04 00 00 10
DeviceAddress addr_T1 = { 0x28, 0x80, 0xE9, 0x3A, 0x04, 0x00, 0x00, 0x10 };
float T1 = 0;
Ну вот результат -
1308_arduino_mqtt.jpg -
температуру кажет -127, типа датчика не видит, а это не правда, запускаем типовой ТЕстер от Ардуино 1.0.6 - датчик есть температуру кажет. `
версия библиотек какая? попробуй откатить на предыдущую