8301浏览
查看: 8301|回复: 14

[已解决] W5200如何连接入YEELINK啊?

[复制链接]
小白一枚,不懂W5200的设置,UNO板和LM35,求大侠帮忙

undead2003  见习技师
 楼主|

发表于 2014-6-8 09:54:07

:(技术人员不在吗??都休息了?
回复

使用道具 举报

Rockets  NPC

发表于 2014-6-8 09:57:13

请看下产品资料库,里面有相关介绍的啊。
回复

使用道具 举报

Ricky  NPC

发表于 2014-6-8 20:11:05

和普通ethernet 一样用 ,换个库文件就好, 有样例的。

具体哪个地方有问题呢?
回复

使用道具 举报

undead2003  见习技师
 楼主|

发表于 2014-6-9 00:35:33

我用测试教程里面的w5200 web server重新定义为一个server,板子正常,6路数据都可以内网显示,过一段时间将yeelink用w5100+uno的代码刷uno,可以连上jeelink,数据也有,但是过不了多久,就没有了,这是怎么回事??w5200不能用w5100的代码库的吗?重新写的话,怎么写啊,太复杂了,我用的是LM35+UNO+W5200,本人小白一枚,大侠多多包容,感激不尽。
回复

使用道具 举报

Grey  中级技匠

发表于 2014-6-9 10:16:52

undead2003 发表于 2014-6-9 00:35
我用测试教程里面的w5200 web server重新定义为一个server,板子正常,6路数据都可以内网显示,过一段时间 ...

W5200的库和W5100是不一样的,只能向下兼容,产品页面或者wiki上都有下载的。
把圆来的给删了,换上新的就可以了
回复

使用道具 举报

undead2003  见习技师
 楼主|

发表于 2014-6-11 00:14:06

00000---基础小白求救,折腾好久了,没办法,基础不是差的问题,是空白,请求Grey大侠帮忙编写一下,红色部分LM35的代码:我根本就不懂呀,
  1. /*
  2. Yeelink sensor client example
  3. */
  4. #include <SPI.h>
  5. #include <Ethernet.h>
  6. #include <Wire.h>
  7. #include <math.h>
  8. int LM35address = 0x23;
  9. byte buff[2];
  10. // for yeelink api
  11. #define APIKEY         "bf6497a31fabf2a574f6b52f5a32b2e8" // replace your yeelink api key here
  12. #define DEVICEID  10965 // replace your device ID
  13. #define SENSORID  18180 // replace your sensor ID
  14. // assign a MAC address for the ethernet controller.
  15. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAA};
  16. // initialize the library instance:
  17. EthernetClient client;
  18. char server[] = "api.yeelink.net";   // name address for yeelink API
  19. unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
  20. boolean lastConnected = false;                 // state of the connection last time through the main loop
  21. const unsigned long postingInterval = 30*1000; // delay between 2 datapoints, 30s
  22. void setup() {
  23.   Wire.begin();
  24.   // start serial port:
  25.   Serial.begin(115200);
  26.   // start the Ethernet connection with DHCP:
  27.   if (Ethernet.begin(mac) == 0) {
  28.     Serial.println("Failed to configure Ethernet using DHCP");
  29.     for(;;)
  30.       ;
  31.   }
  32.   else {
  33.     Serial.println("Ethernet configuration OK");
  34.   }
  35. }
  36. void loop() {
  37.   // if there's incoming data from the net connection.
  38.   // send it out the serial port.  This is for debugging
  39.   // purposes only:
  40.   if (client.available()) {
  41.     char c = client.read();
  42.     Serial.print(c);
  43.   }
  44.   // if there's no net connection, but there was one last time
  45.   // through the loop, then stop the client:
  46.   if (!client.connected() && lastConnected) {
  47.     Serial.println();
  48.     Serial.println("disconnecting.");
  49.     client.stop();
  50.   }
  51.   // if you're not connected, and ten seconds have passed since
  52.   // your last connection, then connect again and send data:
  53.   if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
  54.     // read sensor data, replace with your code
  55.     int sensorReading = readLightSensor();
  56.     //send data to server
  57.     sendData(sensorReading);
  58.   }
  59.   // store the state of the connection for next time through
  60.   // the loop:
  61.   lastConnected = client.connected();
  62. }
  63. // this method makes a HTTP connection to the server:
  64. void sendData(int thisData) {
  65.   // if there's a successful connection:
  66.   if (client.connect(server, 80)) {
  67.     Serial.println("connecting...");
  68.     // send the HTTP PUT request:
  69.     client.print("POST /v1.0/device/");
  70.     client.print(DEVICEID);
  71.     client.print("/sensor/");
  72.     client.print(SENSORID);
  73.     client.print("/datapoints");
  74.     client.println(" HTTP/1.1");
  75.     client.println("Host: api.yeelink.net");
  76.     client.print("Accept: *");
  77.     client.print("/");
  78.     client.println("*");
  79.     client.print("U-ApiKey: ");
  80.     client.println(APIKEY);
  81.     client.print("Content-Length: ");
  82.     // calculate the length of the sensor reading in bytes:
  83.     // 8 bytes for {"value":} + number of digits of the data:
  84.     int thisLength = 10 + getLength(thisData);
  85.     client.println(thisLength);
  86.     client.println("Content-Type: application/x-www-form-urlencoded");
  87.     client.println("Connection: close");
  88.     client.println();
  89.     // here's the actual content of the PUT request:
  90.     client.print("{"value":");
  91.     client.print(thisData);
  92.     client.println("}");
  93.   }
  94.   else {
  95.     // if you couldn't make a connection:
  96.     Serial.println("connection failed");
  97.     Serial.println();
  98.     Serial.println("disconnecting.");
  99.     client.stop();
  100.   }
  101.    // note the time that the connection was made or attempted:
  102.   lastConnectionTime = millis();
  103. }
  104. // This method calculates the number of digits in the
  105. // sensor reading.  Since each digit of the ASCII decimal
  106. // representation is a byte, the number of digits equals
  107. // the number of bytes:
  108. int getLength(int someValue) {
  109.   // there's at least one byte:
  110.   int digits = 1;
  111.   // continually divide the value by ten,
  112.   // adding one to the digit count for each
  113.   // time you divide, until you're at 0:
  114.   int dividend = someValue /10;
  115.   while (dividend > 0) {
  116.     dividend = dividend /10;
  117.     digits++;
  118.   }
  119.   // return the number of digits:
  120.   return digits;
  121. }
  122. ///////////////////////////////////////////////////////////////////////////
  123. <font color="Red">// get data from LM35 sensor
  124. // you can replace this code for your sensor
  125. int readLightSensor()
  126. {
  127.   uint16_t val=0;
  128.   LM35_Init(LM35address);
  129.   delay(200);
  130.   if(2==LM35_Read(BH1750address))
  131.   {
  132.     val=((buff[0]<<8)|buff[1])/1.2;
  133.   }
  134.   Serial.print("Sensor value is: ");
  135.   Serial.println((int)val);
  136.   return val;
  137. }
  138. int LM35_Read(int address) //
  139. {
  140.   int i=0;
  141.   Wire.beginTransmission(address);
  142.   Wire.requestFrom(address, 2);
  143.   while(Wire.available()) //
  144.   {
  145.     buff<i> = Wire.read();  // receive one byte
  146.     i++;
  147.   }
  148.   Wire.endTransmission();
  149.   return i;
  150. }
  151. void LM35_Init(int address)
  152. {
  153.   Wire.beginTransmission(address);
  154.   Wire.write(0x10);//1lx reolution 120ms
  155.   Wire.endTransmission();
  156. }</i></font>
复制代码

回复

使用道具 举报

lauren  高级技师

发表于 2014-6-11 13:41:16

Yeelink官方应该就有w5100和yeelink链接的样例程序和教程的吧?你试试直接用官方的资料。据我所知,对于w5200和w5100的差异其实主要是socket接口性能更强一些。所以arduino的库更新下,其他所有函数和功能都是完全兼容的!

1.建议先不要自己修改功能,使用官方样例
2.跑通后添加功能
回复

使用道具 举报

undead2003  见习技师
 楼主|

发表于 2014-6-11 22:25:27

lauren 发表于 2014-6-11 13:41
Yeelink官方应该就有w5100和yeelink链接的样例程序和教程的吧?你试试直接用官方的资料。据我所知,对于w52 ...

真的很奇怪,你的方法我也用过,不行,但是用官方的WEBSERVER来刷一次之后,再用YEELINK的样例程序就可以了,现在在测试能顶多久??
回复

使用道具 举报

undead2003  见习技师
 楼主|

发表于 2014-6-11 22:39:24

顶了10分钟,开始出现乱码,重新刷yeelink的样例程序,就恢复正常,还在看……
回复

使用道具 举报

undead2003  见习技师
 楼主|

发表于 2014-6-11 23:03:01

奇怪了,为什么一定要刷一次这个webserver,然后Yeelink的样例也可以,自己写的代码也都可以了??有技术人员吗?告知一二?
回复

使用道具 举报

undead2003  见习技师
 楼主|

发表于 2014-6-12 20:48:49

反复尝试,发现DFrobot这块板子很有特点,一定要按照test程序里面的重新定义一下针脚才行,然后结合yeelink的上传程序就可以正常工作了,废话不说,代码如下:
#include <Ethernet.h>
#include <WiFi.h>
#include <SPI.h>
#include <yl_data_point.h>
#include <yl_device.h>
#include <yl_w5100_client.h>
#include <yl_wifi_client.h>
#include <yl_messenger.h>
#include <yl_sensor.h>
#include <yl_value_data_point.h>
#include <yl_sensor.h>

//this example reads data from a lm35dz sensor, convert value to degree Celsius
//and then post it to yeelink.net

//注意!官网的SPI接口使用的是 D10作为 SS接口,这里需要根据实际SS接线情况定义一次SS管脚
////端口定义Dreamer MEGA  X1 PORT
//#define SS  53   //Gadgeteer PIN 6
//#define nRST  46  //Gadgeteer PIN 4
//#define nPWDN 45  //Gadgeteer PIN 5
//#define nINT 2  //Gadgeteer PIN 3

//端口定义Dreamer MEGA X2 PORT
#define SS    10   //Gadgeteer PIN 6
#define nRST  8  //Gadgeteer PIN 4
#define nPWDN 9  //Gadgeteer PIN 5
#define nINT 3  //Gadgeteer PIN 3
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
// assign a MAC address for the ethernet controller.
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,101);
// initialize the library instance:


//replace 2633 3539 with ur device id and sensor id
yl_device ardu(10965);  //此处替换为你的设备编号
yl_sensor therm(18180, &ardu);//此处替换为你的传感器编号
//replace first param value with ur u-apikey
yl_w5100_client client;
yl_messenger messenger(&client, "bf6497a31fabf2a574f6b52f5a32b2e8", "api.yeelink.net");   //此处替换为你自己的API KEY


const int THERM_PIN  = A0;


float lm35_convertor(int analog_num)
{
        return analog_num * (5.0 / 1024.0 * 100);
}


void setup()
{
    ////下面是非常重要的设置,如果没有可靠的复位设置,W5200可能不工作 !!!! /////////
  pinMode(SS,OUTPUT);  //端口定义Dreamer MEGA X2 PORT  Gadgeteer PIN 6 use SS
  pinMode(nRST,OUTPUT);
  pinMode(nPWDN,OUTPUT);
  pinMode(nINT,INPUT);  
  digitalWrite(nPWDN,LOW);  //enable power
  digitalWrite(nRST,LOW);  //Reset W5200
  delay(10);
  digitalWrite(nRST,HIGH);  
  delay(200);       // wait W5200 work
  Serial.begin(9600);        //for output information
        byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAA};
        Ethernet.begin(mac);
}


void loop()
{
        int v = analogRead(THERM_PIN);
        Serial.println(lm35_convertor(v));
                yl_value_data_point dp(lm35_convertor(v));
                therm.single_post(messenger, dp);
                delay(1000);
}
回复

使用道具 举报

lauren  高级技师

发表于 2014-6-16 14:42:39

undead2003 发表于 2014-6-12 20:48
反复尝试,发现DFrobot这块板子很有特点,一定要按照test程序里面的重新定义一下针脚才行,然后结合yeelink ...

?.哦?需要重新定义引脚?难道是nRST/nPWDN/nINT引脚和官方引脚不匹配?
回复

使用道具 举报

Grey  中级技匠

发表于 2014-6-20 10:27:14

lauren 发表于 2014-6-16 14:42
?.哦?需要重新定义引脚?难道是nRST/nPWDN/nINT引脚和官方引脚不匹配?

有这种可能性,WIKI里面就是需要重新定义引脚,但库里面大部分样例程序都没有定义引脚,这有点奇怪。

Anyway,感谢楼主分享经验!
回复

使用道具 举报

unoing  见习技师

发表于 2014-11-15 11:28:02

undead2003 发表于 2014-6-12 20:48
反复尝试,发现DFrobot这块板子很有特点,一定要按照test程序里面的重新定义一下针脚才行,然后结合yeelink ...

我也有相同的困惑,请问可以加个QQ相互一下呗。949309391
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail