目录
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开发板之间的通信。
总体框图
W5100以太网模块是一个单芯片、功能齐全、支持互联网的模块,用于建立互联网连接。简单来说,这个模块使Arduino开发板能够连接到互联网。通过使用该模块,可以在没有操作系统支持的情况下完成互联网链接。它还支持硬连线 TCP/IP 协议,如 TCP、PPPoE、以太网、UDP、ICMP、IPv4 等,全双工和半双工操作模式以及ADSL连接和最多四个同步套接字连接。如图1所示
图1 W5100以太网模块
以太网模块还使用Arduino开发板以太网库来编写使用该模块连接到互联网的草图。它适合所有版本的Arduino开发板,如 UNO、NANO、mega 1280、mega 2560 等。工作和W5100以太网模块的功能非常相似,一个Arduino以太网屏蔽的,这意味着可以做想做的一切与Arduino的以太网盾。作为一个优势,它的价格是盾牌的一半。
该电路由Arduino Nano和以太网模块W5100 组成(该项目也可以使用以太网Arduino Shield 和Arduino UNO)。Arduino和以太网模块之间的连接如电路图2所示。
图2 Arduino和以太网模块的连接电路图
将Arduino Nano的引脚5V和GND引脚分别连接到以太网模块的+5和G引脚(这些连接为以太网模块供电)。
将Arduino的9、10、11、12、13脚分别连接到以太网模块的R、SS、MO、MI、CK(这些使Arduino和以太网通过SPI进行通信)。
包含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="";
}
}
}
}
}
要将两者(PC 和Arduino)连接在一起,如果PC 的以太网端口没有自动方向感应,需要一根合适的电缆(CAT-6 交叉电缆)。如果PC支持自动直接感应,只需连接路由器随附的常规电缆即可(如图3 )。在这条特殊的电缆中,TX+/TX- 和RX+/RX- 互换了。
图3 电缆
总之如果PC 上没有以太网端口或者不想购买特殊电缆,也可以按照图4的方法将以太网模块连接到路由器LAN 网络端口。
图4 连接到路由器LAN网络端口
完成上述连接后,使用PC或手机连接到路由器。然后打开任何网络浏览器并转到此 URL“ http://192.168.0.1 2”(在您的情况下,请输入您在代码中设置的以太网 IP地址)。现在,您可以通过网页控制LED。当用户点击网页上的“开启LED”时,电路中的LED开启。当“关闭LED”被点击,LED在电路断开。该命令使用以太网模块的有线连接执行。Web服务器页面如图5所示。
图5 Web服务器页面显示
以上就是使用以太网模块将Arduino开发板连接到互联网的介绍了。Arduino开发板可用于开发交互式物体,接受来自各类开关或传感器的输入,并能控制各种灯光、马达和其他物理输出装置。Arduino开发板可以单独运行,也可以与您计算机上运行的软件(Processing、MaxMSP)配合使用。