LED can be controlled by remote TCP client. This code was tested with WIZwiki-W7500 platform board.

Dependencies:   WIZnetInterface mbed

Fork of TCP_LED_Control-WIZwiki-W7500 by Kiyong Lee

WIZwiki-W7500 TCP LED Control Example

Overview

The WIZwiki board series has an Ethernet interface with an RJ-45 connector, so you can quickly implement various network applications. This example controls the on-board LED by sending the specified command string to the board with Ethernet - TCP data.

Prerequisite

The following items are required to implement this example project.

  • Mandatory
  • Optional
    • Ethernet Hub or Router (supports DHCP IP allocation)

Information

If there is no Ethernet hub or router, you can connect PC and device directly with LAN cable.


Hardware Configuration

WIZwiki-W7500 Pinout

Pinout

On-board LED

The on-board LED (red) used to verify the transmission of TCP data is connected to the PC_08 pin and is declared as LED1 in the mbed library.

Network Configuration

/media/uploads/hkjung/tcp_loopback_system_config.jpg


Firmware

Command String

The following three command strings are implemented in this example project.

  • LED_ON
  • LED_OFF
  • LED_BLINK

Network Settings

MAC address

For Ethernet networking, each network device must have its own unique hardware address. that hardware address is called MAC address, and typically the MAC address is represented by six bytes hex separated by a colon. e.g., 00:08:DC:XX:XX:XX

The MAC address is defined in the code as follows.

main.cpp

#define MAC     "\x00\x08\xDC\x55\x51\x52"

IP address allocation method

Use Static IP address

The 'Static IP address' setting is the default value, and the device is configured with the network information defined in the code. It can be used when connecting the device directly to the PC or through an Ethernet hub. The IP address of the PC should be set to the same ip address range as the device.

The network information is defined in the code as follows.

main.cpp

#define IP      "192.168.0.20"   // IP address
#define SUBNET  "255.255.255.0"  // Subnet Mask
#define GATEWAY "192.168.0.1"    // Gateway address

The following is an example of the PC's network settings that can connect with the device's settings.

PC's network setting example
IP address192.168.0.21
Subnet Mask255.255.255.0
Gateway address192.168.0.1
Use DHCP

Routers that support DHCP automatically assign a leased range of IP addresses to each connected devices. If your PC is connected to a router, uncomment the following define and the device will be automatically assigned network information.

main.cpp

#define USE_DHCP

The network information assigned by the router can be checked through the debug messages output to the serial terminal.


Building and Running an Example

Steps

1. Import this project into your mbed compiler.

2. View the default program source code and modify what you need.

  • Network settings and so on.

3. Compile and Download the Program.

  • To compile the program, click the Compile button in the toolbar. This will compile all the program source code files within the program folder to create a binary program.
  • After a successful compile, you will get a "Success!" message in the compiler output and the download dialog will pop up. Save it to the location of the mbed Microcontroller drive, and then hit reset on the microcontroller to start it running!

4. Run the serial terminal program and check the messages.

/media/uploads/hkjung/serial_debug_wizwiki-w7500.png

  • Device's network settings and supported command strings.
  • Default UART baudrate: 115200bps

5. Run the TCP client terminal program and Connect to your device.

/media/uploads/hkjung/tcp_client_connect_wizwiki-w7500.png

6. Send command to your device and check status of LED and serial messages

/media/uploads/hkjung/tcp_client_wizwiki-w7500.png

/media/uploads/hkjung/serial_debug_cmd_wizwiki-w7500.png

Committer:
justinkim
Date:
Tue Jun 23 00:36:34 2015 +0000
Revision:
8:f837e0d255e8
Parent:
7:a5ead1402704
Child:
9:a63ff95c354b
TCPEchoServer example for WIZwiki-W7500

Who changed what in which revision?

UserRevisionLine numberNew contents of line
justinkim 8:f837e0d255e8 1 #include "mbed.h"
justinkim 8:f837e0d255e8 2 #include "EthernetInterface.h"
justinkim 8:f837e0d255e8 3
justinkim 8:f837e0d255e8 4 #define ECHO_SERVER_PORT 7
justinkim 8:f837e0d255e8 5
justinkim 8:f837e0d255e8 6 int main (void)
justinkim 8:f837e0d255e8 7 {
justinkim 8:f837e0d255e8 8 printf("Wait a second...\r\n");
justinkim 8:f837e0d255e8 9 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02};
justinkim 8:f837e0d255e8 10 EthernetInterface eth;
justinkim 8:f837e0d255e8 11 eth.init(mac_addr); //Use DHCP
justinkim 8:f837e0d255e8 12 eth.connect();
justinkim 8:f837e0d255e8 13 printf("Server IP Address is %s\r\n", eth.getIPAddress());
justinkim 8:f837e0d255e8 14
justinkim 8:f837e0d255e8 15 TCPSocketServer server;
justinkim 8:f837e0d255e8 16 server.bind(ECHO_SERVER_PORT);
justinkim 8:f837e0d255e8 17 server.listen();
justinkim 8:f837e0d255e8 18
justinkim 8:f837e0d255e8 19 while (true)
justinkim 8:f837e0d255e8 20 {
justinkim 8:f837e0d255e8 21 printf("Wait for new connection...\r\n");
justinkim 8:f837e0d255e8 22 TCPSocketConnection client;
justinkim 8:f837e0d255e8 23 server.accept(client);
justinkim 8:f837e0d255e8 24 client.set_blocking(false, 15000); // Timeout after (1.5)s
justinkim 8:f837e0d255e8 25
justinkim 8:f837e0d255e8 26 printf("Connection from: %s\r\n", client.get_address());
justinkim 8:f837e0d255e8 27 char buffer[256];
justinkim 8:f837e0d255e8 28 while (true) {
justinkim 8:f837e0d255e8 29 int n = client.receive(buffer, sizeof(buffer));
justinkim 8:f837e0d255e8 30 if (n <= 0) break;
justinkim 8:f837e0d255e8 31
justinkim 8:f837e0d255e8 32 // print received message to terminal
justinkim 8:f837e0d255e8 33 buffer[n] = '\0';
justinkim 8:f837e0d255e8 34 printf("Received message from Client :'%s'\r\n",buffer);
justinkim 8:f837e0d255e8 35
justinkim 8:f837e0d255e8 36 // reverse the message
justinkim 8:f837e0d255e8 37 char temp;
justinkim 8:f837e0d255e8 38 for(int f = 0, l = n-1; f<l; f++,l--){
justinkim 8:f837e0d255e8 39 temp = buffer[f];
justinkim 8:f837e0d255e8 40 buffer[f] = buffer[l];
justinkim 8:f837e0d255e8 41 buffer[l] = temp;
justinkim 8:f837e0d255e8 42 }
justinkim 8:f837e0d255e8 43
justinkim 8:f837e0d255e8 44 // print reversed message to terminal
justinkim 8:f837e0d255e8 45 printf("Sending message to Client: '%s'\r\n",buffer);
justinkim 8:f837e0d255e8 46
justinkim 8:f837e0d255e8 47 // Echo received message back to client
justinkim 8:f837e0d255e8 48 client.send_all(buffer, n);
justinkim 8:f837e0d255e8 49 if (n <= 0) break;
justinkim 8:f837e0d255e8 50 }
justinkim 8:f837e0d255e8 51
justinkim 8:f837e0d255e8 52 client.close();
justinkim 8:f837e0d255e8 53 }
justinkim 8:f837e0d255e8 54 }
justinkim 8:f837e0d255e8 55