阿里云物联网平台体验(树莓派+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客户端接收云平台的数据
前言 有时候想想可能直接连接现成的感觉比较方便吧! 这种东西考验的是你底子是否够好,是否有很强的学习能力 因为咱就是看文档,理解文档.用文档. 测这节会感觉:这是啥呀...下一节更精彩,但是必须看这节 ...
随机推荐
- 000 Security的计划
可重用的,企业级的,认证和授权模块 1.主要涉及的模块 2.最终的目标 3.开发的项目模块结构
- LoadRunner录制协议的选择
1.选择协议(提高测试结果的准确性) New Single Protocol Script:单协议脚本,选择一种主协议进行测试 New Multiple Protocol Script:多协议脚本,选 ...
- 犹记当年写出bug睡不着,回想今天只求睡好渡余生……
不想面对已经在博客园注册了3年多的时间 了,就是这么快的就已经过去了近3年的工作时间,从最开始的对编程的困惑到慢慢有一点的认识,好像哦就这样没有什么啊,也没有涉及到一些比较难的东西. 但是当初第一份工 ...
- Harmonic Number(调和级数+欧拉常数)
In mathematics, the nth harmonic number is the sum of the reciprocals of the first n natural numbers ...
- unity3d俄罗斯方块源码教程+源码和程序下载
小时候,大家都应玩过或听说过<俄罗斯方块>,它是红白机,掌机等一些电子设备中最常见的一款游戏.而随着时代的发展,信息的进步,游戏画面从简单的黑白方块到彩色方块,游戏的玩法机制从最简单的消方 ...
- AngularJS之拖拽排序(ngDraggable.js)
ngDraggable.js是一款比较简单实用的angularJS拖拽插件,借助于封装好的一些自定义指令,能够快速的进行一些拖拽应用开发.首先先介绍一些基本的概念; ng-drop:是否允许放入拖拽元 ...
- ES6+javaScript原型
Symbol 属性私有化,数据保护 let _gender = Symbol('gender') function Person(name, gender) { this.name = name; t ...
- 机器学习模型从windows下 spring上传到预发布会导致模型不可加载
1.通过上传到redis,程序通过redis拉取模型,解决问题. 2.问题原因初步思考为windows下模型文件上传到 linux导致,待继续跟进查找.
- SpringBoot扫描不到controller
访问报错: 原因:启动类文件存放位置问题,应该放在controller包同级目录下,如下图: ---不积跬步无以至千里,不积小流无以成江海
- Shell脚本笔记(五)Shell函数
Shell函数 1.定义语法 标准写法: funciton funName () { order....... return n } 简化写法1: funciton funName { order.. ...