Здравствуйте. В данной статье я покажу Вам как можно мониторить заряд своей LiPo батареи подключенной к микроконтроллеру ESP8266 на примере Wemos D1 mini и shield к нему для подключения Lipo батарей. Для чего это нужно? Ну даже наверное не стоит это объяснять, так как все прекрасно понимают, что знать когда подзарядить свое устройство очень важно, дабы не потерять информацию.
Батарею можно использовать любую, 3.7 V емкость не имеет значения, так как батарея любой емкости, когда теряет свой запас энергии, тогда и теряет напряжение понемногу. За счет данного свойства мы и будем реализовывать наш мониторинг заряда батареи.
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Как я уже и сказал нам понадобится:
Wemos D1: http://ali.pub/2u29u5 или http://ali.pub/2u2a94
Wemos battery shield: http://ali.pub/2u29yt или http://ali.pub/2u2ald
LiPo battery: http://ali.pub/2u2a1x или http://ali.pub/2u2as6
И резистор понадобится на 100кОм его можно купить в магазинах радиоэлектроники или также заказать на сайтах aliexpress и banggood.
Схема подключения выглядит следующим образом:
Я думаю схема довольно примитивная, чтоб ее объяснять, резистор на 100 кОм используется потому что в Wemos D1 mini уже используется внутренний делитель напряжения, который соединяет контакт A0 с АЦП ESP8266. Это делитель напряжения из резисторов 220 кОм и 100 кОм. Выглядит схема делителя напряжения таким образом:
Добавив еще 100 кОм получится 100k+220k+100k = 420k. Поэтому если напряжение полностью заряженной батарейки будет составлять 4.2 В, АЦП ESP8266 получит 4.2*100/420= 1 Вольт.
1 Вольт это максимальный вход для АЦП и даст на A0 значение 1024. voltage =raw/1023; voltage =4.2*voltage;
График напряжения на сайте thingspeak выглядит примерно таким образом:
Если подключите все так как описано выше, то имейте ввиду, что резисторы тоже разряжают батарею с постоянным потреблением 10uA (4.2v / 420000 ohm) . Энергопотребление ESP8266 в режиме сна составляет 77 uA. С резистором это будет 87 uA.
Сам скетч выглядит вот так:
/* * Wemos battery shield, measure Vbat * add 100k between Vbat and ADC * Voltage divider of 100k+220k over 100k * gives 100/420k * ergo 4.2V -> 1Volt * Max input on A0=1Volt ->1023 * 4.2*(Raw/1023)=Vbat */ // Connect RST en gpio16 (RST and D0 on Wemos) #include <ESP8266WiFi.h> unsigned int raw=0; float volt=0.0; // Time to sleep (in seconds): const int sleepTimeS = 60; void setup() { Serial.begin(115200); Serial.println("ESP8266 in normal mode"); const char* ssid = "YourSSID"; const char* password = "YourPW"; const char* host = "api.thingspeak.com"; const char* writeAPIKey="YourAPIkey"; // put your setup code here, to run once: pinMode(A0, INPUT); raw = analogRead(A0); volt=raw/1023.0; volt=volt*4.2; // Connect to WiFi network WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } String v=String(volt);// change float into string // make TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } String url = "/update?key="; url += writeAPIKey; url += "&field6=";// I had field 6 still free that's why url += String(volt); url += "\r\n"; // Send request to the server client.print(String("GET url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); //Sleep Serial.println("ESP8266 in sleep mode"); ESP.deepSleep(sleepTimeS * 1000000); } void loop() { //all code is in the Setup }