我将如何创建一个简单的 Arduino 脚本来远程打开和关闭 LEDBuitIn?
How would I create a simple Arduino script that allows me to turn on and off LEDBuitIn remotely?
我正在从事一个项目,其中包括远程使用 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 地址,我应该能够通过改变来改变内置 LED 的状态ip地址搜索结束。
取而代之的是,在显示 ip 地址并显示页面后,按钮状态就在上面。当我尝试更改 url 以更改按钮状态时,它会出错。它带我到 "This page can't be reached" 和 serialmonitor 错误。
没关系,我在网上找到了一个视频,它清楚地解释了如何编写我要查找的代码。非常有帮助:https://www.youtube.com/watch?v=H0p7GVPdlyU
它还 link 到包含所有代码的页面。
我正在从事一个项目,其中包括远程使用 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 地址,我应该能够通过改变来改变内置 LED 的状态ip地址搜索结束。
取而代之的是,在显示 ip 地址并显示页面后,按钮状态就在上面。当我尝试更改 url 以更改按钮状态时,它会出错。它带我到 "This page can't be reached" 和 serialmonitor 错误。
没关系,我在网上找到了一个视频,它清楚地解释了如何编写我要查找的代码。非常有帮助:https://www.youtube.com/watch?v=H0p7GVPdlyU
它还 link 到包含所有代码的页面。