从 Arduino 传递温湿度值给 Node 网站

标签: arduino 湿度 node | 发表时间:2017-09-13 15:59 | 作者:
出处:http://geek.csdn.net

摘要:将 Arduino 制作成网络客户端,在电脑上创建并运行 Node 网站服务器程序,让 Arduino 定时向 Node 网站发布最新采集的温湿度数据。

实验材料:

  • Arduino UNO 控制板,一片;
  • Arduino Ethernet 以太网模块(采用 W5100 芯片),一片;
  • DHT11 温湿度传感模块,一片。

Arduino 实验程序:Arduino 将把采集到的温湿度值,传到Node 服务器的 /th 路径,并且在 URL 地址附加 t 和 h 参数,分别代表温度和湿度值。

以太网络客户端连接程序如下,首先声明保存地址的变量,采用DHCP(动态分配 IP 地址)的代码请参阅下文。

#include <SPI.h>#include <Ethernet.h>// 以太网卡的实体地址bytemac[] = {0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
IPAddressserver(192,168,1,19);// Node 服务器的IP 地址,请自行修改IPAddress ip(192,168,1,177);// Arduino 的IP 地址,请自行修改IPAddress subnet(255,255,255,0);// 子网掩码IPAddress gateway(192,168,1,1);// 网关地址,请自行修改EthernetClientclient;// 声明以太网络客户端连接对象,命名为client

客户端对象通过connect() 方法与服务器创建连接,如下代码将在连接成功时,发送虚构的温湿度数据:

本示例程序,loop() 保留空白即可:

voidloop() { }

如果你的电脑网络环境采用动态IP 地址配置(DHCP),请将代码改成:

Node.js 程序:接收来自Arduino 的温湿度数据,并将它们显示在终端窗口中的 Node 程序如下。

varexpress = require('express');varapp = express();

app.get("/",function(req, res){res.send("arduino 信息网页");
});

app.get("/th",function(req, res){vartemp = req.query.t;// 读取查询字符串的t 值varhumid = req.query.h;// 读取查询字符串的h 值// 确认收到温度和湿度值(两者都不是undefined)if(temp !=undefined&& humid !=undefined) {
console.log(" 温度: "+ temp +",湿度: "+ humid);
res.send(" 温度: "+ temp +"° C,湿度: "+ humid +"%");
}else{
console.log(" 没收到数据! ");
}
});
app.use("*",function(req,res){res.status(404).send(' 查无此页! ');
});varserver = app.listen(5438,function(){console.log(" 网站服务器在5438 端口开工了! ");
});

程序运行结果:运行 Node 程序后,再开启 Arduino,即可在终端窗口中看到所传入的数据。

让 Arduino 定时上传 DHT11 数据

上面 Arduino 程序只会发送一次温湿度值,接下来将把它改成可定时上传数据的形式,并且引用 DHT11 传感器的库文件实际采集传感器的数据,通过 Streaming 库文件输出动态字符串。

关于这两个库文件的说明,请分别参阅《完美图解Arduino 互动设计入门》的第 9 章与第 16 章。

请在程序开头引用下列库文件并初始化dht11 传感器对象:

#include <SPI.h>#include <Ethernet.h>#include <dht11.h>#include <Streaming.h>dht11 DHT11;// 声明dht11 对象,命名为DHT11constbyte dataPin =2;// dht11 传感器的数据输出接在数字2 脚

为了方便查看实验结果,本程序设置让Arduino 每隔5 秒返回一次温湿度值,读者可在实验成功后自行修改间隔时间。本例的延时间隔不用delay() 函数,因为在 delay 期间,Arduino 将会停摆,不做任何运算,也不接收输入值。

此延迟程序采用比较时间差的方式,首先声明两个用于计时的长整型变量,interval 存放间隔时间:

发送 DHT11 传感器数据时,将目前的毫秒数存入past 变量中,后面的代码将不停地比对时间差(目前的毫秒数减去past 值),若时间差大于“间隔时间”,则再次读取 DHT11 数据。

实际的 Arduino 主程序如下:

voidsetup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);// 初始化以太网络连接// 等待1 秒钟,让以太网卡有时间进行初始化delay(1000);
Serial.println(“connecting...”);
}

发送数据给服务器的程序写成httpSend() 自定义函数,来自DHT11 传感器的动态数据以“<<”运算符合成为字符串:

将上面的程序上传到 Arduino,即可在电脑的终端窗口中看到每5 秒更新一次的温湿度值。

作者:赵英杰,网昱多媒体技术总监,美国密歇根 S.V. 州立大学传播与多媒体硕士,开源硬件技术达人。专长为 Arduino、Flash、Dreamweaver 等,在台湾大学、台湾科技大学等大专院校及教育训练单位担任讲师、并著有《超图解Arduino 互动设计入门》、《超图解物联网IoT 实作入门》、 《Dreamweaver CS6 教学范本(适用SiliconStone 认证考试教材)等多本相关书籍。 《超图解 Arduino 互动设计入门》 已授权 Arduino 原厂发行多国语言版本,为华文世界 Arduino 教材首例!

本文选自《完美图解物联网IoT实操:使用JavaScript,Node.JS,Arduino,Raspberry Pi》第 3 章。


相关 [arduino 湿度 node] 推荐:

从 Arduino 传递温湿度值给 Node 网站

- -
摘要:将 Arduino 制作成网络客户端,在电脑上创建并运行 Node 网站服务器程序,让 Arduino 定时向 Node 网站发布最新采集的温湿度数据. Arduino UNO 控制板,一片;. Arduino Ethernet 以太网模块(采用 W5100 芯片),一片;. DHT11 温湿度传感模块,一片.

新玩具:Arduino Uno

- Zheng - 大智若鱼
没生在一个好的年代,不能跟Wozniak一样拿电烙铁亲手做点什么东西. 中学的时候,一腔热情都被我喷到了集成度更高的电脑上. 到了大学,又阴差阳错地选择了文科,彻底与电子产品无缘了. 但这并不能阻止我对电子产品的热爱,比如我家还有一块万用表和烙铁(虽然用的极少),比如我对拆解电子产品有浓厚的兴趣. 前些日子看 thetwo.cc 的文章,发现两篇介绍NXT的文章.

什么是Node?

- We_Get - 博客园新闻频道
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料.   译文全文:http://jayli.github.com/whatisnode/index.html.   作者:Brett McLaughlin ,原文:What is Node?.

Node入门

- - CSDN博客编程语言推荐文章
作者:  Manuel Kiessling. 翻译:  goddyzhao &  GrayZhang &  MondayChen. 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识. 本书绝不是一本“Hello World”的教程. 你正在阅读的已经是本书的最终版.

浅析Hadoop Secondary NameNode,CheckPoint Node,Backup Node

- - CSDN博客云计算推荐文章
Hadoop SecondaryNameNode并不是Hadoop 第二个NameNode,它不提供NameNode服务,而仅仅是NameNode的一个工具. 这个工具帮助NameNode管理Metadata数据. NameNode的HDFS文件信息(即Metadata)记录在内存中,client的文件写操作直接修改内存中的Metadata,同时也会记录到硬盘的Edits文件,这是一个Log文件.

自制 Arduino NFC 实验

- Nickcheng - Engadget 中国版
Google 大神刚刚发布了非接触式钱包挑战金流,不过这种金钱游戏离市井小民总是有一段距离,况且不是每个 Android 手机都有NFC 功能. 不过自己玩玩总可以:Joe Desbonnet 用 Arduino 开发板,作了个 NFC 的小小实验:. 一台有电子罗盘的 Android 行动装置(如图中使用的 HTC desire).

[译]什么是Node?

- blacktulip - Taobao UED Team
译者按:前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料. 译文全文:http://jayli.github.com/whatisnode/index.html. 作者:Brett McLaughlin ,原文:What is Node?.

用node作桌面开发

- InterMa - CNode社区
node的定位是,server-side javascript. 但程序员最爱做的事,就是把一个东西用在不该用的地方. 那么,可以把node用在桌面开发上吗. 把Javascript用在桌面开发上,早有先例,比如GTK+的gjs,还有Qt的QML(顺带一提,QML代表着桌面开发的另一个方向,a promising way),GNOME3中,也用javascript作为桌面插件的开发语言.

node js 断点调试

- - Web前端 - ITeye博客
大部分基于 Node.js 的应用都是运行在浏览器中的,. 例如强大的调试工具 node-inspector. node-inspector 是一个完全基于 Node.js 的开源在线调试工具,提供了强大的调试功能和友好. 的用户界面,它的使用方法十分简便. 首先,使用 npm install -g node-inspector 命令安装 node-inspector,然后在终.