Для начала избавься от этого:
Как? Создай новую учетную запись ТОЛЬКО латиницей и/или цифрами.
Например, самое распространенное - user.
Для начала избавься от этого:
Как? Создай новую учетную запись ТОЛЬКО латиницей и/или цифрами.
Например, самое распространенное - user.
Если дашь доступ к рабочему месту, то всё поправлю)
Наверное опять повторюсь- не проще ли ТСу установить портативную версию ИДЕ ? И потом “бороться” с библиотеками и с “евошными” версиями? А то все смешалось в кучу - кони (кирилица в пути к файлам),люди(версии библиотек ) и самогон(пятница жеж )!
Всем привет!
Ошибку по учётке исправил. Для кода взял пример из последней версии библиотеки PubSubClient, установленой в IDE.
Что получилось:
/*
Basic ESP8266 MQTT example
This sketch demonstrates the capabilities of the pubsub library in combination
with the ESP8266 board/library.
It connects to an MQTT server then:
- publishes "hello world" to the topic "outTopic" every two seconds
- subscribes to the topic "inTopic", printing out any messages
it receives. NB - it assumes the received payloads are strings not binary
- If the first character of the topic "inTopic" is an 1, switch ON the ESP Led,
else switch it off
It will reconnect to the server if the connection is lost using a blocking
reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to
achieve the same result without blocking the main loop.
To install the ESP8266 board, (using Arduino 1.6.4+):
- Add the following 3rd party board manager under "File -> Preferences -> Additional Boards Manager URLs":
http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Open the "Tools -> Board -> Board Manager" and click install for the ESP8266"
- Select your ESP8266 in "Tools -> Board"
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
int button1 = 2; // указываем пин для первой кнопки
int button2 = 3; // указываем пин для второй кнопки
int button3 = 4; // указываем пин для третьей кнопки
// Update these with values suitable for your network.
const char* ssid = "Rostelecom"; // Имя вайфай точки доступа
const char* password = "SJRJCJEJ"; // Пароль от точки доступа
const char* mqtt_server = "m5.wqtt.ru"; // Имя сервера MQTT Cluster
const int mqtt_port = 12346; // Порт для подключения к серверу MQTT
const char* mqtt_user = "u_WZIJ1V"; // Логин от сервер
const char* mqtt_pass = "FzoLDUAp"; // Пароль от сервера
#define BUFFER_SIZE 100
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//void callback(char* topic, byte* payload, unsigned int length) {
// Serial.print("Message arrived [");
// Serial.print(topic);
// Serial.print("] ");
// for (int i = 0; i < length; i++) {
// Serial.print((char)payload[i]);
// }
// Serial.println();
// Switch on the LED if an 1 was received as first character
// if ((char)payload[0] == '1') {
// digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is active low on the ESP-01)
// } else {
// digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
// }
//}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
// client.publish("outTopic", "hello world");
// ... and resubscribe
// client.subscribe("inTopic");
client.subscribe("BTN1"); // подписывааемся на топик с данными для 1-ой кнопки btn1
client.subscribe("BTN2"); // подписывааемся на топик с данными для 2-ой кнопки btn2
client.subscribe("BTN3"); // подписывааемся на топик с данными для 3-ой кнопки btn3
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
if (client.connected()){
client.loop();
}
}
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
}
void setup() {
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
// client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// unsigned long now = millis();
// if (now - lastMsg > 2000) {
// lastMsg = now;
// ++value;
// snprintf (msg, MSG_BUFFER_SIZE, "hello world #%ld", value);
// Serial.print("Publish message: ");
// Serial.println(msg);
// client.publish("outTopic", msg);
// }
}
К ви-фи подключается, к брокеру нет. Думаю, что после 91 строчки чего-то не хватает. Постоянно крутится подключение через 5 секунд.
Ошибки:
C:\Users\ARD\Documents\Arduino\MP_0.1\MP_0.1.ino: In function ‘void setup()’:
C:\Users\ARD\Documents\Arduino\MP_0.1\MP_0.1.ino:127:11: warning: ‘BUILTIN_LED’ is deprecated: use LED_BUILTIN [-Wdeprecated-declarations]
127 | pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
| ^~~~~~~~~~~
In file included from C:\Users\ARD\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\variants\generic/pins_arduino.h:39,
from C:\Users\ARD\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Arduino.h:310,
from C:\Users\ARD\AppData\Local\arduino\sketches\8671C2FC2C4610AF849F9892C7A0B2FD\sketch\MP_0.1.ino.cpp:1:
C:\Users\ARD\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\variants\generic/common.h:82:11: note: declared here
82 | const int BUILTIN_LED attribute((deprecated(“use LED_BUILTIN”), weak)) = LED_BUILTIN;
| ^~~~~~~~~~~
Так понимаю тут что-то с загоранием светодиода при передачи данных.
Может кто чего подскажет…
Это предупреждение.
warning: ‘BUILTIN_LED’ is deprecated: use LED_BUILTIN [-Wdeprecated-declarations]
Вместо BUILTIN_LED
желательно использовать LED_BUILTIN
. Иначе работоспособность кода в дальнейшем не гарантируется
Да, спасибо, ошибка ушла )
Форумчане, помогите, пожалуйста, с MQTT. Понимаю, что не подтягиваются в коде данные сервера и авторизация, но как это сделать не знаю
Прочитай это. Может поможет? В ардуине этот код работает. Телеметрия на ESP8266 + MQTT. Пошаговое руководство по созданию DIY-проекта с удаленным управлением – kotyara12.ru
)) Спасибо! Как раз его изучаю. И даже уже удалось подключиться к брокеру. Странно что этот пост раньше не гуглился.
Рекомендация по работе с mqtt. У меня стоит https://mjdm.ru/ . При установке он ставит mqtt брокера и всё mqtt общение идёт через него. Удобно что в домашней сетке и не отчего не зависит. Всё общение удобно мониторить программой https://mqtt-explorer.com/
Спасибо, попробую.
Код, который получился:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
int button1 = 27; // указываем пин для первой кнопки
int button2 = 28; // указываем пин для второй кнопки
int button3 = 29; // указываем пин для третьей кнопки
const char* ssid = "Rostelecom"; // Имя вайфай точки доступа
const char* password = "SJRJCJEJ"; // Пароль от точки доступа
const char* mqtt_server = "m5.wqtt.ru"; // Имя сервера MQTT Cluster
const int mqtt_port = 12346; // Порт для подключения к серверу MQTT
const char* mqtt_clientId = "Distterm"; // определяем ID
const char* mqtt_user = "u_WZIJ1V"; // Логин от сервер
const char* mqtt_pass = "FzoLDUAp"; // Пароль от сервера
#define BUFFER_SIZE 100
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi() {
delay(10);
// Начинаем подключаться к сети WiFi
Serial.println();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
if (!client.connected()) {
Serial.print("MQTT connection...");
client.setServer(mqtt_server, mqtt_port); // Настраиваем MQTT клиент
if (client.connect(mqtt_clientId, mqtt_user, mqtt_pass)) {
Serial.println("connected");
client.subscribe("BTN1"); // подписываемся на топик с данными для 1-ой кнопки btn1
client.subscribe("BTN2"); // подписываемся на топик с данными для 2-ой кнопки btn2
client.subscribe("BTN3"); // подписываемся на топик с данными для 3-ой кнопки btn3
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000); // Wait 5 seconds before retrying
}
if (client.connected()){
client.loop();
}
}
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Инициализация светодиода
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
Настроил приложение на смартфоне, но происходят постоянные переподключения, которые вижу в мониторинге порта и в приложении. Что не так?
Ты прочитал какие ограничения имеет публичный сервер?
Вот у того же Котяры статья Публичные облачные сервера для IoT устройств – kotyara12.ru
А есть внятная инструкция про настройку брокера данного сервиса?
Какого данного? Если того что можордомо ставит, то это mosquitto. Для него есть. Его можно и отдельно поднять. https://mosquitto.org/
В общем, допилил. Может кому пригодится такая история.
По нажатию одной из трёх кнопок, через врокера в MQTT client на смартфорн прилетает состояние: кнопка нажата - клиент сигнализирует об этом и пушит. Кнопка отжата, клиент молчит. Не забыть подтянуть резисторы на пины.
Наверняка, более опытные найдут тут лишнего, но, работает и на данном этапе меня это устраивает. Возможно прикручу TLS, но с наскоку не получилось. Почему-то не хочет время обновляться с серверов.
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const int button1 = 14; // указываем пин D5 для первой кнопки
const int button2 = 12; // указываем пин D6 для второй кнопки
const int button3 = 13; // указываем пин D7 для третьей кнопки
const char* ssid = "Rostelecom"; // Имя вайфай точки доступа
const char* password = "SJRJCJEJ"; // Пароль от точки доступа
const char* mqtt_server = "m5.wqtt.ru"; // Имя сервера MQTT Cluster
const int mqtt_port = 12346; // Порт для подключения к серверу MQTT
const char* mqtt_clientId = "Distterm"; // определяем ID
const char* mqtt_user = "u_WZIJ1V"; // Логин от сервер
const char* mqtt_pass = "FzoLDUAp"; // Пароль от сервера
#define BUFFER_SIZE 100
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
if (!client.connected()) {
Serial.print("MQTT connection...");
client.setServer(mqtt_server, mqtt_port); // Подключение к MQTT клиенту
if (client.connect(mqtt_clientId, mqtt_user, mqtt_pass)) {
Serial.println("connected");
client.subscribe("BTN1"); // подписывааемся на топик с данными для 1-ой кнопки btn1
client.subscribe("BTN2"); // подписывааемся на топик с данными для 2-ой кнопки btn2
client.subscribe("BTN3"); // подписывааемся на топик с данными для 3-ой кнопки btn3
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
if (client.connected()){
client.loop();
}
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Инициализация светодиода
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (digitalRead(button1) == LOW) {
client.publish("BTN1", "0");
} else
if (digitalRead(button1) == HIGH) {
client.publish("BTN1", "1");
}
if (digitalRead(button2) == LOW) {
client.publish("BTN2", "0");
} else
if (digitalRead(button2) == HIGH) {
client.publish("BTN2", "1");
}
if (digitalRead(button3) == LOW) {
client.publish("BTN3", "0");
} else
if (digitalRead(button3) == HIGH) {
client.publish("BTN3", "1");
}
delay(100);
if (!client.connected()) {
reconnect();
}
client.loop();
}
библиотеки - стандартные в IDE
Всем кто помогал - большое СПАСИБО!
Остается еще отказатся от MQTT: можно прекрасно обойтись без него.
Поддерживаю. Пусть идут лесом все эти брокеры)))
Подскажи направление? У меня дача и дом отдают пару десятков параметров по mqtt на домашний сервер и я на телефоне могу проконтролировать и управлять разными приборами из любой точки. Как без mqtt обойтись простыми средствами?
А могу спросить у вас, как у вас организован обработчик кнопок (может геркон какой), если таковые есть? то что написано в коде выше напрочь забивают канал, как я думаю, и когда прикручиваю управление реле, то происходит дичайшая задержка (как выяснилось).