darkorigin 发表于 2013-5-6 21:32:56

求助28J60获取主机IP失败

本帖最后由 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;

/////////////////////网络常量定义//////////////////////////
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;

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

//为了简单理解,把例程里面的初始化过程作为函数调用 包括初始信息
void eth_init(){
Serial.println("\n");
    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;
    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);
}



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



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到....



zcbzjx 发表于 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了。

darkorigin 发表于 2013-5-7 22:43:18

zcbzjx 发表于 2013-5-7 08:21 static/image/common/back.gif
你先试试库中自带的例程getDHCPandDNS,看看情况,如果还不行,加我qq 51728096吧。




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

darkorigin 发表于 2013-5-7 22:45:09

本帖最后由 darkorigin 于 2013-5-7 22:49 编辑

zcbzjx 发表于 2013-5-7 08:21 static/image/common/back.gif
你先试试库中自带的例程getDHCPandDNS,看看情况,如果还不行,加我qq 51728096吧。




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






darkorigin 发表于 2013-5-7 22:55:56

瘦网虫 发表于 2013-5-7 08:49 static/image/common/back.gif
以前我也用enc28j60,老是dns failed,加电压,换网线,换路由器什么的都试过了。后来用了w5100模块,就ok了 ...

晕菜。。。。5100现在貌似价格也下来了??

darkorigin 发表于 2013-5-7 23:04:26

瘦网虫 发表于 2013-5-7 08:49 static/image/common/back.gif
以前我也用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 static/image/common/back.gif
5100你还是用线接的?或者你是直接用的5100盾?
5100带TF的盾貌似由于SPI总线重叠,每次只能用1个。。。 ...

直接买的w5100板,往我的mega2560上直接插就可以用。

玥牙湾 发表于 2014-5-19 12:32:07

你把网址定义:PROGREAM去掉,马上正常

darkorigin 发表于 2014-5-20 14:56:10

玥牙湾 发表于 2014-5-19 12:32 static/image/common/back.gif
你把网址定义:PROGREAM去掉,马上正常

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

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

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

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

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

darkorigin 发表于 2014-5-20 14:57:53

玥牙湾 发表于 2014-5-19 12:32 static/image/common/back.gif
你把网址定义:PROGREAM去掉,马上正常

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

夜吟风铃 发表于 2014-6-11 21:48:57

请问楼主最终由解决吗,现在正纠结这问题

darkorigin 发表于 2014-6-12 10:57:27

夜吟风铃 发表于 2014-6-11 21:48 static/image/common/back.gif
请问楼主最终由解决吗,现在正纠结这问题

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

我换了个ARDUINO就好了。
页: [1]
查看完整版本: 求助28J60获取主机IP失败