Как бы я создал простой скрипт Arduino, который позволит мне удаленно включать и выключать LEDBuitIn? - PullRequest
0 голосов
/ 07 октября 2019

Я работаю над проектом, который включает удаленную работу с оборудованием Arduino. Я хотел бы узнать, как создать простой сценарий, который позволяет мне включать и выключать встроенный Led в мой MKR1000 без проводов. Затем я мог бы использовать эти знания в более сложных проектах. После некоторого исследования и изучения примера программы веб-сервера библиотеки 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 к Интернету, распечатать IP-адрес Arduino на последовательном мониторе, и я смогу изменить состояние встроенного светодиода, изменив конецпоиск по ip-адресу.

Вместо этого, после отображения ip-адреса и отображения страницы, отображается состояние кнопки. Когда я пытаюсь изменить URL, чтобы изменить состояние кнопки, он выдает ошибку. Это приводит меня к сообщению «Эта страница недоступна» и выводит ошибку serialmonitor.

1 Ответ

0 голосов
/ 13 октября 2019

Не берите в голову, я нашел видео онлайн, которое ясно объясняет, как написать код, который я ищу. Это чрезвычайно полезно: https://www.youtube.com/watch?v=H0p7GVPdlyU

Это также ссылка на страницу со всем кодом для него.

...