ifocus smart light sample v0.9
Dependencies: MbedJSONValue MQTT
main.cpp@6:cd4d7e943f96, 2019-12-12 (annotated)
- Committer:
- zixuanlim
- Date:
- Thu Dec 12 02:18:11 2019 +0000
- Revision:
- 6:cd4d7e943f96
- Parent:
- 5:9b664d736a6a
Commit for testing again in local....
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zixuanlim | 0:324ca5eb468c | 1 | #include "mbed.h" |
zixuanlim | 0:324ca5eb468c | 2 | #include "TCPSocket.h" |
zixuanlim | 0:324ca5eb468c | 3 | #include "MQTTNetwork.h" |
zixuanlim | 0:324ca5eb468c | 4 | #include "MQTTmbed.h" |
zixuanlim | 0:324ca5eb468c | 5 | #include "MQTTClient.h" |
zixuanlim | 0:324ca5eb468c | 6 | |
zixuanlim | 0:324ca5eb468c | 7 | #define WIFI_IDW0XX1 2 |
zixuanlim | 0:324ca5eb468c | 8 | #define MQTTCLIENT_QOS2 1 |
zixuanlim | 0:324ca5eb468c | 9 | |
zixuanlim | 5:9b664d736a6a | 10 | #define RELAY_TIMEOUT 1 |
zixuanlim | 4:dffb6c949dbf | 11 | |
zixuanlim | 6:cd4d7e943f96 | 12 | #define DEVICE_MAC "1f00000001000000" |
zixuanlim | 6:cd4d7e943f96 | 13 | #define SOFTWARE_VERSION "0.9.0" |
zixuanlim | 6:cd4d7e943f96 | 14 | #define BROKER_URL "ec2-3-0-92-18.ap-southeast-1.compute.amazonaws.com" |
zixuanlim | 6:cd4d7e943f96 | 15 | #define BROKER_PORT 1883 |
zixuanlim | 6:cd4d7e943f96 | 16 | |
zixuanlim | 0:324ca5eb468c | 17 | #if (defined(TARGET_DISCO_L475VG_IOT01A) || defined(TARGET_DISCO_F413ZH)) |
zixuanlim | 0:324ca5eb468c | 18 | #include "ISM43362Interface.h" |
zixuanlim | 0:324ca5eb468c | 19 | |
zixuanlim | 6:cd4d7e943f96 | 20 | //ISM43362Interface _wifi(MBED_CONF_APP_WIFI_SPI_MOSI, MBED_CONF_APP_WIFI_SPI_MISO, MBED_CONF_APP_WIFI_SPI_SCLK, MBED_CONF_APP_WIFI_SPI_NSS, MBED_CONF_APP_WIFI_RESET, MBED_CONF_APP_WIFI_DATAREADY, MBED_CONF_APP_WIFI_WAKEUP, false); |
zixuanlim | 6:cd4d7e943f96 | 21 | ISM43362Interface _wifi(false); |
zixuanlim | 4:dffb6c949dbf | 22 | // |
zixuanlim | 4:dffb6c949dbf | 23 | //#else // External WiFi modules |
zixuanlim | 4:dffb6c949dbf | 24 | // |
zixuanlim | 4:dffb6c949dbf | 25 | //#if MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1 |
zixuanlim | 4:dffb6c949dbf | 26 | //#include "SpwfSAInterface.h" |
zixuanlim | 6:cd4d7e943f96 | 27 | //SpwfSAInterface _wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX); |
zixuanlim | 4:dffb6c949dbf | 28 | // |
zixuanlim | 4:dffb6c949dbf | 29 | //#endif // MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1 |
zixuanlim | 0:324ca5eb468c | 30 | |
zixuanlim | 0:324ca5eb468c | 31 | #endif |
zixuanlim | 4:dffb6c949dbf | 32 | |
zixuanlim | 5:9b664d736a6a | 33 | //WiFi LED region |
zixuanlim | 5:9b664d736a6a | 34 | |
zixuanlim | 5:9b664d736a6a | 35 | #define WIFI_LED_ON {_wifiLed.output(); _wifiLed = 1;_isWifiLedOn = 1;} |
zixuanlim | 5:9b664d736a6a | 36 | #define WIFI_LED_OFF {_wifiLed.input(); _isWifiLedOn = 0;} |
zixuanlim | 5:9b664d736a6a | 37 | |
zixuanlim | 4:dffb6c949dbf | 38 | DigitalOut _pirSensorLed(LED1); |
zixuanlim | 4:dffb6c949dbf | 39 | DigitalOut _relayLed(LED2); |
zixuanlim | 5:9b664d736a6a | 40 | DigitalInOut _wifiLed(LED3); |
zixuanlim | 4:dffb6c949dbf | 41 | |
zixuanlim | 4:dffb6c949dbf | 42 | DigitalOut _relay1(D7); |
zixuanlim | 0:324ca5eb468c | 43 | |
zixuanlim | 4:dffb6c949dbf | 44 | InterruptIn _motionTrigger(D2); |
zixuanlim | 4:dffb6c949dbf | 45 | |
zixuanlim | 4:dffb6c949dbf | 46 | Thread _dioManagerThread; |
zixuanlim | 4:dffb6c949dbf | 47 | Thread _wifiManagerThread; |
zixuanlim | 6:cd4d7e943f96 | 48 | Thread _mqttClientThread; |
zixuanlim | 4:dffb6c949dbf | 49 | |
zixuanlim | 4:dffb6c949dbf | 50 | int _currentRelayTimeout = RELAY_TIMEOUT; |
zixuanlim | 0:324ca5eb468c | 51 | |
zixuanlim | 4:dffb6c949dbf | 52 | typedef enum ServerConnectivity |
zixuanlim | 0:324ca5eb468c | 53 | { |
zixuanlim | 4:dffb6c949dbf | 54 | Disconnected, |
zixuanlim | 4:dffb6c949dbf | 55 | Connected |
zixuanlim | 4:dffb6c949dbf | 56 | }ServerConnectivity; |
zixuanlim | 4:dffb6c949dbf | 57 | |
zixuanlim | 4:dffb6c949dbf | 58 | ServerConnectivity _brokerConnection; |
zixuanlim | 4:dffb6c949dbf | 59 | ServerConnectivity _pelionConnection; |
zixuanlim | 4:dffb6c949dbf | 60 | |
zixuanlim | 4:dffb6c949dbf | 61 | Timer _resetRelayTimer; |
zixuanlim | 4:dffb6c949dbf | 62 | |
zixuanlim | 4:dffb6c949dbf | 63 | bool _isRelayTriggered = false; |
zixuanlim | 5:9b664d736a6a | 64 | bool _isWifiConnected = false; |
zixuanlim | 5:9b664d736a6a | 65 | |
zixuanlim | 5:9b664d736a6a | 66 | int _isWifiLedOn = 0; |
zixuanlim | 4:dffb6c949dbf | 67 | |
zixuanlim | 6:cd4d7e943f96 | 68 | MQTT::Client<MQTTNetwork, Countdown>* _mqttClient; |
zixuanlim | 6:cd4d7e943f96 | 69 | |
zixuanlim | 4:dffb6c949dbf | 70 | void OnRelay() |
zixuanlim | 4:dffb6c949dbf | 71 | { |
zixuanlim | 5:9b664d736a6a | 72 | //_relayLed = 1; |
zixuanlim | 4:dffb6c949dbf | 73 | _relay1 = 1; |
zixuanlim | 4:dffb6c949dbf | 74 | _isRelayTriggered = true; |
zixuanlim | 0:324ca5eb468c | 75 | } |
zixuanlim | 0:324ca5eb468c | 76 | |
zixuanlim | 4:dffb6c949dbf | 77 | void OffRelay() |
zixuanlim | 0:324ca5eb468c | 78 | { |
zixuanlim | 5:9b664d736a6a | 79 | if(!_pirSensorLed) |
zixuanlim | 5:9b664d736a6a | 80 | { |
zixuanlim | 5:9b664d736a6a | 81 | //_relayLed = 0; |
zixuanlim | 5:9b664d736a6a | 82 | _relay1 = 0; |
zixuanlim | 5:9b664d736a6a | 83 | _isRelayTriggered = false; |
zixuanlim | 5:9b664d736a6a | 84 | _resetRelayTimer.stop(); |
zixuanlim | 5:9b664d736a6a | 85 | } |
zixuanlim | 5:9b664d736a6a | 86 | else |
zixuanlim | 5:9b664d736a6a | 87 | { |
zixuanlim | 5:9b664d736a6a | 88 | _resetRelayTimer.reset(); |
zixuanlim | 5:9b664d736a6a | 89 | } |
zixuanlim | 4:dffb6c949dbf | 90 | } |
zixuanlim | 4:dffb6c949dbf | 91 | |
zixuanlim | 4:dffb6c949dbf | 92 | void OnTrigger() |
zixuanlim | 4:dffb6c949dbf | 93 | { |
zixuanlim | 4:dffb6c949dbf | 94 | _pirSensorLed = 1; |
zixuanlim | 4:dffb6c949dbf | 95 | _resetRelayTimer.reset(); |
zixuanlim | 4:dffb6c949dbf | 96 | |
zixuanlim | 4:dffb6c949dbf | 97 | if(!_isRelayTriggered) |
zixuanlim | 4:dffb6c949dbf | 98 | { |
zixuanlim | 4:dffb6c949dbf | 99 | OnRelay(); |
zixuanlim | 4:dffb6c949dbf | 100 | _resetRelayTimer.start(); |
zixuanlim | 0:324ca5eb468c | 101 | } |
zixuanlim | 0:324ca5eb468c | 102 | } |
zixuanlim | 0:324ca5eb468c | 103 | |
zixuanlim | 4:dffb6c949dbf | 104 | void OffTrigger() |
zixuanlim | 0:324ca5eb468c | 105 | { |
zixuanlim | 5:9b664d736a6a | 106 | _pirSensorLed = 0; //When no more motion trigger, off the PIR LED |
zixuanlim | 0:324ca5eb468c | 107 | } |
zixuanlim | 0:324ca5eb468c | 108 | |
zixuanlim | 4:dffb6c949dbf | 109 | void HandlePIR() |
zixuanlim | 0:324ca5eb468c | 110 | { |
zixuanlim | 4:dffb6c949dbf | 111 | _motionTrigger.rise(&OnTrigger); |
zixuanlim | 4:dffb6c949dbf | 112 | _motionTrigger.fall(&OffTrigger); |
zixuanlim | 4:dffb6c949dbf | 113 | |
zixuanlim | 4:dffb6c949dbf | 114 | while(true) |
zixuanlim | 4:dffb6c949dbf | 115 | { |
zixuanlim | 5:9b664d736a6a | 116 | if(_isRelayTriggered) //If relay is triggering |
zixuanlim | 4:dffb6c949dbf | 117 | { |
zixuanlim | 5:9b664d736a6a | 118 | if(_resetRelayTimer.read() > _currentRelayTimeout) //Read Timer, if timer read above target time |
zixuanlim | 4:dffb6c949dbf | 119 | { |
zixuanlim | 5:9b664d736a6a | 120 | OffRelay(); //Turn off the relay |
zixuanlim | 4:dffb6c949dbf | 121 | } |
zixuanlim | 4:dffb6c949dbf | 122 | } |
zixuanlim | 5:9b664d736a6a | 123 | thread_sleep_for(500); |
zixuanlim | 4:dffb6c949dbf | 124 | } |
zixuanlim | 4:dffb6c949dbf | 125 | } |
zixuanlim | 0:324ca5eb468c | 126 | |
zixuanlim | 6:cd4d7e943f96 | 127 | int arrivedcount = 0; |
zixuanlim | 6:cd4d7e943f96 | 128 | |
zixuanlim | 6:cd4d7e943f96 | 129 | void messageArrived(MQTT::MessageData& md) |
zixuanlim | 6:cd4d7e943f96 | 130 | { |
zixuanlim | 6:cd4d7e943f96 | 131 | MQTT::Message &message = md.message; |
zixuanlim | 6:cd4d7e943f96 | 132 | char* payload = (char*)message.payload; |
zixuanlim | 6:cd4d7e943f96 | 133 | printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); |
zixuanlim | 6:cd4d7e943f96 | 134 | printf("Payload %.*s\r\n", message.payloadlen, payload); |
zixuanlim | 6:cd4d7e943f96 | 135 | arrivedcount++; |
zixuanlim | 6:cd4d7e943f96 | 136 | |
zixuanlim | 6:cd4d7e943f96 | 137 | MQTT::Message newMessage; |
zixuanlim | 6:cd4d7e943f96 | 138 | // QoS 0 |
zixuanlim | 6:cd4d7e943f96 | 139 | char buf[100]; |
zixuanlim | 6:cd4d7e943f96 | 140 | sprintf(buf, "Bello From another side! QoS 0 newMessage from app version %s\r\n", SOFTWARE_VERSION); |
zixuanlim | 6:cd4d7e943f96 | 141 | newMessage.qos = MQTT::QOS0; |
zixuanlim | 6:cd4d7e943f96 | 142 | newMessage.retained = false; |
zixuanlim | 6:cd4d7e943f96 | 143 | newMessage.dup = false; |
zixuanlim | 6:cd4d7e943f96 | 144 | newMessage.payload = (void*)buf; |
zixuanlim | 6:cd4d7e943f96 | 145 | newMessage.payloadlen = strlen(buf)+1; |
zixuanlim | 6:cd4d7e943f96 | 146 | _mqttClient->publish("testing123", newMessage); |
zixuanlim | 6:cd4d7e943f96 | 147 | |
zixuanlim | 6:cd4d7e943f96 | 148 | } |
zixuanlim | 6:cd4d7e943f96 | 149 | |
zixuanlim | 6:cd4d7e943f96 | 150 | void ConnectBroker(NetworkInterface *net) |
zixuanlim | 6:cd4d7e943f96 | 151 | { |
zixuanlim | 6:cd4d7e943f96 | 152 | MQTTNetwork mqttNetwork(net); |
zixuanlim | 6:cd4d7e943f96 | 153 | char* topic = "testing123"; |
zixuanlim | 6:cd4d7e943f96 | 154 | |
zixuanlim | 6:cd4d7e943f96 | 155 | MQTT::Client<MQTTNetwork, Countdown> client (mqttNetwork); |
zixuanlim | 6:cd4d7e943f96 | 156 | |
zixuanlim | 6:cd4d7e943f96 | 157 | _mqttClient = &client; |
zixuanlim | 6:cd4d7e943f96 | 158 | |
zixuanlim | 6:cd4d7e943f96 | 159 | int rc = mqttNetwork.connect(BROKER_URL, BROKER_PORT); |
zixuanlim | 6:cd4d7e943f96 | 160 | if (rc != 0) |
zixuanlim | 6:cd4d7e943f96 | 161 | printf("rc from TCP connect is %d\r\n", rc); |
zixuanlim | 6:cd4d7e943f96 | 162 | |
zixuanlim | 6:cd4d7e943f96 | 163 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
zixuanlim | 6:cd4d7e943f96 | 164 | data.MQTTVersion = 3; |
zixuanlim | 6:cd4d7e943f96 | 165 | data.clientID.cstring = DEVICE_MAC; |
zixuanlim | 6:cd4d7e943f96 | 166 | data.username.cstring = DEVICE_MAC; |
zixuanlim | 6:cd4d7e943f96 | 167 | data.password.cstring = DEVICE_MAC; |
zixuanlim | 6:cd4d7e943f96 | 168 | |
zixuanlim | 6:cd4d7e943f96 | 169 | if ((rc = _mqttClient->connect(data)) != 0) |
zixuanlim | 6:cd4d7e943f96 | 170 | printf("rc from MQTT connect is %d\r\n", rc); |
zixuanlim | 6:cd4d7e943f96 | 171 | |
zixuanlim | 6:cd4d7e943f96 | 172 | if ((rc = _mqttClient->subscribe(topic, MQTT::QOS2, messageArrived)) != 0) |
zixuanlim | 6:cd4d7e943f96 | 173 | printf("rc from MQTT subscribe is %d\r\n", rc); |
zixuanlim | 6:cd4d7e943f96 | 174 | |
zixuanlim | 6:cd4d7e943f96 | 175 | MQTT::Message message; |
zixuanlim | 6:cd4d7e943f96 | 176 | |
zixuanlim | 6:cd4d7e943f96 | 177 | // QoS 0 |
zixuanlim | 6:cd4d7e943f96 | 178 | char buf[100]; |
zixuanlim | 6:cd4d7e943f96 | 179 | sprintf(buf, "Hello World! QoS 0 message from app version %s\r\n", SOFTWARE_VERSION); |
zixuanlim | 6:cd4d7e943f96 | 180 | message.qos = MQTT::QOS0; |
zixuanlim | 6:cd4d7e943f96 | 181 | message.retained = false; |
zixuanlim | 6:cd4d7e943f96 | 182 | message.dup = false; |
zixuanlim | 6:cd4d7e943f96 | 183 | message.payload = (void*)buf; |
zixuanlim | 6:cd4d7e943f96 | 184 | message.payloadlen = strlen(buf)+1; |
zixuanlim | 6:cd4d7e943f96 | 185 | rc = _mqttClient->publish(topic, message); |
zixuanlim | 6:cd4d7e943f96 | 186 | while (arrivedcount < 1) |
zixuanlim | 6:cd4d7e943f96 | 187 | _mqttClient->yield(100); |
zixuanlim | 6:cd4d7e943f96 | 188 | |
zixuanlim | 6:cd4d7e943f96 | 189 | // QoS 1 |
zixuanlim | 6:cd4d7e943f96 | 190 | sprintf(buf, "Hello World! QoS 1 message from app version %s\r\n", SOFTWARE_VERSION); |
zixuanlim | 6:cd4d7e943f96 | 191 | message.qos = MQTT::QOS1; |
zixuanlim | 6:cd4d7e943f96 | 192 | message.payloadlen = strlen(buf)+1; |
zixuanlim | 6:cd4d7e943f96 | 193 | rc = _mqttClient->publish(topic, message); |
zixuanlim | 6:cd4d7e943f96 | 194 | while (arrivedcount < 2) |
zixuanlim | 6:cd4d7e943f96 | 195 | _mqttClient->yield(100); |
zixuanlim | 6:cd4d7e943f96 | 196 | |
zixuanlim | 6:cd4d7e943f96 | 197 | // QoS 2 |
zixuanlim | 6:cd4d7e943f96 | 198 | sprintf(buf, "Hello World! QoS 2 message from app version %s\r\n", SOFTWARE_VERSION); |
zixuanlim | 6:cd4d7e943f96 | 199 | message.qos = MQTT::QOS2; |
zixuanlim | 6:cd4d7e943f96 | 200 | message.payloadlen = strlen(buf)+1; |
zixuanlim | 6:cd4d7e943f96 | 201 | rc = _mqttClient->publish(topic, message); |
zixuanlim | 6:cd4d7e943f96 | 202 | |
zixuanlim | 6:cd4d7e943f96 | 203 | while (arrivedcount < 3) |
zixuanlim | 6:cd4d7e943f96 | 204 | _mqttClient->yield(100); |
zixuanlim | 6:cd4d7e943f96 | 205 | |
zixuanlim | 6:cd4d7e943f96 | 206 | while(true) |
zixuanlim | 6:cd4d7e943f96 | 207 | { |
zixuanlim | 6:cd4d7e943f96 | 208 | _mqttClient->yield(100); |
zixuanlim | 6:cd4d7e943f96 | 209 | } |
zixuanlim | 6:cd4d7e943f96 | 210 | } |
zixuanlim | 0:324ca5eb468c | 211 | |
zixuanlim | 4:dffb6c949dbf | 212 | void ConnectWifi() |
zixuanlim | 5:9b664d736a6a | 213 | { |
zixuanlim | 6:cd4d7e943f96 | 214 | _wifi.disconnect(); |
zixuanlim | 6:cd4d7e943f96 | 215 | _wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); |
zixuanlim | 6:cd4d7e943f96 | 216 | //int ret = 0; |
zixuanlim | 6:cd4d7e943f96 | 217 | // do |
zixuanlim | 6:cd4d7e943f96 | 218 | // { |
zixuanlim | 6:cd4d7e943f96 | 219 | // ret = _wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); |
zixuanlim | 6:cd4d7e943f96 | 220 | // if(ret != 0) |
zixuanlim | 6:cd4d7e943f96 | 221 | // { |
zixuanlim | 6:cd4d7e943f96 | 222 | // thread_sleep_for(500); |
zixuanlim | 6:cd4d7e943f96 | 223 | // } |
zixuanlim | 6:cd4d7e943f96 | 224 | // }while(ret != 0); |
zixuanlim | 6:cd4d7e943f96 | 225 | // |
zixuanlim | 4:dffb6c949dbf | 226 | } |
zixuanlim | 4:dffb6c949dbf | 227 | |
zixuanlim | 5:9b664d736a6a | 228 | void status_callback(nsapi_event_t status, intptr_t param) |
zixuanlim | 5:9b664d736a6a | 229 | { |
zixuanlim | 5:9b664d736a6a | 230 | if (status == NSAPI_EVENT_CONNECTION_STATUS_CHANGE) { |
zixuanlim | 5:9b664d736a6a | 231 | switch(param) { |
zixuanlim | 5:9b664d736a6a | 232 | case NSAPI_STATUS_GLOBAL_UP: |
zixuanlim | 5:9b664d736a6a | 233 | { |
zixuanlim | 5:9b664d736a6a | 234 | _isWifiConnected = true; |
zixuanlim | 5:9b664d736a6a | 235 | _currentRelayTimeout = 10; //ZXLIM - Assume connected to broker and control by broker |
zixuanlim | 6:cd4d7e943f96 | 236 | _mqttClientThread.start(callback(ConnectBroker,&_wifi)); |
zixuanlim | 5:9b664d736a6a | 237 | WIFI_LED_ON; |
zixuanlim | 5:9b664d736a6a | 238 | break; |
zixuanlim | 5:9b664d736a6a | 239 | } |
zixuanlim | 5:9b664d736a6a | 240 | default: |
zixuanlim | 5:9b664d736a6a | 241 | { |
zixuanlim | 5:9b664d736a6a | 242 | _isWifiConnected = false; //ZXLIM - Ignore connected LAN 1st. |
zixuanlim | 5:9b664d736a6a | 243 | _currentRelayTimeout = 1; |
zixuanlim | 6:cd4d7e943f96 | 244 | WIFI_LED_OFF; |
zixuanlim | 5:9b664d736a6a | 245 | break; |
zixuanlim | 5:9b664d736a6a | 246 | } |
zixuanlim | 5:9b664d736a6a | 247 | } |
zixuanlim | 5:9b664d736a6a | 248 | } |
zixuanlim | 5:9b664d736a6a | 249 | } |
zixuanlim | 5:9b664d736a6a | 250 | |
zixuanlim | 4:dffb6c949dbf | 251 | int main() |
zixuanlim | 4:dffb6c949dbf | 252 | { |
zixuanlim | 0:324ca5eb468c | 253 | |
zixuanlim | 5:9b664d736a6a | 254 | _dioManagerThread.start(callback(HandlePIR)); |
zixuanlim | 6:cd4d7e943f96 | 255 | _wifi.attach(&status_callback); |
zixuanlim | 6:cd4d7e943f96 | 256 | _wifi.set_blocking(false); |
zixuanlim | 4:dffb6c949dbf | 257 | _wifiManagerThread.start(callback(ConnectWifi)); |
zixuanlim | 4:dffb6c949dbf | 258 | |
zixuanlim | 4:dffb6c949dbf | 259 | while(true) |
zixuanlim | 4:dffb6c949dbf | 260 | { |
zixuanlim | 5:9b664d736a6a | 261 | while(!_isWifiConnected) |
zixuanlim | 5:9b664d736a6a | 262 | { |
zixuanlim | 5:9b664d736a6a | 263 | if(!_isWifiLedOn) |
zixuanlim | 5:9b664d736a6a | 264 | { |
zixuanlim | 5:9b664d736a6a | 265 | WIFI_LED_ON; |
zixuanlim | 5:9b664d736a6a | 266 | } |
zixuanlim | 5:9b664d736a6a | 267 | else |
zixuanlim | 5:9b664d736a6a | 268 | { |
zixuanlim | 5:9b664d736a6a | 269 | WIFI_LED_OFF; |
zixuanlim | 5:9b664d736a6a | 270 | } |
zixuanlim | 5:9b664d736a6a | 271 | thread_sleep_for(100); |
zixuanlim | 5:9b664d736a6a | 272 | } |
zixuanlim | 5:9b664d736a6a | 273 | thread_sleep_for(500); |
zixuanlim | 4:dffb6c949dbf | 274 | } |
zixuanlim | 4:dffb6c949dbf | 275 | } |