Showing posts with label nodejs. Show all posts
Showing posts with label nodejs. Show all posts

Friday, 12 October 2012

[NodeJS] Write bytes to a file

Description
The idea is to get a buffer of bytes from a socket or a file, and then convert them into a file, you can thinking about to transfer an image through a socket, that is my case.

Buffer library
NodeJS has a library buffer that takes care to convert decimal to hex, and then you can use it to write into a file. In my case, I have to convert decimal to hex but you can even populate the buffer with only hex values.

This is a piece of code to write into a file:

var Buffer = require('buffer').Buffer;
var fs = require('fs');


var myBuffer= new Buffer(3);
myBuffer[0] = 71;
myBuffer[1] = 73;
myBuffer[2] = 70;

console.log(test);


fs.writeFile("test.txt", test, function(err) {
    if(err) {
        console.log(err);
    } else {
        console.log("The file was saved!");
    }
});

Your output should be something like that:

<Buffer 47 49 46>

means that your values has been converted into bytes, from decimal to hex, you can check it with a Calculator.
Also you should get the message "The file was saved!" and then if you check what there is inside, you have to read "GIF".

That is all you need to convert your buffer of bytes into a file, image, text, etc...

Wednesday, 12 September 2012

Arduino: Establish a socket between 3G and NodeJS

Introduction
This article is about the modem GPRS with Arduino and NodeJS, everything connected with a socket.
I am going to show how can you create your little client on Arduino that is connected with a NodeJS server.

Create Arduino client
Arduino has a great GPRS Shield that is a little bit expensive but I found it very powerful, although a few months ago Cooking Hacks has released an awesome GPRS Shield with a Camera, SD, etc..

The shield communicate via Serial port and you have to use AT Commands to setup a internet connection, no worries I have done all the hardest job for you and these are commands:

//Basic setup
AT+CFUN=1
AT+CMGF=1
AT+CREG=1
AT+COPS=0
//Remove comment if you have SIM CARD Pin
//AT+CPIN=xxxx

//Setup APN T-mobile UK
AT+CGDCONT=1,"IP","general.t-mobile.uk"
AT+CGACT=1,1

//Get GPRS status, when is 1 means you have internet connection
AT+CGATT?

//Connect to your server on the port 66
AT+SDATACONF=1,"TCP","IP",66
//Start connection
AT+SDATASTART=1,1

//Read message from socket
AT+SDATATREAD=1

//Send message to socket
AT+SSTRSEND=1,"test"

I have made a simple script that is not stable 100% but you can try it and connect to your server.

Download script

Please note that after you have started the socket, the modem is taking a few seconds to establish a connection.

Create NodeJS server
The server is a simple script that is receiving only information through a socket, you can also send information but that is up to you.
My example is only to check that everything is working and you can make a communication even if you don't have a Ethernet cable or a wifi connection.


var net = require('net');
var netServer = net.createServer(function (stream) {
        stream.setTimeout(0);
        stream.setEncoding("utf8");
        //Arduino is connected
 stream.addListener("connect", function () {
  console.log("Arduino connected");
        });
 //Arduino has sent an information
        stream.addListener("data", function (data) {
  console.log("Get data: "+data);         
 });
 //Arduino has terminated connection
        stream.addListener("end", function() {
  console.log("Arduino disconnected");
                stream.end();
        });
});
netServer.listen(66);

Result
  1. Upload and run the client
  2. Wait from the green signal by serial port
  3. Check on your server that Arduino is connected and sending messages