从W5100以太网模块获取数据的Arduino代码 首先在代码中包含SPI头文件,使用SPI协议与以太网模块进行通信。 使用Ethernet头文件在以太网运行webclient/webserver。 设置以太网模块的物理Mac地址。 - byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
复制代码192.168.0.12是IP地址。其中“0”取决于您连接到的网络的主机(默认网关),通过在命令提示符下执行ipconfig 来检查。 - byte ip[] = { 192, 168, 0, 12 };
- byte gateway[] = { 192, 168, 0, 12 };
- byte subnet[] = { 255, 255, 255, 0 };
复制代码
以下代码会在端口80上创建一个本地服务器,客户端稍后可以访问该服务器。 - EthernetServer server(80);
复制代码当用户访问网络服务器时,这会读取来自客户端的响应。
在setup函数中,初始化LED引脚输出并用给定的参数(Mac地址、IP地址、网关、子网掩码)初始化以太网模块,最后通过函数“server.begin()”启动服务器 - int ledPin = 2;
- void setup(){
- pinMode(ledPin, OUTPUT);
- Ethernet.begin(mac, ip, gateway, subnet);
- server.begin();
- }
复制代码
在loop函数中,我们创建一个客户端连接并检查是否有人试图通过浏览器访问分配的 IP 地址。 - void loop(){
- EthernetClient client = server.available();
- if (client) {
- while (client.connected()) {
- if (client.available()) {
复制代码如果已连接,继续检查客户端是否正在向服务器发送一些消息 然后通过字符 HTTP 响应读取字符并将字符存储到用户定义的 readString 变量中。 - if (readString.length() < 100) {
- readString += c;
- }
复制代码如果 HTTP 请求已经结束, - 0x0D 是回车 \n ASCII 一旦我们收到 OK 响应,我们就开始显示网页,下面是 HTML 代码。 - client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println();
- client.println("<HTML>");
- client.println("<HEAD>");
- client.println("<TITLE> ARDUINO ETHERNET</TITLE>");
- client.println("</HEAD>");
- client.println("<BODY>");
- client.println("<hr>");
- client.println("<H1 style="color:green;text-align:center">ARDUINO ETHERNET LED CONTROL</H1>");
- client.println("<hr>");
- client.println("<br>");
复制代码
当用户单击 TURN ON LED 超链接时,他/她将被重定向到 URL \?LEDON,这将点亮LED。 - client.println("<H2 style="text-align:center"><a href="/?LEDON"">Turn On LED</a><br></H2>");
复制代码与上面的代码类似,改代码会将用户重定向到“TURN OFF LED” URL。 - client.println("<H2 style="text-align:center"><a href="/?LEDOFF"">Turn Off LED</a><br></H2>");
复制代码
HTML代码的剩余部分- - client.println("<br>");
- client.println("</BODY>");
- client.println("</HTML>");
- delay(10);
- client.stop();
复制代码根据用户重定向到的URL,控制Arduino引脚点亮和熄灭LED。 - if(readString.indexOf("?LEDON") > -1)
- {
- digitalWrite(ledPin, HIGH);
- }
- else{
- if(readString.indexOf("?LEDOFF") > -1)
- {
- digitalWrite(ledPin, LOW);
- }
- }
复制代码为下一次读取清空字符串。
|