LoRaWAN_FAE_Training
Dependencies: X_NUCLEO_IKS01A2
Diff: main.cpp
- Revision:
- 48:b02d43b5e90c
- Parent:
- 45:96fe99f19cd0
- Child:
- 49:2453a6404fbe
--- a/main.cpp Tue Mar 12 09:08:43 2019 +0000 +++ b/main.cpp Tue Mar 12 17:18:08 2019 +0000 @@ -25,12 +25,19 @@ #include "trace_helper.h" #include "lora_radio_helper.h" -// Sensors -#include "Grove_temperature.h" -#include "MMA7660.h" +// sensor boards IKS01A2 +#include "XNucleoIKS01A2.h" + + +/* Instantiate the expansion board */ +static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); -Grove_temperature temp(A1); -MMA7660 accelemeter; +/* Retrieve the composing elements of the expansion board */ +static LSM303AGRMagSensor *magnetometer = mems_expansion_board->magnetometer; +static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; +static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor; +static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro; +static LSM303AGRAccSensor *accelerometer = mems_expansion_board->accelerometer; using namespace events; @@ -99,14 +106,35 @@ */ int main (void) { + uint8_t id; + // setup tracing setup_trace(); + + // Init IKS01A2 Board + printf("\r\n--- IKS01A2 conf start ---\r\n"); + + /* Enable all sensors */ + hum_temp->enable(); + press_temp->enable(); + magnetometer->enable(); + accelerometer->enable(); + acc_gyro->enable_x(); + acc_gyro->enable_g(); + hum_temp->read_id(&id); + printf("HTS221 humidity & temperature = 0x%X\r\n", id); + press_temp->read_id(&id); + printf("LPS22HB pressure & temperature = 0x%X\r\n", id); + magnetometer->read_id(&id); + printf("LSM303AGR magnetometer = 0x%X\r\n", id); + accelerometer->read_id(&id); + printf("LSM303AGR accelerometer = 0x%X\r\n", id); + acc_gyro->read_id(&id); + printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id); + // stores the status of a call to LoRaWAN protocol lorawan_status_t retcode; - - //Initialise accelerometer (if plugged) - accelemeter.init(); // Initialize LoRaWAN stack if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) { @@ -160,49 +188,105 @@ */ static void send_message() { - uint16_t packet_len, Temperature, axConverted, ayConverted, azConverted; + uint16_t packet_len, Temperature, Index=1; + uint32_t Pressure, Humidity; int16_t retcode; float sensor_value; - float ax,ay,az; + + float value1, value2; + char buffer1[32], buffer2[32]; + int32_t axes[3]; - if (ds1820.begin()) { - ds1820.startConversion(); - sensor_value = ds1820.read(); - printf("\r\n Dummy Sensor Value = %3.1f \r\n", sensor_value); - ds1820.startConversion(); - } else { - printf("\r\n No sensor found \r\n"); - return; - } +// if (ds1820.begin()) { +// ds1820.startConversion(); +// sensor_value = ds1820.read(); +// printf("\r\n Dummy Sensor Value = %3.1f \r\n", sensor_value); +// ds1820.startConversion(); +// } else { +// printf("\r\n No sensor found \r\n"); +// return; +// } + +// packet_len = sprintf((char*) tx_buffer, "Dummy Sensor Value is %3.1f", +// sensor_value); + + hum_temp->get_temperature(&value1); + hum_temp->get_humidity(&value2); + printf("HTS221: [temp] %2.2f C, [hum] %2.2f \r\n", value1, value2); + Humidity = value2 * 100; - packet_len = sprintf((char*) tx_buffer, "Dummy Sensor Value is %3.1f", - sensor_value); - - /* Grove Temperature Sensor */ -// sensor_value = temp.getTemperature(); -// printf("temperature = %2.2f\n", sensor_value); -// Temperature = (uint16_t)sensor_value * 100; -// tx_buffer[0]=0x01; //Temperature -// tx_buffer[1]=0x02; // Len -// tx_buffer[2]=Temperature & 0xFF; // Temp LSB -// tx_buffer[3]=(Temperature >> 16) & 0xFF; // Temp MSB -// packet_len = 4; + /*Add Humidity*/ + tx_buffer[0]+=1; // Add 1 Nbelment + tx_buffer[Index]=0x03; // Humidity + tx_buffer[Index+1]=0x03; // Len + tx_buffer[Index+2]=(uint8_t)(Humidity & 0xFF); // Press LSB + tx_buffer[Index+3]=(uint8_t)((Humidity >> 8) & 0xFF); // Press MID + tx_buffer[Index+4]=(uint8_t)((Humidity >> 16) & 0xFF); // Press MSB + Index+=5; + + press_temp->get_temperature(&value1); + press_temp->get_pressure(&value2); + printf("LPS22HB: [temp] %2.2f C, [press] %4.2f mbar\r\n", value1, value2); + + + Temperature = value1 * 100; // Convert for transmit + Pressure = value2 * 100; // Convert for transmit + + /*Add Tempertaure*/ + tx_buffer[0]+=1; // Add 1 Nbelment + tx_buffer[Index]=0x01; // Temperature + tx_buffer[Index+1]=0x02; // Len + tx_buffer[Index+2]=(uint8_t)(Temperature & 0xFF); // Temp LSB + tx_buffer[Index+3]=(uint8_t)((Temperature >> 8) & 0xFF); // Temp MSB + Index+=4; // Update the Index - /* Grove Accelerometer Sensor */ -// accelemeter.getAcceleration(&ax,&ay,&az); -// printf("Accleration of X=%2.2fg, Y=%2.2fg, Z=%2.2fg\n\r",ax,ay,az); -// tx_buffer[0]=0x02; //Acceleration -// tx_buffer[1]=0x06; // Len -// axConverted = ax * 100; -// tx_buffer[2]=(axConverted & 0xFF); // x axe LSB -// tx_buffer[3]=((axConverted >> 16) & 0xFF); // x axe MSB -// ayConverted = ay * 100; -// tx_buffer[4]=(ayConverted & 0xFF); // y axe LSB -// tx_buffer[5]=((ayConverted >> 16) & 0xFF); // y axe MSB -// azConverted = az * 100; -// tx_buffer[6]=(azConverted & 0xFF); // x axe LSB -// tx_buffer[7]=((azConverted >> 16) & 0xFF); // x axe MSB -// packet_len = 8; + /*Add Pressure*/ + tx_buffer[0]+=1; + tx_buffer[Index]=0x02; // Pressure + tx_buffer[Index+1]=0x03; // Len + tx_buffer[Index+2]=(uint8_t)(Pressure & 0xFF); // Press LSB + tx_buffer[Index+3]=(uint8_t)((Pressure >> 8) & 0xFF); // Press MID + tx_buffer[Index+4]=(uint8_t)((Pressure >> 16) & 0xFF); // Press MSB + Index+=5; + + printf("---\r\n"); + +// magnetometer->get_m_axes(axes); +// printf("LSM303AGR [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); +// + accelerometer->get_x_axes(axes); + printf("LSM303AGR [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); + + /*Add Accelerometer*/ + tx_buffer[0]+=1; + tx_buffer[Index]=0x04; // Accelerometer + tx_buffer[Index+1]=0x03; // Len + /* x */ + tx_buffer[Index+2]=(uint8_t)(axes[0] & 0xFF); // Press LSB + tx_buffer[Index+3]=(uint8_t)((axes[0] >> 8) & 0xFF); // Press MID + tx_buffer[Index+4]=(uint8_t)((axes[0] >> 16) & 0xFF); // Press MID + tx_buffer[Index+5]=(uint8_t)((axes[0] >> 24) & 0xFF); // Press MSB + + /* y */ + tx_buffer[Index+6]=(uint8_t)(axes[1] & 0xFF); // Press LSB + tx_buffer[Index+7]=(uint8_t)((axes[1] >> 8) & 0xFF); // Press MID + tx_buffer[Index+8]=(uint8_t)((axes[1] >> 16) & 0xFF); // Press MID + tx_buffer[Index+9]=(uint8_t)((axes[1] >> 24) & 0xFF); // Press MSB + + /* z */ + tx_buffer[Index+10]=(uint8_t)(axes[2] & 0xFF); // Press LSB + tx_buffer[Index+11]=(uint8_t)((axes[2] >> 8) & 0xFF); // Press MID + tx_buffer[Index+12]=(uint8_t)((axes[2] >> 16) & 0xFF); // Press MID + tx_buffer[Index+13]=(uint8_t)((axes[2] >> 24) & 0xFF); // Press MSB + Index+=14; +// +// acc_gyro->get_x_axes(axes); +// printf("LSM6DSL [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); +// +// acc_gyro->get_g_axes(axes); +// printf("LSM6DSL [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); + + packet_len = Index + 1; // Compute the final payload size retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len, MSG_UNCONFIRMED_FLAG); @@ -246,6 +330,19 @@ } printf("\r\n Data Length: %d\r\n", retcode); + + if(rx_buffer[0] & 0x01 == 1) + { + printf("\r\n Board is in Wrong side !!!!! \r\n\r\n"); + } + if(((rx_buffer[0] & 0x02) >> 1) == 1) + { + printf("\r\n It's hot here !!!!! \r\n\r\n"); + } + if(((rx_buffer[0] & 0x04) >> 2) == 1) + { + printf("\r\n It's humid here !!!!! \r\n\r\n"); + } memset(rx_buffer, 0, sizeof(rx_buffer)); }