使用以太网模块将Arduino开发板连接到互联网

元器件信息   2022-11-28 14:57   466   0  

目录

1.W5100以太网模块
2.Arduino与W5100以太网模块的连接
3.Arduino代码
4.Arduino连接到PC或路由器以太网端口
5.通过Internet控制LED
小结

  如今大多数联网的物联网设备都使用Wi-Fi 连接连接到互联网,虽然 Wi-Fi 连接可以远程访问互联网,但它有其自身的局限性。例如,在大多数固定设备的工业应用中,通常选择以太网而不是 Wi-Fi 连接,因为它更可靠和安全。此外,由于以太网是有线连接,它提供了更好的速度和更低的延迟。众所周知,智能电子设备都有一个内置的Wi-Fi 调制解调器,可让您连接到互联网。但是,如果使用的是简陋的Arduino UNO或Nano板,并且想要将Arduino开发板连接到互联网,有两个选择:一种选择是将ESP8266与Arduino开发板一起使用,第二种选择是将以太网模块与Arduino开发板连接。本文将介绍通过将Arduino开发板与W5100以太网模块接口来控制互联网上的LED 。以太网模块用于在局域网或有线网络中建立计算机和Arduino开发板之间的通信。

总体框图

总体框图

  1.W5100以太网模块

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

W5100以太网模块

图1 W5100以太网模块

  以太网模块还使用Arduino开发板以太网库来编写使用该模块连接到互联网的草图。它适合所有版本的Arduino开发板,如 UNO、NANO、mega 1280、mega 2560 等。工作和W5100以太网模块的功能非常相似,一个Arduino以太网屏蔽的,这意味着可以做想做的一切与Arduino的以太网盾。作为一个优势,它的价格是盾牌的一半。

  2.Arduino与W5100以太网模块的连接

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

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

图2 Arduino和以太网模块的连接电路图

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

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

  3.Arduino代码

  包含SPI头文件以使用协议与以太网模块进行通信:

#include <SPI.h> //与以太网模块通信的协议
#include <Ethernet.h> //在以太网上运行 webclient/web 服务器的库
字节 mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //设置以太网模块的物理mac地址
/*IP地址中的数字0取决于您连接的网络的主机,通过在命令提示符下执行ipconfig来检查*/
byte ip[] = { 192, 168 , 0, 12 }; // 局域网中的IP地址——需要根据你的网络地址
字节网关[] = { 192, 168, 0, 12 }; // 通过路由器
字节子网[] = { 255, 255, 255, 0 }; //子网掩码
EthernetServer server(80); //可以访问服务器的端口
String readString; // 读取来自用户/客户端的响应
int ledPin = 2; // LED 连接到引脚 2
void setup(){
    pinMode(ledPin, OUTPUT); //选择控制的引脚
    //启动以太网
    Ethernet.begin(mac, ip, gateway, subnet); //初始化以太网
    server.begin(); //启动服务器
}
void loop(){
    // 创建客户端连接
    EthernetClient client = server.available();
    //检查是否有人尝试通过浏览器访问分配的IP地址
    if (client) {
      //如果已连接,则继续检查客户端是否正在将某些消息发送回服务器
        while (client.connected()) {
            if (client.可用的()) {
                char c = client.read();             
                // 按字符读取字符 HTTP 请求
                if (readString.length() < 100) {
                    // 将字符存储到字符串
                    readString += c;
                }
                //如果HTTP请求已经结束——0x0D是回车\n ASCII
                if (c == 0x0D) {
                  //显示网页
                    client.println("HTTP/1.1 200 OK"); //发送新页面
                    client.println("Content-Type: text/html");
                    client.println();
                    client.println("<HTML>");
                    client.println("
                    client.println("<TITLE> ARDUINO 以太网</TITLE>");
                    client.println("</HEAD>");
                    client.println("<BODY>");
                    client.println("<hr>");
                    client.println("<H1 style=\"color:green;text-align:center\">ARDUINO 以太网 LED 控制</H1>");
                    client.println("<hr>");
                    client.println("<br>");
                    //创建一个链接来重定向用户以打开灯
                    client.println("<H2 style=\"text-align:center\"><a href=\"/?LEDON\"\">

                    client.println("<H2 style=\"text-align:center\"><a href=\"/?LEDOFF\"\">关闭 LED</a><br></H2>");
                    client.println("<br>");
                    client.println("</BODY>");
                    client.println("</HTML>");
                    delay(10);
                    //停止客户端
                    client.stop();
                    // 使用 URL 控制 arduino pin
                    if(readString.indexOf("?LEDON") > -1) //检查 LEDON
                    {
                        digitalWrite(ledPin, HIGH);// 将引脚设置为高电平
                    }
                    else{
                        if(readString.indexOf("?LEDOFF") > -1) //检查 LEDOFF
                        {
                            digitalWrite(ledPin, LOW); // 将引脚设置为低电平
                        }
                    }
                    // 为下一次读取清除字符串
                    readString="";

                }

            }
        }
    }
}

  4.Arduino连接到PC或路由器以太网端口

  要将两者(PC 和Arduino)连接在一起,如果PC 的以太网端口没有自动方向感应,需要一根合适的电缆(CAT-6 交叉电缆)。如果PC支持自动直接感应,只需连接路由器随附的常规电缆即可(如图3 )。在这条特殊的电缆中,TX+/TX- 和RX+/RX- 互换了。

电缆

图3 电缆

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

连接到路由器LAN网络端口

图4 连接到路由器LAN网络端口

  5.通过Internet控制LED

  完成上述连接后,使用PC或手机连接到路由器。然后打开任何网络浏览器并转到此 URL“ http://192.168.0.1 2”(在您的情况下,请输入您在代码中设置的以太网 IP地址)。现在,您可以通过网页控制LED。当用户点击网页上的“开启LED”时,电路中的LED开启。当“关闭LED”被点击,LED在电路断开。该命令使用以太网模块的有线连接执行。Web服务器页面如图5所示。

Web服务器页面显示

图5 Web服务器页面显示

  小结

  以上就是使用以太网模块将Arduino开发板连接到互联网的介绍了。Arduino开发板可用于开发交互式物体,接受来自各类开关或传感器的输入,并能控制各种灯光、马达和其他物理输出装置。Arduino开发板可以单独运行,也可以与您计算机上运行的软件(Processing、MaxMSP)配合使用。

登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。