查看: 361|回复: 0
打印 上一主题 下一主题

【翻译教程】enc28J60 和 Arduino (3)——作为客户端

[复制链接] qrcode

22

主题

39

帖子

104

积分

注册会员

Rank: 2

积分
104
楼主
跳转到指定楼层
发表于 2015-3-26 09:45 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当你学会了如何(使用静态ip地址或者通过DHCP服务器自动获取ip地址)把你的Arduino连接到网络后,你需要学习如何向一个网站发送数据和接收该网站的返回数据。
    为了使下面的例子更实际,我编写了一个简单的php网页,每次连接将随机返回一句格言,地址如下http://www.lucadentella.it/demo/aphorisms.php。

    我们来编写一个Arduino代码来获得这些格言并输出到串口。

DNS

    通常我们连接一个网站是键入他的域名(如www.sina.com.cn),我们的电脑,会通过一个dns服务器将他的域名解析为相应ip来进行连接。
   
    在arduino中配置你网络对应的dns服务器地址是非常重要的:

    如果你的arduino是采用DHCP服务器来进行配置,通常DNS服务器地址也是自动获取的。
    如果是静态配置,那么你调用 staticSetup()方法时需要包含DNS服务器地址。


你可以用dnsLookup()方法验证域名服务器是否正常。

 
连接

    EtherCard库提供了一个非常方便的方法browseUrl()来连接一个网站,This method prepares the connection; which is completed in following steps performed(不知道咋个翻译) – during the loop - 通过我们已经学了的2个指令:


复制代码
非常重要的是需要保持这两个指令运行,才能使代码正常工作。
   
    browseUrl()方法需要一些参数:

    prog_char urlbuf,地址的 固定部分;
    const char * urlbuf_varpart,地址的变量部分;
    prog_char hoststr,网站的名称;
    void (*callback)(byte,word,word)),这是一个回调函数名称,连接结束时调用的函数。

    地址分为两部分,以优化内存的利用率:静态部分存储在flash中(PSTR()命令),以节省RAM空间。
   
回调函数

    回调函数包含连接结束时执行的一个动作,在这个例子,是在串口打印出网站返回的格言。
    你可以选择任意的函数名称,但必须声明如下的参数:


复制代码
第一个参数为连接的状态,第二个参数为响应存储在buffer中的偏移量,第三个参数为响应的长度。

    要理解偏移量(OFF)参数的含义,你必须要注意的以太网连接发送和接收的所有数据存储在我们定义的缓冲区中:


复制代码
你收到数据,整个数据包(包含头文件及校验字段等),都存储在这个缓冲区中,偏移量值告诉我们从那个字段开始存储这个数据包,及哪儿是我们收到的网页响应。

    下面是一个回调函数在串口打印网页的响应:



复制代码
如果你运行这个代码(你可以在这个链接找到)(注意要把回调函数改成以上回调函数),你就可以看到如下信息:

    arduino正确配置了DHCP,它解析“www.lucadentella.it”这个域名,连接网站,打印网站响应。

    响应不仅包含格言,还包含了HTTP头文件。你需要打印所有的响应,然后通过文本编辑器(推荐notepad++),找到它们有多少个字符:

   
经过以上更改,你就可以接收到正确的数据:


返回目录

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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