Cradle Motion Monitoring System using FRDM-K64F development board and ESP8266 Wi-Fi module. ThingSpeak iOT platform used as a cloud service and If This, Then That (IFTTT) used to trigger notifications to the user in form of Text message and/or E-mail

Dependencies:   mbed FXOS8700Q ESP8266

Committer:
saurabh2691
Date:
Mon Dec 10 02:27:56 2018 +0000
Revision:
0:a276a31734dc
Cradle_Motion_Monitoring Final Changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saurabh2691 0:a276a31734dc 1 #include "mbed.h"
saurabh2691 0:a276a31734dc 2 #include "ESP8266.h" // ESP8266 Header File
saurabh2691 0:a276a31734dc 3 #include "FXOS8700Q.h" // Sensor Header File
saurabh2691 0:a276a31734dc 4 #include "math.h"
saurabh2691 0:a276a31734dc 5 #include <string>
saurabh2691 0:a276a31734dc 6
saurabh2691 0:a276a31734dc 7 // WIFI Configs
saurabh2691 0:a276a31734dc 8 #define WIFI_SSID "Redmi"
saurabh2691 0:a276a31734dc 9 #define WIFI_PASS "132132123"
saurabh2691 0:a276a31734dc 10 ESP8266 esp(PTC17, PTC16, 115200); // baud rate for ESP8266
saurabh2691 0:a276a31734dc 11
saurabh2691 0:a276a31734dc 12 // ThingSpeak Configs
saurabh2691 0:a276a31734dc 13 #define IP "184.106.153.149" // IP Address of "api.thingspeak.com\"
saurabh2691 0:a276a31734dc 14
saurabh2691 0:a276a31734dc 15 FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // Proper Ports and I2C Address for K64F Freedom board
saurabh2691 0:a276a31734dc 16 MotionSensorDataUnits acc_data;
saurabh2691 0:a276a31734dc 17 Serial pc(USBTX,USBRX); // Used for printing Tera Term
saurabh2691 0:a276a31734dc 18
saurabh2691 0:a276a31734dc 19 char snd[255],rcv[1000];
saurabh2691 0:a276a31734dc 20
saurabh2691 0:a276a31734dc 21 // Functions Declaration
saurabh2691 0:a276a31734dc 22 void updateSensor(); // Updates sensor values in "acc_data"
saurabh2691 0:a276a31734dc 23 void esp_initialize(); // Initializes connection with the Wi-Fi
saurabh2691 0:a276a31734dc 24 void updateCloud(); // Uploads data to the thingspeak cloud
saurabh2691 0:a276a31734dc 25
saurabh2691 0:a276a31734dc 26 int main()
saurabh2691 0:a276a31734dc 27 {
saurabh2691 0:a276a31734dc 28 pc.baud(115200); //Baud Rate for TeraTerm
saurabh2691 0:a276a31734dc 29 pc.printf("Start\n");
saurabh2691 0:a276a31734dc 30
saurabh2691 0:a276a31734dc 31 esp_initialize();
saurabh2691 0:a276a31734dc 32 acc.enable();
saurabh2691 0:a276a31734dc 33
saurabh2691 0:a276a31734dc 34 while(1) {
saurabh2691 0:a276a31734dc 35 updateSensor();
saurabh2691 0:a276a31734dc 36 updateCloud();
saurabh2691 0:a276a31734dc 37 wait(20);
saurabh2691 0:a276a31734dc 38 }
saurabh2691 0:a276a31734dc 39 }
saurabh2691 0:a276a31734dc 40
saurabh2691 0:a276a31734dc 41 void updateSensor() {
saurabh2691 0:a276a31734dc 42 acc.getAxis(acc_data);
saurabh2691 0:a276a31734dc 43 pc.printf("\nACC: X=%1.4f Y=%1.4f Z=%1.4f ", acc_data.x, acc_data.y, acc_data.z); // Prints current sensor values
saurabh2691 0:a276a31734dc 44 }
saurabh2691 0:a276a31734dc 45
saurabh2691 0:a276a31734dc 46 void esp_initialize(void) {
saurabh2691 0:a276a31734dc 47 pc.printf("Initializing ESP\r\n");
saurabh2691 0:a276a31734dc 48
saurabh2691 0:a276a31734dc 49 pc.printf("Reset ESP\r\n");
saurabh2691 0:a276a31734dc 50 esp.Reset(); // RESET ESP
saurabh2691 0:a276a31734dc 51 wait(2);
saurabh2691 0:a276a31734dc 52
saurabh2691 0:a276a31734dc 53 strcpy(snd,"AT");
saurabh2691 0:a276a31734dc 54 esp.SendCMD(snd); // Runs the AT command on ESP8266
saurabh2691 0:a276a31734dc 55 wait(0.1);
saurabh2691 0:a276a31734dc 56
saurabh2691 0:a276a31734dc 57 strcpy(snd,"AT+CWMODE=1"); // Set Wi-Fi Mode
saurabh2691 0:a276a31734dc 58 esp.SendCMD(snd);
saurabh2691 0:a276a31734dc 59 wait(2);
saurabh2691 0:a276a31734dc 60
saurabh2691 0:a276a31734dc 61 strcpy(snd,"AT+CWJAP=\""); // Connect to the Wi-Fi network
saurabh2691 0:a276a31734dc 62 strcat(snd,WIFI_SSID);
saurabh2691 0:a276a31734dc 63 strcat(snd,"\",\"");
saurabh2691 0:a276a31734dc 64 strcat(snd,WIFI_PASS);
saurabh2691 0:a276a31734dc 65 strcat(snd,"\"");
saurabh2691 0:a276a31734dc 66 esp.SendCMD(snd);
saurabh2691 0:a276a31734dc 67 wait(5);
saurabh2691 0:a276a31734dc 68
saurabh2691 0:a276a31734dc 69 esp.RcvReply(rcv, 400);
saurabh2691 0:a276a31734dc 70 pc.printf("\n %s \n", rcv);
saurabh2691 0:a276a31734dc 71
saurabh2691 0:a276a31734dc 72 strcpy(snd,"AT+CIPMUX=0"); // Set to single connection
saurabh2691 0:a276a31734dc 73 esp.SendCMD(snd);
saurabh2691 0:a276a31734dc 74 esp.RcvReply(rcv, 400);
saurabh2691 0:a276a31734dc 75 pc.printf("\n %s \n", rcv);
saurabh2691 0:a276a31734dc 76 }
saurabh2691 0:a276a31734dc 77
saurabh2691 0:a276a31734dc 78 void updateCloud(){
saurabh2691 0:a276a31734dc 79 float x_axis = 0.0f, y_axis = 0.0f;
saurabh2691 0:a276a31734dc 80 wait(2.0f);
saurabh2691 0:a276a31734dc 81 x_axis = acc_data.x;
saurabh2691 0:a276a31734dc 82 y_axis = acc_data.y;
saurabh2691 0:a276a31734dc 83 //ESP updates the Status of Thingspeak channel//
saurabh2691 0:a276a31734dc 84
saurabh2691 0:a276a31734dc 85 strcpy(snd,"AT+CIPSTART="); // Initialize TCP connection
saurabh2691 0:a276a31734dc 86 strcat(snd,"\"TCP\",\"");
saurabh2691 0:a276a31734dc 87 strcat(snd,IP);
saurabh2691 0:a276a31734dc 88 strcat(snd,"\",80");
saurabh2691 0:a276a31734dc 89 esp.SendCMD(snd);
saurabh2691 0:a276a31734dc 90 //wait(2);
saurabh2691 0:a276a31734dc 91 esp.RcvReply(rcv, 1000);
saurabh2691 0:a276a31734dc 92 pc.printf("R\r\n%s",rcv);
saurabh2691 0:a276a31734dc 93 wait(1);
saurabh2691 0:a276a31734dc 94
saurabh2691 0:a276a31734dc 95 sprintf(snd,"GET https://api.thingspeak.com/update?api_key=CSV6JACFC3TGG6MO&field1=%f&field2=%f\r\n",x_axis, y_axis);
saurabh2691 0:a276a31734dc 96
saurabh2691 0:a276a31734dc 97 int i=0;
saurabh2691 0:a276a31734dc 98 for(i=0;snd[i]!='\0';i++);
saurabh2691 0:a276a31734dc 99 i++;
saurabh2691 0:a276a31734dc 100 char cmd[255];
saurabh2691 0:a276a31734dc 101
saurabh2691 0:a276a31734dc 102 sprintf(cmd,"AT+CIPSEND=%d",i); //Send Number of open connection and Characters to send
saurabh2691 0:a276a31734dc 103 esp.SendCMD(cmd);
saurabh2691 0:a276a31734dc 104 wait(1);
saurabh2691 0:a276a31734dc 105
saurabh2691 0:a276a31734dc 106 esp.SendCMD(snd); //Post value to thingspeak channel
saurabh2691 0:a276a31734dc 107 pc.printf("S\r\n%s",snd);
saurabh2691 0:a276a31734dc 108
saurabh2691 0:a276a31734dc 109 }