Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
In diesem Video erstellen wir einen Link-Drop-Sensor mit einem ESP32 und einem SIM800. Dies bedeutet, dass wir mit diesem Projekt die Verbindung zum Internet überprüfen und im Falle eines Verbindungsfehlers eine Telefonnummer anrufen können, um zu benachrichtigen, dass das Netzwerk in Schwierigkeiten ist.
Dies ist eine der vielen Möglichkeiten, wie Sie diese Art der Überwachung durchführen können. Obwohl es einfach ist, können Sie verschiedene Geräte testen, die in Ihrem CPD vorhanden sein können. Seine Prüfkraft wird bei Verwendung des ESP32 viel größer. Obwohl ich in diesem Beispiel WLAN verwende, können Sie auf Wunsch auch kabelgebundenes Internet verwenden.
Schritt 1: Montage
Schritt 2: Montage – Tisch
Schritt 3: TFT_eSPI-Bibliothek
Gehen Sie in der Arduino IDE zu Sketch-> Include
Bibliothek-> Bibliotheken verwalten …
TFT_eSPI installieren
Gehen Sie zum Bibliotheksordner und ändern Sie die Zeilen der Datei User_Setup.h, um sie wie in der Abbildung gezeigt zu belassen.
Schritt 4: ESP32_Check_Internet_Connection.ino
Beinhaltet und definiert
#define TINY_GSM_MODEM_SIM800#include
#enthalten
#enthalten
#enthalten
//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 for cada ligação #define MAX_CALL_TIME_INTERVAL 1800000 //30 min //Usar serial 1 para oder 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 für sofortige //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();
Aufstellen
Void setup () {Serial.begin (115200); setupDisplay(); //Inicialize 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 usamos). 2, // 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á executada a tarefa (usamos 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 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á executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1) }
SetupAnzeige
Void setupDisplay () {display.init (); //Inicialize o display display.setRotation(1); // Rotaciona display.fillScreen (TFT_BLUE); //Limpa oder Display mit Cor Azul display.setTextColor (TFT_WHITE, TFT_BLUE); //Coloca oder texto como branco com fundo azul display.setTextWrap(false, false);//Desativa quebra de linha display.setTextSize(1); //Muda oder tamanho tun texto display.setCursor (0, 0, 2); //Posição x, y e fonte do texto}
EinrichtungGSM
Void setupGSM () { showDisplay ("Setup GSM"); //O Modul GSM-Está nos GPIOs 4 und 2 SerialGSM.begin (9600, SERIAL_8N1, 4, 2, false); Verzögerung (1000); // Neustart oder Modul neu starten if (!modemGSM.restart()) { ESP.restart(); Rückkehr; } //Espera pela rede celular if (!modemGSM.waitForNetwork()) {display.setCursor (0, 0); showDisplay("GSM-Netzwerkfehler"); Verzögerung (3000); ESP.restart(); Rückkehr; } }
checkWiFiConnection
Void checkWiFiConnection (void * p) { Während (true) {//Se não conectado ao rotador if (WiFi.status () != WL_CONNECTED) {//Manda conectar connectWiFi (); } // Verzögerung de 1s da tarefa. É feita em tickt. Para executar em millis dividimos pela konstante portTICK_PERIOD_MS TickType_t taskDelay = 1000 / portTICK_PERIOD_MS; vTaskDelay (TaskDelay); } }
connectWiFi
Void connectWiFi () {//Manda conectar ao rotador com o nome e senha WiFi.begin (SSID, PASSWORD); Serial.println("Verbinden"); // Espera keine Weile até conectar while (WiFi.status () ! = WL_CONNECTED) { Serial.print ("."); Verzögerung (500); } //Se chegou aqui está conectado Serial.println (); Serial.println("Verbunden"); }
checkInternet
void checkInternet(void* p){//Verzögerung von 5 segundos da tarefa. É feita em tickt. Para executar em millis dividimos pela Konstante portTICK_PERIOD_MS TickType_t taskDelay = 5000 / portTICK_PERIOD_MS; while(true) { //Internet einstellen if(hasInternet()) { //Geschwindigkeit im Tempo mit einer Verknüpfung mit lastTimeConnected = millis(); } //Aplica o Verzögerung vTaskDelay (taskDelay); } }
hatInternet
bool hasInternet () { WiFiClient-Client; //Endreço IP von Google 172.217.3.110 IPAddress adr = IPAddress(172, 217, 3, 110); // Tempolimit für Verbindung client.setTimeout(5); //Tenta conectar bool verbunden = client.connect(adr, 80); //Fecha a conexão client.stop(); //Retorna true se está conectado ou false se está desconectado return connected; }
Schleife
Void loop () { //Es ist eine Auflösung für ein bestimmtes Tempo erforderlich if (isDisconnectedForTooLong ()) { // Keine Anzeige, die aus showDisplay ("Disconnected") besteht; //Dieses schnelle Tempo ist ohne Liga für die Telefondefinition if (hasNotCalledPhoneInAWhile ()) { // Liga für die Telefondefinition für callPhone (); } } else {//Mostra keine Anzeige que está conectado showDisplay("Connected"); } //Espera 1 segundo para a próxima iteração do loop delay (1000); }
istDisconnectedForTooLong
bool isDisconnectedForTooLong(){ //Wiedergeben von true das Tempo eines letzten Schlüssels oder definitiv zurück millis() - lastTimeConnected > MAX_DISCONNECTED_TIME; } bool hasNotCalledPhoneInAWhile () {//Retorna true wie das Tempo eines letzten Ligacão für das Haupttelefon oder definiert zurück millis() - lastTimeCalledPhone > MAX_CALL_TIME_INTERVAL; }
AnrufTelefon
Void callPhone () {//Faz eine Ligação für eine Telefondefinition if (modemGSM.callNumber (USER_PHONE_NUMBER)) {//Seien Sie eine Verbindung mit einer Verbindung Serial.println ("callphone ok"); // Geschwindigkeit oder Tempo muss mit einer letzten Verknüpfung lastTimeCalledPhone = millis(); } Else {//Se entrou aqui é porque não conseguiu fazer a ligação Serial.println ("callphone failed"); } //Beende eine Verbindung modemGSM.callHangup(); }
anzeigenAnzeige
void showDisplay (String message) {//Mostra a mensagem na primeira linha do display, limpando os eventuais caracteres extras display.setCursor (0, 0); display.println (Nachricht + " "); }
Schritt 5: Laden Sie die Dateien herunter
INO