You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 4, 2023. It is now read-only.
Copy file name to clipboardExpand all lines: README.md
+43Lines changed: 43 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,6 +63,47 @@ Another way to install is to:
63
63
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)
64
64
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)
65
65
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
+
---
66
107
---
67
108
68
109
#### PURPOSE:
@@ -189,6 +230,7 @@ void loop()
189
230
and many more to come.
190
231
191
232
---
233
+
---
192
234
193
235
### Releases
194
236
@@ -215,6 +257,7 @@ void loop()
215
257
1. Search for bug and improvement.
216
258
2. Similar features for Arduino (UNO, Mega, etc...)
0 commit comments