Wifi only connects when plugged into computer

Hi guys.

Today I got me a new Arduino Nano ESP32.

Everything works fine while it's connected to the computer, but when I power it via USB-C that has no serial connection - it won't connect to WiFi network. Is it something in the code (below) or maybe there is some specifics when powering via USB-C?

#include "thingProperties.h"   // Arduino IoT Cloud properties
#include <Wire.h>
#include "ScioSense_ENS160.h"  // ENS160 library
#include <Adafruit_BME280.h>   // Adafruit BME280 library
#include <Adafruit_AHTX0.h>    // AHT sensor library
#include <OneWire.h>
#include <DallasTemperature.h>

// **Pin Definitions**
const int DS18B20_PIN = 5;      // DS18B20 connected to GPIO5 (D5 on Nano ESP32)

// **Initialize sensors**
ScioSense_ENS160 ens160(ENS160_I2CADDR_1); // ENS160 I2C address (0x53) - LOCAL
Adafruit_BME280 bme;                       // BME280 sensor object - LOCAL
Adafruit_AHTX0 aht;                        // AHT21 sensor object - LOCAL
OneWire oneWire(DS18B20_PIN);               // DS18B20 on GPIO5
DallasTemperature ds18b20(&oneWire);        // DS18B20 sensor - LOCAL

void setup() {
    Serial.begin(9600);
    while (!Serial); // Wait for Serial Monitor

    // **Initialize IoT Cloud properties**
    initProperties();
    ArduinoCloud.begin(ArduinoIoTPreferredConnection);
    setDebugMessageLevel(2);
    ArduinoCloud.printDebugInfo();

    // **Initialize ENS160 Sensor**
    if (!ens160.begin()) {
        Serial.println("Failed to initialize ENS160 sensor!");
        while (1);
    }
    ens160.setMode(ENS160_OPMODE_STD);
    Serial.println("ENS160 initialized successfully. Waiting for warm-up...");
    delay(5000); // Warm-up

    // **Initialize BME280 Sensor**
    if (!bme.begin(0x77)) {
        Serial.println("Failed to initialize BME280 sensor!");
        while (1);
    }
    Serial.println("BME280 initialized successfully.");

    // **Initialize AHT21 Sensor**
    if (!aht.begin()) {
        Serial.println("Failed to initialize AHT21 sensor!");
        while (1);
    }
    Serial.println("AHT21 initialized successfully.");

    // **Initialize DS18B20 Sensor**
    ds18b20.begin();
    Serial.println("DS18B20 initialized successfully.");
}

void loop() {
    ArduinoCloud.update(); // Syncs cloud variables

    // **Read AHT21 Sensor Data (Local)**
    sensors_event_t humidityEvent, tempEvent;
    aht.getEvent(&humidityEvent, &tempEvent);
    float ahtTemperature = tempEvent.temperature;        // AHT21 temperature - LOCAL
    float ahtHumidity = humidityEvent.relative_humidity; // AHT21 humidity - LOCAL

    // **Read BME280 Sensor Data (Local)**
    float bmeTemperature = bme.readTemperature(); // BME280 temperature

    // **Read ENS160 Sensor Data**
    ens160.measure(0);
    float aQI = ens160.getAQI(); // Air Quality Index (Local)
    tVOC = ens160.getTVOC();     // TVOC (Cloud)
    eCO2 = ens160.geteCO2();     // eCO2 (Cloud)

    // **Read BME280 Humidity & Pressure**
    bmeHumidity = bme.readHumidity();       // Humidity (Cloud)
    pressure = bme.readPressure() / 100.0F; // Atmospheric pressure in hPa (Cloud)

    // **Read DS18B20 Temperature**
    ds18b20.requestTemperatures();
    ds18b20Temperature = round(ds18b20.getTempCByIndex(0) * 10) / 10.0; // Round to one decimal place (Cloud)

    // **Debug Output**
    Serial.println("=====================");
    Serial.println("Sensor Readings:");
    Serial.println("=====================");

    // **ENS160 Data**
    Serial.print("AQI: ");
    Serial.print(aQI);
    Serial.println(aQI <= 50.0 ? " (Good)" : " (Poor)");
    Serial.print("TVOC: ");
    Serial.print(tVOC);
    Serial.println(tVOC <= 500.0 ? " ppb (Safe)" : " ppb (Unsafe)");
    Serial.print("eCO2: ");
    Serial.print(eCO2);
    Serial.println(eCO2 <= 1000.0 ? " ppm (Safe)" : " ppm (High)");

    // **BME280 Data**
    Serial.print("BME Temperature: ");
    Serial.print(bmeTemperature);
    Serial.println(" °C");
    Serial.print("BME Humidity: ");
    Serial.print(bmeHumidity);
    Serial.println(" %");
    Serial.print("Pressure: ");
    Serial.print(pressure);
    Serial.println(" hPa");

    // **AHT21 Data**
    Serial.print("AHT21 Temperature: ");
    Serial.print(ahtTemperature);
    Serial.println(" °C");
    Serial.print("AHT21 Humidity: ");
    if (isnan(ahtHumidity)) {
        Serial.println("Failed to read AHT21 humidity!");
    } else {
        Serial.print(ahtHumidity);
        Serial.println(" %");
    }

    // **DS18B20 Data**
    Serial.print("DS18B20 Temperature: ");
    if (ds18b20Temperature == DEVICE_DISCONNECTED_C) {
        Serial.println("Sensor not connected or failed!");
    } else {
        Serial.print(ds18b20Temperature);
        Serial.println(" °C");
    }

    delay(5000); // Adjusted delay to 5 seconds
}

Sorry, I should rest more :slight_smile:

Fixed :white_check_mark:

it was this line:

while (!Serial); // Wait for Serial Monitor

that made it wait for the serial literally forever :slight_smile:

3 Likes

Sometimes
while (!Rest);
can be appropriate :upside_down_face:

I don't think I've ever used that while, mainly because it's useless on many boards (e.g. UNO) but if the sketch really needs an active serial connection, I'd make a LED flash to indicate that the system is waiting for the connection, for example:

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(500);
    digitalWrite(LED_BUILTIN, LOW);
    delay(500);
  }

Awesome, thanks for your help guys! I'am totally new to all this, so all ideas are greatly appreciated! :pray: