Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этом видео мы создадим датчик потери связи с ESP32 и SIM800. Это означает, что с помощью этого проекта мы можем проверить подключение к Интернету, а в случае сбоя подключения позвонить по номеру телефона, чтобы уведомить о проблемах с сетью.
Это один из многих способов выполнения такого типа мониторинга. Хотя это просто, он позволяет вам тестировать различные устройства, которые могут существовать в вашем CPD. Его сила проверки становится намного больше при использовании ESP32. Хотя в этом примере я использую Wi-Fi, вы можете использовать проводной Интернет, если хотите.
Шаг 1: Сборка
Шаг 2: Сборка - стол
Шаг 3. Библиотека TFT_eSPI
В среде Arduino IDE перейдите в Sketch-> Include
Библиотека-> Управление библиотеками…
Установить TFT_eSPI
Перейдите в папку библиотеки и измените строки файла User_Setup.h так, чтобы он оставался таким, как показано на изображении.
Шаг 4: ESP32_Check_Internet_Connection.ino
Включает и определяет
#define TINY_GSM_MODEM_SIM800 # включить
#включают
#включают
#включают
// 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 рассмотрение 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 // Последовательный порт использования 1 для модуля GSM HardwareSerial SerialGSM (1); TinyGsm модем GSM (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; // Изображение пользователя User_Setup.h в библиотеке TFT_eSPI display = TFT_eSPI ();
Настраивать
void setup () {Serial.begin (115200); setupDisplay (); // Инициализация и настройка отображения setupGSM (); // Инициализация модуля GSM xTaskCreatePinnedToCore (checkWiFiConnection, // Функция для выполнения "checkWiFiConnection", // Номинальное значение 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (no Casade não Prior Usamidos) 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)}
SetupDisplay
void setupDisplay () {display.init (); // Инициализация display display.setRotation (1); // Ротация display.fillScreen (TFT_BLUE); // Limpa o display 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}
НастройкаGSM
void setupGSM () {showDisplay ("Настройка GSM"); // В модуле GSM есть GPIO 4 и 2 SerialGSM.begin (9600, SERIAL_8N1, 4, 2, false); задержка (1000); // Перезапуск модуля if (! ModemGSM.restart ()) {ESP.restart (); возвращение; } // Espera pela rede celular if (! ModemGSM.waitForNetwork ()) {display.setCursor (0, 0); showDisplay ("Ошибка сети GSM"); задержка (3000); ESP.restart (); возвращение; }}
checkWiFiConnection
void checkWiFiConnection (void * p) {while (true) {// Мы не можем установить соединение с roteador if (WiFi.status ()! = WL_CONNECTED) {// Подключить соединение connectWiFi (); } // Задержка на 1 секунду после тарифа. É feita em ticks. Для выполнения в миллисекундах с постоянным портомTICK_PERIOD_MS TickType_t taskDelay = 1000 / portTICK_PERIOD_MS; vTaskDelay (taskDelay); }}
подключитьсяWiFi
void connectWiFi () {// Подключить к сети через WiFi.begin (SSID, PASSWORD); Serial.println («Подключение»); // Espera no while até conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); задержка (500); } // Если вы не знаете, что такое Serial.println (); Serial.println («Подключено»); }
checkInternet
void checkInternet (void * p) {// Задержка на 5 секунд после тарифа. É feita em ticks. Для выполнения в миллисекундах с постоянным портомTICK_PERIOD_MS TickType_t taskDelay = 5000 / portTICK_PERIOD_MS; while (true) {// Сетевой Интернет if (hasInternet ()) {// Atualiza o tempo em que aconteceu a útlima conexão lastTimeConnected = millis (); } // Применение задержки vTaskDelay (taskDelay); }}
hasInternet
bool hasInternet () {Клиент WiFiClient; // Конечный IP-адрес для Google 172.217.3.110 IP-адрес adr = IPAddress (172, 217, 3, 110); // Ограничение времени для соединения client.setTimeout (5); // Tenta conectar bool connected = client.connect (adr, 80); // Fecha a conexão client.stop (); // Возвращает истину, если она установлена или ложь, если она отключена return connected; }
Петля
void loop () {// Устанавливается определенное значение темпа if (isDisconnectedForTooLong ()) {// Больше нет отображения, которое нужно удалить showDisplay ("Disconnected"); // Этот темп не определен для телефона if (hasNotCalledPhoneInAWhile ()) {// Используется для определения телефона callPhone (); }} else {// В большинстве случаев отображение не выполняется showDisplay ("Connected"); } // Первый шаг для предварительной итерации do loop delay (1000); }
isDisconnectedForTooLong
bool isDisconnectedForTooLong () {// Возвращает истинное значение в определенном темпе с максимальным значением для основной очереди return millis () - lastTimeConnected> MAX_DISCONNECTED_TIME; } bool hasNotCalledPhoneInAWhile () {// Возвращает истинное значение в нужном темпе для максимального вызова для телефона для основного номера return millis () - lastTimeCalledPhone> MAX_CALL_TIME_INTERVAL; }
телефонный звонок
void callPhone () {// Установить связь для определения телефона if (modemGSM.callNumber (USER_PHONE_NUMBER)) {// Теперь вы можете использовать связь с последовательным интерфейсом Serial.println ("callphone ok"); // Выполнение темпов для окончательной лигатуры lastTimeCalledPhone = millis (); } else {// Не удалось установить связь с последовательным интерфейсом Serial.println ("сбой вызова"); } // Завершение связи модемаGSM.callHangup (); }
showDisplay
void showDisplay (String message) {// Большинство сообщений, которые используются для отображения, не могут быть отображены в некоторых случаях display.setCursor (0, 0); display.println (сообщение + ""); }
Шаг 5: Загрузите файлы
Я НЕТ