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:
wgd8700
Date:
Fri Aug 14 10:06:46 2015 +0000
Revision:
9:16ac259b2ce7
Parent:
8:d39bc94f139b
Child:
10:5cffa136892c
Update BLE_API, nRF51822, and mbed libs to sync throughout all sample code, work for 32KB RAM revision platform; Update main.cpp to switch RF for WiFi before wifi.connect

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
Marcomissyou 7:5d82c92ec2a3 25 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
Marcomissyou 7:5d82c92ec2a3 26 {
Marcomissyou 7:5d82c92ec2a3 27 ble.startAdvertising(); // restart advertising
Marcomissyou 7:5d82c92ec2a3 28 }
Marcomissyou 0:25ffe5869e35 29
Marcomissyou 8:d39bc94f139b 30 const char* PC_SERVER_ADDRESS = "192.168.15.101";
Marcomissyou 0:25ffe5869e35 31 uint16_t PC_PORT = 5222;
Marcomissyou 7:5d82c92ec2a3 32
Marcomissyou 0:25ffe5869e35 33 int main(void)
Marcomissyou 7:5d82c92ec2a3 34 {
wgd8700 9:16ac259b2ce7 35 //NRF_CLOCK->XTALFREQ = 0x00; //Tsungta, Used to active radio correctly external when XTAL 32MHz is loaded
Marcomissyou 8:d39bc94f139b 36 TCPSocketConnection sock;
Marcomissyou 8:d39bc94f139b 37
Marcomissyou 7:5d82c92ec2a3 38 RFSWIO = 0;
Marcomissyou 7:5d82c92ec2a3 39 ble.init();
Marcomissyou 7:5d82c92ec2a3 40 ble.onDisconnection(disconnectionCallback);
Marcomissyou 7:5d82c92ec2a3 41
Marcomissyou 7:5d82c92ec2a3 42 /* Setup primary service. */
Marcomissyou 7:5d82c92ec2a3 43 BLEControlWIFIService BLEWIFIService(ble, wifi);
Marcomissyou 7:5d82c92ec2a3 44
Marcomissyou 7:5d82c92ec2a3 45 /* Setup auxiliary service. */
Marcomissyou 7:5d82c92ec2a3 46 DeviceInformationService deviceInfo(ble, "ARM", "Cyntec", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
Marcomissyou 7:5d82c92ec2a3 47
Marcomissyou 7:5d82c92ec2a3 48 /* Setup advertising. */
Marcomissyou 7:5d82c92ec2a3 49 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
Marcomissyou 7:5d82c92ec2a3 50 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)UUID_WIFI_CONFIGURATION_SERVICE, sizeof(UUID_WIFI_CONFIGURATION_SERVICE));
Marcomissyou 7:5d82c92ec2a3 51 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
Marcomissyou 7:5d82c92ec2a3 52 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Marcomissyou 7:5d82c92ec2a3 53 ble.setAdvertisingInterval(1000);
Marcomissyou 7:5d82c92ec2a3 54 ble.startAdvertising();
Marcomissyou 7:5d82c92ec2a3 55
Marcomissyou 7:5d82c92ec2a3 56 // infinite loop
Marcomissyou 7:5d82c92ec2a3 57 while (1) {
Marcomissyou 7:5d82c92ec2a3 58 if (ble.getGapState().connected && BLEWIFIService.is_config) {
Marcomissyou 7:5d82c92ec2a3 59 BLEWIFIService.is_config = false;
Marcomissyou 8:d39bc94f139b 60 //ble.shutdown();
Marcomissyou 8:d39bc94f139b 61 eth.init(); //Use DHCP
wgd8700 9:16ac259b2ce7 62 RFSWIO = 1; //Switch RF to WiFi
Marcomissyou 8:d39bc94f139b 63 while (eth.connect()) {}
Marcomissyou 8:d39bc94f139b 64 is_AP_connect = true;
Marcomissyou 8:d39bc94f139b 65
Marcomissyou 7:5d82c92ec2a3 66
Marcomissyou 7:5d82c92ec2a3 67 } else {
Marcomissyou 8:d39bc94f139b 68
Marcomissyou 8:d39bc94f139b 69 if (is_AP_connect) {
Marcomissyou 8:d39bc94f139b 70 if(!sock.is_connected()){
Marcomissyou 8:d39bc94f139b 71 sock.connect(PC_SERVER_ADDRESS,PC_PORT);
Marcomissyou 8:d39bc94f139b 72 led1 = 1;
Marcomissyou 8:d39bc94f139b 73 } else {
Marcomissyou 8:d39bc94f139b 74 char msg[] = "Hello World";
Marcomissyou 8:d39bc94f139b 75 sock.send(msg, sizeof(msg));
Marcomissyou 8:d39bc94f139b 76 wait(1);
Marcomissyou 8:d39bc94f139b 77 }
Marcomissyou 8:d39bc94f139b 78 }
Marcomissyou 7:5d82c92ec2a3 79 ble.waitForEvent(); // low power wait for event
Marcomissyou 7:5d82c92ec2a3 80 }
Marcomissyou 7:5d82c92ec2a3 81 }
Marcomissyou 7:5d82c92ec2a3 82 }