0

我正在做一个项目,其中包括远程使用 arduino 硬件。我想学习如何创建一个简单的脚本,让我可以无线打开和关闭 MKR1000 的内置 LED。然后我可以在更复杂的项目中使用这些知识。在做了一些研究并查看了 arduino 库的示例网络服务器程序之后,我想出了这个科学怪人的代码。在工作了几个小时之后,我只是继续让它变得更糟,我真的可以使用一些指导来说明我做错了什么,为什么以及如何解决它。

我的科学怪人代码:

#include <WiFi101.h>
#include <SPI.h>

char ssid[] = "ARROW_015D80";
char pass[] = "KRR3K47XZXM3NYRHV7GX";

int status = WL_IDLE_STATUS;
int LED = LED_BUILTIN;
int LEDState = digitalRead(LED);

WiFiServer server(80);

void setup() {
   while (!Serial) {
  }
  Serial.begin(9600);
if (WiFi.status() == WL_NO_SHIELD) {
  Serial.println("Yo, where the wifi shield at?");
  while(true);
}
 while (status !=WL_CONNECTED) {
  Serial.print("Connecting to ssid: ");
  Serial.println(ssid);
  status = WiFi.begin(ssid, pass);

  delay(10000);
 }
 server.begin();
 printWiFiStatus();
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    Serial.println("+1 Client");
    String currentLine = "";
    while (client.connected()) {
    if (client.available()) {
      char c = client.read();
      Serial.write(c);
      if (c == '\n') {
        if(currentLine.length() == 0) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("Refresh: 1");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.print("State of button:");
          if (LEDState == HIGH){
          client.print("ON");       
          }
          if (LEDState == LOW){
        client.print("OFF");
      }
      client.println("<br>");
      client.println("</html>");
      client.println();
break;
}
else {
  currentLine = "";
}
}
else if (c !='\r') {
  currentLine += c;
    }
    if (currentLine.endsWith("GET /H")) {
      digitalWrite(LED, HIGH);
    }
    if (currentLine.endsWith("Get /L")) {
      digitalWrite(LED, LOW);
    }
    if (currentLine.endsWith("Get /stop")){
      client.stop();
      Serial.println ("Client disconnected");
    }
     }


  }

}
}

void printWiFiStatus() {
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

根据视频和信息的不匹配,这个程序应该将 arduino 连接到互联网,在串行监视器中打印 arduino 的 ip 地址,我应该能够通过改变 ip 的结尾来改变内置 LED 的状态地址搜索。

相反,在显示 ip 地址并显示页面后,按钮状态就可以了。当我尝试更改 url 以更改按钮状态时,它会出错。它带我到“无法访问此页面”和串行监视器错误。

4

1 回答 1

0

没关系,我在网上找到了一个视频,它清楚地解释了如何编写我正在寻找的代码。这非常有帮助:https ://www.youtube.com/watch?v=H0p7GVPdlyU

它还链接到包含所有代码的页面。

于 2019-10-13T12:53:36.640 回答