It is a simple IoT solution for plant life monitoring and maintenance, based on STM32NUCLEO boards and expansion modules. This branch is the post-eSAME development branch.
Dependencies: BLE_API X_NUCLEO_IDB0XA1 X_NUCLEO_IKS01A1 mbed
Fork of BLE_GreenYourLife_STM32 by
This branch is the main continuation of the original project. You can find it here.
Diff: GreenBuildingService.h
- Revision:
- 0:7dce5e74ad91
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GreenBuildingService.h Sat Nov 26 13:38:23 2016 +0000 @@ -0,0 +1,87 @@ +/************************ STM32NUCLEO IOT Contest ****************************** + * + * Green Building IoT Solution for + * Plant Life Monitoring And Maintenance + * + * Authored by + * Dien Hoa Truong + * Muhammad Haziq Bin Kamarul Azman + * + * for the + * eSAME 2016 STM32NUCLEO IoT Contest in Sophia-Antipolis + * + * + * GreenBuildingService.h | Green Building Service header + * + ******************************************************************************/ + +#ifndef __BLE_GREEN_BUILDING_SERVICE_H__ +#define __BLE_GREEN_BUILDING_SERVICE_H__ + +#include "ble/BLE.h" + +/** + * @class GreenBuildingService + * @brief Custom service derived from mbed's BLE Environmental Service. This service provides air temperature, humidity and soil moisture measurement. + */ +class GreenBuildingService { +public: + + static const uint16_t UUID_GREEN_BUILDING_SERVICE = 0xEB00; /**< Green Building service UUID */ + static const uint16_t UUID_PLANT_ENVIRONMENT_CHAR = 0xEB01; /**< Plant environment characteristic UUID */ + + /** Plant environment data type + * + */ + typedef struct + { + uint8_t airTemperature; /**< Air temperature value */ + uint8_t airHumidity ; /**< Air humidity value */ + uint8_t soilMoisture ; /**< Soil moisture value */ + } PlantEnvironmentType_t; + + /** + * @brief GreenBuildingService constructor. + * @param ble Reference to BLE device. + */ + GreenBuildingService(BLE& _ble) : + ble(_ble), + plantEnvironmentCharacteristic(GreenBuildingService::UUID_PLANT_ENVIRONMENT_CHAR, + &plantEnvironment , + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) + { + static bool serviceAdded = false; // Ensure only single service is added + if (serviceAdded) { + return; + } + + GattCharacteristic *charTable[] = { &plantEnvironmentCharacteristic }; // Compile characteristics + + GattService greenBuildingService(GreenBuildingService::UUID_GREEN_BUILDING_SERVICE, + charTable , + sizeof(charTable) / sizeof(GattCharacteristic *)); // Create GATT service + + ble.gattServer().addService(greenBuildingService); // Register service with GATT server + + serviceAdded = true; + } + + /** + * @brief Update plant environment characteristic. + * @param newPlantEnvironmentVal New plant environment measurement. + */ + void updatePlantEnvironment(PlantEnvironmentType_t newPlantEnvironmentVal) + { + plantEnvironment = (PlantEnvironmentType_t) (newPlantEnvironmentVal); + ble.gattServer().write(plantEnvironmentCharacteristic.getValueHandle(), (uint8_t *) &plantEnvironment, sizeof(PlantEnvironmentType_t)); + } + +private: + BLE& ble; /*< Local BLE controller reference */ + + ReadOnlyGattCharacteristic<PlantEnvironmentType_t> plantEnvironmentCharacteristic; /*< Plant environment read-only characteristic */ + + PlantEnvironmentType_t plantEnvironment; /*< Local var for plant environment */ +}; + +#endif /* #ifndef __BLE_GREEN_BUILDING_SERVICE_H__*/ \ No newline at end of file