• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Esp32 не принимает данные с mqtt(SSL)

DMIALI

New member
Добрый день.
Решил написать программу для управления коллекторными двигателями, подключенными к плате L298N, и управлять ими через MQTT протокол. К самому серверу esp32 подключается, но не хочет принимать данные. Вот мой код:

#include <PubSubClient.h>
#include "Wire.h"
#include<WiFi.h>



int motor1Pin1 = 13;
int motor1Pin2 = 12;
int enable1Pin = 15;

// Setting PWM properties
const int freq = 30000;
const int pwmChannel = 0;
const int resolution = 8;
int dutyCycle = 200;

const char *ssid = "MEIZU 16"; // Имя вайфай точки доступа
const char *pass = "12345678"; // Пароль от точки доступа

const char *mqtt_server = "srv1.mqtt.4api.ru"; // Имя сервера MQTT
const int mqtt_port = 9124 ; // Порт для подключения к серверу MQTT
const char *mqtt_user = "user_22f5b0e2"; // Логин от сервер
const char *mqtt_pass = ""; // Пароль от сервера



void callback(const MQTT::publish& pub) // Функция получения данных от сервера
{
Serial.println("0");
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(" => ");
Serial.println(pub.payload_string()); // выводим в сериал порт значение полученных данных

String payload = pub.payload_string();


if (String(pub.topic()) == "user_22f5b0e2/watering/movement") // проверяем из нужного ли нам топика пришли данные
{
int movement = payload.toInt(); // преобразуем полученные данные в тип integer

Serial.println(movement);
if (movement <= 245) {

dutyCycle = 255 - movement;
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
ledcWrite(pwmChannel, dutyCycle);
Serial.print("Forward with duty cycle: ");
Serial.println(dutyCycle);
delay(500);
}
if(movement >= 266){
dutyCycle = movement - 255;
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
ledcWrite(pwmChannel, dutyCycle);
Serial.print("Forward with duty cycle: ");
Serial.println(dutyCycle);
delay(500);
} else {
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
}
}
}



WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);


ledcSetup(pwmChannel, freq, resolution);

ledcAttachPin(enable1Pin, pwmChannel);

Serial.begin(115200);




}

void loop() {
// подключаемся к wi-fi
WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");


// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connected to MQTT server");
client.set_callback(callback);
client.subscribe("user_22f5b0e2/watering/movement");
} else {
Serial.println("Could not connect to MQTT server");
}
}
}
}
Управление моторами идет через слайдер, который отправляет значения от 0 до 512
 

vrd

Member
Насколько я помню, достаточно подписаться на нужный топик. И на клиент будут приходить данные только с него, игнорируя всё остальное.
 
Сверху Снизу