Using BLE to control WIFI configuration as SSID and PW.

Dependencies:   BLE_API WIFI_API_32kRAM mbed nRF51822

Fork of NNN40_WiFi by Delta

BLE_WIFIControl enables user to setup Wifi connection via BLE link. Here is iPhone app that teaches you how to use this BLE_WIFIControl example. /media/uploads/Marcomissyou/ios_app_for_wifi_configure.pdf

Committer:
tsungta
Date:
Wed Apr 20 05:56:38 2016 +0000
Revision:
11:e22dfe039dee
Parent:
10:5cffa136892c
Update all libraries in this program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marcomissyou 0:25ffe5869e35 1 #include "mbed.h"
Marcomissyou 8:d39bc94f139b 2 #include "BLE.h"
Marcomissyou 7:5d82c92ec2a3 3 #include "BLEControlWIFIService.h"
Marcomissyou 7:5d82c92ec2a3 4 #include "DeviceInformationService.h"
Marcomissyou 0:25ffe5869e35 5 #include "WIFIDevice.h"
Marcomissyou 3:65c5fce3a471 6 #include "EthernetInterface.h"
Marcomissyou 7:5d82c92ec2a3 7
Marcomissyou 0:25ffe5869e35 8
Marcomissyou 7:5d82c92ec2a3 9 #define UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL 0
Marcomissyou 7:5d82c92ec2a3 10
Marcomissyou 7:5d82c92ec2a3 11 BLEDevice ble;
Marcomissyou 0:25ffe5869e35 12 WIFIDevice wifi;
Marcomissyou 7:5d82c92ec2a3 13 EthernetInterface eth;
Marcomissyou 7:5d82c92ec2a3 14
Marcomissyou 7:5d82c92ec2a3 15 Ticker tickerSensorPolling;
Marcomissyou 7:5d82c92ec2a3 16 DigitalOut led1(LED1);
Marcomissyou 7:5d82c92ec2a3 17 DigitalOut led2(LED2);
Marcomissyou 7:5d82c92ec2a3 18 DigitalOut RFSWIO(p19);
Marcomissyou 7:5d82c92ec2a3 19
Marcomissyou 8:d39bc94f139b 20 bool is_AP_connect = false;
Marcomissyou 8:d39bc94f139b 21
Marcomissyou 8:d39bc94f139b 22 const static char DEVICE_NAME[] = "TSUNGTA_BLE WCS";
Marcomissyou 7:5d82c92ec2a3 23 static volatile bool triggerSensorPolling = false;
Marcomissyou 7:5d82c92ec2a3 24
tsungta 10:5cffa136892c 25 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
Marcomissyou 7:5d82c92ec2a3 26 {
tsungta 10:5cffa136892c 27 ble.startAdvertising();
Marcomissyou 7:5d82c92ec2a3 28 }
Marcomissyou 0:25ffe5869e35 29
tsungta 10:5cffa136892c 30 const char* PC_SERVER_ADDRESS = "172.20.10.2";
Marcomissyou 0:25ffe5869e35 31 uint16_t PC_PORT = 5222;
Marcomissyou 7:5d82c92ec2a3 32
Marcomissyou 0:25ffe5869e35 33 int main(void)
Marcomissyou 7:5d82c92ec2a3 34 {
Marcomissyou 8:d39bc94f139b 35 TCPSocketConnection sock;
Marcomissyou 8:d39bc94f139b 36
Marcomissyou 7:5d82c92ec2a3 37 RFSWIO = 0;
Marcomissyou 7:5d82c92ec2a3 38 ble.init();
Marcomissyou 7:5d82c92ec2a3 39 ble.onDisconnection(disconnectionCallback);
Marcomissyou 7:5d82c92ec2a3 40
Marcomissyou 7:5d82c92ec2a3 41 /* Setup primary service. */
Marcomissyou 7:5d82c92ec2a3 42 BLEControlWIFIService BLEWIFIService(ble, wifi);
Marcomissyou 7:5d82c92ec2a3 43
Marcomissyou 7:5d82c92ec2a3 44 /* Setup auxiliary service. */
Marcomissyou 7:5d82c92ec2a3 45 DeviceInformationService deviceInfo(ble, "ARM", "Cyntec", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
Marcomissyou 7:5d82c92ec2a3 46
Marcomissyou 7:5d82c92ec2a3 47 /* Setup advertising. */
Marcomissyou 7:5d82c92ec2a3 48 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
Marcomissyou 7:5d82c92ec2a3 49 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)UUID_WIFI_CONFIGURATION_SERVICE, sizeof(UUID_WIFI_CONFIGURATION_SERVICE));
Marcomissyou 7:5d82c92ec2a3 50 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
Marcomissyou 7:5d82c92ec2a3 51 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Marcomissyou 7:5d82c92ec2a3 52 ble.setAdvertisingInterval(1000);
Marcomissyou 7:5d82c92ec2a3 53 ble.startAdvertising();
Marcomissyou 7:5d82c92ec2a3 54
Marcomissyou 7:5d82c92ec2a3 55 // infinite loop
Marcomissyou 7:5d82c92ec2a3 56 while (1) {
Marcomissyou 7:5d82c92ec2a3 57 if (ble.getGapState().connected && BLEWIFIService.is_config) {
Marcomissyou 7:5d82c92ec2a3 58 BLEWIFIService.is_config = false;
Marcomissyou 8:d39bc94f139b 59 //ble.shutdown();
Marcomissyou 8:d39bc94f139b 60 eth.init(); //Use DHCP
wgd8700 9:16ac259b2ce7 61 RFSWIO = 1; //Switch RF to WiFi
Marcomissyou 8:d39bc94f139b 62 while (eth.connect()) {}
Marcomissyou 8:d39bc94f139b 63 is_AP_connect = true;
Marcomissyou 8:d39bc94f139b 64
Marcomissyou 7:5d82c92ec2a3 65
Marcomissyou 7:5d82c92ec2a3 66 } else {
Marcomissyou 8:d39bc94f139b 67
Marcomissyou 8:d39bc94f139b 68 if (is_AP_connect) {
Marcomissyou 8:d39bc94f139b 69 if(!sock.is_connected()){
Marcomissyou 8:d39bc94f139b 70 sock.connect(PC_SERVER_ADDRESS,PC_PORT);
Marcomissyou 8:d39bc94f139b 71 led1 = 1;
Marcomissyou 8:d39bc94f139b 72 } else {
Marcomissyou 8:d39bc94f139b 73 char msg[] = "Hello World";
Marcomissyou 8:d39bc94f139b 74 sock.send(msg, sizeof(msg));
Marcomissyou 8:d39bc94f139b 75 wait(1);
Marcomissyou 8:d39bc94f139b 76 }
Marcomissyou 8:d39bc94f139b 77 }
Marcomissyou 7:5d82c92ec2a3 78 ble.waitForEvent(); // low power wait for event
Marcomissyou 7:5d82c92ec2a3 79 }
Marcomissyou 7:5d82c92ec2a3 80 }
Marcomissyou 7:5d82c92ec2a3 81 }