a sensor hub for monitoring home environment

Dependencies:   HTS221 LIS3MDL LPS22HB LSM303AGR LSM6DSL VL53L0X picojson

Fork of HelloWorld_ST_Sensors by ST

main.h

Committer:
jaafaryn
Date:
2018-01-29
Revision:
14:0c8967e20f93
Parent:
13:f8e84b12665c

File content as of revision 14:0c8967e20f93:

/* Home Environemnt Monitoring and Logging with STM32 IOT DISCOVERY Board   */
/*                                                                          */
/* Jaafar Benabdallah - 2017 */


/* Libraries */
#include "mbed.h"
#include "HTS221Sensor.h"
#include "LPS22HBSensor.h"
#include "LSM6DSLSensor.h"
#include "lis3mdl_class.h"
#include "VL53L0X.h"
#include "wifi.h"
#include "picojson.h"

/* Syncing Params */
#define SENSE_PERIOD_S  5.0
#define UPLOAD_PERIOD_S 30.0
#define CHECK_PROXIMITY_PERIOD_S  1.0

// Influx TSDB http api
#define INFLUX_SERVER_URL   "rpi1.nrjy.com"
#define INFLUX_SERVER_PORT  8086
#define INFLUX_WRITE_EP     "/write?db=HENV2&precision=s&rp=HENV2_1y"

// time server http api to get current unix time
#define TIME_SERVER_URL     "www.convert-unix-time.com"
#define TIME_SERVER_PORT    80
#define TIME_SERVER_EP      "/api?timestamp=now&timezone=New_York"

#define WIFI_WRITE_TIMEOUT 3000
#define WIFI_READ_TIMEOUT  3000
#define CONNECTION_TRIAL_MAX    3

/* Nextion display macros */

#define RESET_NEXTION           nextion.printf("rest\xff\xff\xff")
#define WIFI_ICON_ON            nextion.printf("vis wifi,1\xff\xff\xff")
#define WIFI_ICON_OFF           nextion.printf("vis wifi,0\xff\xff\xff")
#define UPLOAD_ICON_ON          nextion.printf("vis upload,1\xff\xff\xff")
#define UPLOAD_ICON_OFF         nextion.printf("vis upload,0\xff\xff\xff")
#define NO_WAKEUP_ON_SERIALIN   nextion.printf("usup=0\xff\xff\xff")
#define WAKEUP_ON_TOUCH         nextion.printf("thup=1\xff\xff\xff")
#define SLEEP_ON_NOTOUCH_30S    nextion.printf("thsp=30\xff\xff\xff")
#define WAKE_UP_DISPLAY         nextion.printf("sleep=0\xff\xff\xff")


/* Interface definition */
static DevI2C devI2c(PB_11,PB_10);
Serial pc(USBTX, USBRX, 115200);
Serial nextion(PA_0, PA_1, 115200); //i.e. D1, D0 : Serial 4
DigitalOut led3(LED3);// WiFi module status
DigitalOut ledhttp(LED2);// Http activity


/* Operation flags */
volatile bool   sense_enabled = false;
volatile bool   take_measurements = false;
volatile bool   send_measurements = false;
volatile bool   check_proximity = false;
bool rtc_synced = false;
bool WiFi_on = false;


/* Timers   */
Ticker  getMeasurementsTicker;
Ticker  sendMeasurementsTicker;
Ticker  checkProximityTicker;
// Ticker  WiFi_led_ticker;


/* Environmental sensors */
static LPS22HBSensor press_temp(&devI2c);
static HTS221Sensor hum_temp(&devI2c);
/* Motion sensors */
static LSM6DSLSensor acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11); // low address
static LIS3MDL magnetometer(&devI2c);
/* Range sensor  */
static DigitalOut shutdown_pin(PC_6);
static VL53L0X range(&devI2c, &shutdown_pin, PC_7);


/* Environment variables */
uint32_t distance_val = 0;
float tempC_val = 0;
float tempF_val = 0;
float RH_val = 0;
float Patm_val = 0;
float tempC_val2 = 0;


/* Comm vars */
static   uint8_t http_request[1024];
static   uint8_t http_resp[512];
uint16_t reqLen;
uint16_t respLen;
uint32_t request_sent = 0;
uint32_t request_acked = 0;


/* Functions Prototypes */
bool connectToServer(char *serverUrl, uint16_t serverPort, uint8_t socket_id);
bool connectWiFi(void);
bool checkWiFi(void);
void time_to_sense_cb(void);
void time_to_send_cb(void);
void time_to_check_distance_cb(void);
bool sync_rtc(void);
bool getCurrentTime(uint8_t socket_id, uint32_t *timeStamp);
// void toggle_led3_cb();