一板网电子技术论坛

风筝
发表于: 2021-7-2 17:22:29 | 显示全部楼层

当今大多数联网的物联网设备都使用Wi-Fi连接到互联网。虽然Wi-Fi连接可以远程访问互联网,但它有其自身的局限性。例如,在固定设备的大多数工业应用中,通常选择以太网而不是 Wi-Fi连接,因为它更可靠安全。此外,由于以太网是有线连接,它提供了更好的速度和更低的延迟。我们已经制作了许多物联网项目,其中大部分都是围绕ESP8266、ESP32或树莓派制作的。众所周知,这些设备有一个内置的Wi-Fi调制解调器,可让您连接到互联网。但是,如果您使用的是简陋的Arduino UNO或Nano开发板,并且想要将Arduino连接到互联网,那么您有两种选择。一种选择是使用ESP8266模块,另一种种选择是使用以太网模块。


在本篇文章中,我们将使用W5100以太网模块连接到Arduino开发板,通过互联网控制LED。以太网模块用于在局域网或有线网络中建立计算机和Arduino之间的通信。本文假设读者了解基本的计算机网络,包括使用 RJ45电缆、IP 和 MAC 地址等将计算机连接到集线器/路由器的常识。


以太网模块W5100

本文我们使用的是W5100以太网模块。它是一个单芯片、功能齐全、支持互联网的模块,用于建立互联网连接。简单来说,这个模块使Arduino开发板能够连接到互联网。通过使用该模块,我们可以在没有操作系统支持的情况下完成互联网链接。它还支持硬连接TCP/IP 协议,如TCP、PPPoE、以太网、UDP、ICMP、IPv4 等。它支持全双工和半双工操作模式。它支持ADSL 连接和最多四个同步套接字连接。

W5100-Ethernet-Module.jpg


以太网模块还使用 Arduino以太网库来编写使用该模块连接到互联网的草图。它适合所有版本的Arduino,如UNO、NANO、mega 1280、mega 2560 等。 W5100以太网模块的工作和功能与Arduino以太网扩展板非常相似,这意味着您可以使用 Arduino 以太网扩展板做任何想做的事情。

Arduino-Ethernet-Shield.jpg


Arduino与W5100以太网模块的连接电路图

Arduino-with-Ethernet-Module-Circuit.jpg

该电路由Arduino Nano开发和以太网模块W5100 组成(该项目也可以使用以太网Arduino Shield 和 Arduino UNO)。 Arduino 和以太网模块之间的连接如电路图所示。

●    将Arduino Nano的引脚 5V 和 GND 引脚分别连接到以太网模块的+5 和 G 引脚(这些连接为以太网模块供电)。

●    将Arduino Nano的9、10、11、12、13脚分别连接到以太网模块的R、SS、MO、MI、CK(这些使Arduino和以太网通过SPI进行通信)。

跳转到指定楼层
风筝
发表于: 2021-7-2 17:42:34 | 显示全部楼层

从W5100以太网模块获取数据的Arduino代码

首先在代码中包含SPI头文件,使用SPI协议与以太网模块进行通信。

  1. #include <SPI.h>
复制代码

使用Ethernet头文件在以太网运行webclient/webserver。

  1. #include <Ethernet.h>
复制代码

设置以太网模块的物理Mac地址。

  1. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
复制代码

192.168.0.12是IP地址。其中“0”取决于您连接到的网络的主机(默认网关),通过在命令提示符下执行ipconfig 来检查。

  1. byte ip[] = { 192, 168, 0, 12 };
  2. byte gateway[] = { 192, 168, 0, 12 };
  3. byte subnet[] = { 255, 255, 255, 0 };
复制代码

Arduino-Code-for-W5100-Ethenet-Module.jpg


以下代码会在端口80上创建一个本地服务器,客户端稍后可以访问该服务器。

  1. EthernetServer server(80);
复制代码

当用户访问网络服务器时,这会读取来自客户端的响应。

  1. String readString;
复制代码

setup函数中,初始化LED引脚输出并用给定的参数(Mac地址、IP地址、网关、子网掩码)初始化以太网模块,最后通过函数“server.begin()”启动服务器

  1. int ledPin = 2;
  2. void setup(){
  3.                         pinMode(ledPin, OUTPUT);
  4.                         Ethernet.begin(mac, ip, gateway, subnet);
  5.             server.begin();
  6. }
复制代码

loop函数中,我们创建一个客户端连接并检查是否有人试图通过浏览器访问分配的 IP 地址。

  1. void loop(){
  2.     EthernetClient client = server.available();
  3.               if (client) {
  4.                    while (client.connected()) {
  5.                        if (client.available()) {
复制代码

如果已连接,继续检查客户端是否正在向服务器发送一些消息

  1. char c = client.read();              
复制代码

然后通过字符 HTTP 响应读取字符并将字符存储到用户定义的 readString 变量中。

  1.                 if (readString.length() < 100) {
  2.                     readString += c;
  3.                 }
复制代码

如果 HTTP 请求已经结束, - 0x0D 是回车 \n ASCII

  1.                 if (c == 0x0D) {
复制代码

  一旦我们收到 OK 响应,我们就开始显示网页,下面是 HTML 代码。

  1. client.println("HTTP/1.1 200 OK");
  2.          client.println("Content-Type: text/html");
  3.                                  client.println();
  4.                     client.println("<HTML>");
  5.                     client.println("<HEAD>");
  6.                     client.println("<TITLE> ARDUINO ETHERNET</TITLE>");
  7.                     client.println("</HEAD>");
  8.                     client.println("<BODY>");
  9.                     client.println("<hr>");
  10.                     client.println("<H1 style="color:green;text-align:center">ARDUINO ETHERNET LED CONTROL</H1>");
  11.                     client.println("<hr>");
  12.                     client.println("<br>");
复制代码

当用户单击 TURN ON LED 超链接时,他/她将被重定向到 URL \?LEDON,这将点亮LED。

  1.                     client.println("<H2 style="text-align:center"><a href="/?LEDON"">Turn On LED</a><br></H2>");
复制代码

与上面的代码类似,改代码会将用户重定向到“TURN OFF LED” URL。

  1.                     client.println("<H2 style="text-align:center"><a href="/?LEDOFF"">Turn Off LED</a><br></H2>");
复制代码

HTML代码的剩余部分-

  1.                     client.println("<br>");
  2.                     client.println("</BODY>");
  3.                     client.println("</HTML>");
  4.                     delay(10);
  5.                     client.stop();
复制代码

根据用户重定向到的URL,控制Arduino引脚点亮和熄灭LED。

  1.                     if(readString.indexOf("?LEDON") > -1)
  2.                     {
  3.                         digitalWrite(ledPin, HIGH);
  4.                     }
  5.                     else{
  6.                         if(readString.indexOf("?LEDOFF") > -1)
  7.                         {
  8.                             digitalWrite(ledPin, LOW);
  9.                         }
  10.                     }
复制代码

为下一次读取清空字符串。

  1.                     readString="";
  2.                 }
  3.             }
  4.         }
  5.     }
  6. }
复制代码


回复

使用道具 举报

风筝
发表于: 2021-7-2 17:52:04 | 显示全部楼层

将Arduino连接到PC或路由器的以太网端口

要将两者(PC和 Arduino)连接在一起,我们需要一根合适的电缆(CAT-6 交叉电缆)。如果您的PC 支持自动直接感应,只需连接路由器随附的常规电缆即可。

Ethernet-Cable.jpg


在这条特殊的电缆中,TX+/TX- 和 RX+/RX- 互换了。


如果您的PC上没有以太网端口或者您不想购买特殊电缆,您可以按照我们的方法将以太网模块连接到路由器LAN网络端口。

Connect-the-Ethernet-Module-to-Router-LAN-Network-Port.jpg


使用Arduino上的以太网模块通过互联网闪烁LED

完成上述连接后,使用您的PC或手机连接到路由器。然后打开任何网络浏览器并打开此URL“http://192.168.0.12”。现在,您可以通过网页控制 LED。当用户点击网页上的“Turn On LED”时,电路中的LED点亮。单击“Turn OFF LED”时,电路中的LED将熄灭。该命令使用以太网模块的有线连接执行。 Web 服务器页面如下图所示。

Arduino-Ethernet-LED-Control.jpg

Arduino-with-W5100-Ethernet-Module.jpg


希望您喜欢这个项目并学会了如何使用W5100以太网模块和Arduino来通过互联网发送和接收数据。如果您有任何问题,请在本帖下面进行回复。

回复

使用道具 举报

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

本版积分规则

主题 565 | 回复: 1115



手机版|

GMT+8, 2021-8-1 12:06 , Processed in 0.027347 second(s), 10 queries , MemCache On. Powered by Discuz! X3.4

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

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