Esp 12f wifi module

WiFi модуль ESP8266 esp-12f. Датчик открытия двери своими руками

Добрый день,
Интересует история и опыт создания WiFi датчика открытия двери или наступления иного события, которое нужно зарегистрировать?
Вам под кат! Будет интересно!

Мотивация

Изначально мне хотелось с минимальными затратами времени и денег сделать датчик открытия входной двери в квартиру. Мне было интересно знать, ходит ли владелец в жильё, которое мы снимали.

Структура статьи

В этой статье я опишу несколько версий датчика и примененных схемотехнически-программных методов с целью сделать устройство лучше. Статья будет полезна для тех, кто хочет реализовать свою идею при батарейном питании ESP8266, но опасается, что двух АА батареек не хватит для работы ESP в режиме сна с периодическим пробуждением.
Я отдаю себе отчет, что на данный момент лучшим вариантом был бы BLE/ZigBee, но они на тот момент требовали создания дополнительной инфраструктуры, чего я хотел избежать дома и что бывает невозможно в условиях офиса.

Первая версия датчика

Идея и реализация были подсмотрены на Pinterest.
В ESP я прошил интерпретатор Бейсика. ESP при сбросе подключается к WiFi и посещает прописанный URL и засыпает.
URL это WebHook сервиса ifttt.com. При каждом посещении заданного URL ifttt.com посылает e-mail с заданной темой и датой/временем наступления события. Ввиду того, что имейлы можно получать и на компьютере и на мобильном устройстве, а также сортировать в папки фильтрами — система доставки событий уже готова 🙂

Система с WebHook-ами будет использована во всех версиях датчиков.

Аппаратно это была крайне энергонеэффективная связка платы NodeMcu и роутера HAME MPR-A2 в режиме повербанка:

Одного заряда встроенной в роутер 18650 хватало на неделю работы устройства, впрочем этого времени хватало для «охраны» квартиры во время командировок.
К земле и линии Reset был припаян нормальноразомкнутый геркон, который выводил из сна плату при открытии двери. Такое решение требовало расположить магнит так, чтобы при закрытой двери геркон был разомкнут, и лишь при открытии двери он должен был ненадолго замкнуться, чтобы сбросить плату и инициировать работу программы.

Плюсы:
+Собрано за 30 минут на коленке из имеющихся деталей.

Минусы:
-Малое время работы из-за двойного преобразования напряжения.
-Бейсик отрабатывал программу 10+секунд.

Вторая версия датчика

Решено избавиться от Бейсика в пользу Ардуино, а также от двойного преобразования питания и сделать какой-то анализ бюджета питания вообще.
По питанию был выбор: литий+LDO или литий+импульсный преобразователь или просто 2хАА.
Выбрал просто 2хАА и мысленно готовился менять батарейки каждый месяц 🙂
Использовал вот такие щелочные батарейки:

 #include #include #include #include ESP8266WiFiMulti WiFiMulti; void setup() < WiFiMulti.addAP("myssid", "mypassword"); >void loop() < // wait for WiFi connection if((WiFiMulti.run() == WL_CONNECTED)) < HTTPClient http; http.begin("http://maker.ifttt.com/trigger/entrancedoor/with/key/censored"); //HTTP int httpCode = http.GET(); http.end(); ESP.deepSleep(999999999*999999999U, WAKE_NO_RFCAL); >> 

Достал из запасов пластиковую коробочку 60*36*25mm и оформил в неё датчик:

Внутри треш и угар, геркон всё так же на reset+gnd, снял светодиод с ESP, блокировочный конденсатор отвалился и всё на проводах.
Не забываем, это глубокая beta-версия, которая в таком как она есть виде всё-же смогла меня удивить:

Герконовый датчик прикручен, в косяк двери вставлен маленький магнит, коробочка приклеена липучей велкро S-12730 к стене.
Когда дверь открывается, то магнит кратковременно пролетает над герконом и сбрасывает ESP:

Читайте также:  Windows 10 ручная настройка wifi

Анализ потребления питания

Так как в моей схеме питания нет никаких преобразований совсем, то всё что потребит во время работы и сна датчик — то я и потеряю, и мне захотелось оценить эти потери.
В активном режиме датчик работает 5 секунд и получается вот такая кривая потребления:

Я даже делал отдельный топик с самодельным приспособлением для замеров.
Всё остальное время датчик спит, и потребление во сне у разных версий модулей очень отличается.
Разброс от 16мкА до 250мкА во сне и всё из-за неотмытых плат, левых чипов флеш-памяти и дешевых модулей:


Попытка использовать ESP8285 дала 250мкА ток сна(WTF. ):

Модуль по ссылке из заглавия имел ток сна 16мкА:

А теперь самое интересное, цифры:
На одной паре батареек АА датчик работал с 18го июня 2018г 06:51AM до 4 октября 2019г 09:41PM что составило 473 дня!
За эти 473 дня датчик сработал 8912 раз(. ).
Так что мой пессимизм по поводу смены батарей каждый месяц был глубоко не оправдан.
Когда утром 5го октября 2019го я не получил от датчика e-mail, я вскрыл коробочку и нашел батареи в таком состоянии(пара новых с черной изолентой для сравнения):

Эта окисленная пара, которая вчера смогла в последний раз, имела напряжение 2,46В и внутреннее сопротивление по YR1030 0,49 Ом 🙂

Немного арифметики, которая показывает на что можно рассчитывать строящему устройство на ESP+2xAA:
1. 8912*5/60/60=12,36 часов в активном режиме работы.
2. 473*24-12,36=11339,64 часов во сне.
3. 11339,64*0,016=181мА*ч было потрачено во сне, и я это исправлю в следующей версии датчика.

Построил еще один датчик второй версии, установил на работе, и отловил редиску, которая лазила по моим шухлядкам 🙂

Плюсы:
+Существенно большее время автономной работы по сравнению с первой версией.
+Проще конструкция.

Минусы:
-Замкнутый надолго геркон не даст возможность коду сработать, как и в первой версии.
-Механический геркон, может стоит рассмотреть датчик Холла?
-Есть ненулевой (16мкА) ток сна, который можно и нужно оптимизировать.

Третья итерация

Не стал называть версией, так как третья итерация дала мне три разных датчика.
Купил пять разных датчиков Холла и проверил их потребление:

 1. DRV5032FBDBZR - 0,74мкА 2. RR121-1B13-311- 0,19мкА 3. DRV5032FADBZR - 1,64мкА 4. CT832BV-HS3 - 1,05мкА 5. Si7201-B-00-FV- 0,35мкА 

Решил продолжать с номером пять, как с самым стабильно работающим.

По наводке от uncle_sem купил герконищи:

Я нашел таймер TPL5110, который позволит не работать с линией reset и сократить потребление датчика во сне.
По даташиту таймер потребляет 35нА, а в реальности 10нА. Таймер позволяет либо периодически включать устройство с помощью внешнего мосфета, что было бы полезно для датчика температуры, либо работать в одиночном режиме по команде.

Я выбрал одиночный режим. К таймеру был куплен P-CH мосфет SSM3J338R,LF, вот они на макетницах:

Вот пример использования таймера из даташита:

Я поставил задающий резистор на 12кОм для получения 11-и секундной задержки во включенном состоянии. Кроме того у таймера есть возможность досрочного отключения ESP если получит высокий уровень на входе «Done» я подключил его к GPIO 4 так как на нем нет никакой активности при старте ESP.

 #include #include #include #include int cntr=0; ESP8266WiFiMulti WiFiMulti; void setup() < digitalWrite(4,LOW); pinMode(4,OUTPUT); WiFiMulti.addAP("myssid", "mypassword"); >void loop() < // wait for WiFi connection if((WiFiMulti.run() == WL_CONNECTED)) < HTTPClient http; http.begin("http://maker.ifttt.com/trigger/entrancedoor/with/key/censored"); //HTTP int httpCode = http.GET(); http.end(); digitalWrite(4,HIGH); delay(10); ESP.deepSleep(0); >delay(200);cntr++; if (cntr==150) < digitalWrite(4,HIGH); delay(10); ESP.deepSleep(0); >> 

Первая тестовая плата с неотмытым флюсом, но всё-же заработала:

Читайте также:  Yota 4g usb wifi

Оказалось, между DRV TPL5110 и затвором мосфета нужно было поставить 5кОм резистор, чтобы всё работало как надо.

Я испытал на этой тестовой плате и геркон и датчик Холла и даже оптопару и создал 4 платы:
1. Нано плата только с таймером, размером 16х16мм, как раз помещается сзади ESP:

2. Плата для таймера с герконом для корпуса 60*36*25mm
3. Плата для таймера с оптопарой — датчик дверного звонка.
4. Плата для таймера с датчиком Холла на торце.

Вот они в фотовиде:

Вот они смонтированы:

Плюсы:
+10нА ток сна датчика с герконом или оптопарой.
+360нА ток сна у версии с датчиком Холла.
+Замкнутый надолго геркон/Холл/оптопара больше не будут препятствовать выполнению программы.
+Нано-версию можно встроить даже в шкатулку, настолько она маленькая.

Минусы:
-Нет возможности различать факт открытия или закрытия двери. На оба события будет сработка, если между ними более 5 секунд.
-Энергопотребление в активном режиме выше, чем у современных не-WiFi альтернатив.

Выводы

Источник

ESP-12F

MCU ESP8266EX built Tensilica L106 ultra-low power 32-bit micro MCU, with 16 compact mode, clocked at 80 MHz and supports 160 MHz, support for RTOS. Using the WiFi protocol stack is currently only 20% of MIPS, the other can be used for application development. MCU chip through the following interfaces and other parts of the work:

  1. Connection storage controller, it can also be used to access external code memory RAM / ROM Interface (iBus)
  2. Also connected to the data RAM memory controller interfaces (dBus)
  3. AHB interface to access the registers

Memory Built-in SRAM and ROM — Auto body built ESP8266EX chip memory controller, comprising ROM and SRAM. MCU can access the storage controller iBus, dBus and AHB interface. These interfaces are accessible ROM or RAM unit, memory arbiter to determine the running order in the order of arrival. Based on the current Division I Demo SDK use SRAM, the user can remaining SRAM space: (next station mode, even after routed, heap + data area generally available around 36KB) RAM size

  • Current ESP8266EX chip SPI interface supports external Flash, a theoretical maximum support to 16 MB of SPI flash. At present, the module is 4MB of external SPI Flash.
  • Recommendations Flash Capacity: 1 MB-16MB.
  • Supported SPI mode: Standard SPI, Dual SPI, DIO SPI, QIO SPI, and Quad SPI. Note that you need to select the corresponding mode in the download tool when downloading firmware, or after downloading the program will not be run correctly.
  • Currently crystal 40M, 26M and 24M support, please pay attention to selecting the corresponding type of crystals in the download tool use. Crystal input and output of the applied determination of adjusted capacitors C1, C2 may be set to a fixed value, the value range in 6pF ~ 22pF, specific values ​​need to be adjusted after the system test. Based on the current market situation in the mainstream of crystal, general 26Mhz oscillator input and output of the added capacitors C1, C2 in less than 10pF; general 40MHz crystal input and output capacitance added 10pF
  • Optional precision crystal itself need to ± 10PPM. Crystal operating temperature -20 ° C- 85 ° C.
  • Crystal position as close to the chip XTAL Pins (traces not too long), while crystal alignment to be wrapped up well shielded land.
  • Crystal input and output traces can not punch alignment, that can not cross-layer. Crystal input and output traces can not cross, cross-layer cross too.
  • Crystal input and output bypass capacitors placed left and right side close to the chip, please, try not to go on line.
  • 4 layers beneath the crystal can not take the high-frequency digital signal, the best situation is below the crystal does not go any signal lines, paved TOP crystal surface area the better. Crystal sensitive devices around the crystal can not have magnetic induction devices, such as large inductors.

Interface

Interface Pins
HSPI Interface: External 4SPI Flash, display and MCU like IO12 (MISO), IO13 (MOSI), IO14 (CLK), IO15 (CS)
PWM interface: the demo offers four PWM (to 8 users can expand their own way), can be used to control the color, lights, buzzers, relays and motors. IO12 (R), IO15 (G), IO13 (B)
IR interface: IR Remote Control 4 interfaces implemented by software, interface NEC coding and modulation, demodulating, using 38KHz modulated carrier. IO14 (IR_T), IO5 (IR_R)
ADC interface: It can be used to detect VDD3P3 (Pin3, Pin4) supply voltage and TOUT (Pin6) input voltage (not both). It can be used for sensor applications. TOUT
I2C Interface: displays and other external sensors IO14 (SCL), IO2 (SDA)
UART interface: Download: U0TXD + U0RXD or GPIO2 + U0RXD UART0: TXD (U0TXD), RXD (U0RXD), IO15 (RTS), IO13 (CTS) UART1: IO2 (TXD)
UART interface: Communication (UART0): U0TXD, U0RXD, MTDO (U0RTS), MTCK (U0CTS) Debug: UART1_TXD (GPIO2) can be used as a print debug information. UART0: TXD (U0TXD), RXD (U0RXD), IO15 (RTS), IO13 (CTS) UART1: IO2 (TXD)
UART interface: UART0 default on ESP8266EX power output will be some printed information. For sensitive applications, you can use the internal UART pin swapping function in initialization time, will U0TXD, U0RXD were exchanged with U0RTS, U0CTS. Admiral MTDO MTCK hardware connected to the corresponding external MCU serial communication. UART0: TXD (U0TXD), RXD (U0RXD), IO15 (RTS), IO13 (CTS) UART1: IO2 (TXD)
I2S interface: Use main audio capture, processing and transmission. I2S input: IO12 (I2SI_DATA); I2S input: IO13 (I2SI_BCK); I2S input: IO14 (I2SI_WS); I2S output: IO15 (I2SO_BCK); I2S output: IO3 (I2SO_DATA); I2S output: IO2 (I2SO_WS).

ESP-12F for NodeMCU, D1-mini Pin Definition

  • All IO operational voltage is 3.3V, can handle 5V shortly
  • except D0, all IO support interprut, PWM, I2C and 1-wire

Источник

Оцените статью
Adblock
detector