I have a generic ESP32-WROOM-32D dev board that I'm using to learn ESP32 programming using the Arduino IDE. I've noticed that when I use the WiFi object from WiFi.h the built in LED illuminates to show the state of the connection. When I call WiFi.begin() the LED turns on solid, then once the WiFi connects to my access point the LED starts flashing rapidly.
I just assumed this was a "feature", but then I tried using the Espressif ESP-IDF with VSCode instead of the Arduino IDE, and when I use the WiFi example provided the built in LED does not illuminate. So there must be something in the Arduino WiFi object code that is controlling the LED.
My question is can I change some setting in the WiFi object to determine whether or not the built in LED is used to show the status of the connection? I have tried Googling this but with no luck.
I did find the question ESP32 WiFi.h Constantly Blinking Onboard LED on this site:
https://esp32.com/viewtopic.php?f=2&t=3 ... 1f0021f454
but the question has no solution. As a last resort if anyone can point me to the code for the WiFi object I can go through it to look for anything that is changing the built in LED.
If it's relevant I can post the code I'm using in the Aduino and ESP-IDF but I don't think it's useful as it's just the template code provided with the dev environments.
Built in LED blinks when using WiFi.h
-
- Posts: 170
- Joined: Sun Jun 23, 2024 6:18 pm
Re: Built in LED blinks when using WiFi.h
You can try this code to control the built-in LED according to the wifi status.
If you need help about ESP32-WROOM board installation in Arduino IDE, you can see this: https://www.theengineeringprojects.com/ ... eries.html
Code: Select all
#include <WiFi.h>
const int ledPin = 2; // GPIO2 is usually the built-in LED
void setup() {
pinMode(ledPin, OUTPUT);
WiFi.begin("your_SSID", "your_PASSWORD");
// Add your own logic to control the LED
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(ledPin, HIGH); // Turn on the LED when connected
} else {
digitalWrite(ledPin, LOW); // Turn off the LED when not connected
}
// Other code...
}
Re: Built in LED blinks when using WiFi.h
Thanks, but that is not what I'm asking.
It seems like the WiFi object already does does something similar to what you suggest. If I turn on the WiFi using:
Then the builtin LED turns on solid as soon as I call WiFi.begin() then it starts flashing rapidly as soon as the WiFi connects and gets an IP address. I want the WiFi.begin() function to not do anything with the builtin LED.
If I use the IDF code instead of the WiFi object the WiFi works and does not flash the LED, so the flashing of the LED is not inherently connected to the operation of the WiFi. The code in WiFi.begin() must be explicitly turning the LED on.
This is the (rather longer!) IDF code that I tested. This code enables the WiFi but with no flashing of the builtin LED:
It seems like the WiFi object already does does something similar to what you suggest. If I turn on the WiFi using:
Code: Select all
void connectWiFi() {
WiFi.begin(MY_SSID, MY_PWD, 6);
int loopcnt = 0;
while (WiFi.status() != WL_CONNECTED) {
Serial.printf("%d WiFi status = %d, signal = %d\n", loopcnt++, WiFi.status(), WiFi.RSSI());
delay(1000);
}
Serial.println("Connected to the Wi-Fi network");
Serial.print("IP address = ");
Serial.println(WiFi.localIP());
}
If I use the IDF code instead of the WiFi object the WiFi works and does not flash the LED, so the flashing of the LED is not inherently connected to the operation of the WiFi. The code in WiFi.begin() must be explicitly turning the LED on.
This is the (rather longer!) IDF code that I tested. This code enables the WiFi but with no flashing of the builtin LED:
Code: Select all
// *****************************************************
// ESP-IDF network code
// *****************************************************
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_WPA2_PSK
#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_BOTH
#define EXAMPLE_H2E_IDENTIFIER ""
#define WIFI_MAXIMUM_RETRY 5
// Event group to monitor the connection status
EventGroupHandle_t s_wifi_event_group;
#define WIFI_CONNECTED_BIT BIT0
#define WIFI_FAIL_BIT BIT1
static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) {
// Number of connect retries
static int s_retry_num = 0;
// WiFi starting
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
esp_wifi_connect();
}
// WiFi didn't connect so we need to try again
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
if (s_retry_num < WIFI_MAXIMUM_RETRY) {
esp_wifi_connect();
s_retry_num++;
Serial.printf("Connection failed, retrying ...\n");
}
else {
xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
}
Serial.printf("Too many retries\n");
}
// Connected and got IP address
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
Serial.printf("IP address = %d.%d.%d.%d\n", IP2STR(&(event->ip_info.ip)));
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
s_retry_num = 0;
}
}
void wifi_init_sta(void)
{
s_wifi_event_group = xEventGroupCreate();
// We'll assume these functions succeed
esp_netif_init();
// Create the default event loop so we can use it for WiFi notifications
esp_event_loop_create_default();
// Create the WiFi station
esp_netif_create_default_wifi_sta();
// Initialise the WiFi using the default settings
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
// Register an event handler for all WiFi events
esp_event_handler_instance_t instance_any_id;
esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL, &instance_any_id);
// Register an event handle for the "got IP address" event
esp_event_handler_instance_t instance_got_ip;
esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL, &instance_got_ip);
// Initialise the config
wifi_config_t wifi_config = {
.sta = {
.ssid = MY_SSID,
.password = MY_PWD,
.threshold = {.rssi = 0, .authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD},
.sae_pwe_h2e = ESP_WIFI_SAE_MODE,
.sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
},
};
// Set the configuration and start the WiFi
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
esp_wifi_start();
/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
EventBits_t bits = xEventGroupWaitBits(
s_wifi_event_group,
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
pdFALSE,
pdFALSE,
portMAX_DELAY);
// Check the bits to see what happened
if (bits & WIFI_CONNECTED_BIT)
Serial.printf("Connected to the Wi-Fi network SSID:%s\n", MY_SSID);
else if (bits & WIFI_FAIL_BIT)
Serial.printf("Failed to connect to SSID:%s\n", MY_SSID);
else
Serial.printf("UNEXPECTED EVENT\n");
}
-
- Posts: 826
- Joined: Mon Jul 22, 2019 3:20 pm
Re: Built in LED blinks when using WiFi.h
What version of arduino-esp32 are you running? AFAIK, there is no code to blink the LED during connection. Does it do this if you don't have the print statements in there (maybe the led is connected to the serial line rather than wifi)?
Re: Built in LED blinks when using WiFi.h
Thanks, but the LED flashes in the same way even if I use this program:
I have uploaded a video to show how the LED starts flashing as soon as WiFi.begin() is called:
https://www.youtube.com/watch?v=-DX8NYNSpMk
This is clearly some form of diagnostics because if I disable my wireless access point the LED immediately stops flashing and shows a solid blue. Then when I re-enable the WAP the LED starts flashing again after a few seconds. So somewhere some code in the WiFi class is using the LED to indicate the status of the connection. This is software not hardware because if I use the ESP-IDF code shown above the LED does not flash.
I'm using the Arduino IDE v2.3.2 and the board is "esp32 by Espressif Systems" version 3.0.4
Code: Select all
#include <WiFi.h>
#define MY_SSID "foo"
#define MY_PWD "bar"
void setup() {
WiFi.begin(MY_SSID, MY_PWD);
}
void loop() {
delay(1000);
}
https://www.youtube.com/watch?v=-DX8NYNSpMk
This is clearly some form of diagnostics because if I disable my wireless access point the LED immediately stops flashing and shows a solid blue. Then when I re-enable the WAP the LED starts flashing again after a few seconds. So somewhere some code in the WiFi class is using the LED to indicate the status of the connection. This is software not hardware because if I use the ESP-IDF code shown above the LED does not flash.
I'm using the Arduino IDE v2.3.2 and the board is "esp32 by Espressif Systems" version 3.0.4
Who is online
Users browsing this forum: No registered users and 40 guests