完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
关于如何响应来自客户端的 HTTP get 请求并使用 Arduino 库发回网页的代码示例有很多。但是,我正在 MPLab 中的 Atmega16 上进行开发,发现解决这个问题有点困难。因此求助于新手论坛!
我已经设法使用非常好的、紧凑的迷你库从第一原理中检索 NTP 时间码,稍微调整一下就可以很好地工作通过任何一个 UART,并将中断下的输入带入循环缓冲区。如果你想用最少的代码与 ESP8266 交互,我强烈建议你看看这个。 所以,对我来说发生的事情是我能够在板上检测到传入的 HTTP 请求(我只有 2 个 LED 指示大部分时间发生了什么!)我正在尝试发回 HTML 响应我在所有教程中看到的所有正确响应 200、mimetype 等标头,但网络浏览器没有取回任何数据。 我认为这是因为我没有将数据正确地发送回客户端(我的笔记本电脑上的网络浏览器,带有调试工具的 firefox)......我什至不知道该怎么做。我认为这将是一个简单的 CIPSEND,但我是否需要首先使用 CIPSTART 专门连接到客户端?如果是这样,我如何获得客户端的 IP 地址? 代码处于某种状态,因为我现在正在盲目地进行黑客攻击,但在这里' 代码:全选ESP8266_WIFIMode(STAtiON); ESP8266_ConnectionMode(MULTIPLE); // CIPMUX=1 ESP8266_ApplicationMode(NORMAL); // Kill old server and connection. if (!SendATandExpectResponse("AT+CIPSERVER=0", "\r\nOK\r\n")) flashError(3); // Connect to the access point (Wifi Router) if(ESP8266_connected() == ESP8266_NOT_CONNECTED_TO_AP){ connectionState=false; returnCode = ESP8266_JoinAccessPoint(SSID, PASSWORD); switch (returnCode){ case ESP8266_WIFI_CONNECTED: connectionState = true; break; // omitted for brevity the post. Deal with various error stated } } // If connection okay then carry on. if (connectionState==true){ _delay_ms(400); if (!SendATandExpectResponse("AT+CWDHCP_CUR=1,1", "\r\nOK\r\n")) flashError(1); if (!SendATandExpectResponse("AT+MDNS=1,\"ESP8266\",\"http\",80", "\r\nOK\r\n")) flashError(2); // Create a TCP server if (!SendATandExpectResponse("AT+CIPSERVER=1,80", "\r\nOK\r\n")) flashError(3); while(1){ ESP8266_Clear(); // Clear input buffer, ready to receive packet. int id=0; if (WaitForExpectedResponse("\n")){ _delay_ms(1000); // We get here when we go to the IP address of the device in a browser. // Send response and some HTML. if (ESP8266_Send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\n",id)!=ESP8266_RESPONSE_FINISHED) flashError(1); if (ESP8266_Send(" : Html here omitted for brevity. : \n",id)!=ESP8266_RESPONSE_FINISHED) flashError(1); ESP8266_Close(); // CIPCLOSE=1 _delay_ms(400); } 所以,我的问题的关键是:有没有人知道任何好的非 ARDUINO 教程或帮助设置一个简单的 Web 服务器?(请 C!)我对库的逆向工程很感兴趣,但至少可以说它相当混乱! |
|
相关推荐
1个回答
|
|
实现一个小型Web服务器需要分为以下几步: 1. 配置网络连接:包括设置MAC地址、IP地址、子网掩码、网关IP等。 2. 监听端口:需要在某个端口上监听客户端的HTTP请求,通常是80端口。 3. 解析HTTP请求:当有请求到来时,需要解析请求内容,确定请求类型(GET/POST),请求地址及参数。 4. 处理请求:根据请求地址及参数,返回相应的Web内容,通常是HTML页面、CSS、JavaScript等文件。 5. 发送响应:将Web内容返回给客户端,通常是通过TCP连接发送。 下面是一个简单的示例代码,可以帮助你理解如何实现这些步骤: ``` #include byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // MAC地址 IPAddress ip(192, 168, 0, 100); // IP地址 EthernetServer server(80); // 监听80端口 char buffer[256]; // 缓冲区,用于存放HTTP请求和响应 void setup() { Ethernet.begin(mac, ip); // 配置网络连接 server.begin(); // 开始监听 } void loop() { EthernetClient client = server.available(); // 接收客户端请求 if (client) { int len = client.read(buffer, sizeof(buffer)); // 读取HTTP请求 if (len > 0) { buffer[len] = ' |