极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 44102|回复: 13

【翻译教程】enc28J60 和 Arduino (5)——Web服务器

[复制链接]
发表于 2012-10-11 10:31:03 | 显示全部楼层 |阅读模式
本帖最后由 zcbzjx 于 2013-2-22 19:52 编辑

继续,希望我有耐心可以翻译完。。。
原文在这儿



    在我第五篇关于enc28j60的教程中,我将使用arduino和enc28j60模块(盾)作为一个web服务器。

万维网(World Wide Web)

    在所有的网络服务中,最常用的肯定是web服务:每次你上网冲浪,你使用程序(称为浏览器)使用HTTP协议,连接到web服务器,获取内容(网页、图片、视频...)并显示在屏幕上。

    网页是由一个名为HTML的标记语言组成。这种语言使用标签来描述网页内容。

    在网络上使用HTTP协议与Arduino沟通的主要优点是:
  • 你不需要开发专有的客户端,可以使用常见的浏览器(如IE、firefox..)。
  • HTTP协议是文本的,你可以用Arduino的字符串函数轻松的管理它。
  • HTML语言也是文本的,你可以用arduino轻松的创建页面,哪怕是动态的。


程序

    我将编写一个简单的程序,它会在串口打印浏览器的请求,并通过一个简单的HTML页面进行响应。这个程序让你了解如何使用HTTP功能,并从请求中找到一个浏览器发出的信息(在今后的教程中,你将学习如何使用这些信息)。

    完整的代码共享在GitHub,以下是最重要的代码。
  1. word len = ether.packetReceive();
  2. word pos = ether.packetLoop(len);
复制代码
在循环(loop)中,我用一个变量保存packetLoop()方法的返回值:这个值是浏览器请求开始的位置(在buffer中)。
  1.   if(pos) {

  2.     Serial.println("---------- NEW PACKET ----------");
  3.     Serial.println((char *)Ethernet::buffer + pos);
  4.     Serial.println("--------------------------------");
  5.     Serial.println();
复制代码
如果这个位置大于零,说明我收到了一个请求,通过串口把这个请求打印出来(开始位置在(char *)Ethernet::buffer + pos)。
  1.     BufferFiller bfill = ether.tcpOffset();
复制代码
我们使用BufferFiller对象来存储对客户端浏览器的响应(应答)。这个对象继承打印类(Print class)。它的构造函数表明从以太网缓冲区(Ether::buffer)的这个地址(tcpOffset)开始存储响应。
  1.     bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
  2.          "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
  3.          "<html><body><h1>BasicServer Demo</h1></body></html>"));
复制代码
我们用emit_p()方法将数据保存在缓冲区中:在这个例子中,我创建了一个简单的HTML页面,显示BasicServer Demo文本,为了节省RAM空间,我用PSTR()宏将字符串存储在flash空间中。
  1.     ether.httpServerReply(bfill.position());
复制代码
最后httpServerReply()方法,将响应发送到客户端浏览器。这个方法需要一个参数(有多少个字符需要发送),我们使用position()方法,获得BufferFiller包含有多少个字符。
    下载你的程序,通过串口检查你的ip地址是否正确。在浏览器上输入Arduino对应的IP地址...结果应该如下图所示:

串口切图应该如下图所示:

    你可能会问,为什么浏览器发送2个请求:一个请求是“/”就是该网站的主页,一个是“/favicon.ico”,他是一些网站的特殊图标,显示在标签页上,如yeelink站点:


返回目录

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 加油!

查看全部评分

回复

使用道具 举报

发表于 2012-10-11 12:06:01 | 显示全部楼层
LZ加油,这个系列我一直有收藏,的确是有用的东西
回复 支持 反对

使用道具 举报

发表于 2012-10-11 13:19:37 | 显示全部楼层
LZ加油哈!!
回复 支持 反对

使用道具 举报

发表于 2012-10-11 13:30:05 | 显示全部楼层
建议整理以后发《无线电》杂志
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-11 13:39:41 | 显示全部楼层
erjiang 发表于 2012-10-11 13:30
建议整理以后发《无线电》杂志

你帮我发吧,稿费给我就行。嘿嘿
回复 支持 反对

使用道具 举报

发表于 2012-10-11 15:58:43 | 显示全部楼层
谢谢张老师了~!
每日必看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-12 07:31:27 | 显示全部楼层
zhangdeyue1 发表于 2012-10-11 15:58
谢谢张老师了~!
每日必看

谢谢捧场
回复 支持 反对

使用道具 举报

发表于 2012-10-22 07:43:28 | 显示全部楼层
m没日日必顶
回复 支持 反对

使用道具 举报

发表于 2013-2-24 21:46:56 | 显示全部楼层
为什么获取ip地址会失败?网线是可用的,免登陆的,每次都是0.0.0.0同一个路由器
回复 支持 反对

使用道具 举报

发表于 2013-5-14 14:17:15 | 显示全部楼层
谢谢楼主分享,正在一篇一篇看
回复 支持 反对

使用道具 举报

发表于 2014-2-13 20:59:08 | 显示全部楼层
好贴!必须鼓励。
回复 支持 反对

使用道具 举报

发表于 2014-8-29 21:08:35 | 显示全部楼层
顶一下,学习搞一下玩玩
回复 支持 反对

使用道具 举报

发表于 2015-7-27 16:23:46 | 显示全部楼层
这个想显示汉字应该肿么做哩大神~
回复 支持 反对

使用道具 举报

发表于 2015-7-28 11:05:26 | 显示全部楼层
大神汉字问题已经OK了,发现老断线是肿么回事呢,重新刷下程序就会好一会,十分钟左右就又断了,这是为虾米呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 10:08 , Processed in 0.058685 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表