diff --git a/examples/ccs811/README.md b/examples/ccs811/README.md
index 1cb7e12..5ff5b5d 100644
--- a/examples/ccs811/README.md
+++ b/examples/ccs811/README.md
@@ -9,8 +9,8 @@ Most examples use only one CCS811 sensor. Following figure shows the hardware co
 ```
   +------------------------+    +--------+
   | ESP8266  Bus 0         |    | CCS811 |
-  |          GPIO 5 (SCL)  >----> SCL    |
-  |          GPIO 4 (SDA)  ------ SDA    |
+  |          GPIO 5 (SCL)  -----> SCL    |
+  |          GPIO 4 (SDA)  <----> SDA    |
   |          GND           -----> /WAKE  |
   +------------------------+    +--------+
 ```
@@ -20,8 +20,8 @@ If *nINT* interrupt is used to fetch new data, additionally the interrupt pin ha
 ```
   +------------------------+    +--------+
   | ESP8266  Bus 0         |    | CCS811 |
-  |          GPIO 5 (SCL)  >----> SCL    |
-  |          GPIO 4 (SDA)  ------ SDA    |
+  |          GPIO 5 (SCL)  -----> SCL    |
+  |          GPIO 4 (SDA)  <----> SDA    |
   |          GPIO 2        <----- /nINT  |
   |          GND           -----> /WAKE  |
   +------------------------+    +--------+
@@ -32,13 +32,13 @@ In examples where CCS811 sensor is used in conjunction with a SHT3x sensor, the
 ```
   +------------------------+       +--------+
   | ESP8266  Bus 0         |       | CCS811 |
-  |          GPIO 5 (SCL)  >--+----> SCL    |
-  |          GPIO 4 (SDA)  ---|-+--- SDA    |
+  |          GPIO 5 (SCL)  ---+----> SCL    |
+  |          GPIO 4 (SDA)  <--|-+--> SDA    |
   |          GND           ---|-|--> /WAKE  |
   |                        |  | |  +--------+
   |                        |  | |  | SHT3x  |
   |                        |  +----> SCL    |
-  |                        |    +--- SDA    |
+  |                        |    +--> SDA    |
   +------------------------+       +--------+
 ```
 
diff --git a/examples/ccs811/ccs811_one_sensor/ccs811_one_sensor.c b/examples/ccs811/ccs811_one_sensor/ccs811_one_sensor.c
index 0123dde..a53b8a6 100644
--- a/examples/ccs811/ccs811_one_sensor/ccs811_one_sensor.c
+++ b/examples/ccs811/ccs811_one_sensor/ccs811_one_sensor.c
@@ -6,40 +6,57 @@
  *
  * Harware configuration:
  *
- * +------------------------+    +--------+
- * | ESP8266  Bus 0         |    | CCS811 |
- * |          GPIO 5 (SCL)  >----> SCL    |
- * |          GPIO 4 (SDA)  ------ SDA    |
- * |          GPIO 2        <----- /nINT  |
- * |          GND           -----> /WAKE  |
- * +------------------------+    +--------+
+ *   +-----------------+   +----------+
+ *   | ESP8266 / ESP32 |   | CCS811   |
+ *   |                 |   |          |
+ *   |   GPIO 14 (SCL) ----> SCL      |
+ *   |   GPIO 13 (SDA) <---> SDA      |
+ *   |   GPIO 5        <---- INT1     |
+ *   |   GND           ----> /WAKE    |
+ *   +-----------------+   +----------+
  */
 
-// use following constants to define the demo mode
+/* -- use following constants to define the example mode ----------- */
+
 // #define INT_DATA_RDY_USED
 // #define INT_THRESHOLD_USED
 
-#include "espressif/esp_common.h"
-#include "esp/uart.h"
-#include "i2c/i2c.h"
+#if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED)
+#define INT_USED
+#endif
 
-#include "FreeRTOS.h"
-#include <task.h>
+/* -- includes ----------------------------------------------------- */
 
-// include CCS811 driver
-#include "ccs811/ccs811.h"
+#include "ccs811.h"
 
-// define I2C interfaces at which CCS811 sensors can be connected
+/* -- platform dependent definitions ------------------------------- */
+
+#ifdef ESP_PLATFORM  // ESP32 (ESP-IDF)
+
+// user task stack depth for ESP32
+#define TASK_STACK_DEPTH 2048
+
+#else  // ESP8266 (esp-open-rtos)
+
+// user task stack depth for ESP8266
+#define TASK_STACK_DEPTH 256
+
+#endif  // ESP_PLATFORM
+
+// I2C interface defintions for ESP32 and ESP8266
 #define I2C_BUS       0
-#define I2C_SCL_PIN   5
-#define I2C_SDA_PIN   4
+#define I2C_SCL_PIN   14
+#define I2C_SDA_PIN   13
+#define I2C_FREQ      I2C_FREQ_100K
 
-// define GPIO for interrupt
-#define INT_GPIO      2
+// interrupt GPIOs defintions for ESP8266 and ESP32
+#define nINT_PIN      13
+
+/* -- user tasks --------------------------------------------------- */
 
 static ccs811_sensor_t* sensor;
 
-#if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED)
+#ifdef INT_USED
 /**
  * In this example, the interrupt *nINT* is used. It is triggered every time
  * new data are available (INT_DATA_RDY_USED) or exceed defined thresholds
@@ -73,12 +90,12 @@ void user_task_interrupt (void *pvParameters)
 
 // Interrupt handler which resumes user_task_interrupt on interrupt
 
-void nINT_handler (uint8_t gpio)
+static void IRAM nINT_handler(uint8_t gpio)
 {
     xTaskResumeFromISR (nINT_task);
 }
 
-#else
+#else // !INT_USED
 
 /*
  * In this example, user task fetches the sensor values every seconds.
@@ -106,20 +123,21 @@ void user_task_periodic(void *pvParameters)
     }
 }
 
-#endif
+#endif // INT_USED
 
+/* -- main program ------------------------------------------------- */
 
 void user_init(void)
 {
-    // set UART Parameter
+    // Set UART Parameter.
     uart_set_baud(0, 115200);
-    // give the UART some time to settle
-    sdk_os_delay_us(500);
+    // Give the UART some time to settle
+    vTaskDelay(1);
 
     /** -- MANDATORY PART -- */
 
     // init all I2C bus interfaces at which CCS811 sensors are connected
-    i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K);
+    i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ);
     
     // longer clock stretching is required for CCS811
     i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH);
@@ -129,28 +147,29 @@ void user_init(void)
 
     if (sensor)
     {
-        #if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED)
+        #if !defined (INT_USED)
+
+        // create a periodic task that uses the sensor
+        xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL);
+
+        #else // INT_USED
 
         // create a task that is resumed by interrupt handler to use the sensor
-        xTaskCreate(user_task_interrupt, "user_task_interrupt", 256, NULL, 2, &nINT_task);
+        xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, &nINT_task);
 
-        // activate the interrupt for INT_GPIO and set the interrupt handler
-        gpio_set_interrupt(INT_GPIO, GPIO_INTTYPE_EDGE_NEG, nINT_handler);
+        // activate the interrupt for nINT_PIN and set the interrupt handler
+        gpio_enable(nINT_PIN, GPIO_INPUT);
+        gpio_set_interrupt(nINT_PIN, GPIO_INTTYPE_EDGE_NEG, nINT_handler);
 
         #ifdef INT_DATA_RDY_USED
         // enable the data ready interrupt
         ccs811_enable_interrupt (sensor, true);
-        #else
+        #else // INT_THRESHOLD_USED
         // set threshold parameters and enable threshold interrupt mode
         ccs811_set_eco2_thresholds (sensor, 600, 1100, 40);
         #endif
 
-        #else
-
-        // create a periodic task that uses the sensor
-        xTaskCreate(user_task_periodic, "user_task_periodic", 256, NULL, 2, NULL);
-
-        #endif
+        #endif  // !defined(INT_USED)
 
         // start periodic measurement with one measurement per second
         ccs811_set_mode (sensor, ccs811_mode_1s);
diff --git a/examples/ccs811/ccs811_plus_sht3x/ccs811_plus_sht3x.c b/examples/ccs811/ccs811_plus_sht3x/ccs811_plus_sht3x.c
index 90976bd..5e32f38 100644
--- a/examples/ccs811/ccs811_plus_sht3x/ccs811_plus_sht3x.c
+++ b/examples/ccs811/ccs811_plus_sht3x/ccs811_plus_sht3x.c
@@ -6,13 +6,13 @@
  *
  * +------------------------+       +--------+
  * | ESP8266  Bus 0         |       | CCS811 |
- * |          GPIO 5 (SCL)  >--+----> SCL    |
- * |          GPIO 4 (SDA)  ---|-+--- SDA    |
+ * |          GPIO 14 (SCL) ---+----> SCL    |
+ * |          GPIO 13 (SDA) <--|-+--> SDA    |
  * |          GND           ---|-|--> /WAKE  |
  * |                        |  | |  +--------+
  * |                        |  | |  | SHT3x  |
  * |                        |  +----> SCL    |
- * |                        |    +--- SDA    |
+ * |                        |    +--> SDA    |
  * +------------------------+       +--------+
  */
 
@@ -31,8 +31,8 @@
 
 // define I2C interfaces at which CCS811 and SHT3x sensors are connected
 #define I2C_BUS       0
-#define I2C_SCL_PIN   5
-#define I2C_SDA_PIN   4
+#define I2C_SCL_PIN   14
+#define I2C_SDA_PIN   13
 
 static ccs811_sensor_t* ccs811; // CCS811 device data structure
 static sht3x_sensor_t*  sht3x;  // SHT3x device data structure
diff --git a/examples/ccs811/ccs811_temperature/ccs811_temperature.c b/examples/ccs811/ccs811_temperature/ccs811_temperature.c
index 56cfaad..6a81c7f 100644
--- a/examples/ccs811/ccs811_temperature/ccs811_temperature.c
+++ b/examples/ccs811/ccs811_temperature/ccs811_temperature.c
@@ -7,8 +7,8 @@
  *
  * +------------------------+    +--------+
  * | ESP8266  Bus 0         |    | CCS811 |
- * |          GPIO 5 (SCL)  >----> SCL    |
- * |          GPIO 4 (SDA)  ------ SDA    |
+ * |          GPIO 14 (SCL) >----> SCL    |
+ * |          GPIO 13 (SDA) <----> SDA    |
  * |          GND           -----> /WAKE  |
  * +------------------------+    +--------+
  */
@@ -27,8 +27,8 @@
 
 // define I2C interfaces at which CCS811 sensors can be connected
 #define I2C_BUS       0
-#define I2C_SCL_PIN   5
-#define I2C_SDA_PIN   4
+#define I2C_SCL_PIN   14
+#define I2C_SDA_PIN   13
 
 
 static ccs811_sensor_t* sensor;
diff --git a/extras/ccs811/README.md b/extras/ccs811/README.md
index d1795f1..fa660ae 100644
--- a/extras/ccs811/README.md
+++ b/extras/ccs811/README.md
@@ -1,6 +1,8 @@
 # Driver for the ams CCS811 digital gas sensor for monitoring indoor air quality.
 
-This driver is written for usage with the ESP8266 and FreeRTOS using the I2C interface driver.
+The driver is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). 
+
+It is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library.
 
 ## About the sensor
 
@@ -32,7 +34,7 @@ After power up, the sensor starts automatically in *Idle, Low Current Mode* (```
 
 **Please note:** In *Constant Power Mode* with measurements every 250 ms (```mode_250ms```) only raw data are available. In all other measurement modes, the Indoor Air Quality (IAQ) values are available additionally. The *Constant Power Mode* with measurements every 250 ms (```mode_250ms```) is only intended for systems where an external host system wants to run an algorithm with raw data.
 
-Once the is initialized with function ```ccs811_init_sensor```, function ```ccs811_set_mode``` can be used to start periodic measurements with a given period.
+Once the sensor is initialized with function ```ccs811_init_sensor```, function ```ccs811_set_mode``` can be used to start periodic measurements with a given period.
 
 ```
 static ccs811_sensor_t* sensor;
@@ -211,42 +213,46 @@ First, the hardware configuration has to be established.
 
 ### Hardware configurations
 
-Following figure shows the hardware configuration if no interrupt is used.
+Following figure shows the hardware configuration for ESP8266 and ESP32 if no interrupt is used.
 
 ```
-  +------------------------+    +--------+
-  | ESP8266  Bus 0         |    | CCS811 |
-  |          GPIO 5 (SCL)  >----> SCL    |
-  |          GPIO 4 (SDA)  ------ SDA    |
-  |          GND           -----> /WAKE  |
-  +------------------------+    +--------+
+  +------------------+       +--------+
+  | ESP8266 / ESP32  |       | CCS811 |
+  |                  |       |        |
+  |    GPIO 14 (SCL) >-------> SCL    |
+  |    GPIO 13 (SDA) <-------> SDA    |
+  |    GND           --------> /WAKE  |
+  +------------------+       +--------+
 ```
 
 If interrupt signal *nINT* is used to fetch new data, additionally the interrupt pin has to be connected to a GPIO pin.
 
 ```
-  +------------------------+    +--------+
-  | ESP8266  Bus 0         |    | CCS811 |
-  |          GPIO 5 (SCL)  >----> SCL    |
-  |          GPIO 4 (SDA)  ------ SDA    |
-  |          GPIO 2        <----- /nINT  |
-  |          GND           -----> /WAKE  |
-  +------------------------+    +--------+
+  +------------------+       +--------+
+  | ESP8266 / ESP32  |       | CCS811 |
+  |                  |       |        |
+  |    GPIO 14 (SCL) >-------> SCL    |
+  |    GPIO 13 (SDA) <-------> SDA    |
+  |    GPIO 5        <-------- /nINT  |
+  |    GND           --------> /WAKE  |
+  +------------------+       +--------+
 ```
 
 If CCS811 sensor is used in conjunction with another sensor, e.g., a SHT3x sensor, the hardware configuration looks like following:
 
 ```
-  +------------------------+       +--------+
-  | ESP8266  Bus 0         |       | CCS811 |
-  |          GPIO 5 (SCL)  >--+----> SCL    |
-  |          GPIO 4 (SDA)  ---|-+--- SDA    |
-  |          GND           ---|-|--> /WAKE  |
-  |                        |  | |  +--------+
-  |                        |  | |  | SHT3x  |
-  |                        |  +----> SCL    |
-  |                        |    +--- SDA    |
-  +------------------------+       +--------+
+  +------------------+       +--------+
+  | ESP8266 / ESP32  |       | CCS811 |
+  |                  |       |        |
+  |    GPIO 14 (SCL) >--+----> SCL    |
+  |    GPIO 13 (SDA) <--|-+--> SDA    |
+  |    GND           ---|-|--> /WAKE  |
+  |                  |  | |  +--------+
+  |                  |  | |  | SHT3x  |
+  |                  |  | |  |        |
+  |                  |  +----> SCL    |
+  |                  |    +--> SDA    |
+  +------------------+       +--------+
 ```
 
 ### Communication interface settings
@@ -256,12 +262,11 @@ Dependent on the hardware configuration, the communication interface settings ha
 ```
 // define I2C interfaces at which CCS811 sensors can be connected
 #define I2C_BUS       0
-#define I2C_SCL_PIN   5
-#define I2C_SDA_PIN   4
+#define I2C_SCL_PIN   14
+#define I2C_SDA_PIN   13
 
 // define GPIO for interrupt
-#define INT_GPIO      2
-#include "sht3x/sht3x.h"
+#define INT_GPIO      5
 ```
 
 ### Main program
@@ -272,7 +277,7 @@ Before using the CCS811 driver, function ```i2c_init``` needs to be called for e
 
 ```
 ...
-i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K));
+i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K);
 i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH);
 ...
 ```
@@ -401,31 +406,47 @@ ccs811_set_eco2_thresholds (sensor, 600, 1100, 40);
 ## Full Example
 
 ```
-// use following constants to define the demo mode
+/* -- use following constants to define the example mode ----------- */
+
 // #define INT_DATA_RDY_USED
 // #define INT_THRESHOLD_USED
 
-#include "espressif/esp_common.h"
-#include "esp/uart.h"
-#include "i2c/i2c.h"
+#if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED)
+#define INT_USED
+#endif
 
-#include "FreeRTOS.h"
-#include <task.h>
+/* -- includes ----------------------------------------------------- */
 
-// include CCS811 driver
-#include "ccs811/ccs811.h"
+#include "ccs811.h"
 
-// define I2C interfaces at which CCS811 sensors can be connected
+/* -- platform dependent definitions ------------------------------- */
+
+#ifdef ESP_PLATFORM  // ESP32 (ESP-IDF)
+
+// user task stack depth for ESP32
+#define TASK_STACK_DEPTH 2048
+
+#else  // ESP8266 (esp-open-rtos)
+
+// user task stack depth for ESP8266
+#define TASK_STACK_DEPTH 256
+
+#endif  // ESP_PLATFORM
+
+// I2C interface defintions for ESP32 and ESP8266
 #define I2C_BUS       0
-#define I2C_SCL_PIN   5
-#define I2C_SDA_PIN   4
+#define I2C_SCL_PIN   14
+#define I2C_SDA_PIN   13
+#define I2C_FREQ      I2C_FREQ_100K
 
-// define GPIO for interrupt
-#define INT_GPIO      2
+// interrupt GPIOs defintions for ESP8266 and ESP32
+#define nINT_PIN      13
+
+/* -- user tasks --------------------------------------------------- */
 
 static ccs811_sensor_t* sensor;
 
-#if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED)
+#ifdef INT_USED
 /**
  * In this example, the interrupt *nINT* is used. It is triggered every time
  * new data are available (INT_DATA_RDY_USED) or exceed defined thresholds
@@ -459,12 +480,12 @@ void user_task_interrupt (void *pvParameters)
 
 // Interrupt handler which resumes user_task_interrupt on interrupt
 
-void nINT_handler (uint8_t gpio)
+static void IRAM nINT_handler(uint8_t gpio)
 {
     xTaskResumeFromISR (nINT_task);
 }
 
-#else
+#else // !INT_USED
 
 /*
  * In this example, user task fetches the sensor values every seconds.
@@ -492,21 +513,22 @@ void user_task_periodic(void *pvParameters)
     }
 }
 
-#endif
+#endif // INT_USED
 
+/* -- main program ------------------------------------------------- */
 
 void user_init(void)
 {
-    // set UART Parameter
+    // Set UART Parameter.
     uart_set_baud(0, 115200);
-    // give the UART some time to settle
-    sdk_os_delay_us(500);
+    // Give the UART some time to settle
+    vTaskDelay(1);
 
     /** -- MANDATORY PART -- */
 
     // init all I2C bus interfaces at which CCS811 sensors are connected
-    i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K);
-
+    i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ);
+    
     // longer clock stretching is required for CCS811
     i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH);
 
@@ -515,33 +537,35 @@ void user_init(void)
 
     if (sensor)
     {
-        #if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED)
+        #if !defined (INT_USED)
+
+        // create a periodic task that uses the sensor
+        xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL);
+
+        #else // INT_USED
 
         // create a task that is resumed by interrupt handler to use the sensor
-        xTaskCreate(user_task_interrupt, "user_task_interrupt", 256, NULL, 2, &nINT_task);
+        xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, &nINT_task);
 
-        // activate the interrupt for INT_GPIO and set the interrupt handler
-        gpio_set_interrupt(INT_GPIO, GPIO_INTTYPE_EDGE_NEG, nINT_handler);
+        // activate the interrupt for nINT_PIN and set the interrupt handler
+        gpio_enable(nINT_PIN, GPIO_INPUT);
+        gpio_set_interrupt(nINT_PIN, GPIO_INTTYPE_EDGE_NEG, nINT_handler);
 
         #ifdef INT_DATA_RDY_USED
         // enable the data ready interrupt
         ccs811_enable_interrupt (sensor, true);
-        #else
+        #else // INT_THRESHOLD_USED
         // set threshold parameters and enable threshold interrupt mode
         ccs811_set_eco2_thresholds (sensor, 600, 1100, 40);
         #endif
 
-        #else
-
-        // create a periodic task that uses the sensor
-        xTaskCreate(user_task_periodic, "user_task_periodic", 256, NULL, 2, NULL);
-
-        #endif
+        #endif  // !defined(INT_USED)
 
         // start periodic measurement with one measurement per second
         ccs811_set_mode (sensor, ccs811_mode_1s);
     }
 }
+
 ```
 
 ## Further Examples
diff --git a/extras/ccs811/ccs811.c b/extras/ccs811/ccs811.c
index b1de154..2087b2a 100644
--- a/extras/ccs811/ccs811.c
+++ b/extras/ccs811/ccs811.c
@@ -1,14 +1,16 @@
 /*
- * Driver for ams CCS811 digital temperature, humity, pressure and
- * gas sensor connected to I2C or SPI
+ * Driver for AMS CCS811 digital gas sensor connected to I2C.
  *
- * Part of esp-open-rtos [https://github.com/SuperHouse/esp-open-rtos]
+ * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos)
+ * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32
+ * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux
+ * based systems using a wrapper library for ESP8266 functions.
  *
  * ---------------------------------------------------------------------------
  *
  * The BSD License (3-clause license)
  *
- * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht]
+ * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,14 +41,7 @@
  */
 
 #include <string.h>
-
-#include "espressif/esp_common.h"
-#include "espressif/sdk_private.h"
-
-#include "FreeRTOS.h"
-#include "task.h"
-
-#include "i2c/i2c.h"
+#include <stdlib.h>
 
 #include "ccs811.h"
 
@@ -239,7 +234,7 @@ bool ccs811_set_mode (ccs811_sensor_t* dev, ccs811_mode_t mode)
     
     // check whether setting measurement mode were succesfull
     if (!ccs811_reg_read(dev, CCS811_REG_MEAS_MODE, (uint8_t*)&reg, 1) ||
-        !reg.drive_mode == mode)
+        reg.drive_mode != mode)
     {
         error_dev ("Could not set measurement mode to %d", __FUNCTION__, dev, mode);
         return ccs811_check_error_status (dev);
diff --git a/extras/ccs811/ccs811.h b/extras/ccs811/ccs811.h
index d4f08e9..d7d3aa5 100644
--- a/extras/ccs811/ccs811.h
+++ b/extras/ccs811/ccs811.h
@@ -1,13 +1,16 @@
 /*
- * Driver for AMS CCS811 digital gas sensor connected to I2C
+ * Driver for AMS CCS811 digital gas sensor connected to I2C.
  *
- * Part of esp-open-rtos [https://github.com/SuperHouse/esp-open-rtos]
+ * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos)
+ * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32
+ * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux
+ * based systems using a wrapper library for ESP8266 functions.
  *
  * ---------------------------------------------------------------------------
  *
  * The BSD License (3-clause license)
  *
- * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht]
+ * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,13 +43,15 @@
 #ifndef CCS811_DRV_H_
 #define CCS811_DRV_H_
 
-#include "stdint.h"
-#include "stdbool.h"
-
 // Uncomment one of the following defines to enable debug output
 // #define CCS811_DEBUG_LEVEL_1             // only error messages
 // #define CCS811_DEBUG_LEVEL_2             // debug and error messages
 
+#include "stdint.h"
+#include "stdbool.h"
+
+#include "ccs811_platform.h"
+
 // CCS811 I2C addresses
 #define CCS811_I2C_ADDRESS_1      0x5A      // default
 #define CCS811_I2C_ADDRESS_2      0x5B
diff --git a/extras/ccs811/ccs811_platform.h b/extras/ccs811/ccs811_platform.h
new file mode 100644
index 0000000..c8a23ab
--- /dev/null
+++ b/extras/ccs811/ccs811_platform.h
@@ -0,0 +1,69 @@
+/*
+ * Driver for AMS CCS811 digital gas sensor connected to I2C.
+ *
+ * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos)
+ * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32
+ * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux
+ * based systems using a wrapper library for ESP8266 functions.
+ *
+ * ---------------------------------------------------------------------------
+ *
+ * The BSD License (3-clause license)
+ *
+ * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+/**
+ * Platform file: platform specific definitions, includes and functions
+ */
+
+#ifndef __CCS811_PLATFORM_H__
+#define __CCS811_PLATFORM_H__
+
+#if !defined(ESP_OPEN_RTOS)
+#define ESP_OPEN_RTOS 1
+#endif
+
+#ifdef ESP_OPEN_RTOS  // ESP8266
+
+// platform specific includes
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#include "espressif/esp_common.h"
+#include "espressif/sdk_private.h"
+
+#include "esp/uart.h"
+#include "i2c/i2c.h"
+
+#endif // ESP_OPEN_RTOS
+
+#endif // __CCS811_PLATFORM_H__
diff --git a/extras/ccs811/component.mk b/extras/ccs811/component.mk
index b69ad0b..037b122 100644
--- a/extras/ccs811/component.mk
+++ b/extras/ccs811/component.mk
@@ -2,6 +2,7 @@
 
 # expected anyone using ccs811 driver includes it as 'ccs811/ccs811.h'
 INC_DIRS += $(ccs811_ROOT).. 
+INC_DIRS += $(ccs811_ROOT)
 
 # args for passing into compile rule generation
 ccs811_SRC_DIR =  $(ccs811_ROOT)