MQTT нужна помощь
- Войдите на сайт для отправки комментариев
добрый вечер всем нашёл этот скетч и обрадовался потому что это то что я и хотел но не тут было ни как не могу скомпилировать этот скетч , постоянно какие то ошибки сначала с библиотеками были вроде решил потом со строками
EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ
PubSubClient client(server, 1883, callback, ethClient);
перенёс их ниже как подсказали эта ошибка исчезла и вот теперь уже несколько дней мучаюсь с ошибкой 58 строка
DHT DHT; ошибка no matching function for call to 'DHT::DHT()'
я думаю что проблема с библиотекой но я несколько установил проблема не исчезла . IDE 16.6
но пробовал и другие если кому не сложно выложите библиотеку DHT с которой этот скетч компилируется ну и заодно свой скетч и версию IDE. сейчас у меня ват такой скетч
#include <SPI.h> // Ethernet shield #include <Ethernet.h> // Ethernet shield #include <PubSubClient.h> // MQTT #include <Servo.h> #include <DHT.h> #include <OneWire.h> #include <DallasTemperature.h> Servo servo; 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/" ///////////////Объявляем порты ввода-вывода #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 8 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; //#define DHTPIN 2 // Номер пина, к которому подсоединен датчик //#define DHTTYPE DHT22 // Задаём тип DHT датчика //DHT dht(DHTPIN, DHTTYPE); //////////////////////////////////////////////////////////////////////////// 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); } EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ PubSubClient client(server, 1883, callback, ethClient); //////////////////////////////////////////////////////////////////////////// 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/#"); } } ///////////////////////////////////////////////////////////////////////// void loop() { client.loop(); control(); getSensors(); if (!client.connected()) { if (client.connect(id_connect)) { control(); getSensors(); client.subscribe("myhome/Kitchen/#"); } } }
и отдельно Functions
/////////////////////////////////От Брокера////////////////////////////////////////////// void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "myhome/Kitchen/Servo"){ ServoAngle=strPayload.toInt(); if (ServoAngle >= 0 && ServoAngle <= 255){ servo.attach(ServoPin); //delay(200); //ждем 2 секунды servo.write(ServoAngle); //ставим вал под 0 delay(1000); //ждем 2 секунды //client.publish("myhome/Kitchen/Servo", b); servo.detach(); } } } ////////////////////////////////////Брокеру///////////////////////////////////// void control(){ if(digitalRead(5)==HIGH && flag==0) { //если окно открыто client.publish("myhome/Kitchen/Window", "1"); flag=1; } if(digitalRead(5)==LOW && flag==1){//если окно закрыто client.publish("myhome/Kitchen/Window", "0"); flag=0;//обнуляем переменную flag } if(digitalRead(4)==HIGH && flag2==0) { // Если есть движение client.publish("myhome/Kitchen/Motion", "1"); flag2=1; } if(digitalRead(4)==LOW && flag2==1){// Если нет движения client.publish("myhome/Kitchen/Motion", "0"); flag2=0;//обнуляем переменную flag } } ///////////////////////////////Данные сенсоров//////////////////////////////////// void getSensors () { MQ7Value = analogRead(MQ7_Pin); fotoValue = analogRead(foto_Pin); // считываем значение с фоторезистора // ServoAngle = analogRead(2); //Обработка данных датчика DHT22. Подключение к порту цифровому P9 Arduino //Глобальные переменные Hout и Tout типа флоат - влажность (%) и температура (град. С) if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { Hout = DHT.humidity; Tout = DHT.temperature; } if (Hout == 0 || Tout == 0){ delay (1000); if (DHT.read22(DHT22_PIN)== DHTLIB_OK) { Hout = DHT.humidity; Tout = DHT.temperature; } } //Обработка данных цифровых датчиков температуры типа DS18B20. //Шина 1-Wire на цифровой пин P8 Arduino. //Подключено 2 датчика температуры, адреса задаются в секции глобальных констант "Sensors" //Три значение температуры T1, T2, типа float (град. С). DS_sensors.requestTemperatures(); T1 = DS_sensors.getTempC(addr_T1); ///////////////////////Паблик данных сенсоров//////////////////////// if (pause == 50 || pause == 0){ char b[5]; String char_Hout = String(Hout); char_Hout.toCharArray(b,5); client.publish("myhome/Kitchen/Humidity_room", b); String char_Tout = String(Tout); char_Tout.toCharArray(b,5); client.publish("myhome/Kitchen/Temp_room", b); String char_T1 = String(T1); char_T1.toCharArray(b,5); client.publish("myhome/Kitchen/Temp_radiator", b); String char_fotoValue = String(fotoValue); char_fotoValue.toCharArray(b,4); client.publish("myhome/Kitchen/Lux", b); String char_ServoAngle = String(ServoAngle); char_ServoAngle.toCharArray(b,4); client.publish("myhome/Kitchen/Servo", b); String char_MQ7Value = String(MQ7Value); char_MQ7Value.toCharArray(b,4); client.publish("myhome/Kitchen/MQ7", b); pause = 1; } else pause++; }
а вот скетч целиком http://forum.iobroker.net/download/file.php?id=2951
Можете подсказать отчего у меня всё так получается.
Заранее всем спасибо за ответы жду ответов
Ну, Вам же компилятор прямо говорит, что у класса DHT нет конструктора без параметров, а Вы в 56 строке именно его и спользуете. Там параметр должен быть (кажется, номер пина). Поставьте же его, наконец.
Можете подсказать, как значения типа float передать по MQTT?
В serial выводятся,а на сервер нет. Как их надо правильно преобразовывать в string?
Здравствуйте, всем кто обратил внимание на этот запрос
Имеется ESP 8266 - 07
Есть необходимость клацать реле через MQTT смотреть влажность DHT11 и температуру
Все казалось бы стандартно
Но т.к. мои познания не очень глубоки я взял за основу готовый код на одно реле и датчик температуры, дополнил его куском для обновления ОТА еще двумя реле, а вот DHT11 не могу
Взял также готовый код для связки DHT+ MQTT но у меня не отправляються данные при этом скетч компилируеться без ошибок.
Прошу ткнуть носом где у меня ошибка по возможности, буду благодарен за любые комментари/подсказки по сути
Я так подозреваю ошибка в преобразовании данных и функции отправки