a sensor hub for monitoring home environment

Dependencies:   HTS221 LIS3MDL LPS22HB LSM303AGR LSM6DSL VL53L0X picojson

Fork of HelloWorld_ST_Sensors by ST

Committer:
jaafaryn
Date:
Tue Dec 19 19:31:23 2017 +0000
Revision:
13:f8e84b12665c
Parent:
12:058b012dbebe
Child:
14:0c8967e20f93
Added time display on Nextion display.; Added option to enter power save mode for es-WiFi module (experimental).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jaafaryn 11:1e0b9a529ee0 1 /* Home Environemnt Monitoring and Logging with STM32 IOT DISCOVERY Board */
jaafaryn 11:1e0b9a529ee0 2 /* */
jaafaryn 11:1e0b9a529ee0 3 /* Jaafar Benabdallah - 2017 */
jaafaryn 11:1e0b9a529ee0 4
jaafaryn 11:1e0b9a529ee0 5
jaafaryn 11:1e0b9a529ee0 6 /* Libraries */
jaafaryn 11:1e0b9a529ee0 7 #include "mbed.h"
jaafaryn 11:1e0b9a529ee0 8 #include "HTS221Sensor.h"
jaafaryn 11:1e0b9a529ee0 9 #include "LPS22HBSensor.h"
jaafaryn 11:1e0b9a529ee0 10 #include "LSM6DSLSensor.h"
jaafaryn 11:1e0b9a529ee0 11 #include "lis3mdl_class.h"
jaafaryn 11:1e0b9a529ee0 12 #include "VL53L0X.h"
jaafaryn 11:1e0b9a529ee0 13 #include "wifi.h"
jaafaryn 12:058b012dbebe 14 #include "picojson.h"
jaafaryn 11:1e0b9a529ee0 15
jaafaryn 11:1e0b9a529ee0 16 /* Syncing Params */
jaafaryn 11:1e0b9a529ee0 17 #define SENSE_PERIOD_S 5.0
jaafaryn 11:1e0b9a529ee0 18 #define UPLOAD_PERIOD_S 30.0
jaafaryn 11:1e0b9a529ee0 19 #define CHECK_PROXIMITY_PERIOD_S 1.0
jaafaryn 11:1e0b9a529ee0 20
jaafaryn 12:058b012dbebe 21 // Influx TSDB http server
jaafaryn 11:1e0b9a529ee0 22 #define INFLUX_SERVER_URL "rpi1.nrjy.com"
jaafaryn 11:1e0b9a529ee0 23 #define INFLUX_SERVER_PORT 8086
jaafaryn 11:1e0b9a529ee0 24
jaafaryn 12:058b012dbebe 25 // time server to get current unix time and sync rtc
jaafaryn 12:058b012dbebe 26 #define TIME_SERVER_URL "www.convert-unix-time.com"
jaafaryn 12:058b012dbebe 27 #define TIME_SERVER_PORT 80
jaafaryn 12:058b012dbebe 28 #define TIME_SERVER_QUERY "/api?timestamp=now&timezone=New_York"
jaafaryn 12:058b012dbebe 29
jaafaryn 12:058b012dbebe 30
jaafaryn 11:1e0b9a529ee0 31 #define WIFI_WRITE_TIMEOUT 5000
jaafaryn 11:1e0b9a529ee0 32 #define WIFI_READ_TIMEOUT 5000
jaafaryn 11:1e0b9a529ee0 33 #define CONNECTION_TRIAL_MAX 5
jaafaryn 11:1e0b9a529ee0 34
jaafaryn 11:1e0b9a529ee0 35 /* Nextion display macros */
jaafaryn 13:f8e84b12665c 36
jaafaryn 13:f8e84b12665c 37 #define RESET_NEXTION nextion.printf("rest\xff\xff\xff")
jaafaryn 13:f8e84b12665c 38 #define WIFI_ICON_ON nextion.printf("vis wifi,1\xff\xff\xff")
jaafaryn 13:f8e84b12665c 39 #define WIFI_ICON_OFF nextion.printf("vis wifi,0\xff\xff\xff")
jaafaryn 13:f8e84b12665c 40 #define UPLOAD_ICON_ON nextion.printf("vis upload,1\xff\xff\xff")
jaafaryn 13:f8e84b12665c 41 #define UPLOAD_ICON_OFF nextion.printf("vis upload,0\xff\xff\xff")
jaafaryn 13:f8e84b12665c 42 #define NO_WAKEUP_ON_SERIALIN nextion.printf("usup=0\xff\xff\xff")
jaafaryn 13:f8e84b12665c 43 #define WAKEUP_ON_TOUCH nextion.printf("thup=1\xff\xff\xff")
jaafaryn 13:f8e84b12665c 44 #define SLEEP_ON_NOTOUCH_30S nextion.printf("thsp=30\xff\xff\xff")
jaafaryn 11:1e0b9a529ee0 45
jaafaryn 11:1e0b9a529ee0 46
jaafaryn 11:1e0b9a529ee0 47 /* Interface definition */
jaafaryn 11:1e0b9a529ee0 48 static DevI2C devI2c(PB_11,PB_10);
jaafaryn 11:1e0b9a529ee0 49 Serial pc(USBTX, USBRX, 115200);
jaafaryn 11:1e0b9a529ee0 50 Serial nextion(PA_0, PA_1, 115200); //i.e. D1, D0 : Serial 4
jaafaryn 11:1e0b9a529ee0 51 DigitalOut led3(LED3);// WiFi module status
jaafaryn 11:1e0b9a529ee0 52 DigitalOut ledhttp(LED2);// Http activity
jaafaryn 11:1e0b9a529ee0 53
jaafaryn 11:1e0b9a529ee0 54
jaafaryn 11:1e0b9a529ee0 55 /* Operation flags */
jaafaryn 11:1e0b9a529ee0 56 volatile bool sense_enabled = false;
jaafaryn 11:1e0b9a529ee0 57 volatile bool take_measurements = false;
jaafaryn 11:1e0b9a529ee0 58 volatile bool send_measurements = false;
jaafaryn 11:1e0b9a529ee0 59 volatile bool check_proximity = false;
jaafaryn 12:058b012dbebe 60 bool rtc_synced = false;
jaafaryn 11:1e0b9a529ee0 61 bool WiFi_on = false;
jaafaryn 11:1e0b9a529ee0 62
jaafaryn 11:1e0b9a529ee0 63
jaafaryn 11:1e0b9a529ee0 64 /* Timers */
jaafaryn 11:1e0b9a529ee0 65 Ticker getMeasurementsTicker;
jaafaryn 11:1e0b9a529ee0 66 Ticker sendMeasurementsTicker;
jaafaryn 11:1e0b9a529ee0 67 Ticker checkProximityTicker;
jaafaryn 11:1e0b9a529ee0 68 // Ticker WiFi_led_ticker;
jaafaryn 11:1e0b9a529ee0 69
jaafaryn 11:1e0b9a529ee0 70
jaafaryn 11:1e0b9a529ee0 71 /* Environmental sensors */
jaafaryn 11:1e0b9a529ee0 72 static LPS22HBSensor press_temp(&devI2c);
jaafaryn 11:1e0b9a529ee0 73 static HTS221Sensor hum_temp(&devI2c);
jaafaryn 11:1e0b9a529ee0 74 /* Motion sensors */
jaafaryn 11:1e0b9a529ee0 75 static LSM6DSLSensor acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11); // low address
jaafaryn 11:1e0b9a529ee0 76 static LIS3MDL magnetometer(&devI2c);
jaafaryn 11:1e0b9a529ee0 77 /* Range sensor */
jaafaryn 11:1e0b9a529ee0 78 static DigitalOut shutdown_pin(PC_6);
jaafaryn 11:1e0b9a529ee0 79 static VL53L0X range(&devI2c, &shutdown_pin, PC_7);
jaafaryn 11:1e0b9a529ee0 80
jaafaryn 11:1e0b9a529ee0 81
jaafaryn 11:1e0b9a529ee0 82 /* Environment variables */
jaafaryn 12:058b012dbebe 83 uint32_t distance_val = 0;
jaafaryn 11:1e0b9a529ee0 84 float tempC_val = 0;
jaafaryn 11:1e0b9a529ee0 85 float tempF_val = 0;
jaafaryn 11:1e0b9a529ee0 86 float RH_val = 0;
jaafaryn 11:1e0b9a529ee0 87 float Patm_val = 0;
jaafaryn 11:1e0b9a529ee0 88 float tempC_val2 = 0;
jaafaryn 12:058b012dbebe 89
jaafaryn 11:1e0b9a529ee0 90
jaafaryn 11:1e0b9a529ee0 91
jaafaryn 11:1e0b9a529ee0 92 /* Comm vars */
jaafaryn 11:1e0b9a529ee0 93 char *InfluxServerUrl = INFLUX_SERVER_URL;
jaafaryn 11:1e0b9a529ee0 94 char *influx_query = "/write?db=HENV2&precision=s&rp=HENV2_1y";
jaafaryn 11:1e0b9a529ee0 95 uint16_t InfluxServerPort = INFLUX_SERVER_PORT;
jaafaryn 11:1e0b9a529ee0 96 static uint8_t http_request[1024];
jaafaryn 11:1e0b9a529ee0 97 static uint8_t http_resp[512];
jaafaryn 11:1e0b9a529ee0 98 uint16_t reqLen;
jaafaryn 11:1e0b9a529ee0 99 uint16_t respLen;
jaafaryn 11:1e0b9a529ee0 100 uint32_t request_sent = 0;
jaafaryn 11:1e0b9a529ee0 101 uint32_t request_acked = 0;
jaafaryn 11:1e0b9a529ee0 102
jaafaryn 11:1e0b9a529ee0 103
jaafaryn 11:1e0b9a529ee0 104 /* Functions Prototypes */
jaafaryn 11:1e0b9a529ee0 105 bool connectToServer(char *serverUrl, uint16_t serverPort, uint8_t socket_id);
jaafaryn 11:1e0b9a529ee0 106 bool connectWiFi(void);
jaafaryn 11:1e0b9a529ee0 107 bool checkWiFi(void);
jaafaryn 11:1e0b9a529ee0 108 void time_to_sense_cb(void);
jaafaryn 11:1e0b9a529ee0 109 void time_to_send_cb(void);
jaafaryn 11:1e0b9a529ee0 110 void time_to_check_distance_cb(void);
jaafaryn 12:058b012dbebe 111 bool sync_rtc(void);
jaafaryn 12:058b012dbebe 112 bool getCurrentTime(uint8_t socket_id, uint32_t *timeStamp);
jaafaryn 11:1e0b9a529ee0 113 // void toggle_led3_cb();