主题代码
#include <WiFi.h>
const int led1Pin = 2;
boolean led1Flag = false;
String led1State = "OFF";
String receline = "";
String receAll = "";
const char* ssid = "开始上";
const char* password = "12345678";
WiFiServer server(80);
WiFiClient newClient;
void setup()
{
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println();
Serial.println("现出原型吧:");
WiFi.softAP(ssid,password);
IPAddress myIP = WiFi.softAPIP();
Serial.print("你的原型是:");
Serial.println(myIP);
Serial.println();
server.begin();
pinMode(led1Pin,OUTPUT);
}
void loop() {
newClient = server.available();
if(newClient)
{
Serial.print("你的原型是个蛆啊:");
Serial.println(newClient.remoteIP());
while(newClient.connected())
{
if(newClient.available() > 0)
{
char c = newClient.read();
Serial.print(c);
receAll += c;
if(c == '\n')
{
if(receline.length() == 0)
{
getCommand();
pageDisplay();
break;
}
else
{
receline = "";
}
}
else if(c != '\r')
{
receline += c;
}
}
}
newClient.stop();
Serial.println("现出蛆了啊");
}
ledControl();
receAll = "";
}
void getCommand()
{
if((receAll.indexof("GET/LED1_on")) >= 0)
led1Flag = true;
else if((receAll.indexof("GET/LED1_off")) >= 0)
led1Flag = false;
led1State = (led1Flag)?"ON":"OFF";
}
void ledControl()
{
digitalWrite(led1Pin,led1Flag);
}
void pageDisplay()
{
newClient.println("HTTP/1.1 200 OK");
newClient.println("Content-type;text/html");
newClient.println();
newClient.print("<!DOCTYPE html>");
newClient.print("<html>");
newClient.print("<head>");
newClient.print("<title>三界的上神体</title>");
newClient.print("<meta charset = "utf-8">");
newClient.print("<style>html{text-align:center;}</style>");
newClient.print("</head>");
newClient.print("<body><br>");
newClient.print("<h2>三界的上神体</h2>");
newClient.print("<p>GPIO2 - "+ led1State +"</p>");
newClient.print("<P><a href = "/LED1_on"><button>打开</button></a></P>");
newClient.print("<P><a href = "/LED1_off"><button>关闭</button></a></P>");
newClient.print("</body></html>");
newClient.println();
}
错误码
H:\8266xm\xxdd82663\xxdd82663.ino: In function 'void getCommand()':
H:\8266xm\xxdd82663\xxdd82663.ino:76:15: error: 'class String' has no member named 'indexof'
if((receAll.indexof("GET/LED1_on")) >= 0)
^
H:\8266xm\xxdd82663\xxdd82663.ino:78:20: error: 'class String' has no member named 'indexof'
else if((receAll.indexof("GET/LED1_off")) >= 0)
^
一楼正解
不知道你这个问题是否已经解决, 如果还没有解决的话:问题解决方案:
错误码显示 'WL_CONNECTED' was not declared in this scope
,这意味着'WL_CONNECTED'
未在当前作用域中声明。这是因为缺少WiFi库的定义。为了解决这个问题,我们需要添加对WiFi库的引用。
将以下代码行添加到顶部的包含部分:
#include <WiFi.h>
这错误码提示的很清楚诶
说这个类里面没有这个函数成员
错误提示你的代码的第76行出现的问题,就是以下给你圈起来的位置:
Arduino的String类中确实没有indexof方法,需要使用indexOf()方法,注意是大小写敏感
indexof
是不正确的方法名称,正确是indexOf
。所以,把代码中的receAll.indexof("GET/LED1_on")`和`receAll.indexof("GET/LED1_off")
改为
receAll.indexOf("GET/LED1_on")
和
receAll.indexOf("GET/LED1_off")
修改后的代码片段:
void getCommand()
{
if((receAll.indexOf("GET/LED1_on")) >= 0)
led1Flag = true;
else if((receAll.indexOf("GET/LED1_off")) >= 0)
led1Flag = false;
led1State = (led1Flag)?"ON":"OFF";
}
函数pageDisplay()
中,直接插入的HTML字符串也存在问题,双引号使用不正确。C++中,如果想在字符串中使用双引号,要用反斜杠(\
)进行转义。修改后的代码如下:
void pageDisplay()
{
newClient.println("HTTP/1.1 200 OK");
newClient.println("Content-type;text/html");
newClient.println();
newClient.print("<!DOCTYPE html>");
newClient.print("<html>");
newClient.print("<head>");
newClient.print("<title>三界的上神体</title>");
newClient.print("<meta charset = \"utf-8\">");
newClient.print("<style>html{text-align:center;}</style>");
newClient.print("</head>");
newClient.print("<body><br>");
newClient.print("<h2>三界的上神体</h2>");
newClient.print("<p>GPIO2 - "+ led1State +"</p>");
newClient.print("<P><a href = \"/LED1_on\"><button>打开</button></a></P>");
newClient.print("<P><a href = \"/LED1_off\"><button>关闭</button></a></P>");
newClient.print("</body></html>");
newClient.println();
}
在您的代码中,错误是由于使用了indexof
而不是正确的方法名indexOf
引起的。String
类的方法名是区分大小写的,所以请将所有的indexof
改为indexOf
。
以下是修改后的代码片段:
void getCommand()
{
if((receAll.indexOf("GET/LED1_on")) >= 0)
led1Flag = true;
else if((receAll.indexOf("GET/LED1_off")) >= 0)
led1Flag = false;
led1State = (led1Flag)?"ON":"OFF";
}
请注意,你还可以将String
对象转换为C风格字符串来使用strstr
函数进行匹配,这样也可以实现相同的功能。例如:
void getCommand()
{
if(strstr(receAll.c_str(), "GET/LED1_on") != NULL)
led1Flag = true;
else if(strstr(receAll.c_str(), "GET/LED1_off") != NULL)
led1Flag = false;
led1State = (led1Flag)?"ON":"OFF";
}
以下答案参考newbing,回答由博主波罗歌编写:
根据您提供的代码和错误信息,问题出现在getCommand()
函数中的indexof()
函数调用上。
indexof()
是一个非标准的函数名称,应该是 indexOf()
,注意大小写。此函数用于检查字符串中是否包含另一个字符串,并返回它在原字符串中的位置。而错误信息中提到的String
类没有indexof
成员。
请在 getCommand()
函数中将 indexof
改为 indexOf
,同时请确保包含了 "Arduino.h"
头文件,该头文件包含了String
类的定义。修改后的函数如下:
void getCommand()
{
if((receAll.indexOf("GET/LED1_on")) >= 0)
led1Flag = true;
else if((receAll.indexOf("GET/LED1_off")) >= 0)
led1Flag = false;
led1State = (led1Flag)?"ON":"OFF";
}
请确认您的代码中是否还有其他错误,并注意拼写和大小写的正确性。希望我的回答对您有所帮助!如果还有其他问题,请随时提问。
如果我的回答解决了您的问题,请采纳!