20160512_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 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

0930

來搞定 LinkIt 7688 Duo 上的 溫度 sensor

1125

終於搞定了... shit...

要搭配 https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTlib 這個 library 使用

1145

Grove - Light Sensor

一下子就搞定了
因為只是去讀某個類比的輸入罷了

所以目前我已經有三種 sensor 的數據了

  • 溫度
  • 濕度
  • 光度

想辦法讓 LinkIt 透過 UART 來讀這些 sensor 的值吧

1345

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 服務器

1450

玩一下 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();
    });
});

1500

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 嗎

就是現在了

1520

LinkIt 7688 上跑的 node.js 版本為
2015-07-09, Version 0.12.7 (Stable)

算很新的版本

1540

讓 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 的資料量那麼少
定好一個資料格式就好了

1820

明天來玩一下這個

AWS IoT - Getting started tutorial with node.js

⚠️ **GitHub.com Fallback** ⚠️