Skip to content
This repository was archived by the owner on Feb 4, 2023. It is now read-only.

Commit 5d53bed

Browse files
authored
Update README.md
Add note : - HOWTO Use analogRead() with ESP32 running WiFi and/or BlueTooth (BT/BLE)
1 parent cfb2edd commit 5d53bed

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

README.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,47 @@ Another way to install is to:
6363
3. Install **ESP_DoubleResetDetector** library by using [Library Manager](https://docs.platformio.org/en/latest/librarymanager/). Search for ESP_DoubleResetDetector in [Platform.io Author's Libraries](https://platformio.org/lib/search?query=author:%22Khoi%20Hoang%22)
6464
4. Use included [platformio.ini](platformio/platformio.ini) file from examples to ensure that all dependent libraries will installed automatically. Please visit documentation for the other options and examples at [Project Configuration File](https://docs.platformio.org/page/projectconf.html)
6565

66+
---
67+
---
68+
69+
### HOWTO Use analogRead() with ESP32 running WiFi and/or BlueTooth (BT/BLE)
70+
71+
Please have a look at [**ESP_WiFiManager Issue 39: Not able to read analog port when using the autoconnect example**](https://github.com/khoih-prog/ESP_WiFiManager/issues/39) to have more detailed description and solution of the issue.
72+
73+
#### 1. ESP32 has 2 ADCs, named ADC1 and ADC2
74+
75+
#### 2. ESP32 ADCs functions
76+
77+
- ADC1 controls ADC function for pins **GPIO32-GPIO39**
78+
- ADC2 controls ADC function for pins **GPIO0, 2, 4, 12-15, 25-27**
79+
80+
#### 3.. ESP32 WiFi uses ADC2 for WiFi functions
81+
82+
Look in file [**adc_common.c**](https://github.com/espressif/esp-idf/blob/master/components/driver/adc_common.c#L61)
83+
84+
> In ADC2, there're two locks used for different cases:
85+
> 1. lock shared with app and Wi-Fi:
86+
> ESP32:
87+
> When Wi-Fi using the ADC2, we assume it will never stop, so app checks the lock and returns immediately if failed.
88+
> ESP32S2:
89+
> The controller's control over the ADC is determined by the arbiter. There is no need to control by lock.
90+
>
91+
> 2. lock shared between tasks:
92+
> when several tasks sharing the ADC2, we want to guarantee
93+
> all the requests will be handled.
94+
> Since conversions are short (about 31us), app returns the lock very soon,
95+
> we use a spinlock to stand there waiting to do conversions one by one.
96+
>
97+
> adc2_spinlock should be acquired first, then adc2_wifi_lock or rtc_spinlock.
98+
99+
100+
- In order to use ADC2 for other functions, we have to **acquire complicated firmware locks and very difficult to do**
101+
- So, it's not advisable to use ADC2 with WiFi/BlueTooth (BT/BLE).
102+
- Use ADC1, and pins GPIO32-GPIO39
103+
- If somehow it's a must to use those pins serviced by ADC2 (**GPIO0, 2, 4, 12, 13, 14, 15, 25, 26 and 27**), use the **fix mentioned at the end** of [**ESP_WiFiManager Issue 39: Not able to read analog port when using the autoconnect example**](https://github.com/khoih-prog/ESP_WiFiManager/issues/39) to work with ESP32 WiFi/BlueTooth (BT/BLE).
104+
105+
106+
---
66107
---
67108

68109
#### PURPOSE:
@@ -189,6 +230,7 @@ void loop()
189230
and many more to come.
190231

191232
---
233+
---
192234

193235
### Releases
194236

@@ -215,6 +257,7 @@ void loop()
215257
1. Search for bug and improvement.
216258
2. Similar features for Arduino (UNO, Mega, etc...)
217259

260+
---
218261
---
219262

220263
### Issues

0 commit comments

Comments
 (0)