Arduino网络编程实战-WiFi篇-Web服务器-表单提交(POST)

Web服务器-表单提交(POST)

ESP-01/ESP-01 WiFi模块是由安信可科技开发,该模块核心处理器为ESP8266,在较小尺寸封装中集成了业界领先的Tensilica L06超低功耗32位微处理器(MCU),带有16位精简模式,主频支持80MHz和160MHz,支持RTOS,集成WiFi MAC/BB/RF/PA/LNA,板载天线。参考

该模块支持标准的IEEE802.11 b/g/n 协议,完整的TCP/IP协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。参考

ESP8266是高性能无线SOC,以最低成本提供最大实用性,为WiFi功能嵌入其他系统提供无限可能。参考

在这里插入图片描述

1、硬件准备

  • Arduino Mega2560 开发板一块
  • ESP-01/ESP-01s模块一块
  • ESP-01/ESP-01s转接板一块(请在某宝上搜索购买)
  • ESP-01/ESP-01s固件烧录器一个(请在某宝上搜索购买)
  • 杜邦线若干
  • Arduino开发板数据线一条
  • USB串口数据线一条

1)通过ESP-01/ESP-01s固件烧写器将ESP-AT的固件烧写到ESP-01/ESP-01s模块中

2)ESP-01/ESP-01s模块插入ESP-01/ESP-01s转接板

3)ESP-01/ESP-01s WiFi转接板与Arduino Mega2560硬件接线如下:

  • Arduino Mega2560 RX3<–-> ESP-01/ESP-01s TX
  • Arduino Mega2560 TX3<–-> ESP-01/ESP-01s RX
  • Arduino Mega2560 GND<–-> ESP-01/ESP-01s GND
  • Arduino Mega2560 5V<–-> ESP-01/ESP-01s VCC

2、软件准备

3、代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
// 定义与ESP-01模块通信串口
#define EspSerial Serial3
// 在AVR环境中使用ESP AT指令
#define ESP\_AT\_USE\_AVR true
// 开发板类型
#define BOARD\_TYPE "AVR Mega2560"
// 开发板名称
#define BOARD\_NAME BOARD\_TYPE
// 调试串口
#define DEBUG\_ESP8266\_AT\_WEBSERVER\_PORT Serial
// 扩展板类型
#define SHIELD\_TYPE "ESP8266-AT & ESP8266\_AT\_WebServer Library"

// 调试输出日志级别 0 至 4
#define \_ESP\_AT\_LOGLEVEL\_ 0

#include <ESP8266\_AT\_WebServer.h>

char ssid[] = "TP-LINK\_FE2A";
char pass[] = "iot123456";
// 无线状态
int status = WL_IDLE_STATUS;
int reqCount = 0;

ESP8266_AT_WebServer server(80);

const int led = 13;
const String postForms =
"<html>\
<head>\
<title>ESP8266\_AT\_WebServer POST handling</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
</style>\
</head>\
<body>\
<h1>POST plain text to /postplain/</h1><br>\
<form method=\"post\" enctype=\"text/plain\" action=\"/postplain/\">\
<input type=\"text\" name=\'{\"hello\": \"world\", \"trash\": \"\' value=\'\"}\'><br>\
<input type=\"submit\" value=\"Submit\">\
</form>\
<h1>POST form data to /postform/</h1><br>\
<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>\
</body>\
</html>";
void handleRoot()
{
digitalWrite(led, 1);
server.send(200, F("text/html"), postForms);
digitalWrite(led, 0);
}

void handlePlain()
{
if (server.method() != HTTP_POST)
{
digitalWrite(led, 1);
server.send(405, F("text/plain"), F("Method Not Allowed"));
digitalWrite(led, 0);
}
else
{
digitalWrite(led, 1);
server.send(200, F("text/plain"), "POST body was:\n" + server.arg(F("plain")));
digitalWrite(led, 0);
}
}

void handleForm()
{
if (server.method() != HTTP_POST)
{
digitalWrite(led, 1);
server.send(405, F("text/plain"), F("Method Not Allowed"));
digitalWrite(led, 0);
}
else
{
digitalWrite(led, 1);
String message = F("POST form was:\n");

for (uint8\_t i = 0; i < server.args(); i++)
{
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}

server.send(200, F("text/plain"), message);
digitalWrite(led, 0);
}
}

void handleNotFound()
{
digitalWrite(led, 1);

String message = F("File Not Found\n\n");

message += F("URI: ");
message += server.uri();
message += F("\nMethod: ");
message += (server.method() == HTTP_GET) ? F("GET") : F("POST");
message += F("\nArguments: ");
message += server.args();
message += F("\n");

for (uint8\_t i = 0; i < server.args(); i++)
{
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}

server.send(404, F("text/plain"), message);

digitalWrite(led, 0);
}

void setup()
{
Serial.begin(115200);
while (!Serial);

Serial.print(F("\nStarting ConnectWPA on "));
Serial.print(BOARD_NAME);
Serial.print(F(" with "));
Serial.println(SHIELD_TYPE);
Serial.println(ESP8266_AT_WEBSERVER_VERSION);

// 初始化ESP模块
EspSerial.begin(115200);
WiFi.init(&EspSerial);

Serial.println(F("WiFi shield init done"));

// 检查ESP-01与开发板连接状态
if (WiFi.status() == WL_NO_SHIELD)
{
Serial.println(F("WiFi shield not present"));
while (true);
}

// 连接网络
while ( status != WL_CONNECTED)
{
Serial.print(F("Connecting to WPA SSID: "));
Serial.println(ssid);

// 连接WiFi热点
status = WiFi.begin(ssid, pass);
}

Serial.print(F("You're connected to the network, IP = "));
Serial.println(WiFi.localIP());

server.begin();

Serial.print(F("WebServer is @ "));
Serial.println(WiFi.localIP());

server.on(F("/"), handleRoot);
server.on(F("/postplain/"), handlePlain);
server.on(F("/postform/"), handleForm);

server.onNotFound(handleNotFound);

server.begin();

Serial.print(F("HTTP server started @ "));
Serial.println(WiFi.localIP());
}

void loop()
{
server.handleClient();

}

4、运行结果

1)服务器启动

在这里插入图片描述

2)表单处理结果

在这里插入图片描述

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/122821159