This is a demo for the WiflyInterface Library.

Dependencies:   WiflyInterface mbed

Wifly Firmware Update

Part of the demo will use the software update API to install 1 of 2 versions of the Wifly firmware, from the Microchip web site. You can see in the demo below the commands to install each of the 2 versions.

WiflyInterface - Broadcast packet

Part of the demo will send a broadcast packet to the network.

// TeraTerm monitoring mbed                         |  Windows network monitor 
// Initializing network interface...                |  > ReceiveUDP 40000 
// Connecting to network...                         |    Receiving datagrams... 
// Ethernet connected as 192.168.1.188              |
// Ethernet MAC is 00:06:66:71:5d:ef                |
// Connected at 24 Mb/s                             |
// Wifly info: wifly-EZX Ver: 4.75 Build: r1777,    |
//      Oct  2 2015 10:18:50 on RN-171              |
//                                                  |
//  ctrl-a    to download Wifly firmward v4.41      |
//  ctrl-b    to download Wifly firmward v4.75      |
//  ctrl-c    to send a broadcast message           |
//                                                  |
// User types ctrl-c in TeraTerm                    |
// Broadcast sending 'Hello World' on port 40000    |  Rx[10.789]: Hello World
// done.                                            |
// User types ctrl-c in TeraTerm                    |
// Broadcast sending 'Hello World' on port 40000    |  Rx[13.673]: Hello World
// done.                                            |

main.cpp

Committer:
WiredHome
Date:
2015-12-21
Revision:
0:3878b62facf1

File content as of revision 0:3878b62facf1:

#include "mbed.h"
#include "RawSerial.h"

#include "WiflyInterface.h"

// Used later in hw adaptation
#define MBED_APP_BOARD 1        /* http://mbed.org/components/mbed-Application-Board/ */
#define SMART_BOARD    2        /* http://mbed.org/users/WiredHome/notebook/SmartBoard-baseboard/ */

// ########################################################################
#define HW_ADAPTER SMART_BOARD  /* Which board are we compiling against? */
// ########################################################################


#define SSID "ssid"
#define PASS "pass"

const char PROGINFO[] = "\r\n\r\nWifly Demo - built " __DATE__ " " __TIME__ "\r\n\r\n";

char Message[] = "Hello World";
char BCASTADDR[] = "255.255.255.255";
int Port = 40000;

#if HW_ADAPTER == MBED_APP_BOARD
WiflyInterface eth( p9, p10, p30, p29);
#elif HW_ADAPTER == SMART_BOARD
WiflyInterface eth(p28, p27, p23, p24);
#endif

RawSerial pc(USBTX, USBRX);
DigitalOut myled(LED1);

extern "C" void mbed_reset();

void ShowIPAddress(bool show)
{
    pc.printf("Ethernet connected as %s\r\n", show ? eth.getIPAddress() : "---.---.---.---");
}

void ShowMACAddress(bool show)
{
    pc.printf("Ethernet MAC is %s\r\n", show ? eth.getMACAddress() : "--.--.--.--.--.--");
}


int main() {
    pc.baud(460800);
    pc.printf(PROGINFO);
    pc.printf("Configuration for %s\r\n\r\n", (HW_ADAPTER == SMART_BOARD) ? "SmartBoard" : "mbed Application Board");
    
    eth.SetSecurity(SSID, PASS, WPA);
    pc.printf("***\r\n");
    pc.printf("Initializing network interface...\r\n");
    if (0 == eth.init()) {  //Use DHCP
        eth.setName("TestWiFi_01");
        do {
            pc.printf("Connecting to network...\r\n");
            if (0 == eth.connect()) {
                ShowIPAddress(true);
                ShowMACAddress(true);
                int speed = eth.get_connection_speed();
                pc.printf("Connected at %d Mb/s\r\n", speed);
                pc.printf("Wifly info: %s\r\n", eth.getWiflyVersionString());
                
                pc.printf("\r\n");
                pc.printf("  ctrl-a    to download Wifly firmward v4.41\r\n");
                pc.printf("  ctrl-b    to download Wifly firmward v4.75\r\n");
                pc.printf("  ctrl-c    to send a broadcast message\r\n");
                while (eth.is_connected()) {
                    if (eth.readable())
                        pc.putc(eth.getc());
                    else if (pc.readable()) {
                        int c = pc.getc();
                        if (c == 0x01) {        // ctrl-a           // Install Software v4.41
                            pc.printf("Trying to download wifly7-441.mif from microchip...\r\n");
                            if (eth.SWUpdateWifly("wifly7-441.mif")) {
                                pc.printf("  Success - now rebooting to this Wifly image.\r\n");
                                wait_ms(100);
                                mbed_reset();
                            }
                        } else if (c == 0x02) { // ctrl-b           // Install Software v4.75
                            pc.printf("Trying to download wifly7-475.mif from microchip...\r\n");
                            if (eth.SWUpdateWifly("wifly7-475.mif")){
                                pc.printf("  Success - now rebooting to this Wifly image.\r\n");
                                wait_ms(100);
                                mbed_reset();
                            }
                        } else if (c == 0x03) { // ctrl-c
                            UDPSocket bcast;
                            Endpoint ep;
                            pc.printf("Broadcast sending '%s' on port %d\r\n", Message, Port);
                            int h = ep.set_address(BCASTADDR, Port);
                            int i = bcast.bind(40000);
                            int j = bcast.set_broadcasting(true);
                            int k = bcast.sendTo(ep, Message, strlen(Message));
                            bcast.close();
                            pc.printf("done.\r\n");
                        } else {
                            eth.putc(c);
                        }
                    }
                }
                
                pc.printf("lost connection.\r\n");
                ShowIPAddress(false);
                eth.disconnect();
            }
            else {
                pc.printf("  ... failed to connect.\r\n");
            }
        }
        while (1);
    }
    else {
        pc.printf("  ... failed to initialize, rebooting...\r\n");
        mbed_reset();
    }
}