第31课 ENC28J60联网 Ping通你的Arduino

我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。ENC28J60是一款非常便宜的网络模块,本课我们介绍该模块的使用,Ping 通你的Arduino。有任何疑问请在评论区提出,我会逐一回答。

接入网络后Arduino 就成为了 IoT(物联网,Internet of Things)的一部分。这片小小的 MCU 不再是一个个体。通过它,我们与被控设备就能进行实时的数据交互。

比如,通过网络可以让控制中心,监控温室里面的温度、湿度、土壤盐度、气压等数据,然后根据这些信息,实时对温室调控。

当然,Arduino 自身也能根据数据,对温室的设备进行反馈,只要设定好相应的程序即可。不过,大规模有成千上百万个温室时,就无法做到统一调度。因此 Arduino 在小型设备中,可以当作一个具有简单收集和反馈能力的大脑,而在大规模应用中,它更适合,扮演节点的角色。

然而,上面的都是题外话了,在后面设计人工智能的可能,我们将详细展开来讨论。

Arduino 官方推荐 W5100 模块,这个模块虽然功能强大,同时,内置了SD模块方便数据存储,但其价格也相当高。所以我们还是选择性能稳定、库同样丰富完善的 ENC28J60 模块,价格 10~20 元之间。

官方Ethernet 库是为W5100开发的,所以我们要下载针对 ENC28J60 的库,建议使用 JeeLabs Café 的 Ethercard 库,JeeLabs Café 已将它在 Github 上开源,国内的朋友可以在这里下载另外,库函数的官方文档在这里。安装方式跟之前一样,解压放到库文件夹中即可。按照一般的 SPI 接线方式来连接即可,但这里必须接 RESET :

MOSI,D11;
MISO,D12;
SCK,D13;
SS/CS,寻址端默认为 D10;
RESET,RESET,重启;
VCC,3V3;
GND,GND;

我们第一个程序就是从PC上,Ping 通我们Arduino。即从计算机发送一个ping的请求,经过网络到达Arduino 设备,然后设备反馈一个“收到了”的信息:

各种方法似乎很复杂,但理解了其含义,用起来就很简单:

注释已经讲的很清楚了,但如果路由/服务器开启了DHCP的话,还可以通过让 Arduino 自动获得 IP 地址,其实,在现实的大部分应用中,我们只需声明 MAC 地址和缓冲区的大小。

声明了一个函数,作用是在串口打印请求设备的 IP 地址,byte* 是一个指针,指向缓冲区存储 IP 地址的地址。注意这个函数要在 void setup() 中,通过 registerPingCallback(function) 方法来调用。

显而易见,Ping Callback 的含义是,当收到 Ping 请求时,调用另外一个函数;这个方法在寄存器中,所以不用放在 void loop(),它也会一直监听。

begin() 作用为初始化网络接口,设置缓冲区和MAC地址,如果反馈“0”,表明硬件连接故障,“1”说明链接成功。staticSetup() 数据结构如下:

如果网关、DNS、mask 不设置,则默认为0。

作用是监听收到的数据包,并将数据包赋值给 len。

对 Ping 等数据包信息作出响应。

将程序载入 Arduino 发送 Ping 请求时,IDE 会显示发送请求主机的 IP 地址:

现在我们已经成功将 Arduino 接入网络了!不过,在智能家居应用中,不可能每次都手动设置设备的IP 地址,更希望它能够自动设置。其实,方式很简单,使用 dhcpSetup() 方法,自动获取DHCP服务器的信息即可:

登陆路由器界面,从 DHCP 查看主机连接列表, 会发现一个 “Arduino-ENC28j6” 的设备。

4 thoughts on “第31课 ENC28J60联网 Ping通你的Arduino

  1. Rookie

    你好,我现在正在调这个模块,一直调不通,连好网线线上电之后,网口的灯都不亮,Ping也通不了,而且上电几分钟后,那个模块上的芯片温度比较高,您觉得有可能是哪一块出问题了?

    Reply
    1. Rookie

      还有,在ping的时候,电脑端需要进行设置吗?

      我ping的结果如下:
      正在 Ping 192.168.1.119 具有 32 字节的数据:
      来自 192.168.1.100 的回复: 无法访问目标主机。
      来自 192.168.1.100 的回复: 无法访问目标主机。
      来自 192.168.1.100 的回复: 无法访问目标主机。
      来自 192.168.1.100 的回复: 无法访问目标主机。

      192.168.1.119 的 Ping 统计信息:
      数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

      Reply
  2. Rookie

    你好,我现在正在调这个模块,一直调不通,连好网线线上电之后,网口的灯都不亮,Ping也通不了,而且上电几分钟后,那个模块上的芯片温度比较高,您觉得有可能是哪一块出问题了?

    Reply
    1. panft Post author

      无法访问说明模块还没正常工作或网络设置问题。这个模块得温度本身就比较高,我最后也加了散热,另外检查一下电压,该模块稳定工作的电压是3.3V

      Reply

Leave a Reply to panft Cancel reply

Your email address will not be published. Required fields are marked *