Creating an IoT platform for smart agriculture. Collecting data and sending them to thingspeak for analysis
Dependencies: DHT11 LPS22HB LSM6DSL VL53L0X
main.cpp@1:469ea8167b80, 2018-06-08 (annotated)
- Committer:
- kaoriw
- Date:
- Fri Jun 08 12:16:19 2018 +0000
- Revision:
- 1:469ea8167b80
- Parent:
- 0:07ff689741d2
Uncomplete
Who changed what in which revision?
User | Revision | Line number | New 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 | } |