Comments 174
Ну ок, ссылка на другую статью присутствует. Но зачем тогда в обеих статьях употреблять местоимение «я», а не «мы»? Или кто-то палится, или мы имеем честь наблюдать крайне редкое заоблевание — слияние личностей, наподобие протоссов.
например, так:
mid=?(a0>max(a1,a2),max(a1,a2),(?(a0<min(a1,a2),min(a1,a2),a0)));
если элементов больше (ну, скажем, до десятка-двух)- бежите по массиву, и для каждого элемента считаете количество элементов больше него. как найдется элемент, у которого количество этих значений будет равно половине длинны массива — вы победили :-)
Делал на основе esp8266 «градусник» для народного мониторинга. Пробовал 2 варианта работы:
1. Просыпаться с выключенным WiFi модемом, собирать информацию с датчиков, включать WiFi модем, перезагружаться, передавать данные, уходить в deep-sleep;
2. Второй вариант — сохранить настройки WiFi на постоянно в памяти и просыпаться с включенным WiFi модемом и в то время, пока WiFi устанавливает соединение, опрашивать датчики и далее передавать данные, уходить в deep-sleep.
«Градусник» передает показания 1 раз в 15 минут (2 датчика температуры, давление, напряжение батареи, уровень сигнала WiFi). В первом варианте общее время нахождения вне deep-sleep за цикл передачи было 5-7 секунд, а во втором варианте время бодрствования 1,2-1,4 сек.
На данный момент передатчик работает с 29 октября 2017. Используются 4 батареи AA икеевские (+ линейный стабилизатор LDO). Сейчас напряжение 5.6 В (на старте было чуть выше 6 В).
WiFi.disconnect()
и сохраненные SSID / password надо использовать WiFi.persistent(false).Это же спасёт от деградации флеш памяти ESP от постоянной перезаписи «креденшиалов» при каждом
WiFi.begin()
Можно слать раз в день и если влажность ниже порогового значения.
А как вы калибровали датчик?
Ну вот получили вы некое значение напряжения, какой влажности это соответствует? Влияет ли состав почвы на напряжение при одинаковой влажности?
Про состав почвы и прочее пока не думал.
Влажность почвы легко определяется вручную, сушкой и взвешеванием. Есть ГОСТы на эту тему, там всё подробно расписано.
Тут особой точности не надо, а при аккуратности погрешность будет определяться погрешностью используемых весов.
Иначе вам придется описывать способ калибровки, состав земли и прочее и прочее. И так для каждого горшка…
Когда будут культуры которые не любят как усушки как и переувлажнения, тут феи вылезут боком.
В зависимости от того во что посажено может вылезти плесень, тогда проще всё выкинуть чем стерилизовывать имеющееся.
Могут сгнить(задохнуться) корни, может завестись мошкара или мох.
На разных этапах развития (и внезапно в разные сезоны года!), растения любят разную влажность.
Грунт в горшках примерно одинаков.
Первый попавшийся ГОСТ 28268-89. "Методы определения влажности, максимальной гигроскопической влажности и влажности устойчивого завядания растений"
Влажность грунта определяется формулой:
((м1-м0)/(м0-м))*100%, где
м — масса пустой ёмкости с крышкой;
м0 — масса высушенной почвы с ёмкостью и крышкой;
м1 — масса влажной почвы с ёмкостью и крышкой.
Сушим 3-10 часов, при температуре 100-110 градусов (можно и выше, но — аккуратно, можно высушить за недельку просто неполивая, а потом довести до кондициии в духовке). Сушка прекращается когда разница масс приближается к нулю.
Пяток проб не такая большая трата времени, зато можно прикинуть (не)линейность датчика и как-то ориентироваться что и как в горшке.
Я понятия не имею откуда вы решили что грунт в горшках у всех одинаков. Давайте тогда коротенечно опишите нам химический состав почвы в ваших средних по больнице горшках. Разработайте нам методологию полива, сколько капель на кубический миллиметр почвы нужно вылить что бы не перелить? Что делать с тем кто перелил на 1 каплю?
Или может вернемся к классике? Это когда для каждого растения организуется свой персональный горшок, с дренажом и прочими слоями по необходимости? А подобный прибор оставим для тех кто заводит кактус, да и тот забывает полить раз в году.
А вообще, мне стал интересен именно сам процесс и результат выращивания имбиря в горшке дома)
Это конечно не так технологично, но у меня после пересадки в смесь гидрогель+земля прям в новую силу растения начали расти
смотря какой сон. тот что deep sleep — неможет, ибо вырублено все.
During Light-sleep, the CPU is suspended and will not respond to the signals and interrupts
from the peripheral hardware interfaces. Therefore, ESP8266 needs to be woken up via
external GPIO. The waking process is less than 3 ms.

Для другого девайса, о котором будет третья часть — мы реализовали внешнее прерывание, т.е. будим модуль из Deep sleep'а по наступлению нашего события.
кстати считать можно и двоичным кмоп счетчиком на рассыпухе, кушают они немного. ну и логика простая проснулся — прочитал отправил (при необходимости сбросил) и дальше спать.
Это у меня устройство столько потребляет — занимаюсь разработкой счётчиков. Можно сделать с беспроводным интерфейсом и сроком службы батареи несколько лет. Это будет следующая модель.
WiFi подходит мало. И по потреблению и по архитектуре (физически ограничено количество абонентов на точку — на 16 уже всё начинает ломаться). Нужно смотреть на BT4, BLE и всякие LoRa и просто приёмо-передатчики со своими протоколами — там можно несколько лет работать от одной батареи.
Если батарейный отсек позволяет, то можно всунуть батареи по-больше (вплоть до 18505, у которых ёмкость значительно больше).
Существуют водосчетчики, которые передают данные по BLE.
Статья подразумевает что влажность почвы измеряется резистивным методом исходя из "необходимо на земляной электрод подать напряжение и на другом его конце измерить сколько этого самого напряжения дошло, а сколько «потерялось» в почве."
На самом деле, способ измерения у таких датчиков конденсаторный, и поэтому "электрод" залит лаком и называть это электродом не совсем правильно, так как данная часть датчика это уже скорее антенна. Странно что автор не упомянул о такой важной детали, и преимуществах конденсаторного способа изменения (нет коррозии), и недостатках (более сложная схемотехника и требования по питанию).
Еще одна важная деталь это то что диапазон чувствительности такого датчика будет со временем меняться из-за изменения плотности почвы и заряда батареи. Грубо говоря датчик начнет "дрифтовать", и по этому не имеет смысла привязка выходных показаний к процентам от 0 до 100, если только не придумать какой нибудь хитрый самонастраивающийся алгоритм.
У самого подобное устройство работает уже больше года от CR2032, только в место ESP я использовал NRF24+atmega отправляющий показания на "базовую станцию".
Обычный ESP8266 от CR2032 не сможет работать, так как "копейки" не рассчитаны на отдачу таких токов. Не рассматривали вариант с одной базовой станцией и множеством датчиков передающих показания по nrf24l01+? У меня такая реализация, NRF потребляет 900nA в спящем режиме, в связке со спящим Atmega получается всего около 2uA.
Ну не совсем с вами согласен. Лично проводил опыты и в квартире в 100м2 сигнал не терялся с одного конца квартиры до другого. Тут скорее идет лотерея с китайскими паленными чипами, иногда везет иногда не очень. Еще на линию питания нужно обязательно ставить сглаживающие конденсаторы (если не изменят память, я ставил 22uf, но подбирал методом тыка), удивитесь насколько стабильнее они начнут работать. Из практики, мой датчик стоит примерно в 6-7 метрах от "БС", и пробивает 2 стены одна из которых бетонная. Если действительно имеются проблемы с покрытием, можно поставить какой-нибудь bridge маячек запитанный от розетки.
Для того, чтобы измерять влажность почвы, необходимо на земляной электрод подать напряжение и на другом его конце измерить сколько этого самого напряжения дошло, а сколько «потерялось» в почве.
В этом главная ошибка. Как и всех TDS-метров. Проводимость и влажность сложно сравнить друг с другом. Только приблизительно. Пропитайте грунт аммиачной селитной. Сухая — ноль. Капельку капнуть — 95%.
вот что в исходниках об функции WiFi.forceSleepBegin()
/**
* Disable WiFi for x us when value is not 0
* @param sleep_time_in_us
* @return ok
*/
bool ESP8266WiFiGenericClass::forceSleepBegin(uint32 sleepUs) {
_forceSleepLastMode = getMode();
if(!mode(WIFI_OFF)) {
return false;
}
if(sleepUs == 0) {
sleepUs = 0xFFFFFFF;
}
wifi_fpm_set_sleep_type(MODEM_SLEEP_T);
wifi_fpm_open();
return (wifi_fpm_do_sleep(sleepUs) == 0);
}
Но с текущим девайсом все чуть попроще, не в космосе работает, а на балконе.
В некоторых мануалах по оптимизации энергопотребления ESP8266 можно встретить команду WiFi.disconnect(); которая должна отключать модем от текущей WiFi сети. Однако на практике, эта команда удаляет сохраненный в памяти модема SSID() и пароль, поэтому использоваться ее мы не будем.В CC3220 подобных багов нет.
Для коммутации разных сигналов на вход единственного АЦП — используется мультиплексор (модель).В CC3220 АЦП имеет 4 входа.
У ESP8266 АЦП 10-битный, а диапазон измеряемых напряжений 0..1 В.В CC3220 АЦП 12-битный, диапазон 0...1,5 В.
А ещё мне кажется, что с Вашим опытом работы пора уже переходить с Arduino на взрослые IDE.
и как его к esp8266 прикрутить? да и зачем? если встроенный аналогичный и программируемый по цифре в esp уже встроен?
судя по даташитам gpio16 это выход таймера который будит esp8266 (и то если соединен с rst), как gpio он не адресуется
Там заковырка в другом, для GPIO0-15 есть возможность рулить ими записью в регистры типа GPIO_*_W1TS/GPIO_*_W1TC (*-OUT, ENABLE, STATUS), где мл. 16 бит соответствуют GPIO0-15.
А вот что бы рулить GPIO16 – надо к нему лезть только через отдельный набор регистров для этого пина.
У нас в датчике CO2 на этом GPIO светодиод висит и ничего, светит.
ИМХО конечно. Но я отказался от развития подобного на базе wifi. Слишком он прожорливый. Так же как и блутус. Пока проснется, пока зарегистрируется в сети. пока соберет и отправит… Тоска зеленая в общем… Блутус еще и теряется постоянно. И это я еще не напомнил о процессе настройки wifi у устройств лишенных дисплея, что вообще для простых людей напоминает магию.
Радио трансиверы до 1 ГГц с шифрованием и прочим блекджеком, гораздо гораздее для подобных целей.
Например такой вот брелок (35х60х5мм) 3 кнопки, дисплей Е-Инк и с радио трансивером примерно метров на 500. От CR2032 будет жить 10+ лет.


Единственный минус, что для подсоединения к инету нужен «переходник». Но он у меня есть.
Жду платы из печати.
Собирается все вот на такие штуки. Крутится на Debian. Каждый сам может их использовать как захочет, как и любые юниты из проекта. SDK и примеры кода будут в открытом доступе.


Они по сути заменяют собой стандартный выключатель света в каждой комнате, без дополнительного долбления стен и проводов(100х150х20мм). И в рамках моего решения собираются в один кластер, который обеспечивает хранение всех настроек и личной информации в пределах дома, без всяких облаков и серверов. За счет избыточности реализуем безопасное хранение, что бы ничего не потерялось если один модуль неожиданно подохнет.
Остальные юниты/датчики на батарейках живут 10+ лет. Имеют обратную связь + ОТА. И почти все укладываются в размер 30х50х5мм. Можно разбрасывать их горстями по всему дому. Дочь правда указала на возможную проблему что если они на полу ( температуру пола измеряют или протечки караулят), то их может пылесос собрать. :)

У меня вся элементная база от Ti, за исключением чипов памяти и обвязки, Ti их просто не производит. У них интересная система с бесплатными образцами, что для гаражного проекта облегчает финансовое бремя на прототипирование.
А при варианте что это куда то вырастет, у них есть программа по поддержки подобных гаражных эксперементаторов. :)
В общем ждем платы со стенсилом. Надеюсь жена не побьет за запекание плат в духовке :)
Leaf-nodes в mesh живут по 3+ года от CR2032
В рамках нужного у них на данный момент каких только референсных дизайнов нет.
Я не представляю зачем нужны такие скорости. Разве что для обновления прошивки по воздуху. Но там максимум 128кбайт прошивка. В моем случаем пересылаемая информация вообще измеряется максимум сотней байт.
1. Интервал конкретно этого таймера 7200с — тут уже проигрываем, так как ночью можно вообще 5-6 часов поспать, а с учетом светового дня во многих регионах России, можно и по 8-10 часов спать.
2. Толк будет (если не брать в расчет первый тезис) только если подавать питание на все устройство через транзистор, который управляется ногой от TPL5111. Если ставить ее просто на ногу ESP, то мы просто получаем дополнительное потребление, пусть и маленькое, но сразу теряем возможность задавать свое расписание (например, днем раз в 2 часа, утро/вечер раз в час, ночью спим, например).
Для этого вообще есть другие микросхемы — RTC с календарем и интераптом.
А как же без внедрения искусственного интеллекта? Нейросети считывают движения листиков и переводят на человеческий язык. Нейросети обязательно что deep learning, что бы быть в тренде. :)
Можно подумать над электрической стимуляцией обязанного поливать человека. Шокер ему в кресло. :)
В общем ничем не ограниченное поле для фантазий «Джаст фо фан».
Зовите если еще идеи понадобятся.
Но в целом, если хотите по существу.
Весь сенсор можно уменьшить в размер батареек, еще и место останется.
При вашем подходе при работе с электродами, они очень быстро корродируют/ «испарятся», что еще не очень хорошо для самого растения, всякие там металлы в почве. Best practice, электроды «меняют местами» программно. Но в вашем случае такое сложно. Либо есть специальные сенсоры для измерения влажности почвы, на шнурочке.
В общем есть еще над чем работать.
КДДПВ? :)
Нафига полноценный блютус? С установлениями соединений для передачи данных и прочим? Используем режим маячков, т.е. просто передаём результаты измерений "в воздух", которые может ловить любой BLE-приемник. На Хабре была статья, как из nRF24 сделать передатчик и приемник. Длина полезных данных — байт 16, хватит для передачи измерений.
Энергопотребление на один пакет примерно 50 мА*мСек, т.е. при передаче раз в секунду среднее потребление порядка 50мкА, а раз в 10 сек — уже 5 мкА.
А самый главный вопрос — зачем питание датчиков делать батарейным? :) Светодиодное освещение полок с растениями — тоже батарейное? Или горшки с растениями постоянно по квартире перемещаются?
а) горшки стоят везде где можно (шкафы, полки, подоконники и т.п.)
б) их много
Проводное решение вопроса ну будет оценено по достоинству домашними. Более того, каждый горшок придется оснастить блоком питания.
У меня есть более интересное предложение — солнечные батареи.
Небольшая по площади батарея вполне может давать 3 мА в пасмурную погоду. Нормальному устройству достаточно 100 мкА.
Батарейный блок все равно потребуется для пускового тока (он порядка 16 мА) — это как в машине аккумулятор. Однако, это очень редкое событие, остальное время батарейки расходоваться не будут.
Так что минимальная партия должна окупить все побочные затраты на изготовление всякой оснастки.


Первая ссылка в гугле говорит о цифре ниже $3000.
И свой коленочный прототип без корпуса — всегда дешевле будет стоить.
как показала практика и при 75 кГц результаты измерений влажности достаточно точные и отражают состояние почвы.
Посмотрите еще 80 Мгц решение — его сделали на базе промышленного, возможно, вам будет интересно сделать такой вариант.
Не подскажете, что подразумевается под 100% влажностью почвы? Я не могу понять. С нулём понятно — землю высушили, пропекли в духовке — и вот он ноль (пока почва не успела набрать чуть влажности из воздуха). А вот со 100% что? Это 100% от влагоемкости(льем больше — вода почвой уже не впитывается, появляется на поверхности), соотношение 1 к 1 объемов воды почвы или же соотношение масс?
hostapd: wlan0: STA esp-mac-address IEEE 802.11: authenticated
hostapd: wlan0: STA esp-mac-address IEEE 802.11: associated (aid 2)
hostapd: wlan0: STA esp-mac-address RADIUS: starting accounting session 5AC7A992-00000088
hostapd: wlan0: STA esp-mac-address WPA: pairwise key handshake completed (RSN)
dhcpd[2069]: DHCPDISCOVER from esp-mac-address via wlan0
dhcpd[2069]: DHCPOFFER on 172.30.2.7 to esp-mac-address via wlan0
dhcpd[2069]: DHCPDISCOVER from esp-mac-address via wlan0
dhcpd[2069]: DHCPOFFER on 172.30.2.7 to esp-mac-address via wlan0
dhcpd[2069]: DHCPREQUEST for 172.30.2.7 (172.30.2.1) from esp-mac-address via wlan0
dhcpd[2069]: DHCPACK on 172.30.2.7 to esp-mac-address via wlan0
dhcpd[2069]: DHCPREQUEST for 172.30.2.7 (172.30.2.1) from esp-mac-address via wlan0
dhcpd[2069]: DHCPACK on 172.30.2.7 to esp-mac-address via wlan0
hostapd: wlan0: STA esp-mac-address IEEE 802.11: disassociated
hostapd: message repeated 9 times: [ wlan0: STA esp-mac-address IEEE 802.11: disassociated]
hostapd: wlan0: STA esp-mac-address IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
т.е. esp-шка не отключается нормально от роутера, а просто вырубается. Немного напрягает это дело. Как правильно сделать отключение? WiFi.disconnect() никак не влияет.
Без Wi-Fi и IP. Время соединения значительно сокращается.
Здесь кратенько рассказано — youtu.be/6NsBN42B80Q
И еще вопрос, сколько у вас всего таких устройств установлено?
Установлено пока несколько штук на тестах.
Год измеряем влажность почвы на ESP8266 и двух батарейках. Часть 2