Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
W tym filmie stworzymy czujnik upadku łącza z ESP32 i SIM800. Oznacza to, że dzięki temu projektowi możemy zweryfikować połączenie z internetem, a w przypadku awarii połączenia zadzwonić pod numer telefonu, aby powiadomić, że sieć ma kłopoty.
Jest to jeden z wielu sposobów prowadzenia tego typu monitoringu. Chociaż jest to proste, umożliwia testowanie różnych urządzeń, które mogą istnieć w ramach Twojego CPD. Jego moc sprawdzania staje się znacznie większa podczas korzystania z ESP32. Chociaż w tym przykładzie używam Wi-Fi, możesz skorzystać z Internetu przewodowego, jeśli wolisz.
Krok 1: Montaż
Krok 2: Montaż – Stół
Krok 3: Biblioteka TFT_eSPI
W Arduino IDE przejdź do Szkic-> Dołącz
Biblioteka-> Zarządzaj bibliotekami…
Zainstaluj TFT_eSPI
Przejdź do folderu biblioteki i zmień wiersze pliku User_Setup.h, aby pozostawić go tak, jak pokazano na obrazku.
Krok 4: ESP32_Check_Internet_Connection.ino
Zawiera i definiuje
#zdefiniuj TINY_GSM_MODEM_SIM800#zawieraj
#włączać
#włączać
#włączać
//Mude para o nome e senha da sua rede WiFi que quer testar #define SSID "SSID" #define PASSWORD "12345678" //+55 DDD Numer do celular #define USER_PHONE_NUMBER "+5518912345678" //Tempo que deve esperar for dealar teraz nie działa #Define MAX_DISCONNECTED_TIME 10000 //10 seg //Tempo, w którym należy rozwiązywać problemy #Define MAX_CALL_TIME_INTERVAL 1800000 //30 min //Użyj serialu 1 dla modułu GSM HardwareSerial SerialGSM(1); Modem TinyGsmGSM(SerialGSM); //Czas połączenia z Internetem w ostatnim czasie, gdy uint32_t lastTimeConnected = 0; //Tempo em que fez a ultima ligação. Colocamos colo -MAX_CALL_TIME_INTERVAL dla natychmiastowej linijki //na początku czasu, kiedy uint32_t lastTimeCalledPhone = -MAX_CALL_TIME_INTERVAL; //Pinagem em User_Setup.h na makaron z biblioteki TFT_eSPI display = TFT_eSPI();
Ustawiać
void setup(){ Serial.begin(115200); konfiguracjaWyświetlacz(); //Rozpoczęcie konfiguracji i konfiguracji wyświetlaniaGSM(); //Inicializa o módulo GSM xTaskCreatePinnedToCore(checkWiFiConnection, //Função que será executada "checkWiFiConnection", //Nome da tarefa 10000, //Tamanho da pilha NULL, //Parametro da tarefa (bez przypadku 2, //Primosor) 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) }
Ekran konfiguracji
void setupDisplay(){ display.init(); //Rozpoczęcie wyświetlania display.setRotation(1); //Obrót display.fillScreen(TFT_BLUE); //Limpa o display com a azul display.setTextColor(TFT_WHITE, TFT_BLUE); //Koloka lub tekst w języku angielskim z podstawowymi elementami display.setTextWrap(false, false);//Desativa a quebra display.setTextSize(1); //Muda o tammanho zrobić texto display.setCursor(0, 0, 2); //Posição x, y e fonte do texto }
KonfiguracjaGSM
void setupGSM(){ showDisplay("Ustaw GSM"); //O Moduł GSM to GPIO 4 i 2 SerialGSM.begin(9600, SERIAL_8N1, 4, 2, false); opóźnienie (1000); //Uruchom ponownie o módulo if (!modemGSM.restart()) { ESP.restart(); powrót; } //Espera pela rede celular if (!modemGSM.waitForNetwork()) { display.setCursor(0, 0); showDisplay("Błąd sieci GSM"); opóźnienie(3000); ESP.restart(); powrót; } }
checkWiFiPołączenie
void checkWiFiConnection(void* p){ while(true) { //S não estiver conectado or roteador if(WiFi.status() != WL_CONNECTED) { //Połącz połączenie connectWiFi(); } //Opóźnienie o 1s z tarefa. É feita em kleszcze. Na executar em millis dividimos przez stałe portTICK_PERIOD_MS TickType_t taskDelay = 1000 / portTICK_PERIOD_MS; vOpóźnienieZadania(OpóźnienieZadania); } }
PołączWiFi
void connectWiFi(){ // Manda połącz się z rotacją z nazwą i poprawą WiFi.begin (SSID, HASŁO); Serial.println("Łączenie"); //Espera no while até conectar while(WiFi.status() != WL_CONNECTED) { Serial.print("."); opóźnienie (500); } //Sprawdź to połączenie Serial.println(); Serial.println("Połączony"); }
sprawdźInternet
void checkInternet(void* p){ //Opóźnienie 5 sekund z tarefa. É feita em kleszcze. W celu wykonania na stałe w ciągu kilku dni portTICK_PERIOD_MS TickType_t taskDelay = 5000 / portTICK_PERIOD_MS; while(true) { //Ustaw internet if(hasInternet()) { //Aktualizuj tempo działania w połączeniu z lastTimeConnected = millis(); } //Aplikacja o opóźnienie vTaskDelay(taskDelay); } }
ma internet
bool hasInternet(){ klient WiFiClient; //Endreço IP do Google 172.217.3.110 IPAddress adres = IPAddress(172, 217, 3, 110); //Ograniczenie czasu dla conexão client.setTimeout(5); //Tenta conectar bool podłączony = client.connect(adr, 80); //Pobierz conexão client.stop(); //Retorna true se está conectado ou false se está desconectado return connected; }
Pętla
void loop() { //Sprawdź, co zostało usunięte w określonym czasie if(isDisconnectedForTooLong()) { //Nie ma wyświetlania, które zostało usunięte showDisplay("Rozłączony"); //Następuje faza que não liga dla określonego telefonu if(hasNotCalledPhoneInAWhile()) { //Liga dla określonego telefonu callPhone(); } } else { //Mostra no display que está conectado showDisplay("Połączony"); } //Espera 1 segundo para a proxima iteração do loop delay(1000); }
jest rozłączony zbyt długo
bool isDisconnectedForTooLong(){ //Retorna prawidłowa zmiana tempa w ostatecznym połączeniu dla głównych lub ostatecznych zwrotów millis() - lastTimeConnected > MAX_DISCONNECTED_TIME; } bool hasNotCalledPhoneInAWhile() { //Retorna prawidłowa zmiana czasu na ostatnią ligę telefonu dla głównych lub ostatecznych zwrotów millis() - lastTimeCalledPhone > MAX_CALL_TIME_INTERVAL; }
zadzwońTelefon
void callPhone(){ //Uruchomienie definitywnego połączenia telefonu if(modemGSM.callNumber(USER_PHONE_NUMBER)) { //Sprawdź, czy chcesz wykonać połączenie Serial.println("callphone ok"); //Aktualizacja tempa em que foi feita a ultima ligação lastTimeCalledPhone = millis(); } else { //Se entrou aqui é porque não conseguiu fazer a ligação Serial.println("połączenie nie powiodło się"); } //Zakończ połączenie modemGSM.callHangup(); }
pokażWyświetlacz
void showDisplay(String message){ //Pokaż komunikat o pierwszym uruchomieniu wyświetlania, nieograniczona liczba zdarzeń, dodatkowe dodatki display.setCursor(0, 0); display.println(komunikat + " "); }
Krok 5: Pobierz pliki
JA NIE