上图就是 ENC28J60 网络模块。惯例,看接线方法,接7根:
Vcc —— 3.3V(注意电压!)
GND —— GND
RESET —— RESET;
CS —— 片选,与“ether.begin()”的第三个参数一致;下面的测试代码接D10;
SI —— D11(MOSI口,见下图);
SO —— D12(MISO口,见下图);
SCK —— D13(SCK口,见下图);
写一段代码,当用网页访问网络模块的时候,显示开关状态。
当直接访问 http://192.168.1.17 时,显示当前状态:OFF
当带参数访问时:http://192.168.1.17/?ON 或 http://192.168.1.17/?OFF
则显示参数状态。
库文件:https://github.com/jcw/ethercard
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <EtherCard.h> //首先,你需要包括EtherCard库,并定义一些变量:MAC地址(mymac[]),IP地址(myip[])和用来存储传入和传出的数据缓冲(Ethernet::buffer[700])。 static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01}; //网卡MAC地址,mac地址第一字节必须是偶数。 static byte myip[] = {192,168,1,17}; //网卡IP地址 byte Ethernet::buffer[700]; //缓冲区大小 char on[] = "ON" ; char off[] = "OFF" ; boolean relayStatus; char * relayLabel; char * linkLabel; void setup () { Serial.begin(9600); Serial.println( "ENC28J60有线网络模块演示" ); //用begin()方法开始网络连接,需要3个参数,分别为缓冲大小、MAC地址和Arduino的片选(CS)引脚. //片选通常为10,这个参数可以不写,如果不写的话默认为8,所以要根据你的电路进行设置。 if (!ether.begin( sizeof Ethernet::buffer, mymac, 10)) Serial.println( "连接网络失败" ); else Serial.println( "连接网络成功" ); //用staticSetup()方法配置静态的IP地址,参数有3个,分别为ip地址、网关和DNS,IP地址是必须的,网关和DNS是可选的。大家看下这个函数的参数定义。 if (!ether.staticSetup(myip)) Serial.println( "设置IP地址失败" ); else Serial.println( "设置IP地址成功" ); relayStatus = false ; relayLabel = off; linkLabel = on; } void loop() { //在loop里面, 你只需要2条命令: //packetReceive()方法: 从网络接收一个新传入的数据包; //packetLoop() 方法:对具体收到的信息作出回应,包含“ping” 请求(ICMP echo 请求)。 word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (pos) { if ( strstr (( char *)Ethernet::buffer + pos, "GET /?ON" ) != 0) { relayStatus = true ; relayLabel = on; linkLabel = off; } else if ( strstr (( char *)Ethernet::buffer + pos, "GET /?OFF" ) != 0) { relayStatus = false ; relayLabel = off; linkLabel = on; } BufferFiller bfill = ether.tcpOffset(); bfill.emit_p( PSTR ( "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n" "<html><head><meta charset='UTF-8' meta name='viewport' content='width=200px'/></head><body>" "<div style='position:absolute;width:200px;height:200px;top:50%;left:50%;margin:-100px 0 0 -100px'>" "<div style='font:bold 14px verdana;text-align:center'>当前状态 $S</div>" "<br><div style='text-align:center'>" "<a href='/?$S'></a>" "</div></div></body></html>" ), relayLabel, linkLabel, linkLabel); ether.httpServerReply(bfill.position()); } } |
发表评论
要发表评论,您必须先登录。