0

我有一个 ESP32,我使用 Arduino 来控制一些带有 Web 服务器的继电器。

现在我正在检查继电器状态,如下所示:

// We now create a URI for the request
String url = "/read.php?id=";

Serial.print("Requesting URL: ");
Serial.println(url);

// This will send the request to the server
client.print(String("GET ") + url + "ESP" + ESPid + " HTTP/1.1\r\n"  +
             "Host: " + host + "\r\n" + 
             "Connection: close\r\n\r\n");
unsigned long timeout = millis();

while (client.available() == 0) {
  if (millis() - timeout > 5000) {
    Serial.println(">>> Client Timeout !");
    client.stop();
    return;
  }
}


Serial.println(" ");
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
  line = client.readStringUntil('\r'); //    String
  Serial.println(line); 
}


if (line.toInt() == 100)  
{
  digitalWrite(Rele_1, LOW);
  digitalWrite(Rele_2, HIGH);
  digitalWrite(Rele_3, HIGH);

部分:

if (line.toInt() == 100)  
{
  digitalWrite(Rele_1, LOW);
  digitalWrite(Rele_2, HIGH);
  digitalWrite(Rele_3, HIGH);

将被复制并为每个可能的变化更改 100 个。

当我得到更多的继电器时,这不是一个很好的方法。每个继电器都有一个 1 或 0 来启动和停止。
有没有办法拆分100来控制继电器?就像1&0&0从我的网络服务器推送一样?
有没有办法拆分1&0&0r1=1&r2=0&r3=0分成变量来控制继电器(引脚)?

4

2 回答 2

0

我选择的解决方案是从此切换:

if (line.toInt() == 100) 

if (line.charAt(1) == '1')   // Relay 1. 
{
于 2018-04-08T07:02:24.153 回答
0

您可以遍历接收到的字符串,并根据要求简单地打开或关闭继电器(我假设line是 a String):

int sz = line.size();
int relay_pos = sz;
for(i = 0; i < sz; i++,relay_pos--) {
    if(line[i] == 1)
        digitalWrite(relay[relay_pos], HIGH);
    else if(line[i] == 0)
        digitalWrite(relay[relay_pos], LOW);
}

希望这适用于您的情况。

但是,你应该有一个继电器数组,所以你可以简单地传递它的索引来打开或关闭它。

于 2018-04-06T07:03:28.357 回答