乐鑫技术交流
直播中

刘继牛

7年用户 966经验值
私信 关注
[问答]

如何检查ESP8266是否连接到wifi并激活继电器?

我是新手,发现很难为 NodeMCU 编写程序以在路由器挂起时重新启动路由器。
该程序应该:
1) 持续检查 ESP8266 是否连接到家庭 WiFi(SSID 和 PW)。
2) 当 WiFi 不再连接时,等待大约 2 分钟,并且
3) 如果仍然断开连接,
4) 激活继电器(这将关闭路由器)。
5) 20 秒后,关闭继电器(这样,路由器将重新启动)。
6) 再等 4-5 分钟,如果 WiFi 重新连接,转到 1) ,否则,如果 WiFi 仍然断开,则
7) 从第 4) 点开始重复。
我认为这个程序并不难,但对我来说是。那么,有没有人可以帮助我?我会很感激他。
事实上,我山区老家的调制解调器/路由器有时会死机(可能是被互联网供应商远程更新或其他原因),需要重启。但由于我经常不在家,所有连接到它的设备(相机、恒温器等)都处于停用状态,我无法远程干预。这样的程序可以解决问题。

回帖(1)

贾埃罗

2024-1-2 16:02:55
你可以尝试使用以下代码实现:

#include
#include

// Replace with your network credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// Define relay pin
const int relayPin = 5;

void setup() {
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, LOW);

  // Connect to WiFi
  WiFi.begin(ssid, password);

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
  }
  
  // Connected to WiFi
  Serial.begin(9600);
  Serial.println("Connected to WiFi");

  // Start mDNS service
  MDNS.begin("esp8266");
}

void loop() {
  // Check WiFi connection
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("WiFi Disconnected");
    // Wait for 2 minutes
    delay(2 * 60 * 1000);
    // Check WiFi connection again
    if (WiFi.status() != WL_CONNECTED) {
      Serial.println("Relay ON");
      // Activate relay
      digitalWrite(relayPin, HIGH);
      // Wait for 20 seconds
      delay(20 * 1000);
      Serial.println("Relay OFF");
      // Deactivate relay
      digitalWrite(relayPin, LOW);
      // Wait for 4-5 minutes
      delay(4 * 60 * 1000 + random(0, 60 * 1000));
      // Check WiFi connection again
      if (WiFi.status() == WL_CONNECTED) {
        // If WiFi connected, start over
        loop();
      }
    }
  }

  // Keep mDNS service alive
  MDNS.update();
}

在上述代码中,我们首先定义了要连接的网络凭据(SSID 和密码)以及继电器引脚。随后,在setup()函数中,我们将继电器引脚设置为输出,并将其初始状态设置为关闭(LOW)。

接下来,我们连接到WiFi网络,并等待连接成功。我们还通过MDNS.begin()函数启动mDNS服务。

在主循环中,我们使用WiFi.status()函数检查ESP8266是否仍然连接到WiFi网络。如果未连接,则等待2分钟并再次检查连接。如果仍然未连接,则激活继电器(关闭路由器),等待20秒后再关闭继电器(重新启动路由器),并等待4-5分钟。此后,如果WiFi连接成功,则通过递归调用loop()函数重新开始程序,否则程序将继续等待WiFi连接。

最后,我们使用MDNS.update()函数保持mDNS服务活动。

希望这可以帮到你!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分