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:
2017-12-19
Revision:
13:f8e84b12665c
Parent:
12:058b012dbebe
Child:
14:0c8967e20f93

File content as of revision 13:f8e84b12665c:

/* 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 server
#define INFLUX_SERVER_URL "rpi1.nrjy.com"
#define INFLUX_SERVER_PORT 8086

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


#define WIFI_WRITE_TIMEOUT 5000
#define WIFI_READ_TIMEOUT  5000
#define CONNECTION_TRIAL_MAX    5

/* 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")


/* 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 */
char *InfluxServerUrl = INFLUX_SERVER_URL;
char *influx_query = "/write?db=HENV2&precision=s&rp=HENV2_1y";
uint16_t InfluxServerPort = INFLUX_SERVER_PORT;
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();