极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 39733|回复: 11

W5100+arduino+乐联网平台实现传感器数据上传step by step 教程

[复制链接]
发表于 2013-3-22 10:20:49 | 显示全部楼层 |阅读模式
本帖最后由 laoliu1982 于 2013-3-22 10:26 编辑

1 说明
案例说明:使用Arduino+W5100来实现将几类传感器的测量数据发布到乐联网上进行远程实时查看,查看方式包括在乐联网网页上查看和手机APP查看。
APP:乐联网乐联网 APP open.lewei50.com/home/sitecontent/ydkhd
系统平台:乐联网开放平台
注:本篇案例讲解如何实现数据上传,还有另一篇案例讲解如何实现Arduino+W5100+乐联网平台来实现反向控制的教程,请参考链接 http://www.geek-workshop.com/thread-3576-1-1.html
2 反向控制硬件连线

3 Arduino模板程序获得与修改
3.1 获得arduino 代码
乐联网的相关Arduino代码托管在Github上,地址https://github.com/lewei50/leweiclient, 打开链接,点击Zip下载按钮,将名称为master.zip的文件下载到本地。

下载后解压,打开你电脑里的Arduino IDE所在文件夹里的libraries文件夹,在里面新建一个leweiclient的文件夹,将master压缩包解压缩后LeweiClient-master文件夹里的文件全部拷贝到这个文件夹里。

3.2 修改usrkey
运行Arduino.exe,在顶部菜单File—Examples—Leweiclient里面能看到control和upload,打开upload即是数据上传的Arduino编程代码。

在执行代码前,首先需要到乐联网(http://www.lewei50.com/)上注册用户名和密码,在主页右上角有注册按钮,点击后填写账号、密码和邮箱以后,再登录到邮箱里面激活账号即可。登录进入系统后,通过点击左边管理菜单下“我的账号”—“设置个人信息”里面可以看到你的userkey,这个userkey是每个用户唯一的。

如下图,这是第一处需要修改的地方,首先将程序里面的define LW_USERKEY后面的数值改成你实际个人账号的userkey。

其它的变量基本不需要修改,解释如下:
LW_GATEWAY:乐联网的配置的网关标识;
MY_NAME:网关名称;
MY_NAME:网关介绍;
my_addr[50]:被控制的Arduino UNO板可以采取由无线路由器DHCP自动分配IP地址的方式来获取IP,也可以采用手动输入的静态的IP地址,如果采用静态IP地址,则这里输入http://静态IP地址/api,如图中,则表示静态的IP地址为192.168.1.221。
port:给Arduino UNO这个网络终端分配的控制端口号(跨网络控制时候有意义,数据上传编程此变量无意义);
3.3 定义不同的传感器

Leweiclient里已经将几种传感器的代码进行了封装,目前已有的包括:
        模拟量输出的传感器,包括Dfrobot的 Uvsensor 和 moisture sensor
        DHT 类别的温湿度传感器
        颗粒物传感器(PM1sensor)
        光照传感器(BH1721 BH1750)
对于每种传感器,你都可以在给一个缩写,例如上面程度中用“UV”表示UV紫外线传感器,这是第二个根据你自己想定义的传感器缩写来进行修改的地方,注意这些传感器需要登录到乐联网物联网应用平台进行创建,创建的传感器的缩写必须和程序里面的缩写保持一致。后面我们会介绍如何在乐联网平台添加设备。
3.4 设置Arduino的网络参数

这里是第三处需要根据你实际的应用场景来进行修改的地方。
这段程序中上面的代码中,如果是“if 0”,则表示不采用静态IP地址的方式,如果是“if 1”,则表示采用静态IP地址,则继续执行下面代码,解释如下:
IPAddress myip:这里需要输入手动配置给Arduino UNO板的IP地址,与前面的my_addr[50]里的IP地址要保持一致;
IPAddress dnsip:这里需要输入与W5100相连接的路由器的DNS的IP地址,查询方法,登录进入路由器配置界面,查看WAN口状态(不同厂商的路由器查询方法不一致,但都能看到WAN口状态)里面的DNS服务器选项。

IPAddress dnsip:这里需要输入与W5100相连接的路由器的IP地址;
IPAddress gateway:这里需要输入与W5100相连接的路由器的DNS的IP地址
3.5 注册传感器
如下图的代码是注册你需要上传数据的传感器,可以根据你实际的应用来进行修改,将需要上传数据的传感器注册一下,把其它传感器的注册代码语句注释掉就可以了。这里是第四处需要你根据实际的应用场景来修改的地方。
这里设置完成以后,便可以运行该程序,运行成功以后。便需要在乐联网的物联网平台管理平台上增添你的测量设备。

4 乐联网上的配置
4.1 网关信息查看
登录进入乐联网管理平台,乐联网采用三级的物联网架构,即“云端服务器”—“网关”—“设备”,“云端服务器”即乐联网的后台服务器,“网关”是桥接测量设备或控制设备和互联网的设备,在本应用指的是Arduino+W5100,设备即前端的测量设备或控制设备,本应用都是测量设备即各类传感器。

登录进入乐联网,进入左边管理菜单下“我的物联网”—“我的网关”里面可以看到你的网关列表,系统默认为每个用户添加一个网关。
4.2 添加测量设备
下一步需要在新创建的网关上建立你的测量设备,进入左边管理菜单下“我的物联网”—“添加设备”,点击右边“添加测量设备”页签,如下图,填写相关信息后,点击保存就可以了。

相关参数解释如下:
缩写:测量设备的缩写,必须与程序里面定义的一致;(根据前面的程序,分别需要建立的缩写是PM1, UV ,BH, TEMP, HM 几个设备)
类型:可以在下拉菜单选择不同的测量设备类型,区别是不同类型的数值单位不一样,如温度是︒C,浓度是%等等;
单位:与类型相关联,如果“类型”中选择“其他类型”,则需要这里手动输入单位;
选择网关:从下列菜单选择该测量设备连接的网关,本应用只有一个网关,直接选择;
名称:测量设备名称;
数值转换:可以校准你的设备,最终的保存数值=上传数值*系数+偏移,如果你的测量设备没有系数和偏移值,则可以留空,主要应用于仪器仪表类测量设备;
照片:可以上传你测量设备的照片,公开后在乐联网公开设备地图可以看到;
是否公开:是否公开你的测量设备,只有当网关和网关连接的测量设备同时公开,你才可以看到测量设备的信息和数据;
正常值范围:设置数据的正常值范围;
超过范围告警:勾选,则测量数值不在正常值范围会自动短信告警,详见第五节;
发送频率:当前设备的最小保存时间,发送频率仅作为判断测量设备在线的衡量标准,如果服务器在发送频率设置的时间内没有收到数据,则显示该设备不在线;
备注:测量的设备的备注信息;
发送超时报警:设备超时(超过发送频率设置的时间)不发送数据有短信告警;
自动发微博:可以绑定新浪微博,乐联网的资深玩家会开通根据测量值的不同自动推送不同的微博内容的应用;
这里有你使用几个传感器,这里就需要配置几个设备,设备配置完成后,便可以点击“我的物联网”—“实时数据”可以查看你传感器的测量数据或者使用手机APP来查看各项数据。
结束语
以上介绍了乐联网的反向控制Arduino的一个应用,希望能够让大家对乐联网的物联网应用有更进一步的了解,并能借鉴这个应用启发您的思路,一起在乐联网上实现自己的各类创意。后续,我们会推出通过数值的变化来控制设备实现不同的变化的更为复杂的控制方案,尽请期待!
如果你需要更详细的技术交流或者疑问咨询,可以加入乐为物联技术支持群:59162154;或关注乐为物联新浪微博@乐为物联;
关注乐联网微信:搜索公众账号“乐联网”。或者扫描下面的二维码来添加关注“乐联网”。

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2013-3-22 17:54:31 | 显示全部楼层
补一个 网站系统使用指南,所有的功能都有介绍,weibo 微信 短信报警 邮件推送。

http://www.lewei50.com/home/news/95
回复 支持 反对

使用道具 举报

发表于 2013-4-2 20:41:39 | 显示全部楼层
相当不错 简明易懂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-7 09:41:57 | 显示全部楼层
代码由@grissiom 提供

乐联网的相关Arduino代码托管在Github上,地址https://github.com/lewei50/leweiclient, 打开链接,点击Zip下载按钮,将名称为master.zip的文件下载到本地。

之前发布的传感器框架结构只支持DHT11,PPD42NS,bh1721,AD模式的传感器,很多用其他传感器的用户想加入自己的传感器需要修改库,很不方便。

这个版本恢复了之前提供的append方法,只要知道设备“标识”和该设备的值,就可以把数据推到网上了。

  lwc->append("INT", 112);
   lwc->append("DBL", -11.2238);


  1. #include <LeweiClient.h>
  2. #include <SPI.h>
  3. #include <Ethernet.h>
  4. #include <Wire.h> //BH1750 IIC Mode

  5. #define LW_USERKEY "a1b1f96xxxxx7a5f41d525111"
  6. #define LW_GATEWAY "01"

  7. #define MY_NAME    "UNO1"
  8. #define MY_DESC    "UNO test case"
  9. char my_addr[50]="http://192.168.1.221/api";
  10. int port =8889;
  11. //delay between updates
  12. LeWeiClient *lwc;

  13. LeWeiAnalogSensor the_UVSensor("UV", "UV_sensor", "UVsensor", 0);

  14. void setup() {
  15.   String stringOne;
  16.   Serial.begin(9600);

  17.   uint8_t mac[] = {
  18.     0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED  };
  19. #if 0
  20.   IPAddress  myip(192, 168, 1, 233);
  21.   IPAddress  dnsip(211, 98, 2, 4);
  22.   IPAddress  gateway(192, 168, 1, 1);
  23.   Ethernet.begin(mac, myip, dnsip, gateway);
  24. #else
  25.   Serial.println("DHCP in process !");
  26.   if (Ethernet.begin(mac) == 0)
  27.   {
  28.     Serial.print(F("Failed to configure Ethernet using DHCP\n"));
  29.   }
  30.   else
  31.   {
  32.     Serial.print("My IP address: ");
  33.     for (byte thisByte = 0; thisByte < 4; thisByte++) {
  34.       // print the value of each byte of the IP address:
  35.       Serial.print(Ethernet.localIP()[thisByte], DEC);
  36.       Serial.print(".");
  37.     }
  38.     Serial.println();
  39.     Serial.println(F("Ethernet configuration OK\n"));
  40.     stringOne="http://";
  41.     stringOne+=Ethernet.localIP()[0];
  42.     stringOne+=".";
  43.     stringOne+=Ethernet.localIP()[1];
  44.     stringOne+=".";
  45.     stringOne+=Ethernet.localIP()[2];
  46.     stringOne+=".";
  47.     stringOne+=Ethernet.localIP()[3];
  48.     stringOne+=":";
  49.     stringOne+=port;
  50.     stringOne+="/api";   
  51.     Serial.println(stringOne);
  52.     stringOne.toCharArray(my_addr, 50);
  53.   }
  54. #endif

  55.   // hope no exception here
  56.   lwc = new LeWeiClient(LW_USERKEY, LW_GATEWAY,MY_NAME, MY_DESC, my_addr, (LeWeiClient::flag)((LeWeiClient::isControlled)|(LeWeiClient::internetAvailable)));
  57.   // lwc = new LeWeiClient(LW_USERKEY, LW_GATEWAY,MY_NAME, MY_DESC, my_addr, (LeWeiClient::flag)(LeWeiClient::isControlled));

  58.   lwc->registerSensor(the_UVSensor);

  59.   Serial.print(lwc->nrSensors());
  60.   Serial.println(F(" sensors registered."));
  61.   Serial.print(lwc->nrActuators());
  62.   Serial.println(F(" actuators registered."));

  63.   lwc->initDevices();

  64.   Serial.println(F("upload gateway info to server"));
  65.   int retry = 10;
  66.   while (lwc->uploadInfo() < 0 && --retry)
  67.   {
  68.     delay(500);

  69.     Serial.print("retry: ");
  70.     Serial.println(retry);
  71.   }
  72.   if (!retry)
  73.     Serial.println(F("uploadInfo failed in 10 times"));
  74.   else
  75.     Serial.println(F("uploadInfo done"));
  76. }

  77. void loop()
  78. {
  79.   static unsigned int loop_count;
  80.   if (lwc)
  81.   {
  82.     loop_count++;

  83.     Serial.print(F("*** loop nr: "));
  84.     Serial.println(loop_count);
  85.     lwc->append("INT", 112);
  86.     lwc->append("DBL", -11.2238);
  87.     lwc->scanSensors();
  88.   }
  89.   delay(500);
  90. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-16 16:37:51 | 显示全部楼层
英文版平台内测中 http://en.lewei50.com/home/login
回复 支持 反对

使用道具 举报

发表于 2013-6-23 23:56:07 | 显示全部楼层
{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2014-5-20 18:31:43 | 显示全部楼层
楼主,在那个https://github.com/lewei50/leweiclient上下载下来的跟你展示的不一样啊
回复 支持 反对

使用道具 举报

发表于 2014-5-20 18:34:39 | 显示全部楼层
laoliu1982 发表于 2013-4-7 09:41
代码由@grissiom 提供

乐联网的相关Arduino代码托管在Github上,地址https://github.com/lewei50/lewei ...

请问这两个地方需要修改么?
#define MY_NAME    "UNO1"
#define MY_DESC    "UNO test case"
回复 支持 反对

使用道具 举报

发表于 2014-5-20 19:29:50 | 显示全部楼层
laoliu1982 发表于 2013-4-7 09:41
代码由@grissiom 提供

乐联网的相关Arduino代码托管在Github上,地址https://github.com/lewei50/lewei ...

这一句为何编译不过?LeWeiAnalogSensor the_UVSensor("UV", "UV_sensor", "UVsensor", 0);
回复 支持 反对

使用道具 举报

发表于 2014-9-16 20:44:18 | 显示全部楼层
LZ 您好  请问一下 您当初使用UVsensor的时候 是怎么把读取到的电压值 转换为紫外线指数等 我们平常见得到的指标的?
回复 支持 反对

使用道具 举报

发表于 2016-5-3 09:57:25 | 显示全部楼层
请问博主,如果把这个配置好的拿到另一个地方插上网需不需要重新配置数据。还是只需插上网线就可以用了
回复 支持 反对

使用道具 举报

发表于 2016-5-4 10:38:32 | 显示全部楼层
此贴年代久远,乐联已改变了代码。只能做为参考,不能step by step 的做实验了。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 20:09 , Processed in 0.041340 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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