Boa tarde, Ricardo! Tudo certo?
Estou com dificuldade em conectar minha NodeMCU em minha rede WIFI, o display OLED fica marcando pontos (.) eternamente, preso no while.
Segue abaixo algumas ressalvas e meu código:
1- O código não apresenta falhas de compilação
2- meu SSID possui espaços, suspeito estar relacionado à isto
3- Já tentei utilizar const char* ssid = "'net virtua apt 44'";
4- Já tentei utilizar const char* ssid = "net\ virtua\ apt\ 44";
5- Já tentei utilizar char ssid[] = "net virtua apt 44";
6- Meu Rasp não teve dificuldades em conectar nessa rede com esse ssid e senha.
#define LED_BUILTIN 2
// ---> WIFI <---
#include <ESP8266WiFi.h>
const char* ssid = "net virtua apt 44"; //Rede WIFI
const char* password = "Sandira13"; //Senhra
WiFiClient nodemcuClient;
// ---> MQTT <---
#include <PubSubClient.h>
const char* mqtt_broker = "192.168.0.7";
const char* mqtt_ClientID = "DispositivoTU";
PubSubClient client(nodemcuClient);
const char*topicoTemp = "dispositivos/temperatura";
const char*topicoUmid = "dispositivos/umidade";
// ---> DHT <---
#include <DHT.h>
#define DHTPIN D3
#define DHTTYPE DHT22//Seleciona o sensor tipo 22
DHT dht(DHTPIN,DHTTYPE);
int umidade;
int temperatura;
// ---> OLED <---
#include <Adafruit_SSD1306.h>
#define OLED_RESET LED_BUILTIN
Adafruit_SSD1306 display(OLED_RESET);
// ---> SETUP <---
void setup() {
configuraDisplay();
conectaWifi();
client.setServer(mqtt_broker, 1883);
}
// ---> LOOP <---
void loop() {
if (!client.connected()) {
reconMQTT();
}
medeTempUmid();
processaTempUmid();
publicaTempUmidMQTT();
}
// ---> FUNÇÕES PERIFÉRICOS <---
void configuraDisplay() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Obtido com o I2C scanner
display.setTextColor(WHITE); //Monocromático
display.clearDisplay();
}
void medeTempUmid() {
umidade = dht.readHumidity();
temperatura = dht.readTemperature(false); //Habilita a utilização em Graus Celsius
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" *C");
Serial.print (" ");
Serial.print("Umidade: ");
Serial.println(umidade);
delay(2000);
}
void processaTempUmid () {
exibeTempUmid("Temperatura:", (temperatura), " C");
exibeTempUmid("Umidade:", (umidade), " %");
}
void exibeTempUmid(const char* texto1, int medicao, const char* texto2) {
display.clearDisplay(); //Limpa
display.setTextSize(1); //Tamanho da Fonte
display.setCursor(0,0); //Deslocamento
display.print(texto1); //Conteúdo
display.setTextSize(5);
display.setCursor(20,20);
display.print(medicao);
display.setTextSize(2);
display.print(texto2);
display.display(); //Imprime
delay(2000);
}
// ---> FUNÇÕES REDE <---
void conectaWifi(){
delay(10);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0,0);
display.print("Conectando");
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
display.print(".");
display.display();
}
}
void reconMQTT(){
while (!client.connected()) {
client.connect(mqtt_ClientID);
}
}
// ---> FUNÇÕES PUBLISH <---
void publicaTempUmidMQTT() {
client.publish(topicoTemp, String(temperatura).c_str(), true); //true retém o dado publicado até que seja enviado o próximo
client.publish(topicoUmid, String(umidade).c_str(), true);
}
E o mesmo acontece substituindo meu ssid e senha no exemplo que usamos durante a aula, o mqtt_esp8266
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Update these with values suitable for your network.
const char* ssid = "net virtua apt 44";
const char* password = "Sandira13";
const char* mqtt_server = "broker.mqtt-dashboard.com";
//*restante do código omitido*
POR FAVOR, você pode me ajudar? Já estou ficando desesperado com isso hahah
Fico no aguardo, agradeço desde já!
Um abraço!