陳拓 [email protected] 2019/12/14-2020/01/02
1. 阿里雲物聯網平臺設置
2. 在樹莓派上安裝Node.js LTS工具包
3. 阿里雲物聯網平臺Node.js SDK
4. 發送溫度數據到阿里雲
5. node.js讀DS18B20數據發送到阿里雲
上面的內容見《樹莓派連接阿里雲物聯網平臺-屬性(nodejs)》https://blog.csdn.net/chentuo2000/article/details/103705694
6. 阿里雲控制LED
上面的內容見《樹莓派連接阿里雲物聯網平臺-服務(nodejs)》https://blog.csdn.net/chentuo2000/article/details/103754860
7. 訂閱Topic
上面的內容見《樹莓派連接阿里雲物聯網平臺-訂閱(nodejs)》https://blog.csdn.net/chentuo2000/article/details/103769449
8. 上報事件
先看參考文檔《阿里雲物聯網平臺基本設置》。
- 查看我們的產品事件功能定義
事件的標識符:TemperatureSensorExceptional
查看輸出參數:
輸出參數標識符:TemperatureExceptional
- 修改index.js代碼
pi@raspberrypi:~/PiAliNode/alibabacloud-iot-device-sdk/examples/quickstart $ nano index.js
在setInterval函數中添加事件上報代碼:
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);
});
if (temp > 30) {
device.postEvent("TemperatureSensorExceptional", {
TemperatureExceptional: temp,
}, (res) => {
console.log(`postEvent:${res}`);
});
}
}, 30000);
- 運行node index
- 雲端查看
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', 'utf8');
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);
});
if (temp > 30) {
device.postEvent("TemperatureSensorExceptional", {
TemperatureExceptional: temp,
}, (res) => {
console.log(`postEvent:${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);
});
參考文檔:
- 阿里雲物聯網平臺基本設置
https://blog.csdn.net/chentuo2000/article/details/103559553 - 微信小程序MQTT模擬器 阿里雲物聯網平臺測試
https://blog.csdn.net/chentuo2000/article/details/102216865 - 自己寫微信小程序MQTT模擬器
https://blog.csdn.net/chentuo2000/article/details/102507560 - 樹莓派 Zero W+溫度傳感器DS18B20
https://blog.csdn.net/chentuo2000/article/details/81051701 - 樹莓派GPIO控制
https://blog.csdn.net/chentuo2000/article/details/81051645 - 樹莓派連接阿里雲物聯網平臺-屬性(nodejs)
https://blog.csdn.net/chentuo2000/article/details/103705694 - 樹莓派連接阿里雲物聯網平臺-服務(nodejs)
https://blog.csdn.net/chentuo2000/article/details/103754860 - 樹莓派連接阿里雲物聯網平臺-訂閱(nodejs)
https://blog.csdn.net/chentuo2000/article/details/103769449 - alibabacloud IoT Device SDK for Javascript
https://github.com/aliyun/alibabacloud-iot-device-sdk