树莓派连接阿里云物联网平台-订阅(nodejs)

本文介绍如何使用树莓派连接阿里云物联网平台,并通过Node.js SDK实现数据订阅功能。主要内容包括配置阿里云物联网平台、安装Node.js LTS、编写代码以订阅特定主题的消息并展示消息内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

陈拓 chentuo@ms.xab.ac.cn 2019/12/14-2020/01/05

1. 阿里云物联网平台设置
2. 在树莓派上安装Node.js LTS工具包
3. 阿里云物联网平台Node.js SDK
4. 发送温度数据到阿里云
5. node.js读DS18B20数据发送到阿里云

上面的内容见《树莓派连接阿里云物联网平台-属性(nodejs)》树莓派连接阿里云物联网平台-属性(nodejs)_树莓派与阿里云显示未激活-优快云博客

6. 阿里云控制LED

上面的内容见《树莓派连接阿里云物联网平台-服务(nodejs)》树莓派连接阿里云物联网平台-服务(nodejs)_nodejs mqtt连接阿里云物联网平台-优快云博客

7. 订阅Topic

7.1 自定义Topic

查看设备的Topic列表:

  • 自定义Topic类

创建产品之后,系统自动创建三个默认的3个自定义Topic类。

1) /${YourProductKey}/${YourDeviceName}/update:用于设备上报数据。设备操作权限:发布。

2) /${YourProductKey}/${YourDeviceName}/update/error:用于设备上报错误。设备操作权限:发布。

3) /${YourProductKey}/${YourDeviceName}/get:用于设备获取云端数据。设备操作权限:订阅。

发布表示设备可以往该Topic发布消息;订阅表示设备可以订阅该Topic获取消息。

7.2 修改index.js订阅指定topic消息

pi@raspberrypi:~/PiAliNode/alibabacloud-iot-device-sdk/examples/quickstart $ nano index.js

参考代码:

alibabacloud-iot-device-sdk/examples/origin.js at master · aliyun/alibabacloud-iot-device-sdk · GitHub

  • 订阅默认自定义Topic

device.subscribe('/<productKey>/<deviceName>/user/get');

对于我们的设备就是添加:

device.subscribe('/a14U7TTbz9q/BedroomTemp/user/get');

到下面的位置:

device.on('connect', () => {

  console.log('Connect successfully!');

  console.log('Post properties every 30 seconds...');

  device.subscribe('/a14U7TTbz9q/BedroomTemp/user/get');

  setInterval(() => {

  ……

  • 接收到数据时将topic以及消息打印出来

device.on('message', (topic, payload) => {

  console.log('topic:',topic);

  if(payload){

    console.log('payload',payload.toString());

  }

});

  • 运行node index.js

7.3 云端控制台操作

去控制台,设备详情页面的Topic列表,找到对应的topic:/a14U7TTbz9q/BedroomTemp/user/get,输入消息内容,点击“发布消息”。

查看日志:

最后这个:

7.4 查看结果

看最后两行。

7.5 查看上下行消息

  • 加上下面的代码后还可以看到上下行消息

device.on('message', (topic, payload) => {

  console.log('topic:',topic);

  if(payload){

    console.log('payload',payload.toString());

  }

});

  • 运行index.js

  • 上行消息

Topic:/sys/a14U7TTbz9q/BedroomTemp/thing/event/property/post

上报温度属性值。

  • 上行消息对应云端

        ■ 运行状态

        ■ 上行消息日志

        ■ 日志详情

  • 下行消息

Topic:/sys/a14U7TTbz9q/BedroomTemp/thing/event/property/post_reply

上报属性状态反馈。

  • 下行消息对应云端

        ■ 行消息日志

        ■ 日志详情

7.6 取消消息订阅

一旦订阅了某个消息,即使设备离线任然可以在云端发布所订阅的Topic消息,只是状态不是正常情况下的200,而是错误码:9201,意思是设备离线。

查看日志:

如果不再订阅某个消息,需要取消消息订阅:

device.unsubscribe('/<productKey>/<deviceName>/user/get')

对于我们的设备,可以将下面的代码写在适当的位置。

device.unsubscribe('/a14U7TTbz9q/BedroomTemp/user/get')

Index.js完整代码

const Gpio = require('/home/pi/node_modules/onoff').Gpio;

const led = new Gpio(17, 'out');

const fs = require('fs');

const iot = require('alibabacloud-iot-device-sdk');

const deviceConfig = require('./device_id_password.json');

const device = iot.device(deviceConfig);

device.on('connect', () => {

  console.log('Connect successfully!');

  console.log('Post properties every 30 seconds...');

device.subscribe('/a14U7TTbz9q/BedroomTemp/user/get');

  setInterval(() => {

    var data = fs.readFileSync('/sys/bus/w1/devices/28-000004d627c6/w1_slave', $

    var i = data.indexOf('t=');

    var temp = data.substring(i+2, data.length)/1000;

    const params = {

      RoomTemp: temp

    };

    console.log(`Post properties: ${JSON.stringify(params)}`);

    device.postProps(

      params,

       (res) => {

      console.log(`postProps:`,res);

    });

  }, 30000);

  device.onService('property/set', (data) => {

    console.log('Received a message: ', JSON.stringify(data));

  });

});

device.onService('switch', function (res,reply) {

  console.log('^onService',res);

  paramsStr = JSON.stringify(res.params)

  var stateInfo

  if (paramsStr.indexOf('on') > 0) {

    led.writeSync(1)

    stateInfo = {state:'led on'}

  } else {

    led.writeSync(0)

    stateInfo = {state:'led off'}

  }

  reply({

    "code": 200,

    "data": stateInfo

  });

});

device.on('message', (topic, payload) => {

  console.log('topic:',topic);

  if(payload){

    console.log('payload',payload.toString());

  }

});

device.on('error', err => {

  console.error('err: ', err);

});

后面的内容见《树莓派连接阿里云物联网平台-事件(nodejs)》

树莓派连接阿里云物联网平台-事件(nodejs)_changetemp:function(temperature){ device.on('messa-优快云博客

参考文档:

  1. 阿里云物联网平台基本设置
    阿里云物联网平台基本设置-物模型_阿里云如何在物模型中设置触发条件?-优快云博客
  2. 微信小程序MQTT模拟器 阿里云物联网平台测试
    https://blog.youkuaiyun.com/chentuo2000/article/details/102216865
  3. 自己写微信小程序MQTT模拟器
    自己写微信小程序MQTT模拟器_小程序 多页面 mqtt-优快云博客
  4. 树莓派 Zero W+温度传感器DS18B20
    树莓派+温度传感器DS18B20_设备树dtb中 温度传感器-优快云博客
  5. 树莓派GPIO控制
    树莓派GPIO控制_树莓pi gpio-优快云博客
  6. 树莓派连接阿里云物联网平台-属性(nodejs)
    树莓派连接阿里云物联网平台-属性(nodejs)_树莓派与阿里云显示未激活-优快云博客
  7. 树莓派连接阿里云物联网平台-服务(nodejs)
    树莓派连接阿里云物联网平台-服务(nodejs)_nodejs mqtt连接阿里云物联网平台-优快云博客
<think>嗯,用户想了解如何将树莓派连接阿里云物联网平台,需要教程和示例代码。首先,我需要根据提供的引用内容来整理步骤。引用里提到了Python和Node.js两种方法,还有配置阿里云平台的部分。 首先,用户可能需要注册阿里云账号和创建产品设备,这部分引用[1]和[2]都有提到。然后,安装必要的环境,比如Python SDK或者Node.js。引用[1]用的是Python模拟数据上传,引用[2]是Node.js的属性连接,所以应该分成两种方法介绍。 接下来是配置树莓派,比如安装依赖库,引用[4]提到了Raspbian固件的安装步骤,但用户可能已经安装了系统,所以重点放在SDK和代码上。Python需要安装aliyun-iot-linkkit,Node.js需要安装相关包,引用[2]提到安装Node.js LTS工具包。 然后,示例代码部分,需要确保代码格式正确,并且符合用户的要求。引用[1]中的Python代码模拟温湿度数据,引用[2]中的Node.js代码处理属性上报。同时,引用[3]提到了MQTT连接状态和日志查看,这部分在注意事项里需要提醒用户检查连接状态和查看日志。 用户可能遇到的问题包括配置错误、连接失败,所以需要强调三元组信息和区域设置是否正确。此外,引用[3]提到云端日志的位置,用户可能需要指导如何查看。 还要考虑用户是否有传感器,引用[1]提到下一章会搭载传感器,但目前是模拟数据,所以代码里需要说明模拟部分,方便用户测试。 最后,生成相关问题,比如数据加密、批量管理、降低延迟等,这些是基于现有步骤的扩展,帮助用户深入了解更多应用场景。</think>### 树莓派连接阿里云物联网平台教程 #### 一、准备工作 1. **注册阿里云账号并开通物联网平台** 登录[阿里云官网](https://www.aliyun.com/),进入物联网平台控制台,创建产品(如"Test")和设备,获取设备三元组(`ProductKey`、`DeviceName`、`DeviceSecret`)[^1][^2]。 2. **树莓派环境配置** - 确保树莓派已安装Raspbian系统(参考[安装指南](https://www.yuque.com/cloud-dev/iot-tech/ig269q))[^4] - 更新系统:`sudo apt update && sudo apt upgrade` --- #### 二、Python实现(模拟数据上传) 1. **安装依赖库** ```bash pip3 install aliyun-iot-linkkit ``` 2. **Python示例代码** ```python from linkkit import linkkit # 设备三元组 product_key = "your_product_key" device_name = "your_device_name" device_secret = "your_device_secret" # 初始化连接 lk = linkkit.LinkKit( host_name="cn-shanghai", # 根据实际区域修改 product_key=product_key, device_name=device_name, device_secret=device_secret) # 连接回调函数 def on_connect(session_flag, rc, userdata): print("连接成功" if rc == 0 else f"连接失败,错误码:{rc}") lk.on_connect = on_connect lk.connect_async() # 模拟温湿度数据上传 while True: import random temperature = random.randint(20, 30) humidity = random.randint(40, 60) payload = {"Temperature": temperature, "Humidity": humidity} lk.publish_topic(f"/sys/{product_key}/{device_name}/thing/event/property/post", str(payload)) time.sleep(10) ``` --- #### 三、Node.js实现(属性上报) 1. **安装Node.js环境** ```bash curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejs ``` 2. **Node.js示例代码** ```javascript const iot = require('alibabacloud-iot-device-sdk'); const device = iot.device({ productKey: 'your_product_key', deviceName: 'your_device_name', deviceSecret: 'your_device_secret', regionId: 'cn-shanghai' // 根据实际区域修改 }); device.on('connect', () => { console.log('连接阿里云成功'); setInterval(() => { const temperature = Math.floor(Math.random() * 10 + 25); device.postProps({ Temperature: temperature }); }, 5000); }); ``` --- #### 四、验证调试 1. **查看连接状态** 在树莓派运行代码后,物联网平台控制台的设备状态应显示"在线"[^3]。 2. **查看数据接收** 进入控制台 **监控运维 > 日志服务**,选择对应产品即可查看设备上报的数据。 --- #### 注意事项 - 确保三元组信息完全正确(区分大小写) - 区域ID需创建产品时选择的区域一致(如`cn-shanghai`) - 若使用物理传感器,需先安装驱动(如DHT11温湿度传感器)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨之清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值