20160512_jeffrey - silenceuncrio/diary GitHub Wiki
- 0930 - LinkIt 7688 Duo 溫度 sensor
- 1145 - Grove Light Sensor
- 1345 - node.js
- 1450 - node.js udp
- 1520 - LinkIt 7688 node.js
- 1540 - udp client json
- 1820 - AWS IoT Getting started tutorial with node.js
來搞定 LinkIt 7688 Duo 上的 溫度 sensor
終於搞定了... shit...
要搭配 https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTlib 這個 library 使用
一下子就搞定了
因為只是去讀某個類比的輸入罷了
所以目前我已經有三種 sensor 的數據了
- 溫度
- 濕度
- 光度
想辦法讓 LinkIt 透過 UART 來讀這些 sensor 的值吧
node.js 真的是讓人驚訝不已
linkit_dht11.ino
#include <dht.h>
dht DHT;
#define DHT11_PIN A0
void setup() {
Serial1.begin(9600);
Serial1.println("DHT TEST PROGRAM ");
Serial1.print("LIBRARY VERSION: ");
Serial1.println(DHT_LIB_VERSION);
Serial1.println();
Serial1.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}
void loop() {
// READ DATA
Serial1.print("DHT11, \t");
int chk = DHT.read11(DHT11_PIN);
switch (chk) {
case DHTLIB_OK:
Serial1.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial1.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial1.print("Time out error,\t");
break;
case DHTLIB_ERROR_CONNECT:
Serial1.print("Connect error,\t");
break;
case DHTLIB_ERROR_ACK_L:
Serial1.print("Ack Low error,\t");
break;
case DHTLIB_ERROR_ACK_H:
Serial1.print("Ack High error,\t");
break;
default:
Serial1.print("Unknown error,\t");
break;
}
// DISPLAY DATA
Serial1.print(DHT.humidity, 1);
Serial1.print(",\t");
Serial1.println(DHT.temperature, 1);
delay(2000);
}
app.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send(xxx);
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
var xxx;
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var serialPort = new SerialPort("/dev/ttyS0", {
baudrate: 9600,
parser: serialport.parsers.readline("\n")
});
serialPort.on("open", function () {
console.log('open');
serialPort.on('data', function(data) {
console.log(data);
xxx = data;
});
});
才一下下就湊好了我的需求
而且 code 還很簡單易懂
雖然寫得有點隨便
但很快的就可以把某一台 LinkIt 7688 Duo 當作一個遠端的 sensor 服務器
玩一下 node.js 上的 udp
udp_server.js
var PORT = 33333;
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
});
server.bind(PORT);
udp_client.js
var dgram = require("dgram");
var broadcastAddress = "192.168.0.255";
var message = new Buffer("Some bytes");
var client = dgram.createSocket("udp4");
client.bind();
client.on("listening", function () {
client.setBroadcast(true);
client.send(message, 0, message.length, 33333, broadcastAddress, function(err, bytes) {
client.close();
});
});
udp client 端固定時間就利用某個 udp port 來廣播說自己會做啥
udp_client.js
var dgram = require("dgram");
var broadcastAddress = "192.168.0.255";
var message = new Buffer("Some bytes");
var client = dgram.createSocket("udp4");
client.bind();
client.on("listening", function () {
client.setBroadcast(true);
setInterval(function () {
console.log('5 second passed');
client.send(message, 0, message.length, 33333, broadcastAddress);
}, 5000);
});
感覺 node.js 在 IoT 這一塊真的很有潛力...
不過門檻真的被拉低許多
透過 node.js 今天就搞定的點有
- uart read
- web server
- udp server
- udp client
- timer
這要換成 C 語言在 LinkIt 上我看我可能要花一個禮拜
早幾年我不是一直想要在嵌入式平台上搞 node.js 嗎
就是現在了
LinkIt 7688 上跑的 node.js 版本為
2015-07-09, Version 0.12.7 (Stable)
算很新的版本
讓 udp client 直接丟一個 json 格式的字串過來
udp_server.js
var PORT = 33333;
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
var parseObj = JSON.parse(message);
console.log(parseObj);
});
server.bind(PORT);
udp_client.js
var dgram = require("dgram");
var broadcastAddress = "192.168.0.255";
var me = {
name: "iot_box",
sensor: ["temp", "humidy", "light"]
};
console.log(me);
var message = new Buffer(JSON.stringify(me));
var client = dgram.createSocket("udp4");
client.bind();
client.on("listening", function () {
client.setBroadcast(true);
setInterval(function () {
console.log('5 second passed');
client.send(message, 0, message.length, 33333, broadcastAddress);
}, 5000);
});
node.js 變成甜點專賣店了
一下子就把我想做的事情變成 蛋糕一片
看來先不用 database 了
sensor 的資料量那麼少
定好一個資料格式就好了
明天來玩一下這個