Simple example demonstrating WiConnect host library web setup feature.

Dependencies:   WiConnect mbed

Committer:
dan_ackme
Date:
Thu Nov 27 10:26:39 2014 +0000
Revision:
11:3f4ad7cb7bd4
Parent:
10:63f9df429d05
updated for latest wiconnect

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan_ackme 1:44eae7ea80c7 1 /**
dan_ackme 1:44eae7ea80c7 2 * @example web_setup/example.cpp
dan_ackme 1:44eae7ea80c7 3 *
dan_ackme 1:44eae7ea80c7 4 * This is an example of using the web setup network API to
dan_ackme 1:44eae7ea80c7 5 * configure the module network credentials remotely.
dan_ackme 1:44eae7ea80c7 6 *
dan_ackme 1:44eae7ea80c7 7 * It works as follows:
dan_ackme 1:44eae7ea80c7 8 * 1. Instantiate the WiConnect Library
dan_ackme 1:44eae7ea80c7 9 * 2. Initiate Communication with WiFi Module
dan_ackme 1:44eae7ea80c7 10 * 3. Start WebSetup with specified parameters
dan_ackme 1:44eae7ea80c7 11 * 4. Wait for web setup webpage to complete
dan_ackme 1:44eae7ea80c7 12 * 5. That's it!
dan_ackme 1:44eae7ea80c7 13 *
dan_ackme 1:44eae7ea80c7 14 *
dan_ackme 1:44eae7ea80c7 15 */
dan_ackme 1:44eae7ea80c7 16
dan_ackme 1:44eae7ea80c7 17
dan_ackme 1:44eae7ea80c7 18 /******************************************************************************
dan_ackme 1:44eae7ea80c7 19 * Example Variables
dan_ackme 1:44eae7ea80c7 20 */
dan_ackme 1:44eae7ea80c7 21
dan_ackme 1:44eae7ea80c7 22 // This is the name of the WebSetup network
dan_ackme 1:44eae7ea80c7 23 // Look for this name in your WiFi settings
dan_ackme 1:44eae7ea80c7 24 // (e.g. your phone's list of WiFi networks in the WiFi settings menu)
dan_ackme 1:44eae7ea80c7 25 // tip: add double-quotes around SSID to add spaces to name
dan_ackme 1:44eae7ea80c7 26 #define WEB_SETUP_SSID "\"WiConnect WebSetup Example\""
dan_ackme 1:44eae7ea80c7 27
dan_ackme 1:44eae7ea80c7 28 // This is the password for the WebSetup network
dan_ackme 1:44eae7ea80c7 29 // Leave as empty string (e.g "") to create OPEN network
dan_ackme 1:44eae7ea80c7 30 #define WEB_SETUP_PASSWORD "password"
dan_ackme 1:44eae7ea80c7 31
dan_ackme 1:44eae7ea80c7 32
dan_ackme 1:44eae7ea80c7 33
dan_ackme 1:44eae7ea80c7 34
dan_ackme 1:44eae7ea80c7 35 /******************************************************************************
dan_ackme 1:44eae7ea80c7 36 * Includes
dan_ackme 1:44eae7ea80c7 37 */
dan_ackme 1:44eae7ea80c7 38
dan_ackme 1:44eae7ea80c7 39 // include C library headers
dan_ackme 1:44eae7ea80c7 40 #include <stdio.h> // needed for printf
dan_ackme 1:44eae7ea80c7 41
dan_ackme 1:44eae7ea80c7 42 // include target specific defines
dan_ackme 1:44eae7ea80c7 43 #include "target_config.h"
dan_ackme 1:44eae7ea80c7 44 // include the Wiconnect Host Library API header
dan_ackme 1:44eae7ea80c7 45 #include "Wiconnect.h"
dan_ackme 1:44eae7ea80c7 46
dan_ackme 1:44eae7ea80c7 47
dan_ackme 1:44eae7ea80c7 48
dan_ackme 1:44eae7ea80c7 49
dan_ackme 1:44eae7ea80c7 50 /******************************************************************************
dan_ackme 1:44eae7ea80c7 51 * Global Defines
dan_ackme 1:44eae7ea80c7 52 */
dan_ackme 1:44eae7ea80c7 53
dan_ackme 1:44eae7ea80c7 54
dan_ackme 1:44eae7ea80c7 55 // Serial used for printfs to terminal (i.e. NOT used for WiConnect)
dan_ackme 1:44eae7ea80c7 56 static Serial consoleSerial(STDIO_UART_TX, STDIO_UART_RX);
dan_ackme 1:44eae7ea80c7 57
dan_ackme 1:44eae7ea80c7 58 // Buffer used internally by WiConnect library, note that this is optional
dan_ackme 1:44eae7ea80c7 59 static uint8_t wiconnectInternalBuffer[256];
dan_ackme 1:44eae7ea80c7 60
dan_ackme 1:44eae7ea80c7 61
dan_ackme 1:44eae7ea80c7 62
dan_ackme 1:44eae7ea80c7 63 /******************************************************************************
dan_ackme 1:44eae7ea80c7 64 * Starting point of application
dan_ackme 1:44eae7ea80c7 65 */
dan_ackme 1:44eae7ea80c7 66 int main(int argc, char **argv)
dan_ackme 1:44eae7ea80c7 67 {
dan_ackme 11:3f4ad7cb7bd4 68 WiconnectResult result;
dan_ackme 1:44eae7ea80c7 69 consoleSerial.baud(115200); // console terminal to 115200 baud
dan_ackme 1:44eae7ea80c7 70
dan_ackme 1:44eae7ea80c7 71 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 72 // STEP 1: Instantiate WiConnect Library
dan_ackme 1:44eae7ea80c7 73 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 74
dan_ackme 1:44eae7ea80c7 75 // Setup wiconnect serial interface configuration
dan_ackme 1:44eae7ea80c7 76 // Here we only specify the rx buffer size and not rx buffer pointer, this means
dan_ackme 1:44eae7ea80c7 77 // The serial RX buffer will be dynamically allocated
dan_ackme 1:44eae7ea80c7 78 SerialConfig serialConfig(WICONNECT_RX_PIN, WICONNECT_TX_PIN, 256, NULL);
dan_ackme 1:44eae7ea80c7 79
dan_ackme 1:44eae7ea80c7 80 // Instantiate the Wiconnect library
dan_ackme 1:44eae7ea80c7 81 // Here we specify the buffer size AND buffer pointer, this means we're using static allocation
dan_ackme 1:44eae7ea80c7 82 Wiconnect wiconnect(serialConfig, sizeof(wiconnectInternalBuffer), wiconnectInternalBuffer, WICONNECT_RESET_PIN);
dan_ackme 1:44eae7ea80c7 83
dan_ackme 1:44eae7ea80c7 84
dan_ackme 1:44eae7ea80c7 85 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 86 // STEP 2: Initiate Communication with WiFi Module
dan_ackme 1:44eae7ea80c7 87 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 88
dan_ackme 1:44eae7ea80c7 89 printf("Initializing WiConnect Library...\r\n");
dan_ackme 1:44eae7ea80c7 90
dan_ackme 1:44eae7ea80c7 91 // Initialize communication with WiFi module
dan_ackme 11:3f4ad7cb7bd4 92 if(WICONNECT_FAILED(result, wiconnect.init()))
dan_ackme 1:44eae7ea80c7 93 {
dan_ackme 10:63f9df429d05 94 if(result == WICONNECT_FIRMWARE_OUTDATED)
dan_ackme 10:63f9df429d05 95 {
dan_ackme 11:3f4ad7cb7bd4 96 printf("*** The WiFi firmware is not supported. Run the ota example to update the firmware:\r\n");
dan_ackme 11:3f4ad7cb7bd4 97 printf("https://developer.mbed.org/teams/ACKme/code/wiconnect-ota_example\r\n\r\n");
dan_ackme 10:63f9df429d05 98 }
dan_ackme 10:63f9df429d05 99 else
dan_ackme 10:63f9df429d05 100 {
dan_ackme 10:63f9df429d05 101 printf("Failed to initialize communication with WiFi module!\r\n"
dan_ackme 10:63f9df429d05 102 "Make sure the wires are connected correctly\r\n");
dan_ackme 10:63f9df429d05 103 }
dan_ackme 1:44eae7ea80c7 104 for(;;); // infinite loop
dan_ackme 1:44eae7ea80c7 105 }
dan_ackme 1:44eae7ea80c7 106
dan_ackme 1:44eae7ea80c7 107
dan_ackme 1:44eae7ea80c7 108 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 109 // STEP 3: Start WebSetup with specified parameters
dan_ackme 1:44eae7ea80c7 110 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 111
dan_ackme 1:44eae7ea80c7 112 printf("Starting Websetup...\r\n");
dan_ackme 1:44eae7ea80c7 113
dan_ackme 1:44eae7ea80c7 114 // Start web setup
dan_ackme 11:3f4ad7cb7bd4 115 if(wiconnect.startWebSetup(WEB_SETUP_SSID, WEB_SETUP_PASSWORD) != WICONNECT_SUCCESS)
dan_ackme 1:44eae7ea80c7 116 {
dan_ackme 1:44eae7ea80c7 117 printf("Failed to start web setup\r\n");
dan_ackme 1:44eae7ea80c7 118 for(;;); // infinite loop
dan_ackme 1:44eae7ea80c7 119 }
dan_ackme 1:44eae7ea80c7 120
dan_ackme 1:44eae7ea80c7 121 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 122 // STEP 4: Wait for web setup webpage to complete
dan_ackme 1:44eae7ea80c7 123 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 124
dan_ackme 1:44eae7ea80c7 125 printf("Web setup has started.\r\n\r\n");
dan_ackme 1:44eae7ea80c7 126 printf("1. Using your phone (or PC, Mac, Linux, etc.)\r\n connect to the WiFi network: %s\r\n", WEB_SETUP_SSID);
dan_ackme 1:44eae7ea80c7 127 printf("2. The password is: %s\r\n", WEB_SETUP_PASSWORD);
dan_ackme 1:44eae7ea80c7 128 printf("3. Once connected, open your browser and enter the URL: http://setup.com\r\n");
dan_ackme 1:44eae7ea80c7 129 printf("4. This will bringup a setup page, enter your router's credentials.\r\n");
dan_ackme 1:44eae7ea80c7 130 printf("5. Click the 'Save & Exit' button at the bottom of the webpage\r\n\r\n");
dan_ackme 1:44eae7ea80c7 131
dan_ackme 11:3f4ad7cb7bd4 132 for(;;)
dan_ackme 1:44eae7ea80c7 133 {
dan_ackme 11:3f4ad7cb7bd4 134 bool isRunning;
dan_ackme 11:3f4ad7cb7bd4 135
dan_ackme 11:3f4ad7cb7bd4 136 if(wiconnect.isWebSetupRunning(&isRunning) != WICONNECT_SUCCESS)
dan_ackme 11:3f4ad7cb7bd4 137 {
dan_ackme 11:3f4ad7cb7bd4 138 printf("Failed to get websetup status\r\n");
dan_ackme 11:3f4ad7cb7bd4 139 for(;;);
dan_ackme 11:3f4ad7cb7bd4 140 }
dan_ackme 11:3f4ad7cb7bd4 141 delayMs(100);
dan_ackme 11:3f4ad7cb7bd4 142 if(!isRunning)
dan_ackme 11:3f4ad7cb7bd4 143 break;
dan_ackme 1:44eae7ea80c7 144 }
dan_ackme 1:44eae7ea80c7 145
dan_ackme 1:44eae7ea80c7 146 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 147 // STEP 5: Done!
dan_ackme 1:44eae7ea80c7 148 //-------------------------------------------------------------------------
dan_ackme 1:44eae7ea80c7 149
dan_ackme 4:3e2bd0076147 150 printf("IP Address: %s\r\n", wiconnect.getIpAddress());
dan_ackme 1:44eae7ea80c7 151 printf("Web setup example has completed!\r\n");
dan_ackme 1:44eae7ea80c7 152
dan_ackme 5:c2f5fe209c10 153 while(true){} // infinite loop
dan_ackme 1:44eae7ea80c7 154 }
dan_ackme 1:44eae7ea80c7 155
dan_ackme 1:44eae7ea80c7 156