AsyncWiFiWebServerライブラリのAsyncAdvancedWebServer.inoというサンプルプログラムを見ながら、リニアアンプ用操作パネルアプリに移植しています。表示できるようになりましたが、ボタンを押す操作の処理方法が分かりません。
ブラウザのボタンを操作でラズパイpicoのLEDをONするために、HTMLでは次のように記述しています。
<form action="/" method="post">
<button name="btnLED" value="LED_ON" class="green">LED</button>
</form>
このpostメソッドを受ける処理が必要です。サーバー側では、nameとvalueの組合せにより、「どのボタン」が押されて「どのような要求」があったのかを受け取る必要があります。
AsyncWiFiWebServerライブラリには、多くのサンプルプログラムがあります。今日は、ボタン操作の方法を学習するためにAsync_PostServer.inoをコンパイルして実行してみました。
ブラウザに表示される2つのフォームの内の、下側のフォーム(イメージは上図参照)のSubmitボタンを押すと、ブラウザの画面には次のように表示されました。
Aysnc_PostServer.inoでは、次のように記述されています。
void handleForm(AsyncWebServerRequest *request){
if (request->method() != HTTP_POST){
request->send(405, "text/plain", "Method Not Allowed");
}else{
String message = "POST form was:\n";
for (uint8_t i = 0; i < request->args(); i++){
message += " " + request->argName(i) + ": " + request->arg(i) + "\n";
}
request->send(200, "text/plain", message);
}
}
このサンプルのHTMLでは該当するフォームは次のような内容です。
<form method="post" enctype="application/x-www-form-urlencoded" action="/postform/">
<input type="text" name="hello" value="world"><br>
<input type="submit" value="Submit">
</form>
以上のことから、 request->argName(i)がnameとしてhelloを、request->arg(i)がvalueとしてworldを受け取っていることがわかりました。