Creating an IoT platform for smart agriculture. Collecting data and sending them to thingspeak for analysis

Dependencies:   DHT11 LPS22HB LSM6DSL VL53L0X

Committer:
kaoriw
Date:
Fri Jun 08 12:16:19 2018 +0000
Revision:
1:469ea8167b80
Parent:
0:07ff689741d2
Uncomplete

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kaoriw 0:07ff689741d2 1 #include "mbed.h"
kaoriw 0:07ff689741d2 2 #include "Sensors.h"
kaoriw 0:07ff689741d2 3 #include "ThingSpeak.h"
kaoriw 0:07ff689741d2 4 #include "CANbus.h"
kaoriw 0:07ff689741d2 5
kaoriw 0:07ff689741d2 6 int main()
kaoriw 0:07ff689741d2 7 {
kaoriw 0:07ff689741d2 8 //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);
kaoriw 0:07ff689741d2 9
kaoriw 0:07ff689741d2 10 /******* Connecting to Wi-Fi and ThingSpeak *******/
kaoriw 0:07ff689741d2 11 int count = 0;
kaoriw 0:07ff689741d2 12 count = scan_demo(&wifi);
kaoriw 0:07ff689741d2 13 if (count == 0) {
kaoriw 0:07ff689741d2 14 printf("No WIFI APNs found - can't continue further.\n");
kaoriw 0:07ff689741d2 15 return -1;
kaoriw 0:07ff689741d2 16 }
kaoriw 0:07ff689741d2 17
kaoriw 0:07ff689741d2 18 printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
kaoriw 0:07ff689741d2 19 int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
kaoriw 0:07ff689741d2 20 if (ret != 0) {
kaoriw 0:07ff689741d2 21 printf("\nConnection error\n");
kaoriw 0:07ff689741d2 22 return -1;
kaoriw 0:07ff689741d2 23 }
kaoriw 0:07ff689741d2 24 printf("Success\n\n");
kaoriw 0:07ff689741d2 25
kaoriw 0:07ff689741d2 26 /******* Using sensors and publishing to ThingSpeak *******/
kaoriw 0:07ff689741d2 27 enable_sensors();
kaoriw 0:07ff689741d2 28 char urlBuffer[100];
kaoriw 0:07ff689741d2 29 char ThingSpeak_key[20];
kaoriw 0:07ff689741d2 30 char valBuf[20];
kaoriw 0:07ff689741d2 31
kaoriw 0:07ff689741d2 32 CANMessage msg;
kaoriw 0:07ff689741d2 33 struct VMS_Msg1 packed_data;
kaoriw 0:07ff689741d2 34 Timer t;
kaoriw 0:07ff689741d2 35
kaoriw 0:07ff689741d2 36 int i;
kaoriw 0:07ff689741d2 37 int speed = 0;
kaoriw 0:07ff689741d2 38 int angle = 0;
kaoriw 0:07ff689741d2 39 int speed_3D[3] = {0,0,0};
kaoriw 0:07ff689741d2 40 int pos_3D[3] = {0,0,0};
kaoriw 0:07ff689741d2 41
kaoriw 0:07ff689741d2 42 while(1)
kaoriw 0:07ff689741d2 43 {
kaoriw 0:07ff689741d2 44 for(i=1; i<6; i++)
kaoriw 0:07ff689741d2 45 {
kaoriw 0:07ff689741d2 46 t.start(); //start timer
kaoriw 0:07ff689741d2 47 get_values();
kaoriw 0:07ff689741d2 48 sprintf(ThingSpeak_key, "MBED_CONF_APP_THINGSPEAK_KEY_SENSORS_%d", i);
kaoriw 0:07ff689741d2 49 memset(ThingSpeak_key, 0, sizeof(ThingSpeak_key));
kaoriw 0:07ff689741d2 50
kaoriw 0:07ff689741d2 51 sprintf(urlBuffer, "GET http://api.thingspeak.com/update?key=%s", ThingSpeak_key);
kaoriw 0:07ff689741d2 52
kaoriw 0:07ff689741d2 53 //Temperature
kaoriw 0:07ff689741d2 54 sprintf(valBuf, "&field1=%f", temp);
kaoriw 0:07ff689741d2 55 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 56 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 57
kaoriw 0:07ff689741d2 58 //Humidity
kaoriw 0:07ff689741d2 59 sprintf(valBuf, "&field2=%f", hum);
kaoriw 0:07ff689741d2 60 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 61 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 62
kaoriw 0:07ff689741d2 63 //Light
kaoriw 0:07ff689741d2 64 sprintf(valBuf, "&field3=%d", light);
kaoriw 0:07ff689741d2 65 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 66 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 67
kaoriw 0:07ff689741d2 68 //Pressure
kaoriw 0:07ff689741d2 69 if(press_status != VALUE_ERROR)
kaoriw 0:07ff689741d2 70 {
kaoriw 0:07ff689741d2 71 sprintf(valBuf, "&field4=%f", press);
kaoriw 0:07ff689741d2 72 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 73 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 74 }
kaoriw 0:07ff689741d2 75
kaoriw 0:07ff689741d2 76 //Motion parameters
kaoriw 0:07ff689741d2 77
kaoriw 0:07ff689741d2 78
kaoriw 0:07ff689741d2 79 while(t.read() < 3)
kaoriw 0:07ff689741d2 80 {
kaoriw 0:07ff689741d2 81 get_motion_data(0.05, &speed, speed_3D, pos_3D, &angle);
kaoriw 0:07ff689741d2 82 wait(0.05);
kaoriw 0:07ff689741d2 83 }
kaoriw 0:07ff689741d2 84
kaoriw 0:07ff689741d2 85 sprintf(valBuf, "&field5=%d", speed);
kaoriw 0:07ff689741d2 86 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 87 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 88
kaoriw 0:07ff689741d2 89 sprintf(valBuf, "&field6=%d", pos_3D[0]);
kaoriw 0:07ff689741d2 90 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 91 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 92
kaoriw 0:07ff689741d2 93 sprintf(valBuf, "&field7=%d", pos_3D[1]);
kaoriw 0:07ff689741d2 94 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 95 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 96
kaoriw 0:07ff689741d2 97 sprintf(valBuf, "&field8=%d", angle);
kaoriw 0:07ff689741d2 98 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 99 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 100
kaoriw 0:07ff689741d2 101 send_values(urlBuffer);
kaoriw 0:07ff689741d2 102 memset(urlBuffer, 0, sizeof(urlBuffer));
kaoriw 0:07ff689741d2 103
kaoriw 0:07ff689741d2 104 //Same with CAN data
kaoriw 0:07ff689741d2 105
kaoriw 0:07ff689741d2 106 if(can.read(msg))
kaoriw 0:07ff689741d2 107 {
kaoriw 0:07ff689741d2 108 packed_data = data_pack(msg.data);
kaoriw 0:07ff689741d2 109 data_parse(packed_data);
kaoriw 0:07ff689741d2 110 sprintf(ThingSpeak_key, "MBED_CONF_APP_THINGSPEAK_KEY_CAN_%d", i);
kaoriw 0:07ff689741d2 111 sprintf(urlBuffer, "GET http://api.thingspeak.com/update?key=%s", ThingSpeak_key);
kaoriw 0:07ff689741d2 112 memset(ThingSpeak_key, 0, sizeof(ThingSpeak_key));
kaoriw 0:07ff689741d2 113
kaoriw 0:07ff689741d2 114 sprintf(valBuf, "&field1=%d", battery_current);
kaoriw 0:07ff689741d2 115 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 116 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 117
kaoriw 0:07ff689741d2 118 sprintf(valBuf, "&field2=%d", battery_voltage);
kaoriw 0:07ff689741d2 119 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 120 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 121
kaoriw 0:07ff689741d2 122 sprintf(valBuf, "&field3=%d", Bat_SOC);
kaoriw 0:07ff689741d2 123 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 124 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 125
kaoriw 0:07ff689741d2 126 sprintf(valBuf, "&field4=%d", speed);
kaoriw 0:07ff689741d2 127 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 128 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 129
kaoriw 0:07ff689741d2 130 sprintf(valBuf, "&field5=%d", motorTemperature);
kaoriw 0:07ff689741d2 131 strcat(urlBuffer, valBuf);
kaoriw 0:07ff689741d2 132 memset(valBuf, 0, sizeof(valBuf));
kaoriw 0:07ff689741d2 133
kaoriw 0:07ff689741d2 134 send_values(urlBuffer);
kaoriw 0:07ff689741d2 135 memset(urlBuffer, 0, sizeof(urlBuffer));
kaoriw 0:07ff689741d2 136 }
kaoriw 0:07ff689741d2 137 else
kaoriw 0:07ff689741d2 138 {
kaoriw 0:07ff689741d2 139 printf("Error reading CAN message. \r\n");
kaoriw 0:07ff689741d2 140 }
kaoriw 0:07ff689741d2 141
kaoriw 0:07ff689741d2 142 while(t.read() < 3){} //Wait until 3s passes
kaoriw 0:07ff689741d2 143 t.stop();
kaoriw 0:07ff689741d2 144 t.reset();
kaoriw 0:07ff689741d2 145 }
kaoriw 0:07ff689741d2 146
kaoriw 0:07ff689741d2 147 }
kaoriw 0:07ff689741d2 148
kaoriw 0:07ff689741d2 149 return 0;
kaoriw 0:07ff689741d2 150 }