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:
Marcomissyou
Date:
Mon May 18 07:13:04 2015 +0000
Revision:
7:5d82c92ec2a3
Parent:
3:65c5fce3a471
Child:
8:d39bc94f139b
First commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marcomissyou 0:25ffe5869e35 1 #include "mbed.h"
Marcomissyou 7:5d82c92ec2a3 2 #include "BLEDevice.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 7:5d82c92ec2a3 20 const static char DEVICE_NAME[] = "BLE WCS";
Marcomissyou 7:5d82c92ec2a3 21 static volatile bool triggerSensorPolling = false;
Marcomissyou 7:5d82c92ec2a3 22
Marcomissyou 7:5d82c92ec2a3 23 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
Marcomissyou 7:5d82c92ec2a3 24 {
Marcomissyou 7:5d82c92ec2a3 25 ble.startAdvertising(); // restart advertising
Marcomissyou 7:5d82c92ec2a3 26 }
Marcomissyou 0:25ffe5869e35 27
Marcomissyou 0:25ffe5869e35 28 const char* PC_SERVER_ADDRESS = "192.168.1.234";
Marcomissyou 0:25ffe5869e35 29 uint16_t PC_PORT = 5222;
Marcomissyou 7:5d82c92ec2a3 30
Marcomissyou 0:25ffe5869e35 31 int main(void)
Marcomissyou 7:5d82c92ec2a3 32 {
Marcomissyou 0:25ffe5869e35 33 eth.init(); //Use DHCP
Marcomissyou 7:5d82c92ec2a3 34 RFSWIO = 0;
Marcomissyou 7:5d82c92ec2a3 35 ble.init();
Marcomissyou 7:5d82c92ec2a3 36 ble.onDisconnection(disconnectionCallback);
Marcomissyou 7:5d82c92ec2a3 37
Marcomissyou 7:5d82c92ec2a3 38 /* Setup primary service. */
Marcomissyou 7:5d82c92ec2a3 39 BLEControlWIFIService BLEWIFIService(ble, wifi);
Marcomissyou 7:5d82c92ec2a3 40
Marcomissyou 7:5d82c92ec2a3 41 /* Setup auxiliary service. */
Marcomissyou 7:5d82c92ec2a3 42 DeviceInformationService deviceInfo(ble, "ARM", "Cyntec", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
Marcomissyou 7:5d82c92ec2a3 43
Marcomissyou 7:5d82c92ec2a3 44 /* Setup advertising. */
Marcomissyou 7:5d82c92ec2a3 45 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
Marcomissyou 7:5d82c92ec2a3 46 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)UUID_WIFI_CONFIGURATION_SERVICE, sizeof(UUID_WIFI_CONFIGURATION_SERVICE));
Marcomissyou 7:5d82c92ec2a3 47 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
Marcomissyou 7:5d82c92ec2a3 48 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Marcomissyou 7:5d82c92ec2a3 49 ble.setAdvertisingInterval(1000);
Marcomissyou 7:5d82c92ec2a3 50 ble.startAdvertising();
Marcomissyou 7:5d82c92ec2a3 51
Marcomissyou 7:5d82c92ec2a3 52 // infinite loop
Marcomissyou 7:5d82c92ec2a3 53 while (1) {
Marcomissyou 7:5d82c92ec2a3 54 if (ble.getGapState().connected && BLEWIFIService.is_config) {
Marcomissyou 7:5d82c92ec2a3 55 BLEWIFIService.is_config = false;
Marcomissyou 7:5d82c92ec2a3 56 eth.connect(40000);
Marcomissyou 7:5d82c92ec2a3 57 TCPSocketConnection sock;
Marcomissyou 7:5d82c92ec2a3 58 sock.connect(PC_SERVER_ADDRESS,PC_PORT);
Marcomissyou 7:5d82c92ec2a3 59 led1 = 1;
Marcomissyou 7:5d82c92ec2a3 60 if(sock.is_connected()){
Marcomissyou 7:5d82c92ec2a3 61 led2 = 1;
Marcomissyou 7:5d82c92ec2a3 62 char msg[] = "Hello World";
Marcomissyou 7:5d82c92ec2a3 63 sock.send(msg, sizeof(msg));
Marcomissyou 7:5d82c92ec2a3 64 }
Marcomissyou 7:5d82c92ec2a3 65
Marcomissyou 7:5d82c92ec2a3 66 } else {
Marcomissyou 7:5d82c92ec2a3 67 ble.waitForEvent(); // low power wait for event
Marcomissyou 7:5d82c92ec2a3 68 }
Marcomissyou 7:5d82c92ec2a3 69 }
Marcomissyou 7:5d82c92ec2a3 70 }