ifocus smart light sample v0.9

Dependencies:   MbedJSONValue MQTT

Files at this revision

API Documentation at this revision

Comitter:
zixuanlim
Date:
Wed Dec 11 09:52:56 2019 +0000
Parent:
4:dffb6c949dbf
Child:
6:cd4d7e943f96
Commit message:
Milestone 01 - Updated to latest MBED and WiFi driver. But still failed to receive network changesx callback now.; ;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
wifi-ism43362.lib Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Dec 11 07:17:16 2019 +0000
+++ b/main.cpp	Wed Dec 11 09:52:56 2019 +0000
@@ -7,13 +7,13 @@
 #define WIFI_IDW0XX1    2
 #define MQTTCLIENT_QOS2 1
 
-#define RELAY_TIMEOUT 10
-#define RELAY_TIMEOUT 10
+#define RELAY_TIMEOUT 1
 
 #if (defined(TARGET_DISCO_L475VG_IOT01A) || defined(TARGET_DISCO_F413ZH))
 #include "ISM43362Interface.h"
 
-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);
+//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);
+ISM43362Interface _Wifi(false);
 //
 //#else // External WiFi modules
 //
@@ -25,9 +25,14 @@
 
 #endif
 
+//WiFi LED region
+
+#define WIFI_LED_ON     {_wifiLed.output(); _wifiLed = 1;_isWifiLedOn = 1;}
+#define WIFI_LED_OFF    {_wifiLed.input(); _isWifiLedOn = 0;}
+
 DigitalOut _pirSensorLed(LED1);
 DigitalOut _relayLed(LED2);
-DigitalOut _wiFiLED(LED3);
+DigitalInOut _wifiLed(LED3);
 
 DigitalOut _relay1(D7);
 
@@ -50,19 +55,30 @@
 Timer _resetRelayTimer;
 
 bool _isRelayTriggered = false;
+bool _isWifiConnected = false;
+
+int _isWifiLedOn = 0;
 
 void OnRelay()
 {
-    _relayLed = 1;
+    //_relayLed = 1;
     _relay1 = 1;
     _isRelayTriggered = true;
 }
 
 void OffRelay()
 {
-    _relayLed = 0;
-    _relay1 = 0;
-    _isRelayTriggered = false;
+    if(!_pirSensorLed)
+    {
+        //_relayLed = 0;
+        _relay1 = 0;
+        _isRelayTriggered = false;
+        _resetRelayTimer.stop();
+    }
+    else
+    {
+        _resetRelayTimer.reset();
+    }
 }
 
 void OnTrigger()
@@ -79,7 +95,7 @@
 
 void OffTrigger()
 {
-    _pirSensorLed = 0;
+    _pirSensorLed = 0; //When no more motion trigger, off the PIR LED
 }
 
 void HandlePIR()
@@ -89,43 +105,91 @@
     
     while(true)
     {
-        if(_isRelayTriggered)
+        if(_isRelayTriggered) //If relay is triggering
         {
-            if(_resetRelayTimer.read() > _currentRelayTimeout)
+            if(_resetRelayTimer.read() > _currentRelayTimeout) //Read Timer, if timer read above target time
             {                
-                OffRelay();
-                _resetRelayTimer.stop();
+                OffRelay(); //Turn off the relay
             }
         }
-        wait(0.5);
+        thread_sleep_for(500);
     }
 }
 
 
 void ConnectWifi()
-{
-    _wiFiLED = 0;
-    
-    int ret = 0;
-    
+{   
     do
     {
-        wait(0.5);
-        ret = _Wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
-    }while(ret != 0);
-    
-    _wiFiLED = 1;
+        if(!_isWifiConnected)
+        {
+            _Wifi.disconnect();
 
+            int ret = 0;
+            do
+            {
+                ret = _Wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
+                if(ret != 0)
+                {
+                    thread_sleep_for(500);
+                }
+            }while(ret != 0);
+            
+            //Connected to WiFi interface or WIFI?
+            
+            //Start connectivity
+        }
+        else
+        {
+            _relayLed = !_relayLed;
+        }        
+        thread_sleep_for(500);
+    }while(true);
 }
 
+void status_callback(nsapi_event_t status, intptr_t param)
+{   
+    if (status == NSAPI_EVENT_CONNECTION_STATUS_CHANGE) {
+        switch(param) {
+            case NSAPI_STATUS_GLOBAL_UP:
+            {
+                _isWifiConnected = true;
+                _currentRelayTimeout = 10; //ZXLIM - Assume connected to broker and control by broker
+                WIFI_LED_ON;
+                break;
+            }
+            default:
+            {
+                _isWifiConnected = false; //ZXLIM - Ignore connected LAN 1st.
+                _currentRelayTimeout = 1;
+                break;
+            }
+        }
+    }
+}
+
+
 int main()
 {
     
-    _dioManagerThread.start(callback(HandlePIR));
+    _dioManagerThread.start(callback(HandlePIR));    
+    _Wifi.attach(&status_callback);
     _wifiManagerThread.start(callback(ConnectWifi));
     
     while(true)
     {
-        wait(0.5);
+        while(!_isWifiConnected)
+        {
+            if(!_isWifiLedOn)
+            {
+                WIFI_LED_ON;
+            }
+            else
+            {
+                WIFI_LED_OFF;
+            }            
+            thread_sleep_for(100);
+        }      
+        thread_sleep_for(500);
     }
 }
\ No newline at end of file
--- a/mbed-os.lib	Wed Dec 11 07:17:16 2019 +0000
+++ b/mbed-os.lib	Wed Dec 11 09:52:56 2019 +0000
@@ -1,1 +1,1 @@
-https://github.com/ARMmbed/mbed-os/#569159b784f70feaa32ce226aaca896fb83452f7
+https://github.com/ARMmbed/mbed-os/#679d24833acf0a0b5b0d528576bb37c70863bc4e
--- a/wifi-ism43362.lib	Wed Dec 11 07:17:16 2019 +0000
+++ b/wifi-ism43362.lib	Wed Dec 11 09:52:56 2019 +0000
@@ -1,1 +1,1 @@
-https://github.com/ARMmbed/wifi-ism43362/#e4ecc27e87d96072f7df62a25ef007986dc95c4e
+https://github.com/ARMmbed/wifi-ism43362/#6aee6e996e2c74c9903cf2e0cc2e7e8b6f4ac0ec