I am trying to transfer data from Matlab running on a PC and Mbed Nucleo F401RE using wiz550io module. I am only able to send data one way from Matlab to Mbed board. Could someone please help me with the transfer of data from f401re to Matlab? My objective is that Matlab sends some data fetching commands to f401re which then responds to the commands by sending data to Matlab eg. data could be a decimal or floating point number. I am using the following code: Thanks
Nucleo code:
SPI spi2(PC_12, PC_11, PC_10); // mosi, miso, sclk
EthernetInterface eth(&spi2, PC_6, PB_8);
wait(1); // 1 second for stable state
// late binding
TCPSocketServer svr;
TCPSocketConnection client;
ledTick.attach(&ledTickfunc,2);
// as your env. change to real IP address and so on.
int ret = eth.init(MY_IP, MY_NETMASK, MY_GATEWAY);
if (!ret) {
serial.printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
serial.printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
} else {
serial.printf("Error eth.init() - ret = %d\n\r", ret);
return -1;
}
//setup tcp socket
if(svr.bind(PORT)< 0) {
serial.printf("tcp server bind failed.\n\r");
return -1;
} else {
serial.printf("tcp server bind successed.\n\r");
serverIsListened = true;
}
if(svr.listen(1) < 0) {
serial.printf("tcp server listen failed.\n\r");
return -1;
} else {
serial.printf("tcp server is listening...\n\r");
}
char buffer[1024] = {};
//listening for http GET request
while (serverIsListened) {
//blocking mode(never timeout)
if(svr.accept(client)<0) {
serial.printf("failed to accept connection.\n\r");
} else {
serial.printf("connection success!\n\rIP: %s\n\r",client.get_address());
clientIsConnected = true;
while(clientIsConnected) {
switch(client.receive(buffer, 1023)) {
case 0:
serial.printf("recieved buffer is empty.\n\r");
clientIsConnected = false;
client.close();
break;
case -1:
serial.printf("failed to read data from client.\n\r");
clientIsConnected = false;
client.close();
break;
default:
serial.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' ) {
serial.printf("GET request incomming.\n\r");
wait(1);
//sprintf(buffer,"14.5\n\r",strlen(buffer));
client.send(buffer,strlen(buffer));
clientIsConnected = false;
serial.printf("echo back done.\n\r");
}
for(int i =0; i < 1023; i++) buffer[i] = '\0';
clientIsConnected = false; // ***
client.close(); // ***
break;
} // switch(client.receive(buffer, 1023))
client.close(); // ***
} // while(clientIsConnected)
serial.printf("close connection here.\n\rtcp server is listening...\n\r");
client.close();
} //if(svr.accept(client)<0)
} //while (serverIsListened)
Matlab Code
try
%Create a client interface and open it.
t = tcpip('163.1.6.228', 8080, 'NetworkRole', 'client');
fopen(t);
% Write the waveform to the server session.
fwrite(t, 'GET10.55')
disp('1 Success!');
fclose(t);
catch
disp('1 Failed!');
fclose(t);
end
try
%Create a server interface and open it.
t = tcpip('163.1.6.228', 8080, 'NetworkRole', 'server');
fopen(t);
data = fread(t, t.BytesAvailable)
disp('2 Success!');
fclose(t);
catch
disp('2 Failed!');
fclose(t);
end