Tabla de contenido:

¿Qué pasa si su enlace falla?: 5 pasos
¿Qué pasa si su enlace falla?: 5 pasos

Video: ¿Qué pasa si su enlace falla?: 5 pasos

Video: ¿Qué pasa si su enlace falla?: 5 pasos
Video: NO COMETAS MI ERROR. 5 pasos para aprender a invertir 2024, Noviembre
Anonim
Image
Image
¿Qué pasa si su enlace falla?
¿Qué pasa si su enlace falla?

En este video, crearemos un sensor de caída de enlace con un ESP32 y un SIM800. Esto significa que con este proyecto, podemos verificar la conexión a Internet y, en caso de una falla en la conexión, llamar a un número de teléfono para notificar que la red está en problemas.

Esta es una de las muchas formas en que puede realizar este tipo de monitoreo. Si bien es simple, le permite probar varios dispositivos que pueden existir dentro de su CPD. Su poder de control se vuelve mucho mayor cuando se usa el ESP32. Aunque utilizo WiFi en este ejemplo, puede usar Internet por cable, si lo prefiere.

Paso 1: Montaje

Montaje
Montaje

Paso 2: Montaje - Mesa

Montaje - Mesa
Montaje - Mesa

Paso 3: Biblioteca TFT_eSPI

Biblioteca TFT_eSPI
Biblioteca TFT_eSPI
Biblioteca TFT_eSPI
Biblioteca TFT_eSPI

En el IDE de Arduino, vaya a Sketch-> Incluir

Biblioteca-> Administrar bibliotecas…

Instalar TFT_eSPI

Vaya a la carpeta de la biblioteca y cambie las líneas del archivo User_Setup.h para dejarlo como se muestra en la imagen.

Paso 4: ESP32_Check_Internet_Connection.ino

Incluye y define

#define TINY_GSM_MODEM_SIM800 # include

#incluir

#incluir

#incluir

// Mude para o nome e senha da sua rede WiFi que quer testar #define SSID "SSID" #define PASSWORD "12345678" // + 55 DDD Número do celular #define USER_PHONE_NUMBER "+5518912345678" // Tempo que deve esperar para considerar como desconectado #define MAX_DISCONNECTED_TIME 10000 // 10 seg // Tempo que deve esperar para cada ligação #define MAX_CALL_TIME_INTERVAL 1800000 // 30 min // Usar serial 1 para o módulo gsm HardwareSerial SerialGSM (1); Módem TinyGsmGSM (SerialGSM); // Tempo em que conectou à internet pela última vez uint32_t lastTimeConnected = 0; // Tempo em que fez a última ligação. Colocamos como -MAX_CALL_TIME_INTERVAL para ligar inmediatamente // da primeira vez que cair uint32_t lastTimeCalledPhone = -MAX_CALL_TIME_INTERVAL; // Pinagem em User_Setup.h na pasta da biblioteca TFT_eSPI display = TFT_eSPI ();

Configuración

configuración vacía () {Serial.begin (115200); setupDisplay (); // Inicializa e configura o visualiza setupGSM (); // Inicializa o módulo GSM xTaskCreatePinnedToCore (checkWiFiConnection, // Função que será ejecutada "checkWiFiConnection", // Nome da tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (no caso não usamos) 2, // Prioridade da tarefa NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (no caso não precisamos) 0); // Número do core que será ejecutada a tarefa (usamos o core 0 para o loop ficar livre com o core 1) xTaskCreatePinnedToCore (checkInternet, // Função que será ejecutada "checkInternet", // Nome da tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (no caso não usamos) 2, // Prioridade da tarefa NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (no caso não precisamos) 0); // Número do core que será ejecutada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

Configuración Pantalla

void setupDisplay () {display.init (); // Inicializa o display display.setRotation (1); // Rotaciona display.fillScreen (TFT_BLUE); // Limpiar la pantalla com a cor azul display.setTextColor (TFT_WHITE, TFT_BLUE); // Coloca o texto como branco com fundo azul display.setTextWrap (false, false); // Desativa a quebra de linha display.setTextSize (1); // Muda o tamanho do texto display.setCursor (0, 0, 2); // Posição x, y e fonte do texto}

ConfiguraciónGSM

void setupGSM () {showDisplay ("Configurar GSM"); // O Módulo GSM está nos GPIOs 4 e 2 SerialGSM.begin (9600, SERIAL_8N1, 4, 2, false); retraso (1000); // Reinicia el módulo if (! ModemGSM.restart ()) {ESP.restart (); regreso; } // Espera pela rede celular if (! ModemGSM.waitForNetwork ()) {display.setCursor (0, 0); showDisplay ("Error de red GSM"); retraso (3000); ESP.restart (); regreso; }}

checkWiFiConnection

void checkWiFiConnection (void * p) {while (true) {// Se no está conectado ao roteador if (WiFi.status ()! = WL_CONNECTED) {// Manda conectar connectWiFi (); } // Retraso de 1s da tarefa. É feita em tictac. Para ejecutar en milis dividimos pela constante portTICK_PERIOD_MS TickType_t taskDelay = 1000 / portTICK_PERIOD_MS; vTaskDelay (taskDelay); }}

conectar wifi

void connectWiFi () {// Manda conectar ao roteador com o nome e senha WiFi.begin (SSID, PASSWORD); Serial.println ("Conectando"); // Espera no while até conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); retraso (500); } // Se chegou aqui está conectado Serial.println (); Serial.println ("Conectado"); }

checkInternet

void checkInternet (void * p) {// Retraso de 5 segundos da tarefa. É feita em tictac. Para ejecutar en milis dividimos pela constante portTICK_PERIOD_MS TickType_t taskDelay = 5000 / portTICK_PERIOD_MS; while (true) {// Se tem internet if (hasInternet ()) {// Atualiza o tempo em que aconteceu a útlima conexão lastTimeConnected = millis (); } // Aplica o delay vTaskDelay (taskDelay); }}

hasInternet

bool hasInternet () {Cliente WiFiClient; // Endreço IP do Google 172.217.3.110 IPAddress adr = IPAddress (172, 217, 3, 110); // Tempo limite para conexão client.setTimeout (5); // Tenta conectar bool connected = client.connect (adr, 80); // Fecha de una conexión client.stop (); // Retorna true se está conectado ou false se está desconectado retorno conectado; }

Círculo

void loop () {// Se está desconectado por más tempo que definimos if (isDisconnectedForTooLong ()) {// Mostra no display que está desconectado showDisplay ("Disconnected"); // Se faz tempo que no liga para o telefone definido if (hasNotCalledPhoneInAWhile ()) {// Liga para o telefone definido callPhone (); }} else {// Mostra no display que está conectado showDisplay ("Conectado"); } // Espera 1 segundo para una próxima iteração do loop delay (1000); }

isDisconnectedForTooLong

bool isDisconnectedForTooLong () {// Retorna true se o tempo desde una última conexión para mayor que o definido return millis () - lastTimeConnected> MAX_DISCONNECTED_TIME; } bool hasNotCalledPhoneInAWhile () {// Retorna true se o tempo desde una última ligacão para o telefone for maior que o definido return millis () - lastTimeCalledPhone> MAX_CALL_TIME_INTERVAL; }

llamada telefónica

void callPhone () {// Faz a ligação para o telefone definido if (modemGSM.callNumber (USER_PHONE_NUMBER)) {// Se entrou aqui é porque conseguiu realizar una ligação Serial.println ("callphone ok"); // Atualiza o tempo em que foi feita a última ligação lastTimeCalledPhone = millis (); } else {// Se entrou aqui é porque no conseguiu fazer a ligação Serial.println ("falló el teléfono de llamada"); } // Termina una ligação modemGSM.callHangup (); }

showDisplay

void showDisplay (String message) {// Muestra un mensaje en la pantalla principal, limpando los caracteres eventuales extras display.setCursor (0, 0); display.println (mensaje + ""); }

Paso 5: descarga los archivos

PDF

INO

Recomendado: