W5500EVB作为HTTP服务器


关键词:HTTP Server  W5500  WIZnet  W5500EVB  HTTP服务器


HTTP服务器也就是平时我们所说网页服务器,其实这种嵌入式设备内嵌的网页服务器在我们日常生活中十分常见,例如我们天天使用的无线路由器。我们在配置无线路由器时, 都会使用浏览器打开其配置页面进行配置。这里我们使用的就是无线路由器里面内嵌的网页服务器功能。用W5500建立自己的网页服务器,你只在浏览器地址栏里键入W5500的IP地址,就成功在你的网页上显示出来了。 首先在main主函数中,我们完成对W5500的初始化,同时调用init_http_server()函数实现对HTTP Server的初始化。在这个初始化函数中,配置W5500的IP地址,MAC地址等基本网络参数,然后在主循环中调用do_http() 函数实现HTTP服务器。单片机作为HTTP服务器的具体工作过程在void proc_http(SOCKET s, uint8 * buf)中有详细过程,解析http请求报文并发送http响应报文。

HTTP Server实现原理图如下:

主循环代码如下:
	while(1)																					/*循环执行的函数*/ 
	{
		do_https();                     														/*打开HTTP Server*/
	}
	
	void do_https(void)
	{
		uint8 ch=SOCK_HTTPS;																	/*定义一个socket*/
		uint16 len;
		st_http_request *http_request;															/*定义一个结构指针*/
		memset(rx_buf,0x00,MAX_URI_SIZE);
		http_request = (st_http_request*)rx_buf;					 
		switch(getSn_SR(ch))																	/*获取socket状态*/
		{
			case SOCK_INIT:																		/*socket处于初始化状态*/
				listen(ch);
			break;
			case SOCK_LISTEN:																	/*socket处于监听状态*/
			break;
			case SOCK_ESTABLISHED:																/*socket处于连接状态*/
				if(getSn_IR(ch) & Sn_IR_CON)
				{
					setSn_IR(ch, Sn_IR_CON);													/*清除中断标志位*/
				}
				if ((len = getSn_RX_RSR(ch)) > 0)		
				{
					len = recv(ch, (uint8*)http_request, len); 									/*接收http请求*/
					*(((uint8*)http_request)+len) = 0;
					proc_http(ch, (uint8*)http_request);										/*接收http请求并发送http响应*/
					disconnect(ch);
				}
			break;	
			case SOCK_CLOSE_WAIT:   															/*socket处于等待关闭状态*/
				if ((len = getSn_RX_RSR(ch)) > 0)
				{
					len = recv(ch, (uint8*)http_request, len);									/*接收http请求*/      
					*(((uint8*)http_request)+len) = 0;
					proc_http(ch, (uint8*)http_request);										/*接收http请求并发送http响应*/
				}
					disconnect(ch);
			break;	
			case SOCK_CLOSED:                   												/*socket处于关闭状态*/
				socket(ch, Sn_MR_TCP, 80, 0x00);   												/*打开socket*/
			break;
			default:
			break;
		}
	}

	
HTTP Server的测试步骤如下
  1. HTTP服务器采用默认的IP信息,所以在w5500_conf.c文件中设置ip_from为IP_FROM_DEFINE。
  2. 对代码进行编译,之后将程序烧录到野火开发板。
  3. 连接好网线,USB串口线。打开串口调试工具,复位野火开发板,从输出结果可以得到图1设置信息。
  4. 打开浏览器,键入192.168.1.89,如图2所示,在浏览器里面成功地显示出来了。

图1:串口打印信息

图2:浏览器显示效果


例程下载:【HTTP Server】
编译环境:keil V5.11
硬件要求:W5500EVB