极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 35229|回复: 17

[已解决]enc28J60 网页控制LED灯

[复制链接]
发表于 2015-4-11 21:25:09 | 显示全部楼层 |阅读模式
本帖最后由 dkm382638608 于 2015-4-11 23:51 编辑

按照,大神翻译帖子:http://www.geek-workshop.com/thread-2257-1-1.html

arduino mega 2号数字线接LED灯
然后无法响应网页按钮(灯不亮),enc28J60串口也没任何信息

后来经过布列松的指点找到是MAC地址有问题,同时更加感谢弘毅大大一语道破问题所在!也感谢zoologist的热心回答。

把 MAC 地址修改为:0x74,0x69,0x69,0x2D,0x30,0xE8 即可


如图:

arduino:


网页:




enc28J60接线如下:
SO --- 50
SI ---  51
SCK-- 52
CS --- 53
GND--GND
VCC--3.3V
RST--RST

Arduino 代码:



  1. #include <EtherCard.h>

  2. static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};  //这里是问题所在
  3. static byte myip[] = {192,168,2,1};
  4. byte Ethernet::buffer[700];

  5. const int ledPin = 2;
  6. boolean ledStatus;

  7. char* on = "ON";
  8. char* off = "OFF";
  9. char* statusLabel;
  10. char* buttonLabel;

  11. void setup () {

  12.   Serial.begin(57600);
  13.   Serial.println("WebLed Demo");
  14.   
  15.   if (!ether.begin(sizeof Ethernet::buffer, mymac, 53))
  16.     Serial.println( "Failed to access Ethernet controller");
  17. else
  18.    Serial.println("Ethernet controller initialized");

  19.   if (!ether.staticSetup(myip))
  20.     Serial.println("Failed to set IP address");
  21.   Serial.println();
  22.   
  23.   pinMode(ledPin, OUTPUT);
  24.   digitalWrite(ledPin, LOW);
  25.   ledStatus = false;
  26. }
  27.   
  28. void loop() {

  29.   word len = ether.packetReceive();
  30.   word pos = ether.packetLoop(len);
  31.   
  32.   if(pos) {
  33.    
  34.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status=ON") != 0) {
  35.       Serial.println("Received ON command");
  36.       ledStatus = true;
  37.     }

  38.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status=OFF") != 0) {
  39.       Serial.println("Received OFF command");
  40.       ledStatus = false;
  41.     }
  42.    
  43.     if(ledStatus) {
  44.       digitalWrite(ledPin, HIGH);
  45.       statusLabel = on;
  46.       buttonLabel = off;
  47.     } else {
  48.       digitalWrite(ledPin, LOW);
  49.       statusLabel = off;
  50.       buttonLabel = on;
  51.     }
  52.       
  53.     BufferFiller bfill = ether.tcpOffset();
  54.     bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
  55.       "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
  56.       "<html><head><title>WebLed</title></head>"
  57.       "<body>LED Status: $S "
  58.       "<a><input type="button" value="$S" onClick="location.href='/?status=$S';"></a>"
  59.       "</body></html>"      
  60.       ), statusLabel, buttonLabel, buttonLabel);
  61.     ether.httpServerReply(bfill.position());
  62.   }
  63. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-4-11 21:51:14 | 显示全部楼层
查看debug信息哈

如果没有任何信息,那么还是你代码出问题了

另外,建议你去看原文,这个教程翻译的不错,只是太多年过去了库有一些变化,比如 mask的名称变了之类的

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-11 21:52:39 | 显示全部楼层
zoologist 发表于 2015-4-11 21:51
查看debug信息哈

如果没有任何信息,那么还是你代码出问题了

debug信息?请问去哪里查看
回复 支持 反对

使用道具 举报

发表于 2015-4-11 21:58:19 | 显示全部楼层
dkm382638608 发表于 2015-4-11 21:52
debug信息?请问去哪里查看

哦 就是串口信息

他的例子写的都很好 串口信息很全
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-11 22:19:47 | 显示全部楼层
zoologist 发表于 2015-4-11 21:58
哦 就是串口信息

他的例子写的都很好 串口信息很全

是啊 这个就是问题,我郁闷的就是没有串口信息
除了一开始显示
WebLed Demo
Ethernet controller initialized

然后就再也没有信息了

回复 支持 反对

使用道具 举报

发表于 2015-4-11 22:35:04 | 显示全部楼层
5v供电么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-11 22:37:46 | 显示全部楼层
zoologist 发表于 2015-4-11 22:35
5v供电么?

3.3V 外接电源 已共地
回复 支持 反对

使用道具 举报

发表于 2015-4-11 22:39:00 | 显示全部楼层
这个能不能控制多个LED的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-11 22:40:34 | 显示全部楼层
布列松 发表于 2015-4-11 22:39
这个能不能控制多个LED的

恩恩 我就是原原本本按照教程的 就是没法点亮LED 串口也没用反馈信息
回复 支持 反对

使用道具 举报

发表于 2015-4-11 22:58:24 | 显示全部楼层
我有代码,不用网页的,直接登陆enc28j60的ip地址就可以控制

  1. #include <EtherCard.h>

  2. static byte mymac[] = {0x74,0x69,0x69,0x2D,0x30,0x31}; ///不要修改这里,如果不行再试修改
  3. static byte myip[] = {192,168,1,180};
  4. byte Ethernet::buffer[700];

  5. const int ledPin = 3;
  6. boolean ledStatus;

  7. char* on = "ON";
  8. char* off = "OFF";
  9. char* statusLabel;
  10. char* buttonLabel;

  11. void setup () {

  12.   Serial.begin(9600);
  13.   Serial.println("WebLed Demo");

  14.   if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
  15.     Serial.println( "Failed to access Ethernet controller");
  16. else
  17.    Serial.println("Ethernet controller initialized");

  18.   if (!ether.staticSetup(myip))
  19.     Serial.println("Failed to set IP address");

  20.   Serial.println();
  21.   
  22.   pinMode(ledPin, OUTPUT);
  23.   digitalWrite(ledPin, LOW);
  24.   ledStatus = false;
  25. }
  26.   
  27. void loop() {

  28.   word len = ether.packetReceive();
  29.   word pos = ether.packetLoop(len);
  30.   
  31.   if(pos) {
  32.    
  33.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status=ON") != 0) {
  34.       Serial.println("Received ON command");
  35.       ledStatus = true;
  36.     }

  37.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status=OFF") != 0) {
  38.       Serial.println("Received OFF command");
  39.       ledStatus = false;
  40.     }
  41.    
  42.     if(ledStatus) {
  43.       digitalWrite(ledPin, HIGH);
  44.       statusLabel = on;
  45.       buttonLabel = off;
  46.     } else {
  47.       digitalWrite(ledPin, LOW);
  48.       statusLabel = off;
  49.       buttonLabel = on;
  50.     }
  51.       
  52.     BufferFiller bfill = ether.tcpOffset();
  53.     bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
  54.       "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
  55.       "<html><head><title>WebLed</title></head>"
  56.       "<body>LED Status: $S "
  57.       "<a href="/?status=$S"><input type="button" value="$S"></a>"
  58.       "</body></html>"      
  59.       ), statusLabel, buttonLabel, buttonLabel);
  60.     ether.httpServerReply(bfill.position());
  61.   }
  62. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-4-11 23:01:25 | 显示全部楼层
dkm382638608 发表于 2015-4-11 22:37
3.3V 外接电源 已共地

3.3v有供电不足的可能  原文提过

另外,简易你先试试 hdcp获得ip的例子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-11 23:29:58 | 显示全部楼层
布列松 发表于 2015-4-11 22:58
我有代码,不用网页的,直接登陆enc28j60的ip地址就可以控制

#include

恩恩 我参考一下 谢谢
回复 支持 反对

使用道具 举报

发表于 2015-4-12 00:12:55 | 显示全部楼层

Good Job!
Congratulations !
回复 支持 反对

使用道具 举报

发表于 2015-4-12 08:47:44 | 显示全部楼层
最后发现是因为 mac 上面的limitation (好像是最头上的bit0必须是0?我隐隐约约记得哪里有这个限制

但是一时又找不到了)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-12 12:36:31 | 显示全部楼层
zoologist 发表于 2015-4-12 08:47
最后发现是因为 mac 上面的limitation (好像是最头上的bit0必须是0?我隐隐约约记得哪里有这个限制

但是 ...

恩恩 就只mac的问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 05:45 , Processed in 0.044565 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表