弘毅 发表于 2011-11-16 17:30:06

arduino学习笔记26 - ENC28J60以太网模块实验

这篇学习笔记写的东西版本有点老了,最新版可以参考这篇帖子:
http://www.geek-workshop.com/thread-2049-1-1.html

除了官方的W5100以太网模块,使用最广的就要数ENC28J60模块了。
此模块经过众多高手完善第三方库,已经和官方模块功能一样~
先看看本次使用的硬件,一块arduino uno,外加一个以太网扩展板。





如果大家不是使用的这种大板,而是使用的下图的小板,就需要自己接线。



上面各个口定义如下



如果是下图这种标了1,2,3的。1号口对应的是VCC。



与arduino控制板连接对应表如下。



首先需要进入IDE的libraries文件夹中,把官方的以太库文件夹Ethernet删掉,或者移出文件夹,因为ENC28J60的函数名称和官方的一模一样,如果同时放入,就会编译错误或者下载出错。无法正常使用。



然后把本次使用的ENC28J60库文件拷入libraries文件夹



打开IDE,在Examples中,打开ENC28J60的演示例子WebServer。



直接把代码从这里复制进去也可以。/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/

#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };

Server server(80);

void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
Client client = server.available();
if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
      char c = client.read();
      // if we've gotten to the end of the line (received a newline
      // character) and the line is blank, the http request has ended,
      // so we can send a reply
      if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
         
          // output the value of each analog input pin
          for (int i = 0; i < 6; i++) {
            client.print("analog input ");
            client.print(i);
            client.print(" is ");
            client.print(analogRead(i));
            client.println("<br />");
          }
          break;
      }
      if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
      } else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
      }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
}
}要注意IP地址要使用和自己网络所对应的,且不能和其他IP冲突。我这次使用的是192.168.1.177,在我的局域网中,这个地址是没有使用的。



这样。。就可以在浏览器中浏览了,网页显示的是模拟口的读数。



下面的附件就是最重要的,可以使用且功能齐全的ENC28J60的arduino库文件。

None 发表于 2011-11-16 17:36:44

好,不错教程,受教了

hunduncn 发表于 2011-11-17 00:26:56

这个模块是spi 接口是吗?

弘毅 发表于 2011-11-17 08:45:51

hunduncn 发表于 2011-11-17 00:26 static/image/common/back.gif
这个模块是spi 接口是吗?

是滴SPI接口

━__Neo_ˇ 发表于 2011-11-23 19:10:36

飘啊飘啊飘

mjgzdnw 发表于 2011-12-5 09:50:59

不错的教程,我之前就是没放置对卖家提供的库纠结了好几天,Thankyou!!!

プ汏坏疍 发表于 2011-12-5 20:18:07

补充一下,在网上买的上面的自己接SPI的网络模块,淘宝上有些卖家说是接在3.3V的,经过本人试验是要接在5V才能工作的。:lol

smallzzy 发表于 2011-12-10 19:20:15

如果有密码,如何让程序自动输入

弘毅 发表于 2011-12-10 22:34:58

smallzzy 发表于 2011-12-10 19:20 static/image/common/back.gif
如果有密码,如何让程序自动输入

这么高级的功能。。。。还没试验过@@

yeguiren773 发表于 2011-12-23 22:12:05

请问如果我想用 两块 5100 做过滤器 能实现么 ? 譬如说过滤的中某种协议的包过滤

弘毅 发表于 2011-12-23 22:42:24

yeguiren773 发表于 2011-12-23 22:12 static/image/common/back.gif
请问如果我想用 两块 5100 做过滤器 能实现么 ? 譬如说过滤的中某种协议的包过滤

{:soso_e153:} 这种高级编程,你要做防火墙?理论上可以的,不过这种高超的编程技巧。。。。我就不会了,偶是编程小白。。。。

yeguiren773 发表于 2011-12-24 12:31:31

弘毅 发表于 2011-12-23 22:42 static/image/common/back.gif
这种高级编程,你要做防火墙?理论上可以的,不过这种高超的编程技巧。。。。我就不会了 ...

多谢版主回答啊。 我是硬件小白。。 只是感兴趣想看看arduino能不能实现这样的功能。

yeguiren773 发表于 2011-12-24 12:33:27

弘毅 发表于 2011-12-23 22:42 static/image/common/back.gif
这种高级编程,你要做防火墙?理论上可以的,不过这种高超的编程技巧。。。。我就不会了 ...

再问个问题哈, 你在实验中使用的那种不用焊接通过面包板就能和arduino链接的 1602 LCD 是哪种啊。 能不能给个淘宝链接啊,我找了好几种但是不能确定哪种能用的 。。

弘毅 发表于 2011-12-24 13:05:45

yeguiren773 发表于 2011-12-24 12:33 static/image/common/back.gif
再问个问题哈, 你在实验中使用的那种不用焊接通过面包板就能和arduino链接的 1602 LCD 是哪种啊。 能不能 ...

10-15块的1602都能用,需要买2.54mm的排针回来,自己把排针焊上。一般晚上买的,都没有带排针的,都系要自己回来焊接。

安子 发表于 2012-1-5 18:09:43

浏览器看到的信息 怎么回传给arduino啊?
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: arduino学习笔记26 - ENC28J60以太网模块实验