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:
Mon Jan 29 14:41:02 2018 +0000
Revision:
14:0c8967e20f93
Parent:
13:f8e84b12665c
scrapped wifi credentials in preparation for publishing

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 14:0c8967e20f93 21 // Influx TSDB http api
jaafaryn 14:0c8967e20f93 22 #define INFLUX_SERVER_URL "rpi1.nrjy.com"
jaafaryn 14:0c8967e20f93 23 #define INFLUX_SERVER_PORT 8086
jaafaryn 14:0c8967e20f93 24 #define INFLUX_WRITE_EP "/write?db=HENV2&precision=s&rp=HENV2_1y"
jaafaryn 11:1e0b9a529ee0 25
jaafaryn 14:0c8967e20f93 26 // time server http api to get current unix time
jaafaryn 14:0c8967e20f93 27 #define TIME_SERVER_URL "www.convert-unix-time.com"
jaafaryn 14:0c8967e20f93 28 #define TIME_SERVER_PORT 80
jaafaryn 14:0c8967e20f93 29 #define TIME_SERVER_EP "/api?timestamp=now&timezone=New_York"
jaafaryn 12:058b012dbebe 30
jaafaryn 14:0c8967e20f93 31 #define WIFI_WRITE_TIMEOUT 3000
jaafaryn 14:0c8967e20f93 32 #define WIFI_READ_TIMEOUT 3000
jaafaryn 14:0c8967e20f93 33 #define CONNECTION_TRIAL_MAX 3
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 14:0c8967e20f93 45 #define WAKE_UP_DISPLAY nextion.printf("sleep=0\xff\xff\xff")
jaafaryn 11:1e0b9a529ee0 46
jaafaryn 11:1e0b9a529ee0 47
jaafaryn 11:1e0b9a529ee0 48 /* Interface definition */
jaafaryn 11:1e0b9a529ee0 49 static DevI2C devI2c(PB_11,PB_10);
jaafaryn 11:1e0b9a529ee0 50 Serial pc(USBTX, USBRX, 115200);
jaafaryn 11:1e0b9a529ee0 51 Serial nextion(PA_0, PA_1, 115200); //i.e. D1, D0 : Serial 4
jaafaryn 11:1e0b9a529ee0 52 DigitalOut led3(LED3);// WiFi module status
jaafaryn 11:1e0b9a529ee0 53 DigitalOut ledhttp(LED2);// Http activity
jaafaryn 11:1e0b9a529ee0 54
jaafaryn 11:1e0b9a529ee0 55
jaafaryn 11:1e0b9a529ee0 56 /* Operation flags */
jaafaryn 11:1e0b9a529ee0 57 volatile bool sense_enabled = false;
jaafaryn 11:1e0b9a529ee0 58 volatile bool take_measurements = false;
jaafaryn 11:1e0b9a529ee0 59 volatile bool send_measurements = false;
jaafaryn 11:1e0b9a529ee0 60 volatile bool check_proximity = false;
jaafaryn 12:058b012dbebe 61 bool rtc_synced = false;
jaafaryn 11:1e0b9a529ee0 62 bool WiFi_on = false;
jaafaryn 11:1e0b9a529ee0 63
jaafaryn 11:1e0b9a529ee0 64
jaafaryn 11:1e0b9a529ee0 65 /* Timers */
jaafaryn 11:1e0b9a529ee0 66 Ticker getMeasurementsTicker;
jaafaryn 11:1e0b9a529ee0 67 Ticker sendMeasurementsTicker;
jaafaryn 11:1e0b9a529ee0 68 Ticker checkProximityTicker;
jaafaryn 11:1e0b9a529ee0 69 // Ticker WiFi_led_ticker;
jaafaryn 11:1e0b9a529ee0 70
jaafaryn 11:1e0b9a529ee0 71
jaafaryn 11:1e0b9a529ee0 72 /* Environmental sensors */
jaafaryn 11:1e0b9a529ee0 73 static LPS22HBSensor press_temp(&devI2c);
jaafaryn 11:1e0b9a529ee0 74 static HTS221Sensor hum_temp(&devI2c);
jaafaryn 11:1e0b9a529ee0 75 /* Motion sensors */
jaafaryn 11:1e0b9a529ee0 76 static LSM6DSLSensor acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11); // low address
jaafaryn 11:1e0b9a529ee0 77 static LIS3MDL magnetometer(&devI2c);
jaafaryn 11:1e0b9a529ee0 78 /* Range sensor */
jaafaryn 11:1e0b9a529ee0 79 static DigitalOut shutdown_pin(PC_6);
jaafaryn 11:1e0b9a529ee0 80 static VL53L0X range(&devI2c, &shutdown_pin, PC_7);
jaafaryn 11:1e0b9a529ee0 81
jaafaryn 11:1e0b9a529ee0 82
jaafaryn 11:1e0b9a529ee0 83 /* Environment variables */
jaafaryn 12:058b012dbebe 84 uint32_t distance_val = 0;
jaafaryn 11:1e0b9a529ee0 85 float tempC_val = 0;
jaafaryn 11:1e0b9a529ee0 86 float tempF_val = 0;
jaafaryn 11:1e0b9a529ee0 87 float RH_val = 0;
jaafaryn 11:1e0b9a529ee0 88 float Patm_val = 0;
jaafaryn 11:1e0b9a529ee0 89 float tempC_val2 = 0;
jaafaryn 12:058b012dbebe 90
jaafaryn 11:1e0b9a529ee0 91
jaafaryn 11:1e0b9a529ee0 92 /* Comm vars */
jaafaryn 11:1e0b9a529ee0 93 static uint8_t http_request[1024];
jaafaryn 11:1e0b9a529ee0 94 static uint8_t http_resp[512];
jaafaryn 11:1e0b9a529ee0 95 uint16_t reqLen;
jaafaryn 11:1e0b9a529ee0 96 uint16_t respLen;
jaafaryn 11:1e0b9a529ee0 97 uint32_t request_sent = 0;
jaafaryn 11:1e0b9a529ee0 98 uint32_t request_acked = 0;
jaafaryn 11:1e0b9a529ee0 99
jaafaryn 11:1e0b9a529ee0 100
jaafaryn 11:1e0b9a529ee0 101 /* Functions Prototypes */
jaafaryn 11:1e0b9a529ee0 102 bool connectToServer(char *serverUrl, uint16_t serverPort, uint8_t socket_id);
jaafaryn 11:1e0b9a529ee0 103 bool connectWiFi(void);
jaafaryn 11:1e0b9a529ee0 104 bool checkWiFi(void);
jaafaryn 11:1e0b9a529ee0 105 void time_to_sense_cb(void);
jaafaryn 11:1e0b9a529ee0 106 void time_to_send_cb(void);
jaafaryn 11:1e0b9a529ee0 107 void time_to_check_distance_cb(void);
jaafaryn 12:058b012dbebe 108 bool sync_rtc(void);
jaafaryn 12:058b012dbebe 109 bool getCurrentTime(uint8_t socket_id, uint32_t *timeStamp);
jaafaryn 11:1e0b9a529ee0 110 // void toggle_led3_cb();