A webserver echo back example was adapted for this purpose. It uses EthernetInterface.lib
https://developer.mbed.org/forum/mbed/topic/4630/
The TSL2561 is first written with a couple of bytes that power on the sensor, and set the integration time
The server will respond to all requests with 50 readings from the sensor at 50mS intervals (2.5 S total)
Here's the code for main.cpp . Screenshots of the results are posted in the gallery.
The Peach did not connect automatically to my network router, but when I connected it to my Ubuntu laptop, and set the network type to 'shared with other computers' , it connected fine, and the debug window displayed the IP address.
#include "mbed.h"
#include "EthernetInterface.h"
#include <stdio.h>
#include <string.h>
#define PORT 80
EthernetInterface eth;
TCPSocketServer svr;
bool serverIsListened = false;
TCPSocketConnection client;
bool clientIsConnected = false;
DigitalOut led1(LED2); //server listning status
DigitalOut led2(LED3); //socket connecting status
// Read temperature from TSL2561
I2C i2c(I2C_SDA , I2C_SCL );
const int addr8bit = 0x39 << 1; // 8bit I2C address
Ticker ledTick;
void ledTickfunc()
{
if(serverIsListened) {
led1 = !led1;
} else {
led1 = false;
}
}
int main (void)
{
uint16_t i=0;
// Initialize TS2561 luminosity sensor
char cmd[2]={0x80 ,0x03 };
i2c.write(addr8bit, cmd ,2);
cmd[0] |=0x01; cmd[1] = 0x01 | 0x10; //timing control
i2c.write(addr8bit, cmd ,2);
//uint16_t vals[2000]={},i,v;
ledTick.attach(&ledTickfunc,0.5);
//setup ethernet interface
eth.init(); //Use DHCP
eth.connect();
printf("IP Address is %s\n\r", eth.getIPAddress());
//setup tcp socket
if(svr.bind(PORT)< 0) {
printf("tcp server bind failed.\n\r");
return -1;
} else {
printf("tcp server bind successed.\n\r");
serverIsListened = true;
}
if(svr.listen(1) < 0) {
printf("tcp server listen failed.\n\r");
return -1;
} else {
printf("tcp server is listening...\n\r");
}
//listening for http GET request
while (serverIsListened) {
//blocking mode(never timeout)
if(svr.accept(client)<0) {
printf("failed to accept connection.\n\r");
} else {
printf("connection success!\n\rIP: %s\n\r",client.get_address());
clientIsConnected = true;
led2 = true;
while(clientIsConnected) {
char buffer[10000] = {},src[30]={};
switch(client.receive(buffer, 1023)) {
case 0:
printf("received buffer is empty.\n\r");
clientIsConnected = false;
break;
case -1:
printf("failed to read data from client.\n\r");
clientIsConnected = false;
break;
default:
printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
printf("GET request incomming.\n\r");
//setup http response header & data
char echoHeader[256] = {};
sprintf(buffer,"Reading 50 samples from From TSL2561 with 50mS per sample : \n\n");
for(i=0;i<50;i++){
cmd[0] = 0x80 | 0x20 | 0x0C;
i2c.write(addr8bit, cmd ,1);
//cmd[0] = 0x00;
//i2c.write(addr8bit, cmd, 1);
i2c.read( addr8bit, cmd, 2);
int tmp = (int((cmd[1]<<8)|cmd[0]));
sprintf(src,"%d : %d\n",i,tmp);
strncat(buffer, src, strlen(src));
wait(0.05); //50mS
}
sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
client.send(echoHeader,strlen(echoHeader));
client.send(buffer,strlen(buffer));
clientIsConnected = false;
printf("echo back done.\n\r");
}
break;
}
}
printf("close connection.\n\rtcp server is listening...\n\r");
client.close();
led2 = false;
}
}
}