Difference between revisions of "WaspmoteBLECentral"
From AMTech WikiDocs
Line 9: | Line 9: | ||
##Next bytes must be set with read sensor value a byte with the id of the sensor from Libelium WaspFrame.h and the value(s) read b the sensor | ##Next bytes must be set with read sensor value a byte with the id of the sensor from Libelium WaspFrame.h and the value(s) read b the sensor | ||
#WaspmoteBLECentral logic uses sensor values type and size from Libelium document data_frame_guide.pdf [http://www.libelium.com/downloads/documentation/data_frame_guide.pdf Sensor ID Table page 13] | #WaspmoteBLECentral logic uses sensor values type and size from Libelium document data_frame_guide.pdf [http://www.libelium.com/downloads/documentation/data_frame_guide.pdf Sensor ID Table page 13] | ||
− | < | + | <syntaxhighlight lang="jsonld"> |
#define MSGADDITIONAL_SIZE 29; | #define MSGADDITIONAL_SIZE 29; | ||
int buildAdditionalSensors() | int buildAdditionalSensors() | ||
Line 58: | Line 58: | ||
showValue(humidity, "SENSOR_GP_HUM", ms); | showValue(humidity, "SENSOR_GP_HUM", ms); | ||
return ms; | return ms; | ||
− | }</ | + | } |
+ | </syntaxhighlight> |
Revision as of 12:55, 19 July 2017
WaspmoteBLECentral is a thing type that implements a BLE Central to communicate with Libelium waspmote model using the BLE protocol. The Arduino sketch running on the Libelium waspmote model should construct the BLE advertisement package following the next guideline:
- Write the local attribute containing the device name value "WBLE" BLE.writeLocalAttribute(3, deviceName);
- Build a custom BLE advertisement packet
- First byte package size
- Second byte MANUFACTURER_SPECIFIC_DATA Identifier 0xff
- Third byte waspmote model identifier example GAS_PRO = 19 (see waspmote model documentation)
- Fort byte first 4 bits a message number from 1-255 last 4 bits the amount of sensors values send in the package
- Next bytes must be set with read sensor value a byte with the id of the sensor from Libelium WaspFrame.h and the value(s) read b the sensor
- WaspmoteBLECentral logic uses sensor values type and size from Libelium document data_frame_guide.pdf Sensor ID Table page 13
#define MSGADDITIONAL_SIZE 29;
int buildAdditionalSensors()
{
int ms = 0; ;
memset(advData, 0x00, sizeof(advData));
advData[ms++]= MSGADDITIONAL_SIZE;
advData[ms++]= AD_TYPE_MANUFACTURER_SPECIFIC_DATA;
advData[ms++] = LIBELIUM_BLEID;
advData[ms++] = Gases_PRO;
//byte result = (byte)(number1 | (number2 << 4));
advData[ms++] = (uint8_t)(10 | (5 <<4));
advData[ms++] = msgNumber++;
showValue(msgNumber, "msgNumber", ms);
//1 SENSOR_ACC
advData[ms++] = SENSOR_ACC;
int x = ACC.getX();
int y = ACC.getY();
int z = ACC.getZ();
memcpy( &advData[ms], &x, sizeof(int) );
ms += sizeof(int);
memcpy( &advData[ms], &y, sizeof(int) );
ms += sizeof(int);
memcpy( &advData[ms], &z, sizeof(int) );
ms += sizeof(int);
showACCValues(x,y,z, ms);
//2S ENSOR_BAT
advData[ms++] = SENSOR_BAT;
uint8_t vuint = PWR.getBatteryLevel();
memcpy( &advData[ms], &vuint, sizeof(uint8_t) );
ms += sizeof(uint8_t);
showValue(vuint, "SENSOR_BAT", ms);
//3 SENSOR_IN_TEMP
advData[ms++] = SENSOR_IN_TEMP;
float vfloat = RTC.getTemperature();
memcpy( &advData[ms], &vfloat, sizeof(float) );
ms += sizeof(float);
showValue(vfloat, "SENSOR_IN_TEMP", ms);
//4 SENSOR_GP_TC
advData[ms++] = SENSOR_GP_TC;
memcpy( &advData[ms], &temperature, sizeof(float) );
ms += sizeof(float);
showValue(temperature, "SENSOR_GP_TC", ms);
//5 SENSOR_GP_HUM
advData[ms++] = SENSOR_GP_HUM;
memcpy( &advData[ms], &humidity, sizeof(float) );
ms += sizeof(float);
showValue(humidity, "SENSOR_GP_HUM", ms);
return ms;
}