Microduino ENC网络(六)/zh

来自Microduino Wikipedia
跳转至: 导航搜索
Language English

目的

本教程将教大家如何使用Microduino更新著名的动态域名服务提供商之一no-ip服务器上关于你的DNS记录。

设备

  • 其他硬件设备
    • USB数据连接线 一根

动态IP地址

我们大部分人在家上网都是用一些网络服务提供商的服务,方正,电信之类的。它们每次分派给我们的地址都是动态的,随时都有可能在变。

所以给访问设备带来了不便。

动态DNS

在互联网上你可以找到免费的动态DNS(DDNS)服务:他允许你将你选择的域名和一个IP地址绑定,并且可以随时更新IP地址(绑定不同的IP地址)。

更新可以有不同的方法:

  • 在你的PC上用一个客户端更新;
  • 在你的路由器上应用DDNS功能;
  • 让Arduino为我们做这个事情。


NO-IP

应用比较多的动态域名服务商之一是NO-IP。

如果你注册了NO-IP的免费服务,你最多可以设置5台主机,使用Hosts/重定向功能。

NoipPhoto.jpg

在这个教程,我注册了以下域名:enctutorial.no-ip.info。


动态域名客户端

每个动态域名客户端,执行以下步骤:

  • 得到实际的公网IP。
  • 公网IP和动态域名服务器注册的IP地址进行比较。
  • 如果不同,通过服务提供商的API更新DNS记录。


原理图

  • Microduino-ENC28J60
  • Microduino-RJ45
  • Microduino-Core
  • Microduino-USBTTL

层层堆叠,再插上网线。

如下图所示:

MicroduinoENCShow.jpg

程序

ENCnetworksix

调试

步骤一:首先需要下载EtherCard库:https://github.com/jcw/ethercard

放到你的IDE的libraries文件夹中,重启IDE。

步骤二:解释一下代码:

公网IP:

要获得实际的公网IP,这里有个网址写了一个简单的PHP页面:

GetPublicIP.jpg

Microduino浏览这个页面获得实际的公网IP。

DNS记录和比较:

//程序用dnsLookup()方法获取域名绑定的IP地址。然后将结果转换成一个字符串,与用上面方法获得的实际公网IP地址用compareTo()方法进行比较:

     if(!ether.dnsLookup(noIP_host)) { 
     [...]
     } else {
     for(int i = 0; i < 4; i++) {
       dnsIp = dnsIp + String(ether.hisip[i]);
       if(i < 3) dnsIp = dnsIp + ".";
     }
     if(actualIp.compareTo(dnsIp) == 0) {
       Serial.println("No update needed :)");
       [...]
     } else {
       Serial.println("Update needed :(");
       actual_status = STATUS_NOIP_NEEDS_UPDATE;
     }

认证:

NO-IP在更新DNS记录前要进行身份认证。在代码中定义了一个常量:

NoIPAuth.jpg

这个值是用户名:密码字符串,必须用base64编码,我们使用在线的编码器:http://tuxgraphics.org/~guido/javascript/base64-javascript.html

OnlineEncode.jpg

步骤三:下载代码并编译通过。

步骤四:测试一下看看能不能访问到你的Microduino.

结果

Microduino会定期的获得动态分给它的公网IP,并比较和更新no-ip网站上的ip地址,使得Microduino可以被访问。


视频