Bom dia, conforme postei a um tempo atrás, eu estou desenvolvendo como TCC, um dispositivo que faz a leitura de um cabo db9 e manda esses dados para um broker MQTT. A leitura e conexão estão ocorrendo perfeitamente, mas o broker fica conectando e desconectando o tempo todo.
Quem tiver interesse em me ajudar, me mande mensagem no pv que eu envio o script.
Muito obrigado!
obs: já tentei usar outros cloud brokers, mas o erro é o mesmo.
Tags:
Olá.
Sem mais informações fica dificil chutar alguma coisa.
Verificaria:
Cada conexão exige um nome de ClientID diferente, se vc estiver usando 2 dispositivos com o mesmo nome é isso. Se usa o nome que veio no exemplo em um broker publico, é isso.
Veja onde está o comando de conexão, ele não deve estar no loop. Deve conectar só se não estiver conectado. A forma polida seria dar um delay depois da conexão e se desconectou antes de tentar novamente.
Para testes uso esse:
http://www.hivemq.com/demos/websocket-client/
Pra mim é o que funciona melhor, na verdade não conheço muitos, se alguém tiver outras sugestão tb queria conhecer outros.
Nessa pagina eu coloco:
"broker.hivemq.com", 8000 e pode deixar o clientId que vem.
Na placa vc coloca:
"broker.hivemq.com", 1883 e inventa um clientid diferente. Pode ser o de cima acrescentando mais 3 letras. Só mudar 1 caracter pode ser pouco pq ele pode ter criado um com esse mesmo caracter para outra pessoa.
Esse tipo de servidor fica lotado de usuários, cada um tem que ter um clientid unico. Se vc não mexeu nele pode ter outra pessoa usando o mesmo.
Caso parta para um servidor só seu (seja montando ele ou pagando) aíh fica mais fácil de escolher o clientid.
Olá, Eduardo. Obrigado por responder!
Eu testei com várias Client ID para ver se esse era o problema, mas infelizmente não é esse.
Segue o script que estou utilizando:
// --- WIFI ---
#include<WiFi.h>
const char* ssid = "ssid";
const char* password = "senha";
WiFiClient ESPClient;
// --- MQTT ---
#include <PubSubClient.h>
const char* mqtt_Broker = "broker.hivemq.com";
const char* mqtt_ClientID = "DadosAutoclaveTeste";
PubSubClient client(ESPClient);
const char* topicoLeitura = "Autoclave/Teste001A";
//---Leitura de dados
#define RXD2 16
#define TXD2 17
char l;
String readString;
char stringToChar[100];
void iniciarSerial(){
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
Serial2.println("serial2teste");
Serial.println("Serial Txd is on pin: " + String(TX));
Serial.println("Serial Rxd is on pin: " + String(RX));
Serial.println("teste monitor serial");
}
void setup() {
iniciarSerial();
conectarWifi();
client.setServer(mqtt_Broker, 1883);
}
void loop() {
if ((!client.connected()) && (WiFi.status() == WL_CONNECTED)) {
reconectarMQTT();}
fazerLeitura();
}
void conectarWifi() {
delay(10);
Serial.print("Conectando ao WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("ESP Mac Address: ");
Serial.println(WiFi.macAddress());
Serial.print("Subnet Mask: ");
Serial.println(WiFi.subnetMask());
Serial.print("Gateway IP: ");
Serial.println(WiFi.gatewayIP());
Serial.print("DNS: ");
Serial.println(WiFi.dnsIP());
}
void reconectarMQTT() {
delay(50);
while (!client.connected()) {
client.connect(mqtt_ClientID);
delay(50);
Serial.println("Conectando-se com o Broker");
client.connect(mqtt_ClientID);
Serial.println("Conectado");
Serial.print(client.connected());
}
}
void publicarLeitura() {
client.publish(topicoLeitura, String(stringToChar).c_str(), true);
}
void fazerLeitura(){
while (Serial2.available()) {
l = Serial2.read();
readString = readString + l;
}
if (readString.length() > 0) {
Serial.print(readString);
Serial2.print(readString);
readString.toCharArray(stringToChar, 100);
publicarLeitura();
//server.print(readString);
readString = "";
}
}
Tente tirar um dos conect em:
client.connect(mqtt_ClientID); //Primeiro, tira esse...
delay(50);
Serial.println("Conectando-se com o Broker");
client.connect(mqtt_ClientID); // Segundo
Feito, e infelizmente o erro continua.
void reconectarMQTT() {
while (!client.connected()) {
Serial.println("Conectando-se com o Broker");
client.connect(mqtt_ClientID);
Serial.println("Conectado");
Serial.print(client.connected());
}
}
Estou começando a acreditar que pode ser um problema no próprio es3 32. Você possui algum esp no qual possa testar? Se não ficar reconectando o tempo todo, significa que o problema esta no hardware
// --- WIFI ---
#include<WiFi.h>
const char* ssid = "WMED_2.4G";
const char* password = "Wmed2022";
WiFiClient ESPClient;
// --- MQTT ---
#include <PubSubClient.h>
const char* mqtt_Broker = "broker.hivemq.com";
const char* mqtt_ClientID = "DadosAutoclaveTeste";
PubSubClient client(ESPClient);
const char* topicoLeitura = "Autoclave/Teste001A";
//---Leitura de dados
#define RXD2 16
#define TXD2 17
char l;
String readString;
char stringToChar[100];
void iniciarSerial(){
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
Serial2.println("serial2teste");
Serial.println("Serial Txd is on pin: " + String(TX));
Serial.println("Serial Rxd is on pin: " + String(RX));
Serial.println("teste monitor serial");
}
void conectarWifi() {
delay(10);
Serial.print("Conectando ao WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("ESP Mac Address: ");
Serial.println(WiFi.macAddress());
Serial.print("Subnet Mask: ");
Serial.println(WiFi.subnetMask());
Serial.print("Gateway IP: ");
Serial.println(WiFi.gatewayIP());
Serial.print("DNS: ");
Serial.println(WiFi.dnsIP());
}
void reconectarMQTT() {
while (!client.connected()) {
Serial.println("Conectando-se com o Broker");
client.connect(mqtt_ClientID);
Serial.println("Conectado");
}
}
void setup() {
iniciarSerial();
conectarWifi();
client.setServer(mqtt_Broker, 1883);
}
void loop() {
if ((!client.connected()) && (WiFi.status() == WL_CONNECTED)) {
reconectarMQTT();
}
fazerLeitura();
}
void publicarLeitura() {
Serial.println(client.connected());
client.publish(topicoLeitura, String(readString).c_str(), true);
}
void fazerLeitura(){
while (Serial2.available()) {
l = Serial2.read();
readString = readString + l;
}
if (readString.length() > 0) {
Serial2.print(readString);
readString.toCharArray(stringToChar, 100);
publicarLeitura();
Serial.print(stringToChar);
//server.print(readString);
readString = "";
}
}
Pra poder testar o seu codigo vc precisa por ele anexado.
Se copiar e colar do jeito que está tudo pode acontecer, coisas como perder caracteres, trechos, formatação, etc.
O problema que o ESP mais dá é de alimentação.
Nem todas as portas USB conseguem suprir a corrente que ele precisa na hora que vai comunicar, os cabos finos também não dão conta. Use sempre portas traseiras e se possível USB 3.0 (não que ele seja 3.0, mas as 3.0 oferecem limites maiores de corrente), alem de cabos do tipo carregador. O cabo que vem quando vc compra normalmente é bom, curto e grosso. Esses comprados em camelô costumam não funcionar.
SCRIPT_PRONTO_SENDO_TESTADO.ino
No meu caso aconteceu o oposto, o cabo que veio com o ESP veio com mal contato kkk.
Acho que achei !
No Loop vc precisa colocar um client.loop();
void loop() {
if ((!client.connected()) && (WiFi.status() == WL_CONNECTED)) {
reconectarMQTT();
}
fazerLeitura();
client.loop(); //<= Isso.
}
Legal. De qq jeito antes do client.loop() aqui tb estava dando reconect.
Se os dados são strings terminadas em chr(13) (CR) vc pode procurar por ele.
Vai acumulando os dados que chegam, quando vier chr(13) vc envia.
Possivelmente vem chr(10) tb (LF), que vc precisa ignorar.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por