Port from Avnet's Internet Of Things full WiGo demo: SmartConfig - WebServer - Exosite - Android sensor Fusion App

Dependencies:   NVIC_set_all_priorities mbed cc3000_hostdriver_mbedsocket TEMT6200 TSI Wi-Go_eCompass_Lib_V3 WiGo_BattCharger

Wi-Go Reference Design Overview


For additional information on Wi-Go, please visit http://www.em.avnet.com/wi-go
For additional information on Freescale eCompass, please visit
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=E-Compass
Ported from Avnet's Wi-Go KEIL code.
Special thanks to Jim Carver from Avnet for providing the Wi-Go board and for his assistance.


Multiple Wi-Fi applications are provided within the latest version of Wi-Go software:

  • SmartConfig App for auto-setup of Wi-Go network parameters.
  • WebServer display of live sensor data.
  • Exosite portal sensor data feed by Wi-Go.
  • Freescale's Sensor Fusion App data feed by Wi-Go.

Wi-Go is intended for "untethered" portable operation (using it's high-capacity Lithium-Polymer battery). The serial terminal text interface is only required for initial setup, thereafter selection of an application from those available is via finger position on the Touch Slider during the initial 6 second startup period.

Running the Wi-Go Demo Suite

Warning

The on-board Firmware must be updated to mbed enable a Wi-Go system.
Goto the Component page to get the FirmwareUpdate tool (scroll down to the FirmwareUpdate topic).

MAG3110 sensor and eCompass Calibration!

As with the other sensor applications, the eCompass function requires quality calibration data to achieve best accuracy.
For the first 15 seconds after power-up it is recommended that "Figure 8" movements with Wi-Go be done in a smooth, repetitive pattern. Don't touch the slider pad during calibration.

Startup
The RGB LED blinks in a GREEN-ORANGE sequence to inform the user the module is waiting for input.
The RGB LED color designates which of the following Apps to launch.

RGB LED ColorApplication to Launch
OrangeErase all wireless profiles
PurpleSmartConfig
BlueWebServer
RedExosite Data Client
GreenAndroid Server

Swipe your index finger across the slider pad, the RGB LED color will change at approximately 20% intervals.
Removing your finger latches the last color displayed. After about 3 seconds, the selected app will start.
Another app can be selected when the slider pad is touched again within the 3 seconds timeout.

After launch of Exosite or Android Server Apps, the eCompass function then controls the RGB LED.
(not in WebServer mode where RGB LEDs are manually controlled by the User).

RGB LED ColorDirection Indication
BlueNear to North
GreenNorth
RedEast / West
PurpleSouth

__Note!__ The D1, D2 and D3 User LEDs on Wi-Go adhere to the following convention for the different Apps

User LED#Description of function controlling the LED
D1is the board heartbeat, derived from the timer interrupt
D2indicates network activity as follows:
Web Server Wi-Go webpage is being served.
Exosite Client Wi-Go is sending data.
Android App Wi-Go is sending data
D3WLAN Network is Connected

Detail of Wi-Go Applications

App #1: SmartConfig
See TI's pages on how to use the SmartConfig tool:

  • Preferred method : Configuration using the SmartConfig tool
  • SmartConfig download: Smart Config and Home Automation
    • iOS app : available at Apple app store.
    • Android app : download and install the Android SmartConfig Application on a PC.
      This file contains the source code as well as the compiled APK file.
      The APK file is stored in ti\CC3000AndroidApp\SmartConfigCC3X\bin.

App #2: WebServer display of live sensor data
__Note!__
When using the WebServer for the first time on a Wi-Fi network you will need to determine the IP address that's assigned to Wi-Go by the DHCP Server. To do this, it is recommended you use one of the following two methods:

  • While Wi-Go is initially tethered to a laptop via USB, launch of the WebServer Application and note the IP address that is reported on the terminal screen immediately after selection of this App.
  • Alternatively, use a 3rd party LAN SCAN type tool to view Wi-Go's IP address.
    eg. FING, - available for free download from Google Play or iTunes App Stores…

Wi-Go's WebServer Application is selected as follows:

  • Press RESET, followed by the eCompass Calibration (mentioned at the top of this page).
    Then use index finger on slider to select the WebServer App (RGB LED = BLUE).
    At end of the 3 second selection period the WebServer App shall launch.
  • If you are tethered to a laptop and have a terminal open the Wi-Fi network connection confirmation will be seen, eg.

'*** Wi-Go board DHCP assigned IP Address = 192.168.43.102
  • Once you have noted Wi-Go's reported IP address, the USB cable may be disconnected and Wi-Go then used as intended, running on it's own battery power.
  • Use an Internet Browser on SmartPhone/Tablet/Laptop (connected to same Hot-Spot/Wireless Router subnet), to now connect to the noted Wi-Go IP address and view the WebServer output: /media/uploads/frankvnk/wi-go_webserver.png
  • the Webserver sensor data is auto-updated every 2 seconds a manual refresh (F5 on laptop).
  • In the event of an error, press refresh to regenerate the screen.
  • Use the mouse (or touch-screen) to exercise the RGB LED output.

App #3: Exosite Data Client
Wi-Go's sensor data gets transmitted via Wi-Fi to a cloud-based Exosite portal where the sensor measurements are displayed graphically on a "dashboard". Users can create unique customized dashboards using drag and drop GUI widgets from the library provided on the Exosite website.
__Note!__ For the Exosite application a "live" connection to the Internet is required !!!

  • Press RESET, followed by the eCompass Calibration (mentioned at the top of this page).
    Then use index finger on slider to select the Exosite Client App (RGB LED = RED)
  • On launching this App, note Wi-Go's MAC address displayed on your terminal
    (if not running a terminal use FING or other WLAN Scan tool to determine Wi-Go's MAC address) /media/uploads/frankvnk/mac_address.png
  • Using your computer's internet browser, go to avnet.exosite.com and sign-up for a free Avnet Trial Exosite Account: /media/uploads/frankvnk/avnet_trial_exosite.png
  • On the next screen, click on the Sign-Up Now button in the displayed Avnet Trial account option.
  • Complete the Account Info and Contact Info then click on Create Account (make sure to use a valid email address!).
  • Check for new incoming email from avnet.exosite.com to the address you provided and click on the link in this email to activate your new Exosite account.
  • Once activated, login using the email address and password that you chose in your registration. Your Exosite Portal and Dashboard should now display. The first time you log-in to your new account, the default Home dashboard will be displayed, pre-configured with two widgets. On the left is the Welcome widget for tips and information. On the right is the Device List widget.
    Dashboards are configurable, so at any time this default dashboard can be changed, widgets deleted and added (Clicking the upside-down triangle icon in a widget's Title bar will allow you to edit it).
  • Before going further with the Dashboard, you need to connect your Wi-Go device to your Exosite account. Do this by going to the left sidebar and selecting Devices followed by selecting the +Add Device link (on right of screen). /media/uploads/frankvnk/add_device.png
  • In the Setup screens that follow, enter the following
Select a supported deviceWi-Go
Enter device MAC Addressnn:nn:nn:nn:nn:nn [your Wi-Go's MAC address including colons]
Enter device Name[choose a descriptive name]
Enter device Location[description of your location]
  • Once completed, under Devices the name chosen for the added Wi-Go device should now be listed.
  • Click on this new Wi-Go device to examine (and edit if necessary) it's Device Information screen.
    /media/uploads/frankvnk/device_information.png
  • Click the CLOSE button to exit the Device Information screen.
  • On your Wi-Go kit now press RESET, followed by the eCompass Calibration (mentioned at the top of this page)
    and again select the Exosite Client App (RGB LED = RED) using your index finger.
  • Refresh your browser (press F5) a couple've times until the Active indicator changes to On (Green).
    /media/uploads/frankvnk/active_indicator.png
  • From the left sidebar click on Home and click on the recently named Wi-Go device which is located under the Device List.
    This will bring-up a default dashboard display similar to what's shown below.
    (Dashboards are typically accessed via the Dashboards menu entry). Check the dashboard is updating with live data by moving your Wi-Go Kit through different orientations.
    /media/uploads/frankvnk/dashboard.png
  • To create a custom dashboard, select Dashboards from the sidebar menu, followed by +Add Dashboard (on right side of Your Dashboards title bar). After completion of the initial configuration screen you will then be able to add Widgets to display the various Wi-Go data sources as well as pictures and text to support your application.
  • More guidance on the creation, editing and sharing of custom dashboards is available under the Exosite support pages

App #4: Android Sensor Fusion App

  • Press RESET, followed by the eCompass Calibration (mentioned at the top of this page)
    , then use index finger on slider to select the Android App (RGB LED = GREEN)
  • Freescale's ''Xtrinsic Sensor Fusion Toolbox'" will run on Android 3.0 or above phone or tablet. Free to download from Google Play, type Sensor fusion in the search box to find it. freescale.sensors.sfusion /media/uploads/frankvnk/sensor_fusion_toolbox.png
  • The Freescale App is well documented. To access the built-in documentation, press the NAV button at top of screen followed by Documentation from the scroll-down menu:
    /media/uploads/frankvnk/sensor_fusion_doc.png
  • Freescale's sensors site provides additional resources such as this overview: free-android-app-teaches-sensor-fusion-basics
  • Go to the Options Menu and select Preferences… /media/uploads/frankvnk/sensor_fusion_preferences.png
  • The following items need to be taken care of:
Enter WiGo's IP address
Enter the SSID (of the Hot-Spot or Wireless Access Point used by Wi-Go)
  • Press Save and Exit!
    /media/uploads/frankvnk/sensor_fusion_save_and_exit.png
  • Exit the Application completely then re-launch the Sensor Fusion Application.
  • Select the ''Source/Algorithm'" menu and change the data source to Wi-Go mag/accel /media/uploads/frankvnk/sensor_fusion_wigo_mag_accel.png
  • The Android App should now be displaying a 3-D image of Wi-Go that you can rotate and flip-over by moving the Wi-Go board accordingly…
  • Use NAV > Device View to display if this view does not come-up by default. /media/uploads/frankvnk/sensor_fusion_nav_device_view.png
  • A Serial Terminal connection is not necessary but if you happen to have one open you should see the following messages as Wi-Go connects to the Android App:
    "Server waiting for connection" followed by
    "connected, transmit buffer size= 96", and then
    "input = 0123456789"
    at which time Wi-Go starts streaming data to the Android App.
Committer:
frankvnk
Date:
Mon Oct 21 20:51:10 2013 +0000
Revision:
0:ebcd5ecff2cf
Child:
1:99bfc8d68fd3
Initial release - webserver only

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 0:ebcd5ecff2cf 1 /* mbed Microcontroller Library
frankvnk 0:ebcd5ecff2cf 2 * Copyright (c) 2006-2013 ARM Limited
frankvnk 0:ebcd5ecff2cf 3 *
frankvnk 0:ebcd5ecff2cf 4 * Licensed under the Apache License, Version 2.0 (the "License");
frankvnk 0:ebcd5ecff2cf 5 * you may not use this file except in compliance with the License.
frankvnk 0:ebcd5ecff2cf 6 * You may obtain a copy of the License at
frankvnk 0:ebcd5ecff2cf 7 *
frankvnk 0:ebcd5ecff2cf 8 * http://www.apache.org/licenses/LICENSE-2.0
frankvnk 0:ebcd5ecff2cf 9 *
frankvnk 0:ebcd5ecff2cf 10 * Unless required by applicable law or agreed to in writing, software
frankvnk 0:ebcd5ecff2cf 11 * distributed under the License is distributed on an "AS IS" BASIS,
frankvnk 0:ebcd5ecff2cf 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
frankvnk 0:ebcd5ecff2cf 13 * See the License for the specific language governing permissions and
frankvnk 0:ebcd5ecff2cf 14 * limitations under the License.
frankvnk 0:ebcd5ecff2cf 15 */
frankvnk 0:ebcd5ecff2cf 16 #include "mbed.h"
frankvnk 0:ebcd5ecff2cf 17 #include "cc3000.h"
frankvnk 0:ebcd5ecff2cf 18 #include "main.h"
frankvnk 0:ebcd5ecff2cf 19
frankvnk 0:ebcd5ecff2cf 20 #include "demo.h"
frankvnk 0:ebcd5ecff2cf 21
frankvnk 0:ebcd5ecff2cf 22 using namespace mbed_cc3000;
frankvnk 0:ebcd5ecff2cf 23
frankvnk 0:ebcd5ecff2cf 24 tUserFS user_info;
frankvnk 0:ebcd5ecff2cf 25
frankvnk 0:ebcd5ecff2cf 26 /* cc3000 module declaration specific for user's board. Check also init() */
frankvnk 0:ebcd5ecff2cf 27 #if (MY_BOARD == WIGO)
frankvnk 0:ebcd5ecff2cf 28
frankvnk 0:ebcd5ecff2cf 29 #include "defLED.h"
frankvnk 0:ebcd5ecff2cf 30 #include "TSISensor.h"
frankvnk 0:ebcd5ecff2cf 31 #include "TEMT6200.h"
frankvnk 0:ebcd5ecff2cf 32 #include "WiGo_BattCharger.h"
frankvnk 0:ebcd5ecff2cf 33 #include "MMA8451Q.h"
frankvnk 0:ebcd5ecff2cf 34 #include "MAG3110.h"
frankvnk 0:ebcd5ecff2cf 35 #include "MPL3115A2.h"
frankvnk 0:ebcd5ecff2cf 36 #include "Wi-Go_eCompass_Lib_V3.h"
frankvnk 0:ebcd5ecff2cf 37 #include "demo.h"
frankvnk 0:ebcd5ecff2cf 38 //#include "run_exosite.h"
frankvnk 0:ebcd5ecff2cf 39
frankvnk 0:ebcd5ecff2cf 40 #define FCOUNTSPERG 4096.0F // sensor specific: MMA8451 provide 4096 counts / g in 2g mode
frankvnk 0:ebcd5ecff2cf 41 #define FCOUNTSPERUT 10.0F // sensor specific: MAG3110 provide 10 counts / uT
frankvnk 0:ebcd5ecff2cf 42
frankvnk 0:ebcd5ecff2cf 43 #define BATT_0 0.53
frankvnk 0:ebcd5ecff2cf 44 #define BATT_100 0.63
frankvnk 0:ebcd5ecff2cf 45
frankvnk 0:ebcd5ecff2cf 46 DigitalOut ledr (LED_RED);
frankvnk 0:ebcd5ecff2cf 47 DigitalOut ledg (LED_GREEN);
frankvnk 0:ebcd5ecff2cf 48 DigitalOut ledb (LED_BLUE);
frankvnk 0:ebcd5ecff2cf 49 DigitalOut led1 (PTB8);
frankvnk 0:ebcd5ecff2cf 50 DigitalOut led2 (PTB9);
frankvnk 0:ebcd5ecff2cf 51 DigitalOut led3 (PTB10);
frankvnk 0:ebcd5ecff2cf 52
frankvnk 0:ebcd5ecff2cf 53 cc3000 wifi(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn);
frankvnk 0:ebcd5ecff2cf 54 Serial pc(USBTX, USBRX);
frankvnk 0:ebcd5ecff2cf 55
frankvnk 0:ebcd5ecff2cf 56 // Slide sensor
frankvnk 0:ebcd5ecff2cf 57 TSISensor tsi;
frankvnk 0:ebcd5ecff2cf 58
frankvnk 0:ebcd5ecff2cf 59 // Systick
frankvnk 0:ebcd5ecff2cf 60 Ticker systick;
frankvnk 0:ebcd5ecff2cf 61
frankvnk 0:ebcd5ecff2cf 62 // Ambient light sensor : PTD5 = enable, PTB0 = analog input
frankvnk 0:ebcd5ecff2cf 63 TEMT6200 ambi(PTD5, PTB0);
frankvnk 0:ebcd5ecff2cf 64
frankvnk 0:ebcd5ecff2cf 65 //Wi-Go battery charger control
frankvnk 0:ebcd5ecff2cf 66 WiGo_BattCharger Batt(CHRG_EN1, CHRG_EN2, CHRG_SNS_EN, CHRG_SNS, CHRG_POK, CHRG_CHG);
frankvnk 0:ebcd5ecff2cf 67
frankvnk 0:ebcd5ecff2cf 68 // Accelerometer
frankvnk 0:ebcd5ecff2cf 69 #define MMA8451_I2C_ADDRESS (0x1d<<1)
frankvnk 0:ebcd5ecff2cf 70 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
frankvnk 0:ebcd5ecff2cf 71
frankvnk 0:ebcd5ecff2cf 72 // Magnetometer
frankvnk 0:ebcd5ecff2cf 73 MAG3110 mag(PTE0, PTE1);
frankvnk 0:ebcd5ecff2cf 74
frankvnk 0:ebcd5ecff2cf 75 // altimeter-Pressure-Temperature (apt)
frankvnk 0:ebcd5ecff2cf 76 #define MPL3115A2_I2C_ADDRESS (0x60<<1)
frankvnk 0:ebcd5ecff2cf 77 MPL3115A2 apt( PTE0, PTE1, MPL3115A2_I2C_ADDRESS);
frankvnk 0:ebcd5ecff2cf 78
frankvnk 0:ebcd5ecff2cf 79 volatile int secondFlag;
frankvnk 0:ebcd5ecff2cf 80 volatile int HsecondFlag;
frankvnk 0:ebcd5ecff2cf 81 unsigned int seconds;
frankvnk 0:ebcd5ecff2cf 82 unsigned int compass_type;
frankvnk 0:ebcd5ecff2cf 83 unsigned short adc_sample3;
frankvnk 0:ebcd5ecff2cf 84 float fcountperg = 1.0F / FCOUNTSPERG;
frankvnk 0:ebcd5ecff2cf 85 float fcountperut = 1.0F / FCOUNTSPERUT;
frankvnk 0:ebcd5ecff2cf 86 volatile unsigned char newData;
frankvnk 0:ebcd5ecff2cf 87 int server_running;
frankvnk 0:ebcd5ecff2cf 88 axis6_t axis6;
frankvnk 0:ebcd5ecff2cf 89 int do_mDNS = 0;
frankvnk 0:ebcd5ecff2cf 90 //Device name - used for Smart config in order to stop the Smart phone configuration process
frankvnk 0:ebcd5ecff2cf 91 char DevServname[] = "CC3000";
frankvnk 0:ebcd5ecff2cf 92
frankvnk 0:ebcd5ecff2cf 93 void initLEDs(void)
frankvnk 0:ebcd5ecff2cf 94 {
frankvnk 0:ebcd5ecff2cf 95 RED_OFF;
frankvnk 0:ebcd5ecff2cf 96 GREEN_OFF;
frankvnk 0:ebcd5ecff2cf 97 BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 98 LED_D1_OFF;
frankvnk 0:ebcd5ecff2cf 99 LED_D2_OFF;
frankvnk 0:ebcd5ecff2cf 100 LED_D3_OFF;
frankvnk 0:ebcd5ecff2cf 101 }
frankvnk 0:ebcd5ecff2cf 102
frankvnk 0:ebcd5ecff2cf 103 void GreenStop(void)
frankvnk 0:ebcd5ecff2cf 104 {
frankvnk 0:ebcd5ecff2cf 105 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 106 while(1)
frankvnk 0:ebcd5ecff2cf 107 {
frankvnk 0:ebcd5ecff2cf 108 GREEN_ON;
frankvnk 0:ebcd5ecff2cf 109 secondFlag = 0;
frankvnk 0:ebcd5ecff2cf 110 while(!secondFlag);
frankvnk 0:ebcd5ecff2cf 111 GREEN_OFF;
frankvnk 0:ebcd5ecff2cf 112 secondFlag = 0;
frankvnk 0:ebcd5ecff2cf 113 while(!secondFlag);
frankvnk 0:ebcd5ecff2cf 114 }
frankvnk 0:ebcd5ecff2cf 115 }
frankvnk 0:ebcd5ecff2cf 116
frankvnk 0:ebcd5ecff2cf 117 void accel_read(void)
frankvnk 0:ebcd5ecff2cf 118 {
frankvnk 0:ebcd5ecff2cf 119 signed short resultx, resulty, resultz;
frankvnk 0:ebcd5ecff2cf 120 if(acc.isDataAvailable())
frankvnk 0:ebcd5ecff2cf 121 {
frankvnk 0:ebcd5ecff2cf 122 acc.getAccRawX(&resultx);
frankvnk 0:ebcd5ecff2cf 123 acc.getAccRawY(&resulty);
frankvnk 0:ebcd5ecff2cf 124 acc.getAccRawZ(&resultz);
frankvnk 0:ebcd5ecff2cf 125 if(compass_type == NED_COMPASS)
frankvnk 0:ebcd5ecff2cf 126 {
frankvnk 0:ebcd5ecff2cf 127 axis6.acc_x = resultx;
frankvnk 0:ebcd5ecff2cf 128 axis6.acc_y = -1 * resulty; // multiple by -1 to compensate for PCB layout
frankvnk 0:ebcd5ecff2cf 129 axis6.acc_z = resultz;
frankvnk 0:ebcd5ecff2cf 130 }
frankvnk 0:ebcd5ecff2cf 131 if(compass_type == ANDROID_COMPASS)
frankvnk 0:ebcd5ecff2cf 132 {
frankvnk 0:ebcd5ecff2cf 133 axis6.acc_x = resulty; //
frankvnk 0:ebcd5ecff2cf 134 axis6.acc_y = -1 * resultx;
frankvnk 0:ebcd5ecff2cf 135 axis6.acc_z = resultz;
frankvnk 0:ebcd5ecff2cf 136 }
frankvnk 0:ebcd5ecff2cf 137 if(compass_type == WINDOWS_COMPASS)
frankvnk 0:ebcd5ecff2cf 138 {
frankvnk 0:ebcd5ecff2cf 139 axis6.acc_x = -1 * resulty; //
frankvnk 0:ebcd5ecff2cf 140 axis6.acc_y = resultx;
frankvnk 0:ebcd5ecff2cf 141 axis6.acc_z = resultz;
frankvnk 0:ebcd5ecff2cf 142 }
frankvnk 0:ebcd5ecff2cf 143 axis6.fax = axis6.acc_x;
frankvnk 0:ebcd5ecff2cf 144 axis6.fay = axis6.acc_y;
frankvnk 0:ebcd5ecff2cf 145 axis6.faz = axis6.acc_z;
frankvnk 0:ebcd5ecff2cf 146 axis6.fGax = axis6.fax * fcountperg;
frankvnk 0:ebcd5ecff2cf 147 axis6.fGay = axis6.fay * fcountperg;
frankvnk 0:ebcd5ecff2cf 148 axis6.fGaz = axis6.faz * fcountperg;
frankvnk 0:ebcd5ecff2cf 149 }
frankvnk 0:ebcd5ecff2cf 150 }
frankvnk 0:ebcd5ecff2cf 151
frankvnk 0:ebcd5ecff2cf 152 void readTempAlt(void) // We don't use the fractional data
frankvnk 0:ebcd5ecff2cf 153 {
frankvnk 0:ebcd5ecff2cf 154 unsigned char raw_data[5];
frankvnk 0:ebcd5ecff2cf 155 if(apt.getAllDataRaw(&raw_data[0]))
frankvnk 0:ebcd5ecff2cf 156 {
frankvnk 0:ebcd5ecff2cf 157 axis6.temp = raw_data[3];
frankvnk 0:ebcd5ecff2cf 158 axis6.alt = ((raw_data[0] << 8) | raw_data[1]);
frankvnk 0:ebcd5ecff2cf 159
frankvnk 0:ebcd5ecff2cf 160 }
frankvnk 0:ebcd5ecff2cf 161 }
frankvnk 0:ebcd5ecff2cf 162
frankvnk 0:ebcd5ecff2cf 163 void readCompass( void )
frankvnk 0:ebcd5ecff2cf 164 {
frankvnk 0:ebcd5ecff2cf 165 if(compass_type == NED_COMPASS)
frankvnk 0:ebcd5ecff2cf 166 {
frankvnk 0:ebcd5ecff2cf 167 axis6.mag_y = mag.readVal(MAG_OUT_X_MSB); // x & y swapped to compenste for PCB layout
frankvnk 0:ebcd5ecff2cf 168 axis6.mag_x = mag.readVal(MAG_OUT_Y_MSB); //
frankvnk 0:ebcd5ecff2cf 169 axis6.mag_z = mag.readVal(MAG_OUT_Z_MSB); //
frankvnk 0:ebcd5ecff2cf 170 }
frankvnk 0:ebcd5ecff2cf 171 if(compass_type == ANDROID_COMPASS)
frankvnk 0:ebcd5ecff2cf 172 {
frankvnk 0:ebcd5ecff2cf 173 axis6.mag_x = mag.readVal(MAG_OUT_X_MSB); //
frankvnk 0:ebcd5ecff2cf 174 axis6.mag_y = mag.readVal(MAG_OUT_Y_MSB); //
frankvnk 0:ebcd5ecff2cf 175 axis6.mag_z = -1 * mag.readVal(MAG_OUT_Z_MSB); // negate to reverse axis of Z to conform to Android coordinate system
frankvnk 0:ebcd5ecff2cf 176 }
frankvnk 0:ebcd5ecff2cf 177 if(compass_type == WINDOWS_COMPASS)
frankvnk 0:ebcd5ecff2cf 178 {
frankvnk 0:ebcd5ecff2cf 179 axis6.mag_x = mag.readVal(MAG_OUT_X_MSB); //
frankvnk 0:ebcd5ecff2cf 180 axis6.mag_y = mag.readVal(MAG_OUT_Y_MSB); //
frankvnk 0:ebcd5ecff2cf 181 axis6.mag_z = -1 * mag.readVal(MAG_OUT_Z_MSB); //
frankvnk 0:ebcd5ecff2cf 182 }
frankvnk 0:ebcd5ecff2cf 183 axis6.fmx = axis6.mag_x;
frankvnk 0:ebcd5ecff2cf 184 axis6.fmy = axis6.mag_y;
frankvnk 0:ebcd5ecff2cf 185 axis6.fmz = axis6.mag_z;
frankvnk 0:ebcd5ecff2cf 186 axis6.fUTmx = axis6.fmx * fcountperut;
frankvnk 0:ebcd5ecff2cf 187 axis6.fUTmy = axis6.fmy * fcountperut;
frankvnk 0:ebcd5ecff2cf 188 axis6.fUTmz = axis6.fmz * fcountperut;
frankvnk 0:ebcd5ecff2cf 189 }
frankvnk 0:ebcd5ecff2cf 190
frankvnk 0:ebcd5ecff2cf 191 void set_dir_LED(void)
frankvnk 0:ebcd5ecff2cf 192 {
frankvnk 0:ebcd5ecff2cf 193 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 194
frankvnk 0:ebcd5ecff2cf 195 if((axis6.compass >= 353) || (axis6.compass <= 7))
frankvnk 0:ebcd5ecff2cf 196 {
frankvnk 0:ebcd5ecff2cf 197 GREEN_ON;
frankvnk 0:ebcd5ecff2cf 198 }
frankvnk 0:ebcd5ecff2cf 199 else
frankvnk 0:ebcd5ecff2cf 200 {
frankvnk 0:ebcd5ecff2cf 201 GREEN_OFF;
frankvnk 0:ebcd5ecff2cf 202 }
frankvnk 0:ebcd5ecff2cf 203 if(((axis6.compass >= 348) && (axis6.compass <= 357)) || ((axis6.compass >= 3) && (axis6.compass <= 12)))
frankvnk 0:ebcd5ecff2cf 204 {
frankvnk 0:ebcd5ecff2cf 205 BLUE_ON;
frankvnk 0:ebcd5ecff2cf 206 }
frankvnk 0:ebcd5ecff2cf 207 else
frankvnk 0:ebcd5ecff2cf 208 {
frankvnk 0:ebcd5ecff2cf 209 BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 210 }
frankvnk 0:ebcd5ecff2cf 211 if((axis6.compass >= 348) || (axis6.compass <= 12)) return;
frankvnk 0:ebcd5ecff2cf 212 if(((axis6.compass >= 268) && (axis6.compass <= 272)) || ((axis6.compass >= 88) && (axis6.compass <= 92)))
frankvnk 0:ebcd5ecff2cf 213 {
frankvnk 0:ebcd5ecff2cf 214 RED_ON;
frankvnk 0:ebcd5ecff2cf 215 return;
frankvnk 0:ebcd5ecff2cf 216 }
frankvnk 0:ebcd5ecff2cf 217 if((axis6.compass >= 178) && (axis6.compass <= 182))
frankvnk 0:ebcd5ecff2cf 218 {
frankvnk 0:ebcd5ecff2cf 219 BLUE_ON;
frankvnk 0:ebcd5ecff2cf 220 RED_ON;
frankvnk 0:ebcd5ecff2cf 221 return;
frankvnk 0:ebcd5ecff2cf 222 }
frankvnk 0:ebcd5ecff2cf 223 }
frankvnk 0:ebcd5ecff2cf 224
frankvnk 0:ebcd5ecff2cf 225 void SysTick_Handler(void)
frankvnk 0:ebcd5ecff2cf 226 {
frankvnk 0:ebcd5ecff2cf 227 static unsigned int ttt = 1;
frankvnk 0:ebcd5ecff2cf 228 int ts;
frankvnk 0:ebcd5ecff2cf 229 ts = ttt & 0x3;
frankvnk 0:ebcd5ecff2cf 230 if(ts == 2) readCompass();
frankvnk 0:ebcd5ecff2cf 231 if(ts == 1) accel_read();
frankvnk 0:ebcd5ecff2cf 232 if(ts == 3)
frankvnk 0:ebcd5ecff2cf 233 {
frankvnk 0:ebcd5ecff2cf 234 run_eCompass();
frankvnk 0:ebcd5ecff2cf 235 newData = 1; // a general purpose flag for things that need to synch to the ISR
frankvnk 0:ebcd5ecff2cf 236 axis6.timestamp++;
frankvnk 0:ebcd5ecff2cf 237 if(!server_running) set_dir_LED(); // Set the LEDs based on direction when nothing else is usng them
frankvnk 0:ebcd5ecff2cf 238 }
frankvnk 0:ebcd5ecff2cf 239 if(ttt == 20)//100)
frankvnk 0:ebcd5ecff2cf 240 {
frankvnk 0:ebcd5ecff2cf 241 LED_D1_ON;
frankvnk 0:ebcd5ecff2cf 242 if(seconds && (seconds < 15)) calibrate_eCompass();
frankvnk 0:ebcd5ecff2cf 243 readTempAlt();
frankvnk 0:ebcd5ecff2cf 244 axis6.light = ambi.readRaw(); // Light Sensor
frankvnk 0:ebcd5ecff2cf 245 HsecondFlag = 1; // A general purpose flag for things that need to happen every 500ms
frankvnk 0:ebcd5ecff2cf 246 }
frankvnk 0:ebcd5ecff2cf 247 if(ttt >= 40)//200)
frankvnk 0:ebcd5ecff2cf 248 {
frankvnk 0:ebcd5ecff2cf 249 LED_D1_OFF;
frankvnk 0:ebcd5ecff2cf 250 ttt = 1;
frankvnk 0:ebcd5ecff2cf 251 calibrate_eCompass();
frankvnk 0:ebcd5ecff2cf 252 Batt.sense_en(1);
frankvnk 0:ebcd5ecff2cf 253 adc_sample3 = Batt.level();
frankvnk 0:ebcd5ecff2cf 254 Batt.sense_en(0);
frankvnk 0:ebcd5ecff2cf 255 secondFlag = 1; // A general purpose flag for things that need to happen once a second
frankvnk 0:ebcd5ecff2cf 256 HsecondFlag = 1;
frankvnk 0:ebcd5ecff2cf 257 seconds++;
frankvnk 0:ebcd5ecff2cf 258 if(!(seconds & 0x1F)) do_mDNS = 1;
frankvnk 0:ebcd5ecff2cf 259 } else ttt++;
frankvnk 0:ebcd5ecff2cf 260 }
frankvnk 0:ebcd5ecff2cf 261
frankvnk 0:ebcd5ecff2cf 262 #elif (MY_BOARD == WIFI_DIPCORTEX)
frankvnk 0:ebcd5ecff2cf 263 cc3000 wifi(p28, p27, p30, SPI(p21, p14, p37), PIN_INT0_IRQn);
frankvnk 0:ebcd5ecff2cf 264 Serial pc(UART_TX, UART_RX);
frankvnk 0:ebcd5ecff2cf 265 #else
frankvnk 0:ebcd5ecff2cf 266
frankvnk 0:ebcd5ecff2cf 267 #endif
frankvnk 0:ebcd5ecff2cf 268
frankvnk 0:ebcd5ecff2cf 269 #ifndef CC3000_UNENCRYPTED_SMART_CONFIG
frankvnk 0:ebcd5ecff2cf 270 const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
frankvnk 0:ebcd5ecff2cf 271 #else
frankvnk 0:ebcd5ecff2cf 272 const uint8_t smartconfigkey = 0;
frankvnk 0:ebcd5ecff2cf 273 #endif
frankvnk 0:ebcd5ecff2cf 274
frankvnk 0:ebcd5ecff2cf 275 /**
frankvnk 0:ebcd5ecff2cf 276 * \brief Print cc3000 information
frankvnk 0:ebcd5ecff2cf 277 * \param none
frankvnk 0:ebcd5ecff2cf 278 * \return none
frankvnk 0:ebcd5ecff2cf 279 */
frankvnk 0:ebcd5ecff2cf 280 void print_cc3000_info() {
frankvnk 0:ebcd5ecff2cf 281 uint8_t myMAC[8];
frankvnk 0:ebcd5ecff2cf 282
frankvnk 0:ebcd5ecff2cf 283 printf("MAC address + cc3000 info \r\n");
frankvnk 0:ebcd5ecff2cf 284 wifi.get_user_file_info((uint8_t *)&user_info, sizeof(user_info));
frankvnk 0:ebcd5ecff2cf 285 wifi.get_mac_address(myMAC);
frankvnk 0:ebcd5ecff2cf 286 printf(" MAC address %02x:%02x:%02x:%02x:%02x:%02x \r\n \r\n", myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
frankvnk 0:ebcd5ecff2cf 287
frankvnk 0:ebcd5ecff2cf 288 printf(" FTC %i \r\n",user_info.FTC);
frankvnk 0:ebcd5ecff2cf 289 printf(" PP_version %i.%i \r\n",user_info.PP_version[0], user_info.PP_version[1]);
frankvnk 0:ebcd5ecff2cf 290 printf(" SERV_PACK %i.%i \r\n",user_info.SERV_PACK[0], user_info.SERV_PACK[1]);
frankvnk 0:ebcd5ecff2cf 291 printf(" DRV_VER %i.%i.%i \r\n",user_info.DRV_VER[0], user_info.DRV_VER[1], user_info.DRV_VER[2]);
frankvnk 0:ebcd5ecff2cf 292 printf(" FW_VER %i.%i.%i \r\n",user_info.FW_VER[0], user_info.FW_VER[1], user_info.FW_VER[2]);
frankvnk 0:ebcd5ecff2cf 293 }
frankvnk 0:ebcd5ecff2cf 294
frankvnk 0:ebcd5ecff2cf 295 /**
frankvnk 0:ebcd5ecff2cf 296 * \brief Connect to SSID with a timeout
frankvnk 0:ebcd5ecff2cf 297 * \param ssid Name of SSID
frankvnk 0:ebcd5ecff2cf 298 * \param key Password
frankvnk 0:ebcd5ecff2cf 299 * \param sec_mode Security mode
frankvnk 0:ebcd5ecff2cf 300 * \return none
frankvnk 0:ebcd5ecff2cf 301 */
frankvnk 0:ebcd5ecff2cf 302 void connect_to_ssid(char *ssid, char *key, unsigned char sec_mode) {
frankvnk 0:ebcd5ecff2cf 303 printf("Connecting to SSID: %s. Timeout is 10s. \r\n",ssid);
frankvnk 0:ebcd5ecff2cf 304 if (wifi.connect_to_AP((uint8_t *)ssid, (uint8_t *)key, sec_mode) == true) {
frankvnk 0:ebcd5ecff2cf 305 printf(" Connected. \r\n");
frankvnk 0:ebcd5ecff2cf 306 } else {
frankvnk 0:ebcd5ecff2cf 307 printf(" Connection timed-out (error). Please restart. \r\n");
frankvnk 0:ebcd5ecff2cf 308 while(1);
frankvnk 0:ebcd5ecff2cf 309 }
frankvnk 0:ebcd5ecff2cf 310 }
frankvnk 0:ebcd5ecff2cf 311
frankvnk 0:ebcd5ecff2cf 312 /**
frankvnk 0:ebcd5ecff2cf 313 * \brief Connect to SSID without security
frankvnk 0:ebcd5ecff2cf 314 * \param ssid Name of SSID
frankvnk 0:ebcd5ecff2cf 315 * \return none
frankvnk 0:ebcd5ecff2cf 316 */
frankvnk 0:ebcd5ecff2cf 317 void connect_to_ssid(char *ssid) {
frankvnk 0:ebcd5ecff2cf 318 wifi.connect_open((uint8_t *)ssid);
frankvnk 0:ebcd5ecff2cf 319 }
frankvnk 0:ebcd5ecff2cf 320
frankvnk 0:ebcd5ecff2cf 321 /**
frankvnk 0:ebcd5ecff2cf 322 * \brief First time configuration
frankvnk 0:ebcd5ecff2cf 323 * \param none
frankvnk 0:ebcd5ecff2cf 324 * \return none
frankvnk 0:ebcd5ecff2cf 325 */
frankvnk 0:ebcd5ecff2cf 326 void do_FTC(void) {
frankvnk 0:ebcd5ecff2cf 327 printf("Running First Time Configuration \r\n");
frankvnk 0:ebcd5ecff2cf 328 wifi.start_smart_config(smartconfigkey);
frankvnk 0:ebcd5ecff2cf 329 while (wifi.is_dhcp_configured() == false) {
frankvnk 0:ebcd5ecff2cf 330 wait_ms(500);
frankvnk 0:ebcd5ecff2cf 331 printf("Waiting for dhcp to be set. \r\n");
frankvnk 0:ebcd5ecff2cf 332 }
frankvnk 0:ebcd5ecff2cf 333 user_info.FTC = 1;
frankvnk 0:ebcd5ecff2cf 334 wifi.set_user_file_info((uint8_t *)&user_info, sizeof(user_info));
frankvnk 0:ebcd5ecff2cf 335 wifi._wlan.stop();
frankvnk 0:ebcd5ecff2cf 336 printf("FTC finished. \r\n");
frankvnk 0:ebcd5ecff2cf 337 }
frankvnk 0:ebcd5ecff2cf 338
frankvnk 0:ebcd5ecff2cf 339 /**
frankvnk 0:ebcd5ecff2cf 340 * \brief TCP server demo
frankvnk 0:ebcd5ecff2cf 341 * \param none
frankvnk 0:ebcd5ecff2cf 342 * \return int
frankvnk 0:ebcd5ecff2cf 343 */
frankvnk 0:ebcd5ecff2cf 344 int main() {
frankvnk 0:ebcd5ecff2cf 345 int loop;
frankvnk 0:ebcd5ecff2cf 346 int temp;
frankvnk 0:ebcd5ecff2cf 347 unsigned int oldseconds;
frankvnk 0:ebcd5ecff2cf 348
frankvnk 0:ebcd5ecff2cf 349 //Board dependent init
frankvnk 0:ebcd5ecff2cf 350 init();
frankvnk 0:ebcd5ecff2cf 351
frankvnk 0:ebcd5ecff2cf 352 // Initalize global variables
frankvnk 0:ebcd5ecff2cf 353 axis6.packet_id = 1;
frankvnk 0:ebcd5ecff2cf 354 axis6.timestamp = 0;
frankvnk 0:ebcd5ecff2cf 355 axis6.acc_x = 0;
frankvnk 0:ebcd5ecff2cf 356 axis6.acc_y = 0;
frankvnk 0:ebcd5ecff2cf 357 axis6.acc_z = 0;
frankvnk 0:ebcd5ecff2cf 358 axis6.mag_x = 0;
frankvnk 0:ebcd5ecff2cf 359 axis6.mag_y = 0;
frankvnk 0:ebcd5ecff2cf 360 axis6.mag_z = 0;
frankvnk 0:ebcd5ecff2cf 361 axis6.roll = 0;
frankvnk 0:ebcd5ecff2cf 362 axis6.pitch = 0;
frankvnk 0:ebcd5ecff2cf 363 axis6.yaw = 0;
frankvnk 0:ebcd5ecff2cf 364 axis6.compass = 0;
frankvnk 0:ebcd5ecff2cf 365 axis6.alt = 0;
frankvnk 0:ebcd5ecff2cf 366 axis6.temp = 0;
frankvnk 0:ebcd5ecff2cf 367 axis6.light = 0;
frankvnk 0:ebcd5ecff2cf 368 compass_type = ANDROID_COMPASS;
frankvnk 0:ebcd5ecff2cf 369 seconds = 0;
frankvnk 0:ebcd5ecff2cf 370 server_running = 1;
frankvnk 0:ebcd5ecff2cf 371 newData = 0;
frankvnk 0:ebcd5ecff2cf 372 secondFlag = 0;
frankvnk 0:ebcd5ecff2cf 373 HsecondFlag = 0;
frankvnk 0:ebcd5ecff2cf 374 GREEN_ON;
frankvnk 0:ebcd5ecff2cf 375
frankvnk 0:ebcd5ecff2cf 376 pc.baud(115200);
frankvnk 0:ebcd5ecff2cf 377
frankvnk 0:ebcd5ecff2cf 378 // set current to 500mA since we're turning on the Wi-Fi
frankvnk 0:ebcd5ecff2cf 379 Batt.init(CHRG_500MA);
frankvnk 0:ebcd5ecff2cf 380
frankvnk 0:ebcd5ecff2cf 381 // Set MPL3115 to altimeter mode - oversample rate = 128
frankvnk 0:ebcd5ecff2cf 382 apt.Oversample_Ratio(OVERSAMPLE_RATIO_128);
frankvnk 0:ebcd5ecff2cf 383 apt.Altimeter_Mode();
frankvnk 0:ebcd5ecff2cf 384
frankvnk 0:ebcd5ecff2cf 385 //Init LEDs
frankvnk 0:ebcd5ecff2cf 386 initLEDs();
frankvnk 0:ebcd5ecff2cf 387
frankvnk 0:ebcd5ecff2cf 388 // Read the Magnetometer a couple of times to initalize
frankvnk 0:ebcd5ecff2cf 389 for(loop=0 ; loop < 5 ; loop++)
frankvnk 0:ebcd5ecff2cf 390 {
frankvnk 0:ebcd5ecff2cf 391 while(!(mag.readReg(MAG_DR_STATUS) && 0x08));
frankvnk 0:ebcd5ecff2cf 392 readCompass();
frankvnk 0:ebcd5ecff2cf 393 }
frankvnk 0:ebcd5ecff2cf 394
frankvnk 0:ebcd5ecff2cf 395 init_eCompass();
frankvnk 0:ebcd5ecff2cf 396
frankvnk 0:ebcd5ecff2cf 397 // Start 5ms Ticker
frankvnk 0:ebcd5ecff2cf 398 systick.attach(&SysTick_Handler, 0.025);
frankvnk 0:ebcd5ecff2cf 399
frankvnk 0:ebcd5ecff2cf 400 // Trigger a WLAN device
frankvnk 0:ebcd5ecff2cf 401 wifi.start(0);
frankvnk 0:ebcd5ecff2cf 402 printf("CC3000 Wi-Go IOT demo.\r\n");
frankvnk 0:ebcd5ecff2cf 403 print_cc3000_info();
frankvnk 0:ebcd5ecff2cf 404 server_running = 1;
frankvnk 0:ebcd5ecff2cf 405 newData = 0;
frankvnk 0:ebcd5ecff2cf 406 GREEN_ON;
frankvnk 0:ebcd5ecff2cf 407
frankvnk 0:ebcd5ecff2cf 408 if(!user_info.FTC && USE_SMART_CONFIG)
frankvnk 0:ebcd5ecff2cf 409 {
frankvnk 0:ebcd5ecff2cf 410 do_FTC(); // Call First Time Configuration if SmartConfig has not been run
frankvnk 0:ebcd5ecff2cf 411 printf("Please restart your board. \r\n");
frankvnk 0:ebcd5ecff2cf 412 GreenStop();
frankvnk 0:ebcd5ecff2cf 413 }
frankvnk 0:ebcd5ecff2cf 414
frankvnk 0:ebcd5ecff2cf 415 // Wait for slider touch
frankvnk 0:ebcd5ecff2cf 416 printf("\r\nUse the slider to start an application.\r\n");
frankvnk 0:ebcd5ecff2cf 417 printf("Releasing the slider for more than 3 seconds\r\nwill start the chosen application.\r\n");
frankvnk 0:ebcd5ecff2cf 418 printf("Touching the slider within the 3 seconds\ntimeframe allows you to re-select an application.\r\n");
frankvnk 0:ebcd5ecff2cf 419 printf("\r\nThe RGB LED indicates the selection:\r\n");
frankvnk 0:ebcd5ecff2cf 420 printf("ORANGE - Erase all profiles.\r\n");
frankvnk 0:ebcd5ecff2cf 421 printf("PURPLE - Force SmartConfig.\r\n");
frankvnk 0:ebcd5ecff2cf 422 printf("BLUE - Webserver displaying live sensor data.\r\n");
frankvnk 0:ebcd5ecff2cf 423 printf("RED - Exosite data client.\r\n");
frankvnk 0:ebcd5ecff2cf 424 printf("GREEN - Android sensor fusion app.\r\n");
frankvnk 0:ebcd5ecff2cf 425 while( tsi.readPercentage() == 0 )
frankvnk 0:ebcd5ecff2cf 426 {
frankvnk 0:ebcd5ecff2cf 427 RED_ON;
frankvnk 0:ebcd5ecff2cf 428 wait(0.2);
frankvnk 0:ebcd5ecff2cf 429 RED_OFF;
frankvnk 0:ebcd5ecff2cf 430 wait(0.2);
frankvnk 0:ebcd5ecff2cf 431 }
frankvnk 0:ebcd5ecff2cf 432 RED_OFF;
frankvnk 0:ebcd5ecff2cf 433
frankvnk 0:ebcd5ecff2cf 434 oldseconds = seconds;
frankvnk 0:ebcd5ecff2cf 435 loop = 100;
frankvnk 0:ebcd5ecff2cf 436 temp = 0;
frankvnk 0:ebcd5ecff2cf 437 // Read slider as long as it is touched.
frankvnk 0:ebcd5ecff2cf 438 // If released for more than 3 seconds, exit
frankvnk 0:ebcd5ecff2cf 439 while((loop != 0) || ((seconds - oldseconds) < 3))
frankvnk 0:ebcd5ecff2cf 440 {
frankvnk 0:ebcd5ecff2cf 441 loop = tsi.readPercentage() * 100;
frankvnk 0:ebcd5ecff2cf 442 if(loop != 0)
frankvnk 0:ebcd5ecff2cf 443 {
frankvnk 0:ebcd5ecff2cf 444 oldseconds = seconds;
frankvnk 0:ebcd5ecff2cf 445 temp = loop;
frankvnk 0:ebcd5ecff2cf 446 }
frankvnk 0:ebcd5ecff2cf 447 if(temp > 80)
frankvnk 0:ebcd5ecff2cf 448 {
frankvnk 0:ebcd5ecff2cf 449 RED_ON; GREEN_ON; BLUE_OFF; //Orange
frankvnk 0:ebcd5ecff2cf 450 }
frankvnk 0:ebcd5ecff2cf 451 else if(temp > 60)
frankvnk 0:ebcd5ecff2cf 452 {
frankvnk 0:ebcd5ecff2cf 453 RED_ON; GREEN_OFF; BLUE_ON; //Purple
frankvnk 0:ebcd5ecff2cf 454 }
frankvnk 0:ebcd5ecff2cf 455 else if(temp > 40)
frankvnk 0:ebcd5ecff2cf 456 {
frankvnk 0:ebcd5ecff2cf 457 RED_OFF; GREEN_OFF; BLUE_ON; //Blue
frankvnk 0:ebcd5ecff2cf 458 }
frankvnk 0:ebcd5ecff2cf 459 else if(temp > 20)
frankvnk 0:ebcd5ecff2cf 460 {
frankvnk 0:ebcd5ecff2cf 461 RED_ON; GREEN_OFF; BLUE_OFF; //Red
frankvnk 0:ebcd5ecff2cf 462 }
frankvnk 0:ebcd5ecff2cf 463 else
frankvnk 0:ebcd5ecff2cf 464 {
frankvnk 0:ebcd5ecff2cf 465 RED_OFF; GREEN_ON; BLUE_OFF; //Green
frankvnk 0:ebcd5ecff2cf 466 }
frankvnk 0:ebcd5ecff2cf 467 }
frankvnk 0:ebcd5ecff2cf 468 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 469
frankvnk 0:ebcd5ecff2cf 470 // Execute the user selected application
frankvnk 0:ebcd5ecff2cf 471 if(temp > 80) // Erase all profiles
frankvnk 0:ebcd5ecff2cf 472 {
frankvnk 0:ebcd5ecff2cf 473 server_running = 1;
frankvnk 0:ebcd5ecff2cf 474 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 475 printf("\r\nErasing all wireless profiles. \r\n");
frankvnk 0:ebcd5ecff2cf 476 wifi.delete_profiles();
frankvnk 0:ebcd5ecff2cf 477 wifi.stop();
frankvnk 0:ebcd5ecff2cf 478 printf("Finished. Please restart your board. \r\n");
frankvnk 0:ebcd5ecff2cf 479 GreenStop();
frankvnk 0:ebcd5ecff2cf 480 }
frankvnk 0:ebcd5ecff2cf 481
frankvnk 0:ebcd5ecff2cf 482 if(temp > 60) // Force SmartConfig
frankvnk 0:ebcd5ecff2cf 483 {
frankvnk 0:ebcd5ecff2cf 484 server_running = 1;
frankvnk 0:ebcd5ecff2cf 485 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 486 printf("\r\nStarting Smart Config configuration. \r\n");
frankvnk 0:ebcd5ecff2cf 487 wifi.start_smart_config(smartconfigkey);
frankvnk 0:ebcd5ecff2cf 488 while (wifi.is_dhcp_configured() == false)
frankvnk 0:ebcd5ecff2cf 489 {
frankvnk 0:ebcd5ecff2cf 490 wait_ms(500);
frankvnk 0:ebcd5ecff2cf 491 printf("Waiting for dhcp to be set. \r\n");
frankvnk 0:ebcd5ecff2cf 492 }
frankvnk 0:ebcd5ecff2cf 493 printf("Finished. Please restart your board. \r\n");
frankvnk 0:ebcd5ecff2cf 494 GreenStop();
frankvnk 0:ebcd5ecff2cf 495 }
frankvnk 0:ebcd5ecff2cf 496
frankvnk 0:ebcd5ecff2cf 497 RED_OFF; GREEN_OFF; BLUE_OFF;
frankvnk 0:ebcd5ecff2cf 498
frankvnk 0:ebcd5ecff2cf 499 printf("\r\nAttempting SSID Connection. \r\n");
frankvnk 0:ebcd5ecff2cf 500 #if (USE_SMART_CONFIG == 1)
frankvnk 0:ebcd5ecff2cf 501 wifi._wlan.ioctl_set_connection_policy(0, 1, 1);
frankvnk 0:ebcd5ecff2cf 502 #else
frankvnk 0:ebcd5ecff2cf 503 wifi._wlan.ioctl_set_connection_policy(0, 0, 0);
frankvnk 0:ebcd5ecff2cf 504 #ifndef CC3000_TINY_DRIVER
frankvnk 0:ebcd5ecff2cf 505 #ifdef AP_KEY
frankvnk 0:ebcd5ecff2cf 506 connect_to_ssid(SSID, AP_KEY, AP_SECURITY);
frankvnk 0:ebcd5ecff2cf 507 #else
frankvnk 0:ebcd5ecff2cf 508 connect_to_ssid(SSID);
frankvnk 0:ebcd5ecff2cf 509 #endif
frankvnk 0:ebcd5ecff2cf 510 #else
frankvnk 0:ebcd5ecff2cf 511 connect_to_ssid(SSID);
frankvnk 0:ebcd5ecff2cf 512 #endif
frankvnk 0:ebcd5ecff2cf 513 #endif
frankvnk 0:ebcd5ecff2cf 514
frankvnk 0:ebcd5ecff2cf 515 printf("DHCP request \r\n");
frankvnk 0:ebcd5ecff2cf 516 while (wifi.is_dhcp_configured() == false)
frankvnk 0:ebcd5ecff2cf 517 {
frankvnk 0:ebcd5ecff2cf 518 wait_ms(500);
frankvnk 0:ebcd5ecff2cf 519 printf(" Waiting for dhcp to be set. \r\n");
frankvnk 0:ebcd5ecff2cf 520 }
frankvnk 0:ebcd5ecff2cf 521 tNetappIpconfigRetArgs ipinfo2;
frankvnk 0:ebcd5ecff2cf 522 wifi.get_ip_config(&ipinfo2); // data is returned in the ipinfo2 structure
frankvnk 0:ebcd5ecff2cf 523 printf("DHCP assigned IP Address = %d.%d.%d.%d \r\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
frankvnk 0:ebcd5ecff2cf 524 LED_D3_ON;
frankvnk 0:ebcd5ecff2cf 525
frankvnk 0:ebcd5ecff2cf 526 server_running = 0;
frankvnk 0:ebcd5ecff2cf 527
frankvnk 0:ebcd5ecff2cf 528 // Start the selected application
frankvnk 0:ebcd5ecff2cf 529 if(temp > 40) // Run Webserver
frankvnk 0:ebcd5ecff2cf 530 {
frankvnk 0:ebcd5ecff2cf 531 compass_type = NED_COMPASS;
frankvnk 0:ebcd5ecff2cf 532 init_eCompass();
frankvnk 0:ebcd5ecff2cf 533 seconds = 0;
frankvnk 0:ebcd5ecff2cf 534 demo_wifi_main();
frankvnk 0:ebcd5ecff2cf 535 }
frankvnk 0:ebcd5ecff2cf 536 if(temp > 20) // Send data to Exosite
frankvnk 0:ebcd5ecff2cf 537 {
frankvnk 0:ebcd5ecff2cf 538 compass_type = NED_COMPASS;
frankvnk 0:ebcd5ecff2cf 539 init_eCompass();
frankvnk 0:ebcd5ecff2cf 540 seconds = 0;
frankvnk 0:ebcd5ecff2cf 541 // run_exosite();
frankvnk 0:ebcd5ecff2cf 542 }
frankvnk 0:ebcd5ecff2cf 543 init_eCompass();
frankvnk 0:ebcd5ecff2cf 544 seconds = 0;
frankvnk 0:ebcd5ecff2cf 545 // Run TCP/IP Connection to host - Sensor Fusion App
frankvnk 0:ebcd5ecff2cf 546 // runTCPIPserver();
frankvnk 0:ebcd5ecff2cf 547
frankvnk 0:ebcd5ecff2cf 548 }
frankvnk 0:ebcd5ecff2cf 549
frankvnk 0:ebcd5ecff2cf 550
frankvnk 0:ebcd5ecff2cf 551 /*
frankvnk 0:ebcd5ecff2cf 552
frankvnk 0:ebcd5ecff2cf 553 const int ECHO_SERVER_PORT = 1895;
frankvnk 0:ebcd5ecff2cf 554
frankvnk 0:ebcd5ecff2cf 555 TCPSocketServer server;
frankvnk 0:ebcd5ecff2cf 556 server.bind(ECHO_SERVER_PORT);
frankvnk 0:ebcd5ecff2cf 557 server.listen();
frankvnk 0:ebcd5ecff2cf 558
frankvnk 0:ebcd5ecff2cf 559 while (true) {
frankvnk 0:ebcd5ecff2cf 560 printf("\r\nWait for new connection...\r\n");
frankvnk 0:ebcd5ecff2cf 561 TCPSocketConnection client;
frankvnk 0:ebcd5ecff2cf 562 server.accept(client);
frankvnk 0:ebcd5ecff2cf 563 client.set_blocking(false, 1500); // Timeout after (1.5)s
frankvnk 0:ebcd5ecff2cf 564
frankvnk 0:ebcd5ecff2cf 565 printf("Connection from: %s \r\n", client.get_address());
frankvnk 0:ebcd5ecff2cf 566 char buffer[256];
frankvnk 0:ebcd5ecff2cf 567 while (true) {
frankvnk 0:ebcd5ecff2cf 568 int n = client.receive(buffer, sizeof(buffer));
frankvnk 0:ebcd5ecff2cf 569 if (n <= 0) break;
frankvnk 0:ebcd5ecff2cf 570
frankvnk 0:ebcd5ecff2cf 571 client.send_all(buffer, n);
frankvnk 0:ebcd5ecff2cf 572 if (n <= 0) break;
frankvnk 0:ebcd5ecff2cf 573 }
frankvnk 0:ebcd5ecff2cf 574
frankvnk 0:ebcd5ecff2cf 575 client.close();
frankvnk 0:ebcd5ecff2cf 576 }
frankvnk 0:ebcd5ecff2cf 577 }
frankvnk 0:ebcd5ecff2cf 578 */