In my previous post I have discussed myproject proposal....
I have selected WiFi with UDP protocol for communication, and selected CC3200 for main processing and commnication Part at sensor node...
So meanwhile parts for this challenge arrive... I have started to work with what I have now (CC3200 Launchpad)..
In this Post I am sharing my work for communicate CC3200 with PC/ Android cell phone using UDP.
I am using Energia IDE for CC3200 application development.
and I am using Processing for developing PC / Andoid app for remot monitoring station...
I have used these opensource platform by keeping in mind that all the codes are in opensource for future use.
Here is code for CC3200 for UDP sensor node... I am using BMA222 Accelerometer library for this demo. Which is available here https://github.com/energia/Energia/tree/master/hardware/cc3200/libraries/BMA222 ..
/*============================================================================
Sudden Impact Wearable Design Challenge
Real Time Player monitoring System
Energia Sketch (Running on CC3200 Launchpad)
Test Code for WiFi UDP connection between
Sensor node(CC3200 LaunchPad)and monitoring Station(Android cell phone / PC)
UDP Sender/Receiver Application used for Android cell phone
Processing application for use with PC (Linux/MacOS/Windows)
BMA222 Library used for CC3200 Launchpad on board Accelerometer interface
created 13 December 2014
by Ravi Butani
e-mail: ravi_butani@yahoo.com
Attribute : Noah Luskey for his UDP library
Code Released under CC-SA 2014 license
===========================================================================*/
#ifndef __CC3200R1M1RGC__
// Do not include SPI for CC3200 LaunchPad
#include <SPI.h>
#endif
#include <WiFi.h>
#include <Wire.h>
#include <BMA222.h>
BMA222 mySensor;
// your network name also called SSID
char ssid[] = "ravi1";
// your network password
char password[] = "11223344";
unsigned int localPort = 2390; // local port to listen on
char packetBuffer[255]; //buffer to hold incoming packet
char ReplyBuffer[5]; // a string to send back
String str;
WiFiUDP Udp;
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(115200);
// attempt to connect to Wifi network:
Serial.println("====Sudden Impact Wearable Design Challenge====");
Serial.println("=======Real Time Player Monitoring System======");
Serial.println("Attempting to connect to Network named: ");
// print the network name (SSID);
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED) {
// print dots while we wait to connect
Serial.print(".");
delay(300);
}
Serial.println("\nYou're connected to the network");
Serial.println("Waiting for an ip address");
while (WiFi.localIP() == INADDR_NONE) {
// print dots while we wait for an ip addresss
Serial.print(".");
delay(300);
}
Serial.println("\nIP Address obtained");
printWifiStatus();
mySensor.begin();
uint8_t chipID = mySensor.chipID();
Serial.print("chipID: ");
Serial.println(chipID);
Serial.println("\nWaiting for a connection from a remote monitoring Station...");
Udp.begin(localPort);
}
void loop() {
int8_t datax,datay,dataz;
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize)
{
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remoteIp = Udp.remoteIP();
Serial.print(remoteIp);
Serial.print(", port ");
Serial.println(Udp.remotePort());
// read the packet into packetBufffer
int len = Udp.read(packetBuffer, 255);
if (len > 0) packetBuffer[len] = 0;
Serial.println("Contents:");
Serial.println(packetBuffer);
// once connected with remote monitoring station send accelerometer data continuously
while(1)
{
datax = mySensor.readXData();
datay = mySensor.readYData();
dataz = mySensor.readZData();
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
str=String(datax); //converting integer into a string
str.toCharArray(ReplyBuffer,5);
Udp.write("X=");
Udp.write(ReplyBuffer);
str=String(datay); //converting integer into a string
str.toCharArray(ReplyBuffer,5);
Udp.write("\tY=");
Udp.write(ReplyBuffer);
str=String(dataz); //converting integer into a string
str.toCharArray(ReplyBuffer,5);
Udp.write("\tZ=");
Udp.write(ReplyBuffer);
Udp.endPacket();
delay(200); // just to visulize readings on serial port
}
}
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Once above energia sketch loaded on CC3200... I have Used my cell phone as hot spot to connect CC3200 sensor node and PC/Android cell phone(Remote monitoring Station)..
For testing received Data on Android phone I have used UDP Sender/Receiver android application available on google play store https://play.google.com/store/apps/details?id=com.jca.udpsendreceive&hl=en
Here is snapshot of received UDP packets on my android cell phone...
This is processing sketch for test UDP packets on PC running on (Linux/MAC/Windows)
/*============================================================================
Sudden Impact Wearable Design Challenge
Real Time Player monitoring System
Processing Sketch (running on PC)
Test Code for Wifi UDP connection between
Sensor node(CC3200 LaunchPad)and monitoring Station(Android cell phone / PC)
UDP Sender/Receiver Application used for Android cell phone
Processing application for use with PC (Linux/MacOS/Windows)
BMA222 Library used for CC3200 Launchpad on board Accelerometer interface
created 13 December 2014
by Ravi Butani
e-mail: ravi_butani@yahoo.com
Attribute : Cousot stephane for The Atelier Hypermedia
http://hypermedia.loeil.org/processing/
Code released under CC-SA 2014 license
===========================================================================*/
// import UDP library
import hypermedia.ne.*;
UDP udp; // define the UDP object
/**
* init
*/
void setup() {
// create a new datagram connection on port 6000
// and wait for incomming message
udp = new UDP( this, 2390 );
udp.listen( true );
}
//process events
void draw() {
String message = "hii"; // the message to send
String ip = "192.168.43.134"; // the remote IP address
int port = 2390; // the destination port
// formats the message for Pd
message = message+";\n";
// send the message
udp.send( message, ip, port );
while(true)
{;}
}
/**
* To perform any action on datagram reception, you need to implement this
* handler in your code. This method will be automatically called by the UDP
* object each time he receive a nonnull message.
* By default, this method have just one argument (the received message as
* byte[] array), but in addition, two arguments (representing in order the
* sender IP address and his port) can be set like below.
*/
// void receive( byte[] data ) { // <-- default handler
void receive( byte[] data, String ip, int port ) { // <-- extended handler
// get the "real" message =
// forget the ";\n" at the end <-- !!! only for a communication with Pd !!!
data = subset(data, 0, data.length);
String message = new String( data );
// print the result
println( "UDP Rx: "+message+"\t from "+ip+"\t on port "+port );
}
and here is the result of received UDP Packets on my PC...
Next : Interfacing ADXL345 and ADXL377 (Free Samples from ADI) Accelerometer with CC3200 and Designing some GUI application for remote monitoring station both for PC and Android phone...
Thanks
Ravi

