极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 37308|回复: 23

enc28j60+yeelink利用browseUrl()函数l获取开关状态

[复制链接]
发表于 2012-9-26 16:03:52 | 显示全部楼层 |阅读模式
本帖最后由 zcbzjx 于 2013-4-3 20:22 编辑

2013年4月3日,ethercard库作者已经更新库,稍微修改了下代码适应新库。
========================
要下班了先发代码,有问题后面问吧,库文件也做了点修改,主要是etherCard库文件的browsurl函数没法添加头文件内容。请下载附件库文件。
不过这样改库文件不是办法,有空还是重新整个库。




  1. #include <EtherCard.h>

  2. #define REQUEST_RATE 5000 // milliseconds
  3. // ethernet interface mac address
  4. static byte mymac[] = {
  5.   0x74,0x69,0x69,0x2D,0x30,0x31 };
  6. #define STATIC 0  // set to 1 to disable DHCP (adjust myip/gwip/dnsip values below)

  7. #if STATIC
  8. // ethernet interface ip address
  9. static byte myip[] = {
  10.   10,21,0,193 };
  11. // gateway ip address
  12. static byte gwip[] = {
  13.   10,21,0,1 };
  14. // remote dns ip address
  15. static byte dnsip[] = {
  16.   10,11,5,25 };
  17. #endif

  18. // remote website name
  19. char website[] PROGMEM = "api.yeelink.net";
  20. char urlBuf[] PROGMEM = "/v1.0/device/xxx/sensor/xxx/";
  21. char apiKey[] PROGMEM = "U-ApiKey: xxxxxxxxxxxxxxx";
  22. byte Ethernet::buffer[500];   // a very small tcp/ip buffer is enough here
  23. static long timer;
  24. String switchStatus;

  25. // called when the client request is complete
  26. static void my_result_cb (byte status, word off, word len) {
  27.   String reply=(const char*)Ethernet::buffer + off;
  28.   switchStatus = reply.substring(reply.length()-2,reply.length()-1);
  29.   Serial.print("<<< reply ");
  30.   Serial.print(millis() - timer);
  31.   Serial.println(" ms");
  32.   Serial.print("Switch Status:");
  33.   Serial.println(switchStatus);
  34.   Serial.println();
  35. }

  36. void setup () {
  37.   Serial.begin(57600);
  38.   Serial.println("\n[getStaticIPorDHCP]");

  39.   if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
  40.     Serial.println( "Failed to access Ethernet controller");
  41. #if STATIC
  42.   ether.staticSetup(myip, gwip, dnsip);
  43. #else
  44.   if (!ether.dhcpSetup())
  45.     Serial.println("DHCP failed");
  46. #endif

  47.   ether.printIp("IP:  ", ether.myip);
  48.   ether.printIp("GW:  ", ether.gwip);  
  49.   ether.printIp("DNS: ", ether.dnsip);

  50.   while (ether.clientWaitingGw())
  51.     ether.packetLoop(ether.packetReceive());
  52.   Serial.println("Gateway found");

  53.   timer = - REQUEST_RATE; // start timing out right away
  54. }

  55. void loop () {
  56.   ether.packetLoop(ether.packetReceive());
  57.   if (millis() > timer + REQUEST_RATE) {
  58.     timer = millis();
  59.     if (!ether.dnsLookup(website))
  60.       Serial.println("DNS failed");
  61.     ether.printIp("Server: ", ether.hisip);
  62.     Serial.println("\n>>> REQ");
  63.     ether.browseUrl(urlBuf, "datapoints", website,apiKey, my_result_cb);
  64.   }
  65. }
复制代码


同样切个串口图吧


本帖子中包含更多资源

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

x

评分

参与人数 1 +5 收起 理由
幻生幻灭 + 5 经测好用!

查看全部评分

回复

使用道具 举报

发表于 2012-9-26 17:52:57 | 显示全部楼层
呵呵~!
谢谢张老师了~!正好在找这方面的资料
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-26 18:00:56 | 显示全部楼层
不客气,共同学习,这个是静态地址和dhcp通用的代码,只需更改#define STATIC的值, 1为静态,0为动态获取ip地址
回复 支持 反对

使用道具 举报

发表于 2012-9-26 18:04:14 | 显示全部楼层
>>> REQ
<<< reply 78 ms
Switch Status:


Server: 202.136.56.203

>>> REQ
<<< reply 79 ms
Switch Status:


Server: 202.136.56.203

>>> REQ
<<< reply 79 ms
Switch Status:

为什么我返回的值是空的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-26 18:10:21 | 显示全部楼层
本帖最后由 zcbzjx 于 2012-9-26 18:11 编辑

奇了个怪了。。你在
  1. String reply=(const char*)Ethernet::buffer + off;
复制代码
后加个
  1. Serila.println(reply);
复制代码
看看返回那些东西。
回复 支持 反对

使用道具 举报

发表于 2012-9-26 22:10:46 | 显示全部楼层
学习了~~~谢谢无私贡献
回复 支持 反对

使用道具 举报

发表于 2012-9-27 11:25:57 | 显示全部楼层
我设置20秒发送一个数据,10秒读取一个数据
貌似会产生冲突
既发送不出去又读取不到数据
回复 支持 反对

使用道具 举报

发表于 2012-9-27 12:14:30 | 显示全部楼层
张老师威武
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-27 14:06:49 | 显示全部楼层
zhangdeyue1 发表于 2012-9-27 11:25
我设置20秒发送一个数据,10秒读取一个数据
貌似会产生冲突
既发送不出去又读取不到数据

不会的,你代码的问题
回复 支持 反对

使用道具 举报

发表于 2012-10-9 09:26:48 | 显示全部楼层
返回404 是怎么回事 。说我的迷药错误。 但是我是复制过去的
回复 支持 反对

使用道具 举报

发表于 2012-10-13 09:39:58 | 显示全部楼层
DNS一定要配置吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-13 13:43:50 | 显示全部楼层
xl_1120 发表于 2012-10-13 09:39
DNS一定要配置吗

如果访问ip地址的话不需要,访问域名就要配置dns
回复 支持 反对

使用道具 举报

发表于 2013-1-1 15:36:13 | 显示全部楼层


用了你的附件,串口打印出 Serial.println( "Failed to access Ethernet controller");就不动了,连里面的实例都一样,还回原来的库就好的,请教是什么问题呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-3 18:58:38 | 显示全部楼层
应某人要求,更新了下代码。
回复 支持 反对

使用道具 举报

发表于 2013-4-3 20:50:54 | 显示全部楼层
zcbzjx 发表于 2013-4-3 18:58
应某人要求,更新了下代码。

很荣幸成为某人: ) 。 测试成功!
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 11:05 , Processed in 0.047473 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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