В этой статье мы научимся разрабатывать собственную плату на основе платформы ESP для приложений Интернета вещей (IoT) с питанием от батареи. Контроллеры ESP от компании Espressif в настоящее время очень популярны для проектов на основе IoT. Наиболее популярными платами ESP являются ESP8266-01 и ESP8266-12E/12F. Эти платы очень популярны среди производителей, дизайнеров и энтузиастов IoT. Но проблема с этими платами в том, что они достаточно большие по размеру и имеют энергоемкие регуляторы напряжения, которые могут не подойти для компактных и маломощных проектов.
Вот почему необходимо разработать собственную плату ESP для приложений IoT с батарейным питанием. В этой статье мы узнаем, как разработать схему и компактную печатную плату для использования контроллера ESP8266 . Мы будем использовать маломощный LDO вместо регуляторов напряжения и добавим к плате некоторые функции зарядки и управления аккумулятором.
Мы не будем использовать чип USB-UART, например CP2102, а запрограммируем устройство с помощью внешнего FTDI. Удаление дополнительных чипов и использование маломощных LDO снизит энергопотребление и сделает устройство компактным. Таким образом, устройство может работать с небольшой литий-ионной батареей и заряжаться либо через USB, либо от солнечной энергии. Вы также можете использовать ESP8285 в качестве альтернативы, и большинство обсуждаемых здесь моментов останутся прежними.
Чтобы лучше разобраться в данном проекте рекомендуем изучить следующие две статьи на нашем сайте:
- блок питания для NodeMCU ESP8266 с зарядным устройством и повышающим преобразователем;
- как программировать "сырой" (Raw) чип ESP8266-12E/F с помощью Arduino IDE.
Необходимые компоненты
- Модуль ESP8266 (купить на AliExpress).
- Плата FTDI (3.3V) (купить на AliExpress).
- MCP73831 (купить на AliExpress).
- LDO-стабилизатор HT7333 (купить на AliExpress).
- Модуль OLED дисплея SSD1306 128×64 с интерфейсом I2C (купить на AliExpress).
- Header Female-2.54_2x3.
- Переключатель сброса.
- Переключатель ВКЛ/ВЫКЛ.
- Micro USB-гнездо.
- Разъем аккумулятора.
- Светодиод.
- Транзистор BC547 - 2 шт.
- Резистор 330E.
- Резистор 15К.
- Резистор 2К.
- Резистор 47К.
- Резистор 12К - 5 шт.
- Резистор 470E.
- Резистор 22К.
- Конденсатор 10мкФ - 2 шт.
- Конденсатор 470пФ.
- Конденсатор 4.7мкФ - 2 шт.
- Аккумулятор 3,7 В, 500 мАч.
- Провода-перемычки.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Схема проекта
Схема собственной платы ESP8266 с питанием от батареи представлена на рисунке ниже. в ней мы использовали чип ESP8266-12E/12F. Плата состоит из маломощного LDO, ИС управления батареей, USB для зарядки батареи и переключателя для включения/выключения. Остальные вещи подробно объяснены далее.
О чипе ESP8266-12E/12F
ESP-12E — это миниатюрный модуль Wi-Fi, представленный на рынке и используемый для установления беспроводного сетевого соединения для микроконтроллера или процессора. Ядром ESP-12E является ESP8266EX, представляющий собой высокоинтегрированную беспроводную SoC (систему на кристалле). Он обладает способностью встраивать возможности Wi-Fi в системы или функционировать как автономное приложение. Это недорогое решение для разработки приложений IoT.
ESP8266-12F — это усовершенствованная версия ESP8266-12E, которая имеет улучшенную периферийную схему, улучшенное согласование импеданса, лучший выходной сигнал, стабильную работу с помехозащищенностью.
- Диапазон частот: 2,412 – 2,484 ГГц.
- Последовательная передача: 110 – 921600 бит/с, TCP-клиент 5.
- Доступны интерфейсы SDIO 2.0, SPI и UART.
- Доступен ШИМ.
- Доступен один канал АЦП.
- Доступен программируемый GPIO.
- Тип беспроводной сети: STA / AP / STA + AP.
- Тип безопасности: WEP / WPA-PSK / WPA2-PSK.
- Тип шифрования: WEP64 / WEP128 / TKIP / AES.
- Сетевой протокол: IPv4, TCP/UDP/FTP/HTTP.
- Рабочее напряжение: 3,3 В.
- Максимально допустимый ток на один контакт: 15 мА.
- Ток утечки при отключении питания < 10 мкА.
- Интегрированный маломощный 32-битный микроконтроллер.
- Встроенная печатная антенна.
- Пробуждение и передача пакетов за < 2 мс.
- Потребляемая мощность в режиме ожидания < 1,0 мВт.
- Рабочая температура: от -40ºC до +125 ºC.
Программирование чипа ESP8266
Вышеуказанная схема имеет автоматический программатор. Вам просто нужен модуль FTDI для программирования чипа ESP. Нет необходимости в ручном программировании или нажатии и отпускании кнопок. Процесс программирования является автоматическим и управляется двумя переключателями (FLS и RST), двумя транзисторами BC547 (Q1 и Q2) и несколькими другими компонентами.
Сигнал RTS используется для сброса ESP8266, в то время как сигнал DTR используется для перевода чипа в режим флэш-памяти. Q1 и Q2 используются для того, чтобы ESP8266 не сбрасывался, когда оба сигнала DTR и RTS имеют низкий уровень. При обнаружении команды загрузки модуль ESP автоматически переводится в режим флэш-памяти, и в него можно легко загрузить новый скетч. При отсутствии команды загрузки ESP-12E/F запускается в обычном режиме, а запрограммированную плату ESP-12E/F можно тестировать или использовать в приложении.
Регулятор напряжения и LDO
Большинство плат на базе ESP8266 имеют регуляторы напряжения, такие как AMS117, у которых падение напряжения составляет 1,3 В. Это напряжение слишком велико для плат ESP с питанием от батареи .
Итак, альтернативой AMS117 является линейное напряжение с 3,3 В HT7333 IC. HT7333 IC имеет падение напряжения всего 170 мВ с очень низким током покоя 8 мкА. Эта IC идеально подходит для приложений с питанием от батареи. IC (интегральная схема) принимает вход от батареи и регулирует выход 3,3 В для всей схемы, включая чип ESP8266
Управление аккумулятором и зарядка
Так как устройство питается от батареи, необходимо регулярно заряжать и управлять батареей. Это выполняется микросхемой MCP73831. Микросхемы MCP73831 представляют собой высокоразвитые линейные контроллеры управления зарядом для использования в ограниченном пространстве, чувствительных к стоимости приложениях. MCP73831 использует алгоритм заряда постоянного тока/постоянного напряжения с выбираемой предварительной подготовкой и завершением заряда.
GPIO и контакты питания
Поскольку области применения этой платы многочисленны, вы можете подключить к плате цифровые и I2C датчики. Выходные контакты GPIO здесь - I04, I05, IO12, IO13, I014, IO16 . Все контакты являются цифровыми, а из них IO4 (SDA) и IO5 (SCL) являются контактами I2C.
В чипе ESP8266 есть один аналоговый вывод. Диапазон входного напряжения вывода АЦП ESP8266 составляет от 0 до 1 В. Поэтому нам нужно понизить напряжение с помощью некоторой сети делителя напряжения. Это делается резисторами R11 и R12 . В приведенной выше схеме выходное напряжение батареи подключается к АЦП чипа ESP8266. Таким образом, вы можете использовать этот вывод для удаленного расчета напряжения батареи или для мониторинга процента заряда батареи.
В схеме есть разъем H1, который имеет 6 контактов. Из них 3 контакта — это VCC, а остальные 3 — это контакты GND.
OLED-дисплей
Дисплей OLED не является обязательным для этого проекта. Но вы можете использовать дисплей OLED, когда захотите добавить дисплей в свой проект IoT. Дисплей, который вы можете здесь использовать, — это SSD1306 0.96″ I2C OLED Display.
Вот как можно разработать плату с батарейным питанием на базе ESP8266 для маломощных приложений IoT.
Печатная плата для проекта
Приведенная выше схема проекта разработана с использованием редактора EasyEDA. В нем же вы можете преобразовать схему в печатную плату.
Печатная плата имеет SMD-компоненты с резисторами и конденсаторами в корпусе SMD 0805. Остальные микросхемы также в корпусе SMD. Передняя сторона печатной платы выглядит примерно так, как показано ниже.
На задней стороне печатной платы также есть некоторые компоненты для сборки. Задняя сторона выглядит примерно так.
Файл Gerber для изготовления данной печатной платы вы можете скачать по следующей ссылке.
3D-вид печатной платы выглядит примерно так.
Сборка и тестирование платы ESP с питанием от батареи
Заказав изготовление печатной плату, после того как она будет готова вы можете собрать плату, припаяв к ней все SMD-компоненты.
Сначала можно припаять все SMD и THT-компоненты на лицевой стороне.
После завершения пайки на лицевой стороне можно припаять SMD-компоненты и гнездовой разъем для OLED на нижней стороне.
Первоначально была проблема с дизайном микросхемы HT7333, так как выводы были перепутаны. Но в файлах Gerber проблема исправлена, вы можете напрямую заказать печатную плату, используя файл Gerber.
Затем вы можете подключить литий-ионную батарею напряжением 3,7 В к печатной плате.
Для программирования платы необходимо подключить модуль FTDI к разъему печатной платы. Затем можно загружать код, так как нет необходимости нажимать какие-либо кнопки вручную.
Для того, чтобы зарядить аккумулятор, подключите кабель micro-USB к разъему USB. Вы увидите, как загорится красный светодиод, указывающий на зарядку аккумулятора.
Загрузка программы мигания светодиода на плату ESP с питанием от батареи
Теперь пришло время загрузить первую программу и проверить работу платы. Для этого подключите модуль USB-TTL, например, FTDI, к плате и подключите к компьютеру.
От примеров переходим к скетчу мигающего светодиода.
В меню инструментов выберите Generic ESP8266 Module и COM port. Нажмите кнопку загрузки, чтобы загрузить код.
После завершения загрузки кода синий светодиод на чипе ESP8266 начнет мигать, указывая на то, что плата исправна.
Измерение напряжения/процента батареи с помощью АЦП
Как объяснялось в части проектирования, диапазон АЦП микросхемы ESP8266 составляет от 0 до 1 В. Поэтому необходимо создать делитель напряжения для понижения напряжения батареи с 4,2 В до 1,0 В. Это делается с помощью пары резисторов со значениями R11 (15 кОм) и R12 (47 кОм).
Напряжение измеряется через контакты АЦП, пример кода приведен ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
const int analogInPin = A0; void setup() { Serial.begin(115200); } void loop() { float adcValue = analogRead(analogInPin); float voltage = (adcValue / 1023) * 4.2; int bat_percentage = mapfloat (voltage, 3.3, 4.2, 0, 100); if (bat_percentage >= 100) { bat_percentage = 100; } if (bat_percentage <= 0) { bat_percentage = 1; } Serial.print("ADC Value = "); Serial.println(adcValue); Serial.print("Voltage = "); Serial.print(voltage); Serial.println(" V"); Serial.print("Battery Percentage = "); Serial.print(bat_percentage); Serial.println(" %"); delay(1000); } float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } |
Скопируйте код выше и вставьте его в Arduino IDE. Затем загрузите код и откройте Serial Monitor (монитор последовательной связи).
Последовательный монитор также распечатает значение АЦП батареи, напряжение батареи и процент ее заряда.
Вы можете использовать мультиметр и проверить напряжение батареи, чтобы сравнить его со значением на последовательном мониторе.
Если вы хотите более точно контролировать напряжение и процент заряда батареи, то рекомендуется использовать микросхему датчика уровня заряда MAX17043, которая устраняет все ошибки и ограничения.
Создание веб-сервера ESP8266
В качестве проекта IoT мы можем создать веб-сервер на основе платы ESP8266. Для этого нам понадобится датчик DHT11 - с его помощью мы будем считывать значение влажности и температуры. Мы отобразим значение в веб-браузере, используя локальный IP-адрес ESP8266.
Подключите цифровой вывод DHT11 к выводу 12 GPIO ESP8266. Подключите вывод VCC DHT11 к выводу 3,3 В, а вывод GND датчика — к выводу GND платы.
Добавьте библиотеку DHT11 в папку библиотеки Arduino, а затем загрузите код. Но перед загрузкой измените WiFi SSID и пароль.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#include <ESP8266WiFi.h> #include <Wire.h> #include "DHT.h" // Uncomment one of the lines below for whatever DHT sensor type you're using! #define DHTTYPE DHT11 // DHT 11, DHT 21 (AM2301), DHT 22 (AM2302 & AM2321) uint8_t DHTPin = 12; DHT dht(DHTPin, DHTTYPE); float Temperature; float Humidity; const char* ssid = "iBall"; const char* password = "abcd1234"; WiFiServer server(80); String header; void setup() { Serial.begin(115200); pinMode(DHTPin, INPUT); dht.begin(); delay(500); Serial.print("Connecting to Wifi Network "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Successfully connected to WiFi."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); Serial.println("Server started"); } void loop() { Temperature = dht.readTemperature(); Humidity = dht.readHumidity(); WiFiClient client = server.available(); if (client) { Serial.println("Web Client connected "); String request = client.readStringUntil('\r'); client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); client.println("</style></head><body><h1>ESP8266 WebServer</h1>"); client.println("<table><tr><th>MEASURED</th><th>VALUE</th></tr>"); client.println("<tr><td>Temperature</td><td><span class=\"sensor\">"); client.println(dht.readTemperature()); client.println(" *C</span></td></tr>"); client.println("<tr><td>Humidity</td><td><span class=\"sensor\">"); client.println(dht.readHumidity()); client.println(" %</span></td></tr>"); client.println("</body></html>"); client.stop(); client.println(); Serial.println("Client disconnected."); Serial.println(""); } } |
После загрузки кода откройте Serial Monitor (окно монитора последовательной связи) - в нем отобразится IP-адрес ESP8266.
Откройте веб-браузер и перейдите по тому же IP-адресу. Вы увидите красивую веб-страницу со значениями температуры и влажности.
Вот как вы можете разработать собственную плату ESP для маломощных или работающих от батареи приложений IoT.
Так же вместо 2-х транзисторов и 2-х резисторов практичнее использовать UMH3N.
Считаю лишним в этой схеме формирователь сигналов FLASH и RESET на элементах Q1, Q2, R6, R7, R8 из сигналов DTR и RTS от преобразователя USB-UART. Для еще большей экономии места и то, что он используется только при разработке, а в дальнейшем нет. Кнопка FLS вообще не нужна. Формирователь этих сигналов должен находиться на самом преобразователе USB-UART, который своими выходами FLASH и RESET напрямую подключается к выводам GPIO0 и RST ESP'шки.
Не буду спорить, я не сильно большой специалист в схемотехнике, с программированием у меня все таки дела получше. Спасибо вам за конструктивный комментарий к статье, надеюсь он поможет другим посетителям нашего сайта