NEWS
Arduino+Mqtt FAQ для начинающих.
-
Да спасибо, я читал ту тему, что то не пошло, сейчас попробую еще раз.
имеет значение на какой дуинке стоит шилд ? DUO или Mega? `
Нет, разницы никакой нету, единственно нужно помнить что на Меге 50,51,52 и вроде 53 пины используются шилдом. -
Сейчас имею такую конструкцию
!
Принимает данные от BMP 180 и ds18b20 по радиоканалу.Буду пытаться связать Ваш скетч со своим и получить данные в mqtt.
-
Да спасибо, я читал ту тему, что то не пошло, сейчас попробую еще раз.
имеет значение на какой дуинке стоит шилд ? DUO или Mega?
Нет, разницы никакой нету, единственно нужно помнить что на Меге 50,51,52 и вроде 53 пины используются шилдом.
А есть скетч поменьше ? с одним датчиком например…
Что то у меня библиотеки между собой конфликтуют
Вот скетч
! #include <virtualwire.h>#include <easytransfervirtualwire.h>#include <wire.h>#include <liquidcrystal_i2c.h>#include <spi.h>// Ethernet shield
! #include <ethernet.h>// Ethernet shield
! #include <pubsubclient.h>// MQTT
! #include <servo.h>#include <onewire.h>#include <dallastemperature.h>Servo servo;
! byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
! byte server[] = { 192, 168, 0, 102 }; //IP Брокера
! byte ip[] = { 192, 168, 0, 112 }; //IP Клиента (Arduino)
! EthernetClient ethClient;
! PubSubClient client(server, 1883, callback, ethClient);
! #define id_connect "myhome-kitchen"
! #define Prefix_subscribe "myhome/Kitchen/"
! LiquidCrystal_I2C lcd(0x27,16,2);
! //create object
! EasyTransferVirtualWire ET;
! ///////////////Объявляем порты ввода-вывода
! #define ServoPin 3 //Порт к которому подключен сервопривод
! const int start_DI_pin []= {2, 4, 5}; // Порты Ввода
! int n_DI_pin = sizeof(start_DI_pin) / sizeof(start_DI_pin[0])-1; //Вычисляем длинну массива
! const int start_DO_pin []= {6, 7}; //Порты Вывода
! int n_DO_pin = sizeof(start_DO_pin) / sizeof(start_DO_pin[0])-1; //Вычисляем длинну массива
! int DI[] = {0, 0, 0};
! int old_DI[] = {0, 0};
! ///////////////////////////Переменные для работы с освещением//////////////////////////////////////
! int ServoAngle = 100; //Угол сервопривода при включении
! int flag = 0;
! int flag2 = 0;
! int pause = 0;
! //–----------------------------------------- Sensors -------------------------------------------//
! const int MQ7_Pin = A0; // Куда подключили MQ7
! //int MQ7Value = 0;
! int MQ7Value = analogRead(MQ7_Pin);
! const int foto_Pin = A1; // устанавливаем входную ногу для Фоторезистора
! //unsigned int fotoValue = 0; // цифровое значение фоторезистора
! unsigned int fotoValue = analogRead(foto_Pin);
! #define ONE_WIRE_BUS 10
! OneWire oneWire(ONE_WIRE_BUS);
! DallasTemperature DS_sensors(&oneWire);
! // 28 FF F2 5C 53 15 2 97
! DeviceAddress addr_T1 = { 0x28, 0xFF, 0xF2, 0x5C, 0x53, 0x15, 0x02, 0x97 };
! float T1 = 0;
! //dht DHT;
! //#define DHT22_PIN 9
! //float Hout = 0;
! //float Tout = 0;
! ////////////////////////////////////////////////////////////////////////////
! 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);
! }
! ////////////////////////////////////////////////////////////////////////////
! /////////////////////////////////////////////////////////////
! 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;
! //сервер
! //char buf[80];
! //Функция отправки HTTP-запроса на сервер
! //void sendHTTPRequest() {
! //Serial.println(buf);
! //}
! void setup(){
! //Serial.begin(57600);
! // Serial.println("start");
! //Объявляем порты Digital inputs/outputs
! for(int i=0 ;i<=n_DI_pin; i++) { pinMode (start_DI_pin __, INPUT); }
! digitalWrite(5, HIGH); //Окно
! digitalWrite(4, HIGH); //Объемник
! for(int i=0 ;i<=n_DO_pin; i++) { pinMode (start_DO_pin __, OUTPUT); }
! Ethernet.begin(mac, ip);
! if (client.connect(id_connect)) {
! getSensors();
! control();
! // client.publish("myhome/Kitchen/Change_Counter", "0");
! // client.publish("myhome/Kitchen/Temp_room", "0");
! // client.publish("myhome/Kitchen/Humidity_room", "0");
! // client.publish("myhome/Kitchen/Temp_radiator", "0");
! // client.publish("myhome/Kitchen/Temp_in", "0");
! // client.publish("myhome/Kitchen/Lux", "0");
! // client.publish("myhome/Kitchen/Servo", "0");
! // client.publish("myhome/Kitchen/MQ7", "0");
! client.subscribe("myhome/Kitchen/#");
! }
! /////////////////////////////////////////////////////////////////////////
! //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 running
! lcd.init(); // Инициализируем экран
! lcd.backlight(); //Включаем подсветку
! }
! 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);
! // 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);
! }
! // sprintf(buf, "GET /objects/?object=tempDet&op=m&m=tempChanged&t=%0d.%d", (int)TempBMP, abs(temp1));
! // sendHTTPRequest();
! // delay(500);
! // sprintf(buf, "GET /objects/?object=tempDS18B20_1&op=m&m=tempChanged&t=%0d.%d", (int)TempDS, abs(temp2));
! // sendHTTPRequest();
! }
! client.loop();
! control();
! getSensors();
! if (!client.connected()) {
! if (client.connect(id_connect)) {
! control();
! getSensors();
! client.subscribe("myhome/Kitchen/#");
! }
! }
! }____</dallastemperature.h></onewire.h></servo.h></pubsubclient.h></ethernet.h></spi.h></liquidcrystal_i2c.h></wire.h></easytransfervirtualwire.h></virtualwire.h> но тут черт ногу сломает потому что Ваш вставлял в свой и получилась ерунда. -
Да спасибо, я читал ту тему, что то не пошло, сейчас попробую еще раз.
имеет значение на какой дуинке стоит шилд ? DUO или Mega?
Нет, разницы никакой нету, единственно нужно помнить что на Меге 50,51,52 и вроде 53 пины используются шилдом.
А есть скетч поменьше ? с одним датчиком например…
Что то у меня библиотеки между собой конфликтуют
Вот скетч
! ```
`#include <virtualwire.h>#include <easytransfervirtualwire.h>#include <wire.h>#include <liquidcrystal_i2c.h>#include <spi.h>// Ethernet shield
#include <ethernet.h>// Ethernet shield
#include <pubsubclient.h>// MQTT
#include <servo.h>#include <onewire.h>#include <dallastemperature.h>Servo servo;
! byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
byte server[] = { 192, 168, 0, 102 }; //IP Брокера
byte ip[] = { 192, 168, 0, 112 }; //IP Клиента (Arduino)
! EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "myhome-kitchen"
#define Prefix_subscribe "myhome/Kitchen/"
! LiquidCrystal_I2C lcd(0x27,16,2);
//create object
EasyTransferVirtualWire ET;
! ///////////////Объявляем порты ввода-вывода
#define ServoPin 3 //Порт к которому подключен сервопривод
! const int start_DI_pin []= {2, 4, 5}; // Порты Ввода
int n_DI_pin = sizeof(start_DI_pin) / sizeof(start_DI_pin[0])-1; //Вычисляем длинну массива
! const int start_DO_pin []= {6, 7}; //Порты Вывода
int n_DO_pin = sizeof(start_DO_pin) / sizeof(start_DO_pin[0])-1; //Вычисляем длинну массива
! int DI[] = {0, 0, 0};
int old_DI[] = {0, 0};
! ///////////////////////////Переменные для работы с освещением//////////////////////////////////////
int ServoAngle = 100; //Угол сервопривода при включении
int flag = 0;
int flag2 = 0;
int pause = 0;
! //------------------------------------------- Sensors -------------------------------------------//
const int MQ7_Pin = A0; // Куда подключили MQ7
//int MQ7Value = 0;
int MQ7Value = analogRead(MQ7_Pin);const int foto_Pin = A1; // устанавливаем входную ногу для Фоторезистора
//unsigned int fotoValue = 0; // цифровое значение фоторезистора
unsigned int fotoValue = analogRead(foto_Pin);
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS_sensors(&oneWire);
// 28 FF F2 5C 53 15 2 97
DeviceAddress addr_T1 = { 0x28, 0xFF, 0xF2, 0x5C, 0x53, 0x15, 0x02, 0x97 };! float T1 = 0;
! //dht DHT;
//#define DHT22_PIN 9
//float Hout = 0;
//float Tout = 0;
! ////////////////////////////////////////////////////////////////////////////
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);
}
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
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;
! //сервер
//char buf[80];
! //Функция отправки HTTP-запроса на сервер
//void sendHTTPRequest() {
//Serial.println(buf);
//}
! void setup(){
! //Serial.begin(57600);
// Serial.println("start");
//Объявляем порты Digital inputs/outputs
for(int i=0 ;i<=n_DI_pin; i++) { pinMode (start_DI_pin [i], INPUT); }
digitalWrite(5, HIGH); //Окно
digitalWrite(4, HIGH); //Объемник
for(int i=0 ;i<=n_DO_pin; i++) { pinMode (start_DO_pin [i], OUTPUT); }
! Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
getSensors();
control();
// client.publish("myhome/Kitchen/Change_Counter", "0");
// client.publish("myhome/Kitchen/Temp_room", "0");
// client.publish("myhome/Kitchen/Humidity_room", "0");
// client.publish("myhome/Kitchen/Temp_radiator", "0");
// client.publish("myhome/Kitchen/Temp_in", "0");
// client.publish("myhome/Kitchen/Lux", "0");
// client.publish("myhome/Kitchen/Servo", "0");
// client.publish("myhome/Kitchen/MQ7", "0");client.subscribe("myhome/Kitchen/#");
}
! /////////////////////////////////////////////////////////////////////////
! //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(); //Включаем подсветку}
! 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);// 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);
}! // sprintf(buf, "GET /objects/?object=tempDet&op=m&m=tempChanged&t=%0d.%d", (int)TempBMP, abs(temp1));
// sendHTTPRequest();
// delay(500);
// sprintf(buf, "GET /objects/?object=tempDS18B20_1&op=m&m=tempChanged&t=%0d.%d", (int)TempDS, abs(temp2));
// sendHTTPRequest();}
client.loop();
control();
getSensors();
if (!client.connected()) {
if (client.connect(id_connect)) {
control();
getSensors();
client.subscribe("myhome/Kitchen/#");
}
}! }</dallastemperature.h></onewire.h></servo.h></pubsubclient.h></ethernet.h></spi.h></liquidcrystal_i2c.h></wire.h></easytransfervirtualwire.h></virtualwire.h>
но тут черт ногу сломает потому что Ваш вставлял в свой и получилась ерунда. ! А что мешает из скетча убрать все лишнее? и добавить свой код?[/i][/i] ```
-
Когда начинаю выкидывать еще больше ошибок, то одно не находит то другое…
Ну да ладно пойду рыть по форуму. Что бы выкидывать что то нужно понять что нужно а что не очень..
Спасиб..
-
Когда начинаю выкидывать еще больше ошибок, то одно не находит то другое…
Ну да ладно пойду рыть по форуму. Что бы выкидывать что то нужно понять что нужно а что не очень..
Спасиб.. `
Какие там могут быть ошибки? вот код оставил только mqtt! ````
#include <spi.h> // Ethernet shield
#include <ethernet.h> // Ethernet shield
#include <pubsubclient.h> // MQTT
! byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
byte server[] = { 192, 168, 1, 190 }; //IP Брокера
byte ip[] = { 192, 168, 1, 167 }; //IP Клиента (Arduino)
! EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "myhome-kitchen"
#define Prefix_subscribe "myhome/Kitchen/"
! ///////////////Объявляем порты ввода-вывода
! ////////////////////////////////////////////////////////////////////////////
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);
}
////////////////////////////////////////////////////////////////////////////
void setup() {
! Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
client.publish("myhome/Kitchen/Change_Counter", "0");
client.subscribe("myhome/Kitchen/#");
}
}
/////////////////////////////////////////////////////////////////////////
void loop() {
client.loop();
if (!client.connected()) {
if (client.connect(id_connect)) {
client.subscribe("myhome/Kitchen/#");
}
}
}
! /////////////////////////////////От Брокера//////////////////////////////////////////////
void callback_iobroker(String strTopic, String strPayload){
if (strTopic == "0"){}
}</pubsubclient.h></ethernet.h></spi.h> -
Похоже проблема в подключении к локалке, пока что не вижу шилда в сети …
Спасибо, сейчас попробую голый скетч залить.
Странная реакция роутера на подключение шилда. Пока он не подключен лампочки LAN мигают каждая как хочет,
при подключении шилда, начинают мигать синхронно.
-
Похоже проблема в подключении к локалке, пока что не вижу шилда в сети …
Спасибо, сейчас попробую голый скетч залить. `
На всякий случай http://forum.iobroker.net/viewtopic.php?f=33&t=1609, мало ли) -
Похоже проблема в подключении к локалке, пока что не вижу шилда в сети …
Спасибо, сейчас попробую голый скетч залить.
На всякий случай [http://forum.iobroker.net/viewtopic.php?f=33&t=1609](http://forum.iobroker.net/viewtopic.php?f=33&t=1609), мало ли)
Это я читал, и даже проверил свой шилд, у меня там маркировка резисторной сборки вообще отсутствует :shock:
PS: Да… проблема в шилде. Не коннектится.
-
Нашел проблему
byte server[] = { 192, 168, 0, 102 }; //IP Брокера byte ip[] = { 192, 168, 0, 112 }; //IP Клиента (Arduino)
Так не работает
А вот так
byte server[] = {192, 168, 0, 102}; //IP Брокера IPAddress ip(192, 168, 0, 112);
Заработало !
-
Когда начинаю выкидывать еще больше ошибок, то одно не находит то другое…
Ну да ладно пойду рыть по форуму. Что бы выкидывать что то нужно понять что нужно а что не очень..
Спасиб.. `
Какие там могут быть ошибки? вот код оставил только mqtt! ````
#include <spi.h> // Ethernet shield
#include <ethernet.h> // Ethernet shield
#include <pubsubclient.h> // MQTT
! byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
byte server[] = { 192, 168, 1, 190 }; //IP Брокера
byte ip[] = { 192, 168, 1, 167 }; //IP Клиента (Arduino)
! EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "myhome-kitchen"
#define Prefix_subscribe "myhome/Kitchen/"
! ///////////////Объявляем порты ввода-вывода
! ////////////////////////////////////////////////////////////////////////////
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);
}
////////////////////////////////////////////////////////////////////////////
void setup() {
! Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
client.publish("myhome/Kitchen/Change_Counter", "0");
client.subscribe("myhome/Kitchen/#");
}
}
/////////////////////////////////////////////////////////////////////////
void loop() {
client.loop();
if (!client.connected()) {
if (client.connect(id_connect)) {
client.subscribe("myhome/Kitchen/#");
}
}
}
! /////////////////////////////////От Брокера//////////////////////////////////////////////
void callback_iobroker(String strTopic, String strPayload){
if (strTopic == "0"){}
}</pubsubclient.h></ethernet.h></spi.h>
```` `Я так понимаю если все работает то Ваш скрипт должен был создать какие то топики в MQTT,
но в логах инфу видно
!
а вот в MQTT ничего нового!
-
Когда начинаю выкидывать еще больше ошибок, то одно не находит то другое…
Ну да ладно пойду рыть по форуму. Что бы выкидывать что то нужно понять что нужно а что не очень..
Спасиб.. `
Какие там могут быть ошибки? вот код оставил только mqtt! ````
#include <spi.h> // Ethernet shield
#include <ethernet.h> // Ethernet shield
#include <pubsubclient.h> // MQTT
! byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
byte server[] = { 192, 168, 1, 190 }; //IP Брокера
byte ip[] = { 192, 168, 1, 167 }; //IP Клиента (Arduino)
! EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "myhome-kitchen"
#define Prefix_subscribe "myhome/Kitchen/"
! ///////////////Объявляем порты ввода-вывода
! ////////////////////////////////////////////////////////////////////////////
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);
}
////////////////////////////////////////////////////////////////////////////
void setup() {
! Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
client.publish("myhome/Kitchen/Change_Counter", "0");
client.subscribe("myhome/Kitchen/#");
}
}
/////////////////////////////////////////////////////////////////////////
void loop() {
client.loop();
if (!client.connected()) {
if (client.connect(id_connect)) {
client.subscribe("myhome/Kitchen/#");
}
}
}
! /////////////////////////////////От Брокера//////////////////////////////////////////////
void callback_iobroker(String strTopic, String strPayload){
if (strTopic == "0"){}
}</pubsubclient.h></ethernet.h></spi.h>
```` `Я так понимаю если все работает то Ваш скрипт должен был создать какие то топики в MQTT,
но в логах инфу видно
! filename="88.JPG" index="1">~~
а вот в MQTT ничего нового! filename="99.JPG" index="0">~~ `
не там смотришь, смотри не в system а просто в mqtt.0 -
Какие там могут быть ошибки? вот код оставил только mqtt
! ````
#include <spi.h> // Ethernet shield
#include <ethernet.h> // Ethernet shield
#include <pubsubclient.h> // MQTT
! byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
byte server[] = { 192, 168, 1, 190 }; //IP Брокера
byte ip[] = { 192, 168, 1, 167 }; //IP Клиента (Arduino)
! EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "myhome-kitchen"
#define Prefix_subscribe "myhome/Kitchen/"
! ///////////////Объявляем порты ввода-вывода
! ////////////////////////////////////////////////////////////////////////////
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);
}
////////////////////////////////////////////////////////////////////////////
void setup() {
! Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
client.publish("myhome/Kitchen/Change_Counter", "0");
client.subscribe("myhome/Kitchen/#");
}
}
/////////////////////////////////////////////////////////////////////////
void loop() {
client.loop();
if (!client.connected()) {
if (client.connect(id_connect)) {
client.subscribe("myhome/Kitchen/#");
}
}
}
! /////////////////////////////////От Брокера//////////////////////////////////////////////
void callback_iobroker(String strTopic, String strPayload){
if (strTopic == "0"){}
}</pubsubclient.h></ethernet.h></spi.h>
```` `Я так понимаю если все работает то Ваш скрипт должен был создать какие то топики в MQTT,
но в логах инфу видно
! filename="88.JPG" index="2">~~
а вот в MQTT ничего нового! filename="99.JPG" index="1">~~
не там смотришь, смотри не в system а просто в mqtt.0
а нету у меня просто mqtt.0
!
-
Я так понимаю если все работает то Ваш скрипт должен был создать какие то топики в MQTT,
но в логах инфу видно
! filename="88.JPG" index="2">~~
а вот в MQTT ничего нового! filename="99.JPG" index="1">~~
не там смотришь, смотри не в system а просто в mqtt.0
а нету у меня просто mqtt.0
! filename="100.JPG" index="0">~~ `
Надеюсь обновлял? лучше рестартани вообще iobroker -
не там смотришь, смотри не в system а просто в mqtt.0 `
а нету у меня просто mqtt.0
! filename="100.JPG" index="0">~~
Надеюсь обновлял? лучше рестартани вообще iobroker
Рестартанул, не появилось,
удалил MQQT драйвер, поставил заново все равно только system((
:oops:
-
а нету у меня просто mqtt.0
! filename="100.JPG" index="0">~~
Надеюсь обновлял? лучше рестартани вообще iobroker
Рестартанул, не появилось,
удалил MQQT драйвер, поставил заново все равно только system((
:oops: `
По фильтру Detskay тоже ничего? у тебя ардуина публикует данные при старте?client.publish("myhome/Kitchen/Change_Counter", "0"); //публикует на iobroker если его нет создает объект.
-
Надеюсь обновлял? лучше рестартани вообще iobroker `
Рестартанул, не появилось,
удалил MQQT драйвер, поставил заново все равно только system((
:oops: `
По фильтру Detskay тоже ничего? у тебя ардуина публикует данные при старте?client.publish("myhome/Kitchen/Change_Counter", "0"); //публикует на iobroker если его нет создает объект. `
Вот где собака порылась….
Выключил, включил ардуину и все появилось.
Спасибо за терпение..
-
Теперь осталось разобраться в твоём коде и понять как публикуются данные.
-
Похоже проблема в подключении к локалке, пока что не вижу шилда в сети …
Спасибо, сейчас попробую голый скетч залить.
На всякий случай [http://forum.iobroker.net/viewtopic.php?f=33&t=1609](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
-
Похоже проблема в подключении к локалке, пока что не вижу шилда в сети …
Спасибо, сейчас попробую голый скетч залить.
На всякий случай [http://forum.iobroker.net/viewtopic.php?f=33&t=1609](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/#"); } }