您的位置:创新中国网 > 观点

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

发布时间:2017年09月13日 12:55 来源:geceo.com 编辑:创新中国   阅读量:5837   
导读:摘要:将Arduino制作成网络客户端,在电脑上创建并运行Node网站服务器程序,让Arduino定时向Node网站发布最新采集的温湿度数据。实验材料:ArduinoUNO控制板,一片;ArduinoEthernet以太网模块(采用W510...

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

实验材料:

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

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

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

#include lt;SPI.hgt;#include lt;Ethernet.hgt;// 以太网卡的实体地址bytemac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED; IPAddress server( 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); // 网关地址,请自行修改EthernetClient client; // 声明以太网络客户端连接对象,命名为client

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

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

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

voidloop()

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

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

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 != undefinedamp;amp; 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传递温湿度值给Node网站

让 Arduino 定时上传 DHT11 数据

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

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

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

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

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

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

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

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

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

实际的 Arduino 主程序如下:

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

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

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

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

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

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

郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。

专题报道