阿里云物联网平台体验(树莓派+Nodejs篇)
我们在《阿里云物联网平台体验(树莓派+python篇)》里,写了通过Python语言开发云到端的物联网程序,本篇文章将介绍通过nodejs来实现类似功能。
同样在阿里云官方文档里已经有了一个Nodejs设备接入说明:https://www.yuque.com/cloud-dev/iot-tech/gvttbm
文中的代码也是把模拟的温湿度数据上传到物联网云平台的,我们依然对这个代码进行扩展,实现接入实际的温湿度传感器,把数据上传到云端,同时云端下发控制指令,控制LED的开和闭。
相关硬件平台的搭建由于在python篇里已有描述,我们这里就不在赘言了。
目前用nodejs直接操作GPIO,根据网上的资源,有两种常见方式,一种是采用是操作rpio库(目前最新版本是rpio2 0.4.1),一种是quick2wire-gpio-admin。(其他更好的方案,也希望网友推荐)。根据使用习惯,我这次选用的是rpio2。
需要注意的是,rpio2里面的pin和python操作的有些不一样,它指定的pin是物理排针的pin脚位置。比如我们的LED模块控制脚接入的是GPIO4,在python中我们定义pin=4,在rpio2中,我们需要定义pin=7了。

使用rpio2库之前需要安装一下,输入如下命令:
npm install rpio2 –production
操作GPIO的代码也比较简单,如下面的示例代码:
const Gpio = require('/home/pi/node_modules/rpio2/lib/index.js').Gpio;
var led = new Gpio(7); //创建 Pin7 引脚
led.open(Gpio.OUTPUT, Gpio.LOW); //设置为 OUTPUT、默认低电平
for(var i = 0; i < 20; i++){
led.toggle(); //切换 led 的电平状态
led.sleep(300); //等待 500ms
}
led.close();
获取DHT11的值相对麻烦一些,参考国外一篇文章:https://www.instructables.com/id/Raspberry-Pi-Nodejs-Blynk-App-DHT11DHT22AM2302/
安装bcm2835-1.46没有出现什么问题,不过安装node-dht-sensor,如果直接输入 sudo npm install -g node-dht-sensor 命令进行安装会出现如下错误:

我们必须要这样执行命令才行:
1、 先运行:sudo chmod -R 777 /var/root
2、 后运行:sudo npm install -g --unsafe-perm node-dht-sensor则可以正确安装,如下图所示:

获取温湿度的代码比较简单,如下:
var sensorLib = require('node-dht-sensor');
// Setup sensor, exit if failed
var sensorType = 11; // 11 for DHT11, 22 for DHT22 and AM2302
var sensorPin = 16; // The GPIO pin number for sensor signal
if (!sensorLib.initialize(sensorType, sensorPin)) {
console.warn('Failed to initialize sensor');
process.exit(1);
}
// Automatically update sensor value every 2 seconds
setInterval(function() {
var readout = sensorLib.read();
console.log('Temperature:', readout.temperature.toFixed(1) + 'C');
console.log('Humidity: ', readout.humidity.toFixed(1) + '%');
}, 2000);
执行sudo NODE_PATH=/usr/local/lib/node_modules node ./nodejs_dht11.js 命令,则运行结果如下:

有了以上的操作,那么我们把上面的代码糅合进阿里云官方的示例,实现阿里云的双向通信。
增加message函数,获取云端发送的数据:
client.on('message', function(topic, message) {
var json = JSON.parse(message.toString());
console.log("LED="+ json.params.LED.toString());
led.write( json.params.LED);
});
getPostData函数需要改造一下,把温湿度函数增加进去:
function getPostData(){
var readout = sensorLib.read();
const payloadJson = {
id: Date.now(),
params: {
temperature: readout.temperature.toFixed(1),
humidity: readout.humidity.toFixed(1)
},
method: "thing.event.property.post"
}
阿里云物联网平台上我们所创建的设备保持不变(参见Python篇),我们去对接云端的这个设备。
执行代码需要前面加 sudo,否则会出错。执行结果如下:

本文相关的代码文件:nodejs_dht11_led.js
阿里云物联网平台链接:https://dev.iot.aliyun.com/sale?source=deveco_partner_yefan
阿里云物联网平台体验(树莓派+Nodejs篇)的更多相关文章
- 阿里云物联网平台体验(树莓派+Python篇)
阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...
- 阿里云物联网平台体验(NetGadgeteer+C#篇)
目前对接阿里云物联网平台有多种软件和硬件,可以有多种不同语言来实现对接,比如c/c++,Java,JS,Python,C#等等,不过C#版本只有PC对接云平台的代码,嵌入式的目前还没有看到,所以本篇文 ...
- 阿里云物联网平台: Android 连接阿里云物联网平台
说明 这节是是为下一节做铺垫的 只要是按照我提供的学习路线一节一节的认认真真学过来的,这节就十分的简单 有了前两节的基础,这节呢咱让Android 连接阿里云物联网平台 使用这节的代码 https: ...
- ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程
前言 鉴于有些用户直接想使用现成的物联网平台实现 OTA 远程升级 我就写一写这系列的文章 注意:首先大家必须把我自建服务器是如何实现的看明白! 我看了下阿里云提供的,实际上流程和咱自建实现的差别不大 ...
- 图解连接阿里云(一)创建阿里云物联网平台产品和设备,使用MQTT.fx快速体验
1. 打开 https://www.aliyun.com/ 注册账号 2.注册账号登录后点击控制台 3. 在下图1处输入物联网平台,会弹出2处所示物联网平台的入口,点击红色箭头所示处,进入物联网平 ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试MQTT连接阿里云物联网平台
前言 这节看一下在阿里云上实现MQTT通信是个怎样的流程 看了很多网上的教程,感觉讲的迷迷糊糊.... 其实感觉他们是对MQTT不够透彻,所以写的文章就是个比着葫芦画瓢的感觉 在我面前这东西就是玩具. ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 云平台显示单片机采集的温湿度数据,控制设备继电器(基于GPRS模块,AT指令TCP_MQTT通信)
实现的功能 上一节是使用的Wi-Fi模块连接的阿里云平台,这节呢咱用GPRS连接. 阿里云的设备配置还是按照上一节的,有个温度,有个湿度. 测试 一,打开单片机程序 二,根据自己的修改,然后下载进去单 ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试云平台显示MQTT客户端发过来的消息
现在这里空空如也 咱自定义的也没有数据 现在就是传上来温度数据,让这里显示温度数据 你发布的主题 /sys/a1m7er1nJbQ/Mqtt/thing/event/property/post 发布 ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试MQTT客户端接收云平台的数据
前言 有时候想想可能直接连接现成的感觉比较方便吧! 这种东西考验的是你底子是否够好,是否有很强的学习能力 因为咱就是看文档,理解文档.用文档. 测这节会感觉:这是啥呀...下一节更精彩,但是必须看这节 ...
随机推荐
- 进程用manager 和Queue 实现进程消费者生产者
注意 : mgr = multiprocessing.Manager() 生成了一个守护进程,如果主进程完毕,mgr这个实例也没有了,所以在结尾加了mgr.join()才能运行 代码: import ...
- 004.Ansible Ad-Hoc命令集
一 Ad-Hoc使用场景 Ad-Hoc更倾向于解决简单.临时性任务. 1.1 Ad-Hoc基础命令 基本语法: 1 ansible <host-pattern> [options] < ...
- maven仓库设置
Maven 中央仓库地址: 1.http://www.sonatype.org/nexus/ 私服nexus工具使用 2.http://mvnrepository.com/ 3.http://repo ...
- 虚拟机中操作系统的克隆方法及ip修改及硬件地址修改
1.把复制的操作系统关机 2.点击右键->管理->克隆->下一步->虚拟机当前状态->创建完整虚拟机->修改虚拟机名称 位置 3.修改主机名 4.修改主机名与ip ...
- 2018-6-25-随笔-MVC
向IIS中注册.net框架版本:安装的IIS因为是先安装了VS所以它里面的应用程序池的.net框架还是系统自带的框架,Win7是2.0,需要将VS的.net框架版本注册 注册方法:在开始菜单找到VS2 ...
- Kotlin基础(一)Kotlin快速入门
Kotlin快速入门 一.函数 /* * 1.函数可以定义在文件最外层,不需要把它放在类中 * 2.可以省略结尾分号 * */ fun main(args: Array<String>) ...
- BZOJ4912 : [Sdoi2017]天才黑客
建立新图,原图中每条边在新图中是点,点权为$w_i$,边权为两个字符串的LCP. 对字典树进行DFS,将每个点周围一圈边对应的字符串按DFS序从小到大排序. 根据后缀数组利用height数组求LCP的 ...
- redis(四)
hash hash用于存储对象,对象的格式为键值对 命令 设置 设置单个属性 HSET key field value 设置多个属性 HMSET key field value [field valu ...
- Java面试题集锦
1. String.StringBuffer和StringBuilder的区别. (1) String:存储数值不可改变的字符串 (2) StringBuffer:可变字符序列.线程安全.效率低 ...
- MySQL解压版的安装与配置
1.解压mysql-5.7.15-winx64.zip到D:\MySQL Server 5.7(你想安装的位置) 2.如果机器上安装过其他版本的mysql先删除环境变量PATH中的mysql路径,然后 ...