极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18847|回复: 12

求助28J60获取主机IP失败

[复制链接]
发表于 2013-5-6 21:32:56 | 显示全部楼层 |阅读模式
本帖最后由 darkorigin 于 2013-5-6 21:38 编辑

代码主要是测试yeelink的数据上传功能的
网络状况:
电信光纤入户(光纤猫)+路由拨号上网
网段192.168.2.*  实际分配给 28J60的地址是 192.168.2.83

代码如下:
#include <EtherCard.h>
#define OUT
#define REQUEST_RATE 15000 // milliseconds
static long timer;
byte Ethernet::buffer[700];

/////////////////////网络常量定义//////////////////////////
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };// 网卡 mac 地址


char website[] PROGMEM = "api.yeelink.net";
//char website[] PROGMEM = "202.136.56.203";
char urlBuf[] PROGMEM = "/v1.0/device/XX/sensor/XX/datapoints";      
// 已经改成自己的代了,只是贴出来为了避免误会改成XX
char apiKey[] PROGMEM = "U-ApiKey:17ff7222228051c6174e7d3467198f";
// 已经改成自己的代码,贴出来的值做了改动
// assign a MAC IP gateway dns for the ethernet controller.   
const uint16_t PostingInterval = 15000;// delay between 2 datapoints, 30s
// Some global variables
char sensorData[20];

void setup() {
     Serial.begin(9600);
     eth_init();
     timer = - REQUEST_RATE; // start timing out right away
}

//为了简单理解,把例程里面的初始化过程作为函数调用 包括初始信息
void eth_init(){  
  Serial.println("\n[getDHCPandDNS]");
    if (ether.begin(sizeof Ethernet::buffer, mymac,53) == 0)  
//这里按照zcbzjx翻译文章里面的提示修改了CS端口,之前绕弯路很远啊
    Serial.println( "Failed to access Ethernet controller");
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
   ether.printIp("My IP: ", ether.myip);
  // ether.printIp("Netmask: ", ether.mymask);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
  if (!ether.dnsLookup(website))  Serial.println("DNS failed");
  ether.printIp("Server: ", ether.hisip);
}

void loop () {
  ether.packetLoop(ether.packetReceive());
  if (millis() > timer + REQUEST_RATE) {
    timer = millis();
    Serial.println(">>> REQ");
    static char buf[20];
    get_Send_String(buf);
    if (!ether.dnsLookup(website))
    Serial.println("DNS failed");
    ether.printIp("Server: ", ether.hisip);
    ether.httpPost (urlBuf, website, apiKey, buf, my_result_cb);
  }
}

///////////////////////////////////////////////////////////////////////////
// 随机发送一个值到 yeelink  
void get_Send_String(OUT char *p){
  uint16_t Tc_100 =  random(0,1000);
  uint8_t i,whole, fract;
  whole = Tc_100/10 ;  // separate off the whole and fractional portions
  fract = Tc_100 % 10;
  sprintf(sensorData,"{\"value\":%d.%d}",whole,fract);
  }
static void my_result_cb (byte status, word off, word len) {
  Serial.print("<<< reply ");  
Serial.print(millis() - timer);
Serial.println(" ms");
Serial.println((const char*) Ethernet::buffer+off);
}



现在实测得到的串口返回:


[getDHCPandDNS]
My IP: 192.168.2.83
GW IP: 192.168.2.1
DNS IP: 192.168.2.1
DNS failed
Server: 0.0.0.0
>>> REQ
.
.
.
DNS failed
Server: 0.0.0.0
>>> REQ


各位大神有什么好方法测试么?  之前怀疑是杜邦线质量不好已经换了从工坊杂货铺买的公母杜邦线 数据还是有问题.网线也换了2根 应该是不错的网线
路由器上已经给这个MAC地址定义了DHCP静态地址,获取也没问题.....DNS我查看了我电脑,一样的设置,ping主机也能PING到....



本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-5-7 08:21:48 | 显示全部楼层
本帖最后由 zcbzjx 于 2013-5-7 08:24 编辑

你先试试库中自带的例程getDHCPandDNS,看看情况,如果还不行,加我qq 51728096吧。


另外电脑上网需要认证么?看你的设置应该是不用
回复 支持 反对

使用道具 举报

发表于 2013-5-7 08:49:47 | 显示全部楼层
以前我也用enc28j60,老是dns failed,加电压,换网线,换路由器什么的都试过了。后来用了w5100模块,就ok了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-7 22:43:18 | 显示全部楼层
zcbzjx 发表于 2013-5-7 08:21
你先试试库中自带的例程getDHCPandDNS,看看情况,如果还不行,加我qq 51728096吧。

不用认证。上海电信的光纤入户都是直接的IP,只要设置路由的动态获取就好 不需要拨号或者其他。
我内网已经都把MAC地址做了地址分配  路由的DHCP会直接指定给它我定义好的网段的地址。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-7 22:45:09 | 显示全部楼层
本帖最后由 darkorigin 于 2013-5-7 22:49 编辑
zcbzjx 发表于 2013-5-7 08:21
你先试试库中自带的例程getDHCPandDNS,看看情况,如果还不行,加我qq 51728096吧。


例程也是一样。DHCP获取没问题。就是域名解析。也就是DNS最后获取不到主机IP. 连GOOGLE.COM都不能获取






本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-7 22:55:56 | 显示全部楼层
瘦网虫 发表于 2013-5-7 08:49
以前我也用enc28j60,老是dns failed,加电压,换网线,换路由器什么的都试过了。后来用了w5100模块,就ok了 ...

晕菜。。。。5100现在貌似价格也下来了??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-7 23:04:26 | 显示全部楼层
瘦网虫 发表于 2013-5-7 08:49
以前我也用enc28j60,老是dns failed,加电压,换网线,换路由器什么的都试过了。后来用了w5100模块,就ok了 ...

5100你还是用线接的?或者你是直接用的5100盾?
5100带TF的盾貌似由于SPI总线重叠,每次只能用1个。。。哎  鱼和熊掌啊。
其实TF的作用也不小,很多传感器的数据可以进行归集和少量存储(其实上G的容量 你多少年的数据都难满啊,毕竟TXT文件节约空间啊)
回复 支持 反对

使用道具 举报

发表于 2013-5-8 08:52:01 | 显示全部楼层
darkorigin 发表于 2013-5-7 23:04
5100你还是用线接的?或者你是直接用的5100盾?
5100带TF的盾貌似由于SPI总线重叠,每次只能用1个。。。 ...

直接买的w5100板,往我的mega2560上直接插就可以用。
回复 支持 反对

使用道具 举报

发表于 2014-5-19 12:32:07 | 显示全部楼层
你把网址定义:PROGREAM去掉,马上正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 14:56:10 | 显示全部楼层
玥牙湾 发表于 2014-5-19 12:32
你把网址定义:PROGREAM去掉,马上正常

早已经调试通了
证实不是程序问题
是板子的问题 而且是一块杂牌256-MEGA的问题,具体就是不稳定
用28J60时好时坏 有时候能调试通 有时候不行

去年的时候弄了ZCBZJX的MICRDUINO 同样的代码直接通过测试。

个人估计是用料问题,同样的设计 用好的原件出问题的概率远远小于用差的原件 甚至不排除山寨厂家用拆机旧件来弄;

其实说起来就开始觉得悲哀。 现在高大上的电子设计比如计算机主板 显卡等 为了凸显高端 一般都写 日系固态电容。。。   什么时候人家鬼子能写高端大气上档次 中国产固态电容 ,那时候真的是倍有面子。哎!!!
早年帮着学校部署机房的时候 外面请的师父就说 国产的水晶头 5毛一个,米国的1块5一个,人家愿意用1块5的米国货,因为那时候国产的水晶头 报废率甚至高达50%。 哎 太悲哀了~~~

什么时候这些做产品的人能够按照百年老店的标准来要求自己  过货就真的自强不息了!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 14:57:53 | 显示全部楼层
玥牙湾 发表于 2014-5-19 12:32
你把网址定义:PROGREAM去掉,马上正常

那个不是问题 那个是定义 KEYID的 就是网站的对用户设备区分用的标识
回复 支持 反对

使用道具 举报

发表于 2014-6-11 21:48:57 | 显示全部楼层
请问楼主最终由解决吗,现在正纠结这问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-12 10:57:27 | 显示全部楼层
夜吟风铃 发表于 2014-6-11 21:48
请问楼主最终由解决吗,现在正纠结这问题

解决了 硬件问题。
有些小长假做的模块会存在不稳定。

我换了个ARDUINO就好了。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-16 17:26 , Processed in 0.052219 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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