从网络获取数据,转换为变量
Get data from web, convert to variables
我有一个 ESP32,我在上面使用 Arduino 通过网络服务器控制一些继电器。
现在我正在这样检查中继状态:
// 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&0
或 r1=1&r2=0&r3=0
分成变量来控制继电器(引脚)?
您可以遍历接收到的字符串,并根据要求简单地打开或关闭继电器(我假设 line
是 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);
}
希望这对您有用。
但是,你应该有一个继电器数组,这样你就可以简单地传递它的索引来打开或关闭它。
我选择的解决方案是从这个切换:
if (line.toInt() == 100)
到
if (line.charAt(1) == '1') // Relay 1.
{
我有一个 ESP32,我在上面使用 Arduino 通过网络服务器控制一些继电器。
现在我正在这样检查中继状态:
// 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&0
或 r1=1&r2=0&r3=0
分成变量来控制继电器(引脚)?
您可以遍历接收到的字符串,并根据要求简单地打开或关闭继电器(我假设 line
是 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);
}
希望这对您有用。
但是,你应该有一个继电器数组,这样你就可以简单地传递它的索引来打开或关闭它。
我选择的解决方案是从这个切换:
if (line.toInt() == 100)
到
if (line.charAt(1) == '1') // Relay 1.
{