极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3432|回复: 3

菜鸟关于LEWEI50 E-KIT的一点拓展

[复制链接]
发表于 2013-7-28 09:08:21 | 显示全部楼层 |阅读模式
本帖最后由 俯首观天 于 2013-7-28 09:14 编辑

    在翘首以盼中,在徘徊独步间,我终于收到了LEWEI50 E-KIT套件,又在翘首以盼中,在徘徊独步间,我终于熬到了放假回家捣鼓一番,呵呵。先附上几张开箱图片:
1.jpg



2.jpg



3.jpg



4.jpg



5.jpg

    大家可以看出,外包装很有专业风格。里面细心铺垫了多层泡沫,而且线材和各种模块都是上乘的品质。而uno和w5100的组合设计,不仅减小了套件的体积,也增加了系统硬件的稳定性,总之,我比较喜欢这种风格。当然了,我写的这个不是一篇软文,入门教程我推荐大家看以下几个朋友的文章:
    同时附上LEWEI50E-KIT的使用说明书,里面详细讲述了从上传数据到反向控制红外设备的全过程,如果你感兴趣的话,它将是你很好的教材。下面我只是谈谈我作为一个菜鸟的小小心得,高手略过。。。
    按照说明书的叙述,里面提供了用一个命令控制led开关的方法,瘦网虫大侠的思路是服务器端增加一个设备,设备的上传数值作为led开关变量的储存地。然后本地读取变量后按条件执行。例如1为开灯,0为关灯,触发命令1后,灯打开,同时上传0作为参数,供下次再触发的时候关灯使用,反之亦然。大侠这么做思路巧妙,但是服务器由于技术策略的原因,限制了数据上传最小间隔10s,这就会造成led反控的响应能力降低,在快速开关led的时候,会出现频繁失效的情况。所以我改变了这种方式,将led状态的判断放在本地来做,这就绕过了服务器的限制,提高了响应能力。代码如下:
  1. #include <SPI.h>
  2. #include <Ethernet.h>
  3. #include <LeweiTcpClient.h>
  4. #include <EEPROM.h>
  5. #include <dht11.h>
  6. #define LW_USERKEY "you key"
  7. #define LW_GATEWAY "01"
  8. dht11 DHT11;
  9. //DHT11 vcc pin->+5v
  10. //DHT11 data pin->d3
  11. //DHT11 gnd pin->gnd
  12. #define DHT11PIN 3 //dht11数据脚
  13. LeweiTcpClient *client;
  14. long starttime;
  15. int postInterval = 5000;
  16. int w=1;//状态参数
  17. void setup()
  18. {
  19.   Serial.begin(9600);
  20.   client = new LeweiTcpClient(LW_USERKEY, LW_GATEWAY);
  21.   UserFunction uf2 (changeLedState,"changeLed");
  22.   client->addUserFunction(uf2);
  23.   starttime = millis();
  24.   pinMode(4, OUTPUT);
  25.   client->easySetupMode(true);
  26. }

  27. void loop()
  28. {
  29. client->keepOnline();
  30.     if ((millis()-starttime) > postInterval)
  31.     {
  32.       sendDht11Value();
  33.       starttime = millis();
  34.     }
  35. }

  36. void changeLedState()
  37. {
  38.   switch (w)
  39.   {
  40.     //开灯并改变参数
  41.     case 1:
  42.       digitalWrite(4,HIGH);
  43.       client->setRevCtrlMsg("true","On");
  44.       w=2;
  45.       break;
  46. //关灯并改变参数
  47.     case 2:
  48.       digitalWrite(4,LOW);
  49.       client->setRevCtrlMsg("true","Off");
  50.       w=1;
  51.       break;
  52.   }
  53. }
  54. void sendDht11Value()
  55. {
  56.       int chk = DHT11.read(DHT11PIN);
  57.       switch (chk)
  58.       {
  59.         case DHTLIB_OK:
  60.                     client->sendSensorValue("你的温度标识",(String)DHT11.temperature);
  61.                     client->sendSensorValue("你的湿度标识",(String)DHT11.humidity);
  62.                     break;
  63.       }
  64. }
复制代码

把代码刷入LEWEI50 E-KIT后,我们只要在web中新增如下地方即可:
6.jpg


插入后应该如下:
7.jpg

之后重启一下你的LEWEI50 E-KIT,试试自定义命令,是不是快多了呢?
8.jpg

    这算是一点小小的心得吧,玩了一会儿后,我觉得LEWEI50 E-KIT这样默默的上传,我们要查看数据都要上网才能实现,不是很方便,恰好手头有一块1602,那就来加个LEWEI50 E-KIT的小屏幕吧。代码如下:
  1. #include <SPI.h>
  2. #include <Ethernet.h>
  3. #include <LeweiTcpClient.h>
  4. #include <EEPROM.h>
  5. #include <dht11.h>
  6. #include <LiquidCrystal.h>//1602库文件
  7. #define LW_USERKEY "your key"
  8. #define LW_GATEWAY "01"
  9. dht11 DHT11;
  10. //DHT11 vcc pin->+5v
  11. //DHT11 data pin->d2
  12. //DHT11 gnd pin->gnd
  13. #define DHT11PIN 3
  14. LiquidCrystal lcd(10, 9, 8, 7, 6, 5);
  15. /*
  16.   The circuit:
  17. * LCD RS pin to digital pin 10
  18. * LCD Enable pin to digital pin 9
  19. * LCD D4 pin to digital pin 8
  20. * LCD D5 pin to digital pin 7
  21. * LCD D6 pin to digital pin 6
  22. * LCD D7 pin to digital pin 5
  23. * LCD R/W pin to ground
  24. * 10K resistor:
  25. * ends to +5V and ground
  26. * wiper to LCD VO pin (pin 3)
  27. */
  28. LeweiTcpClient *client;
  29. long starttime;
  30. int postInterval = 5000;
  31. int w=1;
  32. void setup()
  33. {
  34.    lcd.begin(16, 2);
  35.   Serial.begin(9600);
  36.   client = new LeweiTcpClient(LW_USERKEY, LW_GATEWAY);
  37.    UserFunction uf2 (changeLedState,"changeLed");
  38.   client->addUserFunction(uf2);
  39. client->easySetupMode(true);
  40.   starttime = millis();
  41.   pinMode(4, OUTPUT);
  42. lcd.clear(); //清屏

  43. }

  44. void loop()
  45. {
  46.        lcd.clear(); //清屏
  47.        client->keepOnline();
  48.     if ((millis()-starttime) > postInterval)
  49.     {
  50.       sendDht11Value();
  51.       starttime = millis();
  52.     }
  53. }

  54. void changeLedState()
  55. {
  56.   lcd.setCursor(0, 1) ;
  57.   switch (w)
  58.   {
  59.     case 1:
  60.       digitalWrite(4,HIGH);
  61.       client->setRevCtrlMsg("true","On");
  62.       w=2;
  63.       lcd.print("Led ON");
  64.       break;
  65.     case 2:
  66.       digitalWrite(4,LOW);
  67.       client->setRevCtrlMsg("true","Off");
  68.       w=1;
  69.       lcd.print("Led OFF");
  70.       break;
  71.   }

  72. }
  73. void sendDht11Value()
  74. {
  75.       int chk = DHT11.read(DHT11PIN);
  76.       switch (chk)
  77.       {
  78.         case DHTLIB_OK:
  79.                     client->sendSensorValue("wd",(String)DHT11.temperature);
  80.                     lcd.setCursor(0, 0) ;
  81.                     lcd.print("t=");
  82.                     lcd.print((int)DHT11.temperature);
  83.                     client->sendSensorValue("sd",(String)DHT11.humidity);
  84.                     lcd.setCursor(7, 0) ;
  85.                     lcd.print("h=");
  86.                     lcd.print((int)DHT11.humidity);
  87.                     break;
  88.                  
  89.       }
  90. }
复制代码
运行结果如下:
9.jpg



10.jpg



之后有几点要说明一下:



1,,client->easySetupMode(true)这句话,是设置LEWEI50 E-KIT可以动态修改userkey和网关号,这大大方便了我们程序的修改。只需要找到LEWEI50 E-KIT的IP,把它输入浏览器就可以进行修改,数据是放在EEPROM中的,断电也不怕。IP地址查找如图:
11.jpg



2,uno的内存比较小,但是官方以玩家的角度、从售价控制和功能定位出发选择了它。对于服务器提供的所有功能来说已经完全可以胜任。但是如果你想玩出新花样,请注意,代码和数据太多的话容易发生溢出,这时候就会有各种奇怪的问题出现。所以当你明明代码正确,却依然无法正确运行的时候,请考虑是不是发生了溢出。


3,从我的使用来看,arduino ide 1.0.3及以下版本对代码的支持不是很好,很容易出错,所以请一定使用arduinoide 1.0.5或者更高版本来编译。


4,我是一个小菜,有什么可以指教的,请一定一定站内短信我,我感激不尽,嘿嘿。。。


    最后,欢迎大家加入物联网的大家族来,物联网平台是一片新奇的天空,有好多好多玩法等着大家来探索。而作为国内两大翘楚之一的乐联,更是拥有“亲民”的形象。套用广告来说,乐联有你,更精彩。
回复

使用道具 举报

发表于 2013-7-29 09:39:59 | 显示全部楼层
乐联网有变量存在本地的解决方案,使用“控制设备”那个功能就可以实现。呵呵。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 19:09:49 | 显示全部楼层
瘦网虫 发表于 2013-7-29 09:39
乐联网有变量存在本地的解决方案,使用“控制设备”那个功能就可以实现。呵呵。

求指导                          
回复 支持 反对

使用道具 举报

发表于 2014-6-4 16:12:22 | 显示全部楼层
您好 按照您给的程序运行了 温湿度都能实现  但是控制列表里怎么没办法实现开关切换啊?  显示的是未在线
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-8-22 07:35 , Processed in 0.057678 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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