【转】Arduino学习笔记:2560+W5100试验实时室温对Pachubbe.com推送

Home / 博客 / 【转】Arduino学习笔记:2560+W5100试验实时室温对Pachubbe.com推送

 

转自极客工坊http://www.geek-workshop.com/forum.php?mod=viewthread&tid=544

作者:沧海笑1122

试验名称:2560+W5100试验实时室温对Pachubbe.com推送
试验时间:2012-02-18
控制板:arduino 2560
元器件:LM-35 DZ模拟传感器一只,正对标示,从左往右,+5V,模拟输出,GND
连接方法:接好+5V,GND,将LM35的模拟输出接2560的模拟PIN4
W5100连接至你的路由器,路由器连接互联网,PC连接2560便于观察网络连接以及数据采集情况

结果运用 : Tep= ** C;将实时室温传感器数据推送至www.pachube.com,每10秒刷新一次
代码原型:(1)官方例程pachubeout(-使用 ERxPachube 库的实例. )
(2)弘毅教程–学习笔记11,
(3)其它结合网络资源整理
* 本实例创建于2011.04.22,作者是Jeffrey Sun
* 开源项目详见http://code.google.com/p/pachubelibrary/
所需要的库在此处下载http://code.google.com/p/pachube … ip&can=2&q=,释放至此处:

 

 

 

 

 

 

 

 

 

 

第一步:
如果你还没有一个 Pachube 账户, 先去注册一个 (http://www.pachube.com/).注意,有一个开发账号和一个通讯组讨论账号,我们需要前者。注册成功后,我们将获得一个API key
pahube.com是一个免费的提供给开发者的实时数据上送、展示的网站。内置API,使用者只需要调用API(给出feed的ID),就可以将传感器数据推送至你自己独享的feed数据库。然后以图形方式进行丰富展示。

第二步:创建一个类似http://www.pachube.com/feeds/23408这样的素材库(feed)
为了测试,我们只需要创建一个ID为0的数据流
以下就是我建立的一个ID号码为49030的feed,需要设置项目名称、简介、关键词(便于检索)、项目的位置(经纬度、海拔、室内还是室外、移动还是固定等等)、数据表ID编号、表述、单位等。支持多数据ID。你可以在一个素材中推送多个传感器数据,数据格式有长型、字符型等。

第三步:
将以太网扩展板(W5100)堆叠至2560板上。LM35接2560的模拟输入(PIN 4)

第四步:输入、编译代码
代码一共分为个部分:
1、设置MAC地址、IP地址,API KEY以及FEED ID
2、连接互联网,将温度传感器数据转换为摄氏度,然后推送至pachube.com
3、在串口助手中,监视网络连接情况,以及传感器数据,状态值为200则连接成功,否则不成功

 

第五步:在www.pachube.com中观察你的数据
为了引起温度波动,图中的两处波动是我用手指贴近FM35后造成的波动。

后记:
本实例学习过程中,先后遇到了W5100不能稳定工作、无线路由器损坏、找不到一个实时推送数据的网站等问题,感谢弘毅、HEAVEN、小强、张丹、风的孩子等高手支持。我是以arduino为兴趣的一个软硬件基础都很薄弱的初学者,但是兴趣是最大的推动力。这个实例的学习仅仅是将一个开源项目与弘毅笔记简单的组合,即便是一个简单的尝试也感到很多困难,里面如有理解错误的地方敬请指正。

附代码:

/*项目名称:LM35温度传感器连接2560向www.pachube,cin推送数据试验
试验时间:2012-02-18
* 本实例创建于2011.04.22,作者是Jeffrey Sun
* 开源项目详见http://code.google.com/p/pachubelibrary/

*/
#include <Arduino.h>
#include <HardwareSerial.h>
#include <ERxPachube.h> //调用ERxPachube库
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0xCC, 0xAC, 0xBE, 0xEF, 0xFE, 0x91 }; // 确认这是你网络中唯一的MAC地址,用小强的话说,你就是网卡厂商,自己定一个
byte ip[] = { 192, 168, 1, 177 }; // 设置以太网扩展板的IP地址

#define PACHUBE_API_KEY “Your API_KEY” // 填写你自己的 API key
#define PACHUBE_FEED_ID Your Feed Id // 填写你自己的素材ID( feed id)

//定义三个FM35用的变量
int potPin = 4; //设置模拟口4为LM35的信号输入端口
float temperature = 0; //设置temperature为浮点变量
long val = 0; //设置val为长整数变量

ERxPachubeDataOut dataout(PACHUBE_API_KEY, PACHUBE_FEED_ID);

void PrintDataStream(const ERxPachube& pachube); //在COM口监测本地温度传感器推送情况

void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip); //访问以太网扩展板
dataout.addData(0); //向www.pachube.com推送数据序列0(转换后的温度)
}

void loop() {
Serial.println(“+++++++++++++++++++++++++++++++++++++++++++++++++”);
val = analogRead(potPin);//温度传感器LM35接到模拟PIN4上;val变量为从LM35信号口读取到的数值
temperature = (val*0.0048828125*100);
//把读取到的val转换为温度数值,系数一:0.00488125=5/1024,0~5V对应模拟口读数
//1~1024,系数二:100=1000/10,1000是毫伏与伏的转换;10是每10毫伏对应一度温升。
dataout.updateData(0, temperature);
int status = dataout.updatePachube();
Serial.print(“sync status code <OK == 200> => “);
Serial.println(status); //如果状态码是200,则互联网连接成功
PrintDataStream(dataout);
delay(10000);
}

void PrintDataStream(const ERxPachube& pachube)
{
unsigned int count = pachube.countDatastreams();
Serial.print(“data count=> “);
Serial.println(count);
Serial.println(“<Feed id>,<Temp value>”);
Serial.print(pachube.getIdByIndex(0));
Serial.print(“,”);
Serial.print(pachube.getValueByIndex(0));
Serial.println();
}