Arduino IDE 2 beta 7 Error when compiling

Hi please help i have been struggling to compile a code in the new Arduino IDE version, it gives me this same error

Compilation error: Error: 2 UNKNOWN: exit status 1

//Inclusion of libraries to be used in the project 
#include "SD.h"
#include <NTPClient.h>
#include <WiFiUdp.h>
#include "Nextion.h"					 

NexNumber p0_n0 = NexNumber(0,10,"n0");
NexNumber p0_n1 = NexNumber(0,6,"n1");
NexNumber p0_n2 = NexNumber(0,7,"n2");
NexNumber p0_n3 = NexNumber(0,8,"n3");
NexNumber p0_n4 = NexNumber(0,9,"n4");

// Define deep sleep options
uint64_t uS_TO_S_FACTOR = 1000000;  // Conversion factor for micro-seconds to seconds
// Sleep for 10 minutes = 600 seconds
uint64_t TIME_TO_SLEEP = 600;

// Define CS pin for the SD card module
#define SD_CS 5

// Save reading number on RTC memory
RTC_DATA_ATTR int readingID = 0;

String dataMessage;

//Initialising SPI 
#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 15

Adafruit_BME680 bme; // object to be used for I2C communication 
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

//Declaration of variables for measurements 
float temperature;
float humidity;
float pressure;
float gasResistance;
const int potPin = 34;
int potValue = 0;

//Initiation of a Web Server on port 80 to transmit data to web browser using //Server-Sent Events(SSE) through HTTP connection 	
AsyncWebServer server(80);
AsyncEventSource events("/events");

/*lastTime and timerDelay variables used to update readings in a client from sensor every 30 seconds*/  
unsigned long lastTime = 0;  
unsigned long timerDelay = 30000;  

void getBME680Readings(){
  // Tell BME680 to begin measurement.
  unsigned long endTime = bme.beginReading();
  if (endTime == 0) {
    Serial.println(F("Failed to begin reading :("));
  if (!bme.endReading()) {
    Serial.println(F("Failed to complete reading :("));
  temperature = bme.temperature;
  pressure = bme.pressure / 100.0;
  humidity = bme.humidity;
  gasResistance = bme.gas_resistance / 1000.0;

//Write file into SD card 
void writeFile(fs::FS &fs, const char * path, const char * message) {
  Serial.printf("Writing file: %s\n", path);
  File file =, FILE_WRITE);
  if(!file) {
    Serial.println("Failed to open file for writing");
  if(file.print(message)) {
    Serial.println("File written");
  } else {
    Serial.println("Write failed");

String processor(const String& var){
  if(var == "TEMPERATURE"){
    return String(temperature);
  else if(var == "HUMIDITY"){
    return String(humidity);
  else if(var == "PRESSURE"){
    return String(pressure);
 else if(var == "GAS"){
    return String(gasResistance);

/*The following variable - index_html has all the HTML, JavaScript and CSS code to build a client web page, this code sets the cards, texts, icons, colours and layout of the page*/  
const char index_html[] PROGMEM = R"rawliteral(
  <title>Simelane S.A - 21615701</title> 	 
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
  <link rel="icon" href="data:,">
    html {font-family: Arial; display: inline-block; text-align: center;}
    p {  font-size: 1.2rem;}
    body {  margin: 0;}
    .topnav { overflow: hidden; background-color: #4B1D3F; color: white; font-size: 1.7rem; }
    .content { padding: 20px; }
    .card { background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); }
    .cards { max-width: 700px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
    .reading { font-size: 2.8rem; }
    .card.temperature { color: #0e7c7b; }
    .card.humidity { color: #17bebb; }
    .card.pressure { color: #3fca6b; }
    .card.gas { color: #d62246; }
  <div class="topnav">
    <h3>Simelane S.A - 21615701</h3>
  <div class="content">
    <div class="cards">
      <div class="card temperature">
        <h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="temp">%TEMPERATURE%</span> &deg;C</span></p>
      <div class="card humidity">
        <h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hum">%HUMIDITY%</span> &percnt;</span></p>
      <div class="card pressure">
        <h4><i class="fas fa-angle-double-down"></i> PRESSURE</h4><p><span class="reading"><span id="pres">%PRESSURE%</span> hPa</span></p>
      <div class="card gas">
        <h4><i class="fas fa-wind"></i> GAS</h4><p><span class="reading"><span id="gas">%GAS%</span> K&ohm;</span></p>
      <div class="card CO2">
        <h4><i class="fas fa-wind"></i> CO2</h4><p><span class="reading"><span id="CO2">%CO2%</span> %</span></p>

/*Client initiates the SSE connection by an EventSource object then listens for- events – updates from the Server – events in this case will be temperature,- humidity, pressure, gas and CO2*/ 
if (!!window.EventSource) {
 var source = new EventSource('/events');

 source.addEventListener('open', function(e) {
  console.log("Events Connected");
 }, false);
 source.addEventListener('error', function(e) {
  if ( != EventSource.OPEN) {
    console.log("Events Disconnected");
 }, false);
 source.addEventListener('message', function(e) {
 }, false);
 source.addEventListener('temperature', function(e) {
  document.getElementById("temp").innerHTML =;
 }, false);
 source.addEventListener('humidity', function(e) {
  document.getElementById("hum").innerHTML =;
 }, false);
 source.addEventListener('pressure', function(e) {
  document.getElementById("pres").innerHTML =;
 }, false);
 source.addEventListener('gas', function(e) {
  document.getElementById("gas").innerHTML =;
 }, false);

  source.addEventListener('CO2', function(e) {
  document.getElementById("CO2").innerHTML =;
 }, false);

/*Define NTP Client to get time from the internet using Network Time Protocol – same protocol used to get Time in gadgets*/
NTPClient timeClient(ntpUDP);

// Variables to save date and time
String formattedDate;
String dayStamp;
String timeStamp;

void getReadings(){


void getTimeStamp() {
  while(!timeClient.update()) {
  //The formattedDate comes with the following format: 2018-05-28T16:00:13Z
  // extracting date and time
  formattedDate = timeClient.getFormattedDate();

  // Extract date
  int splitT = formattedDate.indexOf("T");
  dayStamp = formattedDate.substring(0, splitT);
  // Extract time
  timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);

// Append data to the SD card 
void appendFile(fs::FS &fs, const char * path, const char * message) {
  Serial.printf("Appending to file: %s\n", path);

  File file =, FILE_APPEND);
  if(!file) {
    Serial.println("Failed to open file for appending");
  if(file.print(message)) {
    Serial.println("Message appended");
  } else {
    Serial.println("Append failed");

// Write the sensor readings on the SD card – useful for Data logging 
void logSDCard() {
  dataMessage = String(readingID) + "," + String(dayStamp) + "," + String(timeStamp) + "," + String(temperature) + "," + String(humidity) + "," + String(pressure) + "," + String(gasResistance) + "\r\n";
  Serial.print("Save data: ");
  appendFile(SD, "/data.txt", dataMessage.c_str());

void setup() {

  // Set the device as a Station and Soft Access Point simultaneously
  // Set device as a Wi-Fi Station
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println("Setting as a Wi-Fi Station..");
  Serial.print("Station IP Address: ");

  // Init BME680 sensor
  if (!bme.begin()) {
    Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
    while (1);
  // Set up oversampling and filter initialization
  bme.setGasHeater(320, 150); // 320*C for 150 ms

  // Handle Web Server
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);

  // Handle Web Server Events
  events.onConnect([](AsyncEventSourceClient *client){
      Serial.printf("Client reconnected! Last message ID that it got is: %u\n", client->lastId());
    // send event with message "hello!", id current millis
    // and set reconnect delay to 1 second
    client->send("hello!", NULL, millis(), 10000);

  // Initialize a NTPClient to get time
  // Set offset time in seconds to adjust for your timezone, for example:
  // GMT +1 = 3600
  // GMT +8 = 28800
  // GMT -1 = -3600
  // GMT 0 = 0

  // Initialize SD card
  if(!SD.begin(SD_CS)) {
    Serial.println("Card Mount Failed");
  uint8_t cardType = SD.cardType();
  if(cardType == CARD_NONE) {
    Serial.println("No SD card attached");
  Serial.println("Initializing SD card...");
  if (!SD.begin(SD_CS)) {
    Serial.println("ERROR - SD card initialization failed!");
    return;    // init failed

  // If the data.txt file doesn't exist
  // Create a file on the SD card and write the data labels
  File file ="/data.txt");
  if(!file) {
    Serial.println("File doens't exist");
    Serial.println("Creating file...");
    writeFile(SD, "/data.txt", "Reading ID, Date, Hour, Temperature, Humidity, Pressure, Gas Resistance \r\n");
  else {
    Serial.println("File already exists");  

  // Enable Timer wake_up
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);

  // Increment readingID on every new reading
  // Start deep sleep
  Serial.println("DONE! Going to sleep now.");

void loop() {
  if ((millis() - lastTime) > timerDelay) {
    Serial.printf("Temperature = %.2f ºC \n", temperature);
    Serial.printf("Humidity = %.2f % \n", humidity);
    Serial.printf("Pressure = %.2f hPa \n", pressure);
    Serial.printf("Gas Resistance = %.2f KOhm \n", gasResistance);

  potValue = analogRead(potPin);
  Serial.print("  ");

    // Send Events to the Web Server with the Sensor Readings
    lastTime = millis();

float tmp = temperature * 1000;
float hum = humidity * 1000;
float pres = pressure * 1;
float aq = gasResistance * 10;
float co = potValue;




Which "Arduino" board are you attempting to compile for? Please post the COMPLETE error message(s) in code tags.

Also, how did you get such a large program and just realize there are compiler errors? Did you build the project in stages and test along the way. If so, then the last thing you changed would be a good place to start in the debugging.

Also, have you tried to compile this using the standard Arduino IDE? Results?

im trying the online editor now and see if the error persists

I wouldn't trust that either. Download the real IDE v1.8.15 to your PC and try it on that.

Also, as I already requested, tell us which "Arduino" board your attempting to compile for.

ESP32 DevKit V1 is the board, which is also showing a caution sign on IDE but i have the board downloaded under Boards Manager and i connected to a correct COM port (from the Device Manager)

The caution sign appears to be an indication that the IDE could not identify the port by the vid and pid (see board unfo).

Also if you feel the issue is with V2 b7 then you should move to the latest. I think it is V2 b10 but I've not checked recently.

Compilation error: Error: 2 UNKNOWN: exit status 1

Have you investigated the lines before that error report? I've always found some hint or line to allow more in depth troubleshooting.

Quite honestly, if you through up your hands and ran to the forum providing the single line Error 2 UNKNOWN then respectively you should not be using a beta IDE.

This is a generic message that only tells us something went wrong during the compilation process, but nothing about what went wrong. There are a near infinite number of possible causes.

You need to examine the full error output to find the part that provides a clue to the specific cause of the error. If you will share the full output here, we will have a chance of being able to help you.

Please do this:

  1. Select File > Preferences from the Arduino IDE's menus.
  2. Check the box next to "Show verbose output during: [] compilation".
  3. Click the OK button.
  4. Select Sketch > Verify/Compile from the Arduino IDE's menus.
  5. Wait for the compilation to end.
  6. Right click on the black "Output" pane at the bottom of the Arduino IDE 2.x window.
  7. From the context menu, click Copy All.
  8. Open a forum reply here by clicking the Reply button.
  9. Click the </> icon on the post composer toolbar. This will add the forum's code block markup (```) to your reply to make sure the error messages are correctly formatted.
    Code block
  10. Press Ctrl+V. This will paste the compilation output into the code block.
  11. Move the cursor outside of the code tags before you add any additional text to your reply.
  12. Click the Reply button to post the output.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.