Using BLE to control WIFI configuration as SSID and PW.
Dependencies: BLE_API WIFI_API_32kRAM mbed nRF51822
Fork of NNN40_WiFi by
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
main.cpp@7:5d82c92ec2a3, 2015-05-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |