Índice:

E se o seu link falhar ?: 5 etapas
E se o seu link falhar ?: 5 etapas

Vídeo: E se o seu link falhar ?: 5 etapas

Vídeo: E se o seu link falhar ?: 5 etapas
Vídeo: Ícaro e Gilmar - M de mulher [ Ao Vivo em Barretos ] 2024, Novembro
Anonim
Image
Image
E se o seu link travar?
E se o seu link travar?

Neste vídeo, criaremos um sensor de queda de link com um ESP32 e um SIM800. Isso significa que com este projeto, podemos verificar a conexão com a internet e, em caso de falha de conexão, ligar para um número de telefone para avisar que a rede está com problemas.

Esta é uma das muitas maneiras de realizar esse tipo de monitoramento. Embora seja simples, ele permite que você teste vários dispositivos que podem existir no seu CPD. Seu poder de verificação se torna muito maior ao usar o ESP32. Embora eu use WiFi neste exemplo, você pode usar internet com fio, se preferir.

Etapa 1: Montagem

conjunto
conjunto

Etapa 2: Montagem - Mesa

Montagem - Mesa
Montagem - Mesa

Etapa 3: Biblioteca TFT_eSPI

Biblioteca TFT_eSPI
Biblioteca TFT_eSPI
Biblioteca TFT_eSPI
Biblioteca TFT_eSPI

No IDE do Arduino, vá para Sketch-> Incluir

Biblioteca-> Gerenciar Bibliotecas…

Instale TFT_eSPI

Vá para a pasta da biblioteca e altere as linhas do arquivo User_Setup.h para deixá-lo como mostrado na imagem.

Etapa 4: ESP32_Check_Internet_Connection.ino

Inclui e 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 para esperar considerar comoado #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); TinyGsm modemGSM (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 imediatamente // 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 ();

Configurar

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

SetupDisplay

void setupDisplay () {display.init (); // Inicializa o display display.setRotation (1); // Rotaciona display.fillScreen (TFT_BLUE); // Limpa o display com um 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}

SetupGSM

void setupGSM () {showDisplay ("Setup GSM"); // O Módulo GSM está nos GPIOs 4 e 2 SerialGSM.begin (9600, SERIAL_8N1, 4, 2, falso); atraso (1000); // Reinicia o módulo if (! ModemGSM.restart ()) {ESP.restart (); Retorna; } // Espera pela rede celular if (! ModemGSM.waitForNetwork ()) {display.setCursor (0, 0); showDisplay ("Erro de rede GSM"); atraso (3000); ESP.restart (); Retorna; }}

checkWiFiConnection

void checkWiFiConnection (void * p) {while (true) {// Se não estiver conectado ao roteador if (WiFi.status ()! = WL_CONNECTED) {// Manda conectar connectWiFi (); } // Atraso de 1s da tarefa. É feita em carrapatos. Para executar em milis dividimos pela constante portTICK_PERIOD_MS TickType_t taskDelay = 1000 / portTICK_PERIOD_MS; vTaskDelay (taskDelay); }}

conectarWiFi

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

checkInternet

void checkInternet (void * p) {// Delay de 5 segundos da tarefa. É feita em carrapatos. Para executar em 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 conectado = client.connect (adr, 80); // Fecha a conexão client.stop (); // Retorna true se está conectado ou false se está desconectado retornar conectado; }

Ciclo

void loop () {// Se está desconectado por mais tempo que definimos if (isDisconnectedForTooLong ()) {// Mostra no display que está desconectado showDisplay ("Desconectado"); // Se faz tempo que não 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 a próxima iteração do loop delay (1000); }

isDisconnectedForTooLong

bool isDisconnectedForTooLong () {// Retorna true se o tempo desde a última conexão para maior que o definido return millis () - lastTimeConnected> MAX_DISCONNECTED_TIME; } bool hasNotCalledPhoneInAWhile () {// Retorna verdadeiro se o tempo desde a última ligacão para o telefone para maior que o definido return millis () - lastTimeCalledPhone> MAX_CALL_TIME_INTERVAL; }

callPhone

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

showDisplay

void showDisplay (String message) {// Mostra a mensagem na primeira linha do display, limpando os caracteres extras display.setCursor (0, 0); display.println (mensagem + ""); }

Etapa 5: Baixe os arquivos

PDF

EU NÃO

Recomendado: