Showing posts with label socket. Show all posts
Showing posts with label socket. Show all posts

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