我已经使用按钮完成了通过互联网控制设备。我使用Arduino Uno + SD CARD +以太网屏蔽。现在我想修改它,以便used可以通过表单提交发送文本命令来控制它。
当我使用Arduino Uno Memory获取HTML代码时,我可以这样做,但是当我使用SD卡进行HTML时,我现在遇到了问题。期待代码模块相同。
答案 0 :(得分:3)
是的,这是可能的。但是你需要使用网络套接字。我用PHP做过。 因此,您将创建一个包含html和php的页面,当您单击提交按钮时,将发送命令。它必须是这样的,在php中:
<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock,"ip number of arduino", 8080);
$messsage = '0';
if (isset($_POST['on'])){
$msg='1';
}
if (isset($_POST['off'])){
$msg='0';
}
socket_write($sock, $msg);
?>
因此,您只需编写一个html即可在提交表单时发送post方法。
答案 1 :(得分:1)
提交HTML表单实际上会调用HTTP协议的POST或GET方法。该协议是人类可读的。
来自w3schools的HTTP请求示例:
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
这是你将进入arduino缓冲区的内容。您只需搜索name1 = pattern并读取该值并采取相应的行动。
在下面的例子中,我读取了变量s和e的值。
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) {
bfill = ether.tcpOffset();
char* socket = strstr((char *)Ethernet::buffer + pos, "?s=");
if(socket != 0){
byte s = getIntArg(socket, "s");
byte e = getIntArg(socket, "e");
Serial.println("Request");
Serial.println(s);
Serial.println(e);
PlanActions(s, e)
}
此请求的表单如下:
<form action="." method="POST">
<select name="s" size="1">
<option value="0">TV</option>
<option value="1">HiFi</option>
</select>
<input name="e" type="submit" value="0">
<input name="e" type="submit" value="1">
</form>
在示例中,我从arduino发送简单的表单页面,但您可以将页面放在任何您想要的位置。它可以在本地计算机或Web服务器上。只需将操作更改为<form action="arduino-ip"