Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

NodeMCU não se conecta à rede WIFI

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!

1 resposta
solução!

Caso solucionado,

utilizei o Sketch abaixo para verificar os SSIDs locais e descobri um caractere estranho que não aparecia visualmente:

#include "ESP8266WiFi.h"

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(2000);
  Serial.println("Setup done");
}

void loop() {
  Serial.println("scan start");


  int n = WiFi.scanNetworks();// WiFi.scanNetworks will return the number of networks found
  Serial.println("scan done");
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");

  delay(5000);
}

Espero que a info ajude alguém, abraços!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software