• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Работа с ADC esp8266

funny59

New member
Хочу с помощью ADC измерять заряд батареи. Как работать с ADC на esp в arduino ide? Какие особенности есть у ADC? Я правильно понял, что максимальное входное напряжение один вольт?
 

enjoynering

Well-known member
Да один вольт. Поэтому нужен делитель на входе, иначе спалите порт. У популярных карт аля wimos он уже распаян. Также можно мерять напряжение питание с помощью внутренних цепей чипа (без делителя и не подключая ничего на вход 10-bit adc). Но тут возникает проблема при использовании все тех же wimos - их распаянный делитель вносит искажения в измеряемою величину.

Команда считывает значение ADC (АЦП) с TOUT:

Код:
analogRead(A0);
возвращает значения (0 = 0V, 1023 = 1.0V)

The ESP can also use the ADC to measure the supply voltage (VCC). To do this, include at the top of your sketch

Код:
ADC_MODE(ADC_VCC);
and use

Код:
ESP.getVcc();
to actually get the voltage. If you use it to read the supply voltage, you can’t connect anything else to the analog pin!!!
 
Последнее редактирование:

andrik_zp

Member
Поставить на вход ацп конденсатор 0.1 мк, так-же можно делать несколько выборок и высчитывать среднее значение.
 

nikolz

Well-known member
А что делать со скачущими показаниями?
вот результат измерения напряжения питания ESP через АЦП
команда: vdd33 = readvdd33();
это лог сервера на компе , на который ESP отсылаете по UDP свои данные.
-----------------------------------
03/17/18 17:02:26 test;3181;29;39;2/56;0/190_3
03/17/18 17:02:29 test;3182;29;39;2/55;0/190_3
03/17/18 17:02:33 test;3181;29;39;2/56;0/189_3
03/17/18 17:02:35 test;3182;29;39;2/56;0/191_3
03/17/18 17:02:39 test;3182;29;39;2/57;0/192_3
03/17/18 17:02:43 test;3181;29;39;2/56;0/189_3
03/17/18 17:02:47 test;3181;29;39;2/56;0/189_3

03/17/18 17:03:20 test;3178;29;39;2/56;0/189_3
03/17/18 17:03:23 test;3178;29;39;2/56;0/189_3
03/17/18 17:03:27 test;3179;29;39;2/56;0/202_3
03/17/18 17:03:32 test;3181;29;39;2/54;0/189_3
03/17/18 17:03:34 test;3181;29;39;2/57;0/189_3
03/17/18 17:03:36 test;3181;29;39;2/56;0/190_3
03/17/18 17:03:38 test;3181;29;39;2/56;0/189_3
03/17/18 17:03:40 test;3182;29;39;2/87;0/189_3

03/17/18 17:04:20 test;3181;29;39;2/56;0/189_3
03/17/18 17:04:23 test;3181;29;39;2/56;0/191_3
03/17/18 17:04:26 test;3182;29;39;2/55;0/191_3
03/17/18 17:04:29 test;3182;29;39;2/56;0/189_3
03/17/18 17:04:32 test;3182;29;39;2/56;0/189_3
03/17/18 17:04:36 test;3182;29;39;2/56;0/190_3
03/17/18 17:04:40 test;3182;29;39;2/56;0/189_3
03/17/18 17:04:43 test;3181;29;39;2/55;0/190_3

03/17/18 17:05:08 test;3182;29;39;2/56;0/197_3
03/17/18 17:05:11 test;3181;29;39;2/56;0/189_3
03/17/18 17:05:14 test;3181;29;39;2/56;0/189_3
03/17/18 17:05:19 test;3178;29;39;2/56;0/189_3

03/17/18 17:05:54 test;3181;29;39;2/56;0/190_3
03/17/18 17:05:57 test;3182;29;39;2/56;0/192_3
03/17/18 17:06:00 test;3182;29;39;2/55;0/189_3
03/17/18 17:06:03 test;3181;29;39;2/56;0/190_3

03/17/18 17:07:14 test;3182;29;39;2/137;0/191_3
03/17/18 17:07:18 test;3181;29;39;2/56;0/190_3

03/17/18 17:13:28 test;3186;29;39;2/55;0/190_3
03/17/18 17:13:43 test;3186;29;39;2/55;0/189_3
03/17/18 17:13:58 test;3185;29;39;2/55;0/189_3
03/17/18 17:14:12 test;3185;29;39;2/55;0/189_3
03/17/18 17:14:27 test;3187;29;39;2/59;0/189_3
03/17/18 17:14:41 test;3186;29;39;2/55;0/190_3

03/17/18 17:20:01 test;3186;29;39;2/55;0/194_3
03/17/18 17:20:16 test;3186;29;39;2/55;0/190_3
03/17/18 17:20:30 test;3187;29;39;2/57;0/190_3
03/17/18 17:20:45 test;3188;29;39;2/55;0/189_3

03/17/18 19:59:14 test;3186;29;39;2/59;0/191_3
03/17/18 19:59:17 test;3187;29;39;2/55;0/189_3
03/17/18 19:59:20 test;3186;29;39;2/55;0/190_3
03/17/18 19:59:23 test;3186;29;39;2/55;0/189_3

03/17/18 20:01:00 test;3187;29;39;2/55;0/189_3
03/17/18 20:01:02 test;3186;29;39;2/55;0/189_3

03/17/18 20:01:44 test;3186;29;39;2/56;0/189_3
03/17/18 20:01:47 test;3187;29;39;2/55;0/189_3
03/17/18 20:01:50 test;3186;29;39;2/56;0/189_3
03/17/18 20:01:53 test;3186;29;39;2/56;0/196_3
03/17/18 20:01:56 test;3186;29;39;2/56;0/191_3
--------------------------------
выделено напряжение в мв.
Видно, что ничего особливо не скачет.
 
Последнее редактирование:

andrik_zp

Member
Так вас скачущие миливольты не устраивают? А вы пробовали посмотреть на питание вашего модуля с помощью осциллографа? Округляйте до десятых долей вольта и не заморачивайтесь.
 

funny59

New member
Так вас скачущие миливольты не устраивают? А вы пробовали посмотреть на питание вашего модуля с помощью осциллографа? Округляйте до десятых долей вольта и не заморачивайтесь.
Ну так-то да, не очень важно, но осцилом посмотрю
 

Алексей.

Active member
К одному источнику питания подключил два модуля, есп-12 и есп-01, выполнял одновременно замеры напряжения питания, на одном получил 3410-3413, на другом 3508-3511.
Жестокий разброс в 0.1 В.
Теперь уж и не знаю как определить когда менять батарейку...
 

nikolz

Well-known member
К одному источнику питания подключил два модуля, есп-12 и есп-01, выполнял одновременно замеры напряжения питания, на одном получил 3410-3413, на другом 3508-3511.
Жестокий разброс в 0.1 В.
Теперь уж и не знаю как определить когда менять батарейку...
А в чем проблема?
ESP работает при 2.6 в.
меняйте когда показывает 2.7
 

Алексей.

Active member
Проблема я том, что измеренное значение самим модулем может сильно отличаться от реального значения. Я ещё лабораторным прибром не измерял пока ;)
Динамику разряда оценить можно, а получить значение напряжения с точностью в 1% нельзя.
А в чем проблема?
ESP работает при 2.6 в.
меняйте когда показывает 2.7
Предположим показывает 2.7 а реальное 2.8, менять рано.
Батарейка 3.6 В стоит дороже модуля однако.
 
Последнее редактирование:

nikolz

Well-known member
Проблема я том, что измеренное значение самим модулем может сильно отличаться от реального значения. Я ещё лабораторным прибром не измерял пока ;)
Динамику разряда оценить можно, а получить значение напряжения с точностью в 1% нельзя.

Предположим показывает 2.7 а реальное 2.8, менять рано.
Батарейка 3.6 В стоит дороже модуля однако.
А вы измеряйте напряжение внутри ESP.
А меняйте, когда перестанет работать.
 

Алексей.

Active member
А вы измеряйте напряжение внутри ESP.
Как это внутри? Я вроде и начал с этого
1) для измерения напряжения питания ESP есть функция SDK
system_get_vdd33
Куда уж глубже.

Устройство с автономным питанием в основном спит, очень глубоко, раз в час просыпается (секунд на 5-8) снимает показания, передает их на удаленный сервер (вместе с показаниями передается измеренное напряжение батареи) и засыпает.
А меняйте, когда перестанет работать.
Когда перестает работать это ещё не означает что батарея разряжена, может проблемы со связью или устройство просто украли. В том и другом случае действуют немножко разные регламенты решения инцидента.
 

nikolz

Well-known member
Как это внутри? Я вроде и начал с этого

Куда уж глубже.

Устройство с автономным питанием в основном спит, очень глубоко, раз в час просыпается (секунд на 5-8) снимает показания, передает их на удаленный сервер (вместе с показаниями передается измеренное напряжение батареи) и засыпает.

Когда перестает работать это ещё не означает что батарея разряжена, может проблемы со связью или устройство просто украли. В том и другом случае действуют немножко разные регламенты решения инцидента.
я тестировал ESP получилось что перестает работать когда внутри напряжение показывает менее 2 вольт.
Но и тогда можно еще работать но без WIFI
Если в основном спит то делайте без батарейки
солнечная панелька и суперкондер. Полного заряда 1 f хватит на 20 коротких сообщений.
---------------------
Или создайте корректировочную таблицу для напряжения
 

Алексей.

Active member
Интересная тема, тем более солнечная панелька 3В 30ма и суперкап на 1f дешевле литиевой батарейки получится, только солнца останется найти.
 

nikolz

Well-known member
Интересная тема, тем более солнечная панелька 3В 30ма и суперкап на 1f дешевле литиевой батарейки получится, только солнца останется найти.
днем всегда светло да если пасмурно.
Я делал так.
При просыпании запускается прошивка без WIFI и измеряется напряжение питания если мало то спать и накапливать При этом можно измерять с датчика и сохранять данные в RAM RTC
если хватит то рестарт с WIFI и передача
 

Zhenya88

Member
Ребят, поделитесь знаниями.
Использую ESP8266 Witty Cload.
Выпаян фоторезистор, и стабилизатор AMS1117, питание напрямую на VCC от аккумулятор (3,7-4,2V). При получении данных через ESP.getVcc() в переменную long получаю значение 65535.
Если я в начале вставляю "ADC_MODE (ADC_VCC);", то при компиляции получаю ошибку в строке
"
Код:
void callback(const MQTT::Publish& pub)
" (бибилиотека MQTT PubSub), что MQTT не определена (противоречия библиотек?)

Что я делаю не так?
 

Сергей_Ф

Moderator
Команда форума
Можно вместо фоторезистора впаятт постоянный и мерить аналог. По поводу ошибки - не подскажу.
 

Zhenya88

Member
Можно вместо фоторезистора впаятт постоянный и мерить аналог. По поводу ошибки - не подскажу.
я никак не пойму почему я значение 65000 получаю, т.е. предел значения long…
постоянный резистор будет ток жрать, а устройство батарейное с дипслипами.
 

nikolz

Well-known member
я никак не пойму почему я значение 65000 получаю, т.е. предел значения long…
постоянный резистор будет ток жрать, а устройство батарейное с дипслипами.
максимальное значение на выходе однополярного АЦП - это число со всеми единицами в разрядах.
Если взять число размером в байт т е 11111111 (255,0xFF) и преобразовать в short
то преобразование будет выполнено путем расширения знака т е получим 1111111111111111 или ,в формате unsigned short 65535
а long - это 4 байта т е в формате unsigned long 4294967295
 
Сверху Снизу