我正在尝试初始化一个服务器,使其根据收到的请求看起来像特定的输入。它们有很多,所以我想用一个循环初始化它,如下所示:
void serverInit() {
for (int i = 1; i <= qty; i++) {
String s = "/readBatt" + i;
server.on(s, runTest(i));
}
server.begin();
Serial.println("Server started.");
}
它告诉我 server.on(s, runTest(i));
是对 void 表达式的无效使用。我知道它希望将其格式化为 server.on(s, runTest)
但函数 runTest(int n)
需要一个参数。如何将此参数传递给函数?
最佳答案
看来您正在使用 WebServer ESP32 Arduino 库中的类。正如您已经收集到的,on()
中指定的回调方法不接受任何参数。
但是,您还有其他选择。您可以在 URL 路径中指定一个“占位符” - 使用大括号 - {}
.然后,在回调中,可以使用 pathArg()
检索相应的参数。方法 - 它接受参数索引作为参数。
例子...
您可以将 API 端点定义为 /readBatt/<battery number>
.然后,要配置服务器以处理对此端点的请求,您可以使用类似
#include <uri/UriBraces.h>
server.on(UriBraces("/readBatt/{}"), runTest);
在您的回调中,您将按如下方式检索第一个参数 ...
static void runTest() {
String batteryNumber = server.pathArg(0);
Serial.println("Request to read battery");
String response = "You attempted to read battery " + batteryNumber;
response += ".\nThis endpoint is a placeholder. Check again soon!";
server.send(200, "text/plain", response);
}
最后...假设您的 ESP8266 在本地 IP 地址 192.168.1.9 上运行。您可以通过打开访问新的 API 端点
在您的浏览器中。 (将 1
替换为相关的电池编号。)
我不认为有 pathArg()
的版本不幸的是,它返回一个整数,因此您可能必须在某些时候执行转换。
关于c++ - 错误无效使用 void 表达式。试图将参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708674/