![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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
main.cpp@0:a276a31734dc, 2018-12-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |