风筝
发表于: 2020-4-8 08:29:59 | 显示全部楼层

在本篇文章中,我们将学习如何将ENC28J60以太网模块与Arduino Web服务器进行连接,以在LAN局域网或无线网络中的计算机与Arduino之间建立通信。我们将ENC28J60以太网控制器与Arduino连接,以便我们的Arduino成为该网络的成员之一。一旦完成,arduino可以控制该网络中的事物,或者arduino可以由该网络的其他设备控制。 ENC28J60以太网模块与Arduino的连接将进一步为我们提供在Arduino上自由使用互联网。


ENC28J60以太网模块简介

ENC28J60以太网模块使用Microchip ENC28J60独立式以太网控制器IC,具有许多功能,可满足大多数网络协议要求。该板通过标准SPI接口直接连接到大多数微控制器,传输速度高达20MHz。

enc28j60.jpg


该以太网网模块是向基于微控制器的产品和项目添加LAN连接的最简单方法。

1.  使用此模块为您的产品启用以太网接口。它可与任何工作于3. 3V或5V的微控制器一起使用。

2.  该模块工作在3.3V电压下,并与5V接口兼容。

3.  使用SPI进程与其他连接。

4.  托管Web服务器,对模块执行ping操作或通过Internet将其添加到家庭自动化中。

5.  该模块的核心是Microchip的ENC28J60以太网控制器。

6.  使用集成磁性装置的RJ45网口可以减小电路板的尺寸。


框图和连接方式:

以下是一个简单的框图,介绍了Arduino和ENC28J60模块如何与路由器和计算机连接。

enc28j60-arduino-block-diagram.png


路由器应与LAN连接,并应具有多个输入输出端口。从路由器将一根以太网电缆连接到计算机系统,将另一根以太网电缆连接到ENC28J60模块。同样,ENC28J60模块连接到Arduino。 Arduino和ENC28J60之间的连接如下。

ENC28j60-arduino-Connection.png


如何将ENC28J60以太网模块与Arduino Web服务器连接:

1.  从此处下载ENC28J60库:ENC28J60库

2.  将库文件添加到您的Arduino IDE库中:

3.  添加完成后,打开示例,然后从 Master Library中选择以下示例:

2-1.png

4.  编译代码,然后将代码上传到Arduino UNO开发板:

5.  打开串口监视器并复制IP地址:

5.png

6. 打开网络浏览器并粘贴IP地址,然后按下Enter:

5-1.png


Arduino连接ENC28J60以太网模块的示例代码:

  1. #include <EtherCard.h>

  2. #define STATIC 0 // set to 1 to disable DHCP (adjust myip/gwip values below)

  3. #if STATIC
  4. // ethernet interface ip address
  5. static byte myip[] = { 192,168,1,200 };
  6. // gateway ip address
  7. static byte gwip[] = { 192,168,1,1 };
  8. #endif

  9. // ethernet mac address - must be unique on your network
  10. static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

  11. byte Ethernet::buffer[500]; // tcp/ip send and receive buffer

  12. const char page[] PROGMEM =
  13. "HTTP/1.0 503 Service Unavailable\r\n"
  14. "Content-Type: text/html\r\n"
  15. "Retry-After: 600\r\n"
  16. "\r\n"
  17. "<html>"
  18. "<head><title>"
  19. "Service Temporarily Unavailable"
  20. "</title></head>"
  21. "<body>"
  22. "<h3>This service is currently unavailable</h3>"
  23. "<p><em>"
  24. "The main server is currently off-line.<br />"
  25. "Please try again later."
  26. "</em></p>"
  27. "</body>"
  28. "</html>"
  29. ;

  30. void setup(){
  31. Serial.begin(57600);
  32. Serial.println("\n[backSoon]");

  33. if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
  34. Serial.println( "Failed to access Ethernet controller");
  35. #if STATIC
  36. ether.staticSetup(myip, gwip);
  37. #else
  38. if (!ether.dhcpSetup())
  39. Serial.println("DHCP failed");
  40. #endif

  41. ether.printIp("IP: ", ether.myip);
  42. ether.printIp("GW: ", ether.gwip);
  43. ether.printIp("DNS: ", ether.dnsip);
  44. }

  45. void loop(){
  46. // wait for an incoming TCP packet, but ignore its contents
  47. if (ether.packetLoop(ether.packetReceive())) {
  48. memcpy_P(ether.tcpOffset(), page, sizeof page);
  49. ether.httpServerReply(sizeof page - 1);
  50. }
  51. }
复制代码

跳转到指定楼层
回复

使用道具 举报

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

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-22 21:41 , Processed in 0.040175 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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