Go Down

Topic: Send sensor data over a socket using CuHead V1.0 Wifi Shield (Read 799 times) previous topic - next topic


I am working in a project where i need to collect some data from my sensor and get this in my computer to generate some spreadsheets. I am using a CuHead V1.0 wifi shield with Arduino Uno and the library is pretty old and I can't find a lot of support googling for it. So... My problem is that I can't find a way to get this data and send it using a socket.

This is the arduino code:
Code: [Select]
* Socket App
* A simple socket application example using the WiShield 1.0

#include <WiShield.h>
#include <HCM5883L.h> //MY SENSOR LIBRARY


// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {XXXXXX}; // IP address of WiShield
unsigned char gateway_ip[] = {XXXXX}; // router or gateway IP address
unsigned char subnet_mask[] = {XXXXX}; // subnet mask for the local network
const char PROGMEM ssid[] PROGMEM = {"XXXXXXX"}; // max 32 bytes

unsigned char security_type = 3; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const char PROGMEM security_passphrase[] PROGMEM = {"XXXXXXXXX"}; // max 64 characters

// WEP 128-bit keys
// sample HEX keys
const char PROGMEM wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3

// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;

void setup()

void loop()

And the significant part of CuHead library code:
Code: [Select]


  Filename: socketapp.c
  Description: Simple socket programming example for the WiShield 1.0


  TCP/IP stack and driver for the WiShield 1.0 wireless devices

  Copyright(c) 2009 Async Labs Inc. All rights reserved.

  This program is free software; you can redistribute it and/or modify it
  under the terms of version 2 of the GNU General Public License as
  published by the Free Software Foundation.

  This program is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  more details.

  You should have received a copy of the GNU General Public License along with
  this program; if not, write to the Free Software Foundation, Inc., 59
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.

  Contact Information:

   Author               Date        Comment
   AsyncLabs 06/06/2009 Initial version


* This is a short example of how to write uIP applications using
* protosockets.

* We define the application state (struct socket_app_state) in the
* socketapp.h file, so we need to include it here. We also include
* uip.h (since this cannot be included in socketapp.h) and
* <string.h>, since we use the memcpy() function in the code.
#include "socketapp.h"
#include "uip.h"
#include <string.h>
#include <Arduino.h>

* Declaration of the protosocket function that handles the connection
* (defined at the end of the code).
static int handle_connection(struct socket_app_state *s);
* The initialization function. We must explicitly call this function
* from the system initialization code, some time after uip_init() is
* called.
void socket_app_init(void)
  /* We start to listen for connections on TCP port 1000. */
* In socketapp.h we have defined the UIP_APPCALL macro to
* socket_app_appcall so that this function is uIP's application
* function. This function is called whenever an uIP event occurs
* (e.g. when a new connection is established, new data arrives, sent
* data is acknowledged, data needs to be retransmitted, etc.).
void socket_app_appcall(void)
   * The uip_conn structure has a field called "appstate" that holds
   * the application state of the connection. We make a pointer to
   * this to access it easier.
  struct socket_app_state *s = &(uip_conn->appstate);

   * If a new connection was just established, we should initialize
   * the protosocket in our applications' state structure.
  if(uip_connected()) {
    PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));

   * Finally, we run the protosocket function that actually handles
   * the communication. We pass it a pointer to the application state
   * of the current connection.
* This is the protosocket function that handles the communication. A
* protosocket function must always return an int, but must never
* explicitly return - all return statements are hidden in the PSOCK
* macros.
static int handle_connection(struct socket_app_state *s)
  PSOCK_READTO(&s->p, '\n');
  PSOCK_SEND_STR(&s->p, "Hello ");
  PSOCK_SEND_STR(&s->p, s->inputbuffer);
  memset(s->inputbuffer, 0x00, sizeof(s->inputbuffer));


I was trying to get the data at the handle_connection(...) function, but I couldn't do it. Is it possible to get and send the data on arduino code instead? How?


I was trying to get the data at the handle_connection(...) function

I don't see that you tried anything. That function is called by socket_app_appcall(), which seems like a more appropriate place to inject the data of interest into the struct that is passed to handle_connection().
The art of getting good answers lies in asking good questions.

Go Up