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