Помогите начинающему!
- Войдите на сайт для отправки комментариев
Вс, 11/12/2016 - 11:59
Есть скетч. При компиляции выдает ошибку: 'callback' was not declared in this scope
Помогите!!!
Есть скетч. При компиляции выдает ошибку: 'callback' was not declared in this scope
Помогите!!!
Афигительно информативный заголовок топика.
Текст программы необходимо постить в топик с соблюдением правил.
За подобное предлагаю данный топик игнорировать, как противоречащий правилам форума.
Есть скетч.
Если есть, то выкладывайте сюда. А вместе с ним и полный текст сообщения. Пока же присоединяюсь к коллеге inspiritus.
#include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "Rostelecom_Inactivated"; //Название сети const char* password = "29974978"; //пароль const char* mqtt_server = "192.168.1.2"; //ip брокера mqtt #define RELAY_1 5 //Выход на реле или светодиод #define BUTTON_1 12 //Кнопка #define relays_topic1 "ESP04/relay_1" //публикуемый топик #define RELAY_2 4 //Выход на реле или светодиод #define BUTTON_2 14 //Кнопка #define relays_topic2 "ESP04/relay_2" //публикуемый топик #define RELAY_3 15 //Выход на реле или светодиод #define BUTTON_3 16 //Кнопка #define relays_topic3 "ESP04/relay_3" //публикуемый топик #define svet_topic "ESP04/svet" #define pir_topic "ESP04/pir" WiFiClient espClient; //инициализация WiFi клиента PubSubClient client(espClient); //инициализация MQTT клиента long last_mls = millis(); //функция времени в милисекундах long last_mls2 = millis(); //функция времени для датчика движения long last_mls3 = millis(); //функция времени для отправки топиков long last_mls4 = millis(); //функция времени для датчика света boolean Status1 = true; //объявляем статус реле в 0 boolean btnPress1 = false; //объявляем что кнопка не нажата 0 boolean lastbtnStat1 = false; //временная переменная для хранения статуса boolean Status2 = false; //объявляем статус реле в 0 boolean btnPress2 = false; //объявляем что кнопка не нажата 0 boolean lastbtnStat2 = false; boolean Status3 = false; //объявляем статус реле в 0 boolean btnPress3 = false; //объявляем что кнопка не нажата 0 boolean lastbtnStat3 = false; int regim1 = 0; //режим по умолчанию при включении int regim2 = 0; //режим по умолчанию при включении int regim3 = 0; //режим по умолчанию при включении int calibrationTime = 30; //Время калибровки датчика long unsigned int lowIn; //Время, в которое был принят сигнал отсутствия движения(LOW) long unsigned int pause = 60000; //Пауза, после которой движение считается оконченным boolean lockLow = true; //Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет boolean takeLowTime; //Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения int ligtsvet = 0; //переменная для светло или темно 1 или 0 int pirPin = 13; //контакт для подключения датчика int val = 0; //переменная для хранения состояния датчика int ligt; //переменная освещенности void setup() //Выполняется при запуске 1 раз { pinMode(pirPin, INPUT); pinMode(RELAY_1, OUTPUT); //Выход на реле или светодиод pinMode(BUTTON_1, INPUT); //Кнопка digitalWrite(RELAY_1, Status1); //устанавливаем на выходе статус реле pinMode(RELAY_2, OUTPUT); //Выход на реле или светодиод pinMode(BUTTON_2, INPUT); //Кнопка digitalWrite(RELAY_2, Status2); //устанавливаем на выходе статус реле pinMode(RELAY_3, OUTPUT); //Выход на реле или светодиод pinMode(BUTTON_3, INPUT); //Кнопка digitalWrite(RELAY_3, Status3); //устанавливаем на выходе статус реле Serial.begin(115200); //инициализация монитора порта client.setServer(mqtt_server, 1883); //подключаемся к MQTT client.set.Callback(clientCallback); //функция получения топиков с брокера delay(100); //ждем 100 милисекунд WiFi.begin(ssid, password); //подключаемся к WiFi delay(5000); //ждем 5 секунд client.connect("ESP04Client"); //конектимся с брокером как клиент client.subscribe(relays_topic1); //подписываемся на топик client.subscribe(relays_topic2); //подписываемся на топик client.subscribe(relays_topic3); //подписываемся на топик //client.subscribe("ESP04/#"); } void pir() { if (digitalRead(pirPin) == HIGH) { //if (lockLow) { Serial.println("Motion1"); lockLow = false; if (regim1 == 2 && ligtsvet == 0) { Status1 = false; digitalWrite(RELAY_1, Status1); } if (regim2 == 2 && ligtsvet == 0) { Status2 = true; digitalWrite(RELAY_2, Status2); } if (regim3 == 2 && ligtsvet == 0) { Status3 = true; digitalWrite(RELAY_3, Status3); Serial.println("Motion3"); } takeLowTime = true; } if (digitalRead(pirPin) == LOW) { if (takeLowTime) { Serial.println("no Motion1"); lowIn = millis(); //Сохраним время окончания движения takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения } if (!lockLow && millis() - lowIn > pause) { lockLow = true; if (regim1 == 2) { Status1 = true; digitalWrite(RELAY_1, Status1); } if (regim2 == 2) { Status2 = false; digitalWrite(RELAY_2, Status2); } if (regim3 == 2) { Status3 = false; digitalWrite(RELAY_3, Status3); } } } } void svet() //функция чтения с датчика света { ligt = analogRead(A0); Serial.println(ligt); if (ligt < 120) //если свет меньше указанного { ligtsvet = 0; //то ligtsvet 0 } else //если нет то 1 { ligtsvet = 1; } } void callback(char* topic, byte* payload, unsigned int length) //читаем топики { Serial.print("Message arrived ["); Serial.print(topic); Serial.print(" "); String strTopic = String(topic); String strPayload = String((char*)payload); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); if (strTopic == "ESP04/relay_1") { if ((char)payload[0] == '0') { Status1 = true; regim1 = 0; } else if ((char)payload[0] == '1') { Status1 = false; regim1 = 1; } else { regim1 = 2; } } if (strTopic == "ESP04/relay_2") { if ((char)payload[0] == '0') { Status2 = false; regim2 = 0; } else if ((char)payload[0] == '1') { Status2 = true; regim2 = 1; } else { regim2 = 2; } } if (strTopic == "ESP04/relay_3") { if ((char)payload[0] == '0') { Status3 = false; regim3 = 0; } else if ((char)payload[0] == '1') { Status3 = true; regim3 = 1; } else { regim3 = 2; } } } void button1() { btnPress1 = digitalRead(BUTTON_1); Status1 = digitalRead(RELAY_1); if (btnPress1 == LOW && lastbtnStat1 == false) { delay(30); // защита от дребезга regim1++; lastbtnStat1 = true; if (regim1 > 2) { regim1 = 0; } } if (btnPress1 == HIGH && lastbtnStat1 == true) { lastbtnStat1 = false; } if (regim1 == 0) { Status1 = true; digitalWrite(RELAY_1, Status1); } if (regim1 == 1) { Status1 = false; digitalWrite(RELAY_1, Status1); } if (regim1 == 2) { //pir(); } } void button2() { btnPress2 = digitalRead(BUTTON_2); Status2 = digitalRead(RELAY_2); if (btnPress2 == LOW && lastbtnStat2 == false) { delay(30); // защита от дребезга regim2++; lastbtnStat2 = true; if (regim2 > 2) { regim2 = 0; } } if (btnPress2 == HIGH && lastbtnStat2 == true) { lastbtnStat2 = false; } if (regim2 == 0) { Status2 = false; digitalWrite(RELAY_2, Status2); } if (regim2 == 1) { Status2 = true; digitalWrite(RELAY_2, Status2); } if (regim2 == 2) { //pir(); } } void button3() { btnPress3 = digitalRead(BUTTON_3); Status3 = digitalRead(RELAY_3); if (btnPress3 == LOW && lastbtnStat3 == false) { delay(30); // защита от дребезга regim3++; lastbtnStat3 = true; if (regim3 > 2) { regim3 = 0; } } if (btnPress3 == HIGH && lastbtnStat3 == true) { lastbtnStat3 = false; } if (regim3 == 0) { Status3 = false; digitalWrite(RELAY_3, Status3); } if (regim3 == 1) { Status3 = true; digitalWrite(RELAY_3, Status3); } if (regim3 == 2) { //pir(); } } void reconnect_server() //функция проверки подключения { if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети { WiFi.begin(ssid, password); Serial.println(""); Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться } else { Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } if (!client.connected() && WiFi.status() == WL_CONNECTED) { //если к сети подключились но к MQTT нет client.connect("ESP03Client"); //из за нее не работает кнопка client.subscribe(relays_topic1); //подписываемся на топик client.subscribe(relays_topic2); //подписываемся на топик client.subscribe(relays_topic3); //подписываемся на топик Serial.println("Mosquitto connect..."); //выводим в монитор порта что пытаемся подключиться } } void MQTT() //публикуем топик с состоянием режима { if (millis() - last_mls3 > 2000) //периодичность публикации топика { val = digitalRead(pirPin); last_mls3 = millis(); client.publish(relays_topic1, String(regim1).c_str()); client.publish(relays_topic2, String(regim2).c_str()); client.publish(relays_topic3, String(regim3).c_str()); client.publish(svet_topic, String(ligt).c_str()); client.publish(pir_topic, String(val).c_str()); Serial.println("WiFinnected"); } } void loop() { client.loop(); pir(); MQTT(); button1(); button2(); button3(); //delay(200); if (millis() - last_mls > 60000) //проверка подключений раз в 60 сек { last_mls = millis(); reconnect_server(); } if (millis() - last_mls4 > 2000) //проверка уровня освещенности { last_mls4 = millis(); svet(); } }ua6em, штрейкбрехер?
Причем нарушающий правила . Такие тексты надо сворачивать
ua6em, штрейкбрехер?
нет, просто интересно
не свернул - каюсь, жалко, что после публикации и ответа нельза поправить, уж правку вывода кода можно было оставить
жалко, что после публикации и ответа нельза поправить, уж правку вывода кода можно было оставить
Почему нельзя? Заходите в "Изменить", ставите курсор в любое место кода и давите на иконку "code". Ваш код появляется в редакторе кода и правьте его на здоровье, в т.ч. и сворачивание добавляйте.
жалко, что после публикации и ответа нельза поправить, уж правку вывода кода можно было оставить
Почему нельзя? Заходите в "Изменить", ставите курсор в любое место кода и давите на иконку "code". Ваш код появляется в редакторе кода и правьте его на здоровье, в т.ч. и сворачивание добавляйте.
Мне сие главврач запретил видимо?
А вот пока на мой пост не ответили, изменить можно
Всем спасибо, офегительная помощь, благодарю судари
Причем нарушающий правила . Такие тексты надо сворачивать
да, кстати, по нарушениям...некоторые тут в пешее эротическое отправляют, точнее в колыбель человечества... и ничего )))
Всем спасибо, офегительная помощь, благодарю судари
У вас не объявлена переменная - clientCallback
Закомментируйте строку 72 - скомпилируется, но будет ли работать, вопрос )))
Я такой же как и вы начинающий
PS слово офИгительный пишется через И ))) ..(Фига, Фиговый листок - проверочные слова, 4-й класс начальной школы)
Всем спасибо, офегительная помощь, благодарю судари
Не стоит благодарности. Вам по-русски сказали, выкладывайте код и сообщение об ошибке. Вы не выложили ни того, ни другого. Значит, Вам помощь не нужна. Это Ваш выбор, и мы его уважаем.
колыбель человечества... )))
Вы так говорите, как будто это что-то плохое)))))
колыбель человечества... )))
Вы так говорите, как будто это что-то плохое)))))
Я не знаю, кто сделал это слово нецензурным )))
а главное зачем?