• Система автоматизации с открытым исходным кодом на базе 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
Насколько я помню, достаточно подписаться на нужный топик. И на клиент будут приходить данные только с него, игнорируя всё остальное.
 
Сверху Снизу