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

Разработка ‘библиотеки’ малого webсервера на esp8266.

pvvx

Активный участник сообщества
Это экономия такая безмозглая. Медь дорогая и сейчас выводф часто делают стальными.
Не - выводы у самих микрух, которые измеряют МП не магнитные. Магнитные SMD кондеры и то не все...
Вот то-же самое и с другими китай-датчиками:
IMG_6250sm.jpg IMG_6253sm.jpg
(LMS9DS0 и HMC5883L)
К деталям липнет магнит. Их придется снимать и ставить немагнитные...
Иначе после проноса рядом с магнитом они кажут что угодно. Приходится ставить рамку с размагничиванием при старте питания. Но лучше снять магнитные детали, которые рядом с датчиком... А народ это дерьмо кушает и что-то постоянно кажут в ютюбе c ними, да какие-то статические таблицы компенсации выдумывают и хвалятся :) :) Скорость перемагничивания деталек в магнитном поле Земли зависит и от силы и кол-ва постукиваний по плате, а так-же от местной наводки в 50 Гц, как размагничивающего поля, плюс перепады температуры и гистерезисы магнитных материалов данных компонентов. :) Постоянная составляющая от прохода по проводникам тока компенсируется одной константой...
Хочу поглядеть, смогут ли данные датчики уловить проезд автомашины и какое выйдет расстояние... Она железная и кривит магнитное поле сильно. А датчиков надо пару - для диф.сравнения. У HMC5883L малая чувствительность и он сразу отпадает и приходится искать что покруче... Если почуют - можно сделать мину :))) Т.е. чтобы отличить машину от слона - он тоже тряску дает - акселерометр покажет... А если в закрытом помещении, то на живое сработает датчик влажности. Проверено - они дышат... :) Ещё в комплекте будет датчик ИФК с дикой чувствительностью и разрешением (своё разработка) и освещенности, давления, температур, может и газов, ... Т.е. полный комплект, с "чувствами" которых большинства у человека нет или плохо развиты.
 
Последнее редактирование:

Alexander

Member
Не - выводы у самих микрух, которые измеряют МП не магнитные. Магнитные SMD кондеры и то не все...
Так я ровно о том же. Я имел в виду изготовителей устройств. Они применяют компоненты, полагаю, даже не задумываясь. У тех же резисторов, кроме номинала и допустимого отклонения, масса параметров. Если от ТКС кто-то иногда вспоминает, то о шуме не думает практически никто даже у нас. Оно, правда, и значение имеет редко во входных каскадах. Ну а китайцы могут себе позволить не думать о магнитных свойствах компонента и даже о допустимой рабочей частоте контроллера.
 

vad7

Active member
Используйте Arduino или ещё чего. Я не делаю проектов зависящих от внешнего платного сервиса.
Я про бесплатные или свои, но не в этом суть.
Вопрос - куда регулярно сохранять информацию, поступающую раз в секунду (но бывают и моменты бездействия в десятки часов) на устройство висящее на улице.
То есть батарейку к нему не прицепишь и электричество может пропасть внезапно и много раз на дню.

Можно на флеш, но она тогда быстро умрет. Остается либо прицепить FRAM память, либо передавать данные на какой-нибудь сервер по готовности.
 

pvvx

Активный участник сообщества
Можно на флеш, но она тогда быстро умрет. Остается либо прицепить FRAM память, либо передавать данные на какой-нибудь сервер по готовности.
16 мегабайт flash при записи раз в секунду (пусть будет 32 байта запись) умрет через:
Берем буфер в 15 мегабайт. Остальное - ПО и т.д.
15*1024*1024/32=491520 записей до цикла перезаписи. Т.е. 491520/60/60=136.533333 часов. Это более 5 суток. 5 суток умножаем на минимальное кол-во стираний при гарантии производителя flash. Пусть там значится 10 тысяч. 5*10000=50000 суток. Делим на 365 дней в году = 136.986301 лет
Итого: 137 лет при записи 32-х байт в секунду. :p
За это время сайт thingspeak.com умрет. А на данном устройстве всё равно можно будет получить данные последних 5-ти суток. :)
Но никому не нужны данные с дискретом 1 сек за последний год. И по тому пишут с осреднением к примеру в 5 минут. Это уже 41100 лет. :p
Кто первым помрет? - Явно внешний накопитель и формат передачи к нему данных. А запрос данных у устройства можно будет сделать всегда, пока не умрет используемый формат WiFi и HTTP (или какой накрутите).
Тем более ваш вариант, собственной передачи с устройства не выдерживает увеличения кол-ва таких устройств. При запросе у устройства мы сами распределяем общий трафик и данные никогда не пропадут, т.к. имеются в буфере на устройстве. И подлог данных не совершить тоже. Обычный принцип "черного ящика" - всегда можно запросить что там делалось за время циклического буфера накопления.
По этому нежизнеспособные устройства, не работающие без мамки, делайте на Arduino. :) Arduino и сделано для проектов на вечер на макете, работающих этот вечер и в спец условиях. :)
Связь с внешним миром делается на другом устройстве, обычно на роутере - он может держать атаки и шифровать данные и т.д. При этом он тоже должен сохранять автономность местного управления и ... Хоть VPN канал. Т.е. где-то за ним уже прием/передача данных во внешний мир, а не у ESP8266. Тем более таким методом решаются все вопросы с "секретностью". Роутер знает последнее кодовое слово ортаботанного запроса данных с устройства и меняет его синхронно - тогда внешний никто не сможет подобрать это кодовое слово, даже если соединение с устройствами не шифровано. Это избавляет от применения неработающих сертификатов и прочей фигни от китайцев в SDK...
 
Последнее редактирование:

Alexander

Member
Роутер знает последнее кодовое слово ортаботанного запроса данных с устройства и меняет его синхронно - тогда внешний никто не сможет подобрать это кодовое слово, даже если соединение с устройствами не шифровано.
Не может произойти рассинхрона в таком варианте?
Я вот сейчас малость озадачился секъюрностью. Если сосед потрудившись со снифером узнает, сколько я трачу воды - это будет весело, но совсем убирать конфигурацию по web не хочется, а если оставлять - непоправимого тоже ничего не произойдет, но злую шутку сыграть можно, например, накрутив показания.
 

vad7

Active member
:)

Да я бы и сделал на ардуине, если бы она была стабильна, хотя я ее терпеть не могу.
Ваш sdk в этом плане лучше.

Вот, например, устройство подключенное к электросчетчику, считывает показания по импульсу счетчика (600 на квт). Плюс текущее напряжение.
Нужно смотреть не только, сколько уже набежало, а так же график потребления/напряжения за nn дней по минутам.
На сторонний-то сервер плюнул инфу - он сам ее и с-агрегирует и покажет как надо.
Потом датчик может накрыться от грозы, дождя, его могут украсть.
По этому данные надо все равно где-то бакапить.
В принципе, можно, конечно написать скрипт для забора инфы с датчика, раз в несколько минут.

Но с точки зрения простоты программирования (лени), проще с датчика отправлять данные по мере поступления, то есть возник импульс - отправили, раз в минуту - отправили. И ничего сохранять не нужно, и память перепаивать не нужно. Правда, вот если интернет закончится.... :)

@Alexander, Это где-же такие соседи!? Https тут помог бы, однозначно.
 

pvvx

Активный участник сообщества
@Alexander, Это где-же такие соседи!? Https тут помог бы, однозначно.
Угу - отдать соседу ключ называется. :) Всё, что стандартно и вскрывается стандартно :p
Зашита проста - сменный ключ. При соединении передается ключ. Если он не верен, то устройство не отвечает, вообще или гонит липовые данные. Если верен, то работает только эту сессию. По окончанию сервер передает команду смены ключа и принимает подтверждение о выполнении, без передачи самого ключа (или сам ответ/запрос хитрых данных является условием смены ключа). Устройство по своему алго меняет ключ и для следующего сеанса/передачи/приема секретных данных или выполнения команд ждет только новый ключ. Им можно и зашифровать важные данные. При этом никаких HTTPS или WPA не требуется - всё, кроме важных данных не шифруется :) Можно и по другому организовать это дело, только по передаче/запросе каких-то важных данных. Это уже и так чрезмерно для бытовых данных... Передаваемые ключи безусловно только хеши от реальных ключей...
 
Последнее редактирование:

Alexander

Member
Это где-же такие соседи!?
Это гипотетические соседи. Никогда не знаешь, на чем споткнешься. Ну и следующим этапом будет то же, что и у Вас - учет ЭЭ и не только у себя (любимое СНТ) и вот тут будет еще интереснее. Тут уже можно и компетентного человека в помощь пригласить ради "экономии".
 

pvvx

Активный участник сообщества
Налепил тесты работы с разными модулями 9-DOF...10-DOF в основном по SPI, да доп датчиков по I2C. Работают - нативные данные гонят.
Существует ли какое внешнее открытое ПО по обработке данных с них? Ну там графического отображения 3D акселерометров, магнитометров и т.д.? От этого будет зависеть проект c поддержкой этих датчиков - для всех или частный, специализированный - т.е. закрытый. Слишком много специфики применения получается и не всем это надо... Как и писал - мне данные с таких датчиков нужны не для геликоптеров, а совсем с другими целями. Более интересуют данные как метеостанции по всем возможным параметрам с усреднениями за периоды и записью в круговой буфер на год и отображению потом в виде графиков. Отображение в Web ESP8266 в виде простых графиков и выбор какой график показывать - текущий за последние x секунд, за сутки, за неделю, за месяц или за год уже работает (да и писано это было уже лет 10 назад для любого простого MCU с flash и инет подключением :) ). Возможно позже данную систему с накоплением и осреднением опубликую на модули от 4 мегабайта flash, но всё равно она требует подключения каких-то датчиков и есть нюансы с форматом данных от них. C float проц ESP не справится в задачах усреднения... По тому фиксированная точка.
Пример отображения статистики (откопал свою каку-то плату с PIC24HJ128GP506+ENC28J60 из 2010 года и включил :) ):
stat.gif
Запись на ней, когда была подключена к датчикам... (ведет 16 датчиков, расчет производительности, счетчики, лог событий, управление системой установки в состав которой входит, Modbus TCP, Modbus RTU RS-485, CAN, ... ) Слова в меню "день", "месяц", "год" и прочее - выбирают период и тип отображения графика и/или показ в текстовом виде логов... А у проца всего 8 кило RAM - всё отображает в своем Web с передачей MALine.swf, Help "?" тоже встроен, всякие настройки и т.д. ESP8266 ещё не дорос до неё (и её стабильности работы - эта проверена годами непрерывной работы...), но скоро... :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Как на счет СКАДА систем?
Например FreeSCADA....
В помойку. Большинство промышленного ПО и реализаций сделано ради игры в эту игру от людей, совершенно далеких от программирования и прочего прикладного. В большинстве случаев эти ПО и методы составлены ради поддержки очередного выкрутаса производителя ради несовместимости с другими и организации нового, своего стандарта. Чтобы не покупали стороннее оборудование... :p Короче ради мира коммерции.
Подсчитайте стоимость предлагаемого оборудования фирмами производителями контроллеров пром. оборудования для обеспечения хоть указанного выше примера сервера статистики и удаленного управления :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Как на счет СКАДА систем?
Например FreeSCADA....
Она будет работать с Modbus TCP / RTU RS-485 + WEB server.
Но с 3D датчиками есть маленькое "но" - большой поток данных, если в режиме реального времени... Магнитометр например дает к 100 3D отсчетам в секунду, акселерометр и гироскоп за тысячи точек в секунду :) А хотелось бы несколько сразу для диф. замеров.
С бесплатным наверно туго, если только что-то типа такого, под андроид с исходником:
http://www.onyxbits.de/sensorreadout
Ну все 18-ть сенсоров в телефоне кажет. Но нет влажности, температуры, ИФК и состава газов :) О - ещё напряженности на метр в воздухе (тоже 3D) :)
 
Последнее редактирование:

AlexMelven

New member
pvvx, если я хочу попробовать добавить к проекту вебсервера smartconfig, как мне подключить библиотеку smartconfig.a? Похоже копирования в папку lib не достаточно? Компилятор все-равно не видит функций типа smartconfig_start(), smartconfig_stop()..
PS.Извиняюсь за нубские вопросы..
 

pvvx

Активный участник сообщества
pvvx, если я хочу попробовать добавить к проекту вебсервера smartconfig, как мне подключить библиотеку smartconfig.a? Похоже копирования в папку lib не достаточно? Компилятор все-равно не видит функций типа smartconfig_start(), smartconfig_stop()..
PS.Извиняюсь за нубские вопросы..
Надо менять makefile - добавлять либу smartconfig-а. У проекта свой SDK - meSDK. Он основан на кусках от стандартного китайского. Удалены разные ненужные функции для уменьшения объему (что было возможно путем пересбора либ и исключения ненужных obj с заменой части функций на открытый код СИ) и часто запатчены китай-ошибки прямо в бинарниках/объектниках... Т.ч. подключение новой либы дело не простое, но решаемое...
Мне smartconfig не нужен. Он не работает - не везде.
 

AlexMelven

New member
там в каждом каталоге по makefile :) не подскажете какой конкретно? Попытался найти какую-нибудь либу, прописанную в makefile текстовым поиском - похоже явное указание имен библиотек есть только в каталоге из которого библиотеки компилируются. А где они подключаются, не понял :(
 

pvvx

Активный участник сообщества
там в каждом каталоге по makefile :) не подскажете какой конкретно? Попытался найти какую-нибудь либу, прописанную в makefile текстовым поиском - похоже явное указание имен библиотек есть только в каталоге из которого библиотеки компилируются. А где они подключаются, не понял :(
В app\sdklib\Makefile. В app\sdklib ( https://github.com/pvvx/esp8266web/tree/master/app/sdklib ) и есть почти отдельный проект https://github.com/pvvx/MinEspSDKLib
При компиляции создает единую либу lib\libsdk.a со всеми файлами из meSDK. А далее к ней уже линкуется web-свалка. MeSDK имеет настраиваемые параметры в https://github.com/pvvx/esp8266web/blob/master/include/sdk/sdk_config.h ...
У меня по возможности используется всё своё, а не порты с других, как в Дурине и т.д. :)
От китайcкой SDK берется минимум (по возможности). Весь сервис по загрузке, инициализации SDK и Lwip всё в исходниках, а не в закрытых либах. Об этом описания кроме как в самих моих исходниках не найдете и это не популяризировано. Телепузикам-АрДуринщикам это сложно :)
 
Последнее редактирование:

AlexMelven

New member
интересно, как это все компилировалось раньше :) Или вообще варнинги были отключены у китайцев? Такой перл, как возможный выход из функции без присвоенного результата, он как пролазит в релиз SDK китайцев?
Код:
sint8 ICACHE_FLASH_ATTR espconn_tcp_set_buf_count(struct espconn *espconn, uint8 num)
{
    espconn_msg *plist = NULL;
    if (espconn == NULL || (num > TCP_SND_QUEUELEN))
        return ESPCONN_ARG;

    /*find the node from the active connection list*/
    for (plist = plink_active; plist != NULL; plist = plist->pnext){
        if (plist->pespconn && plist->pespconn == espconn && espconn->type == ESPCONN_TCP){
            plist->pcommon.pbuf_num = num;
            return ESPCONN_OK;
        }
    }

    if (plist == NULL)
        return ESPCONN_ARG;

}

Функция из espconn.c
 
Последнее редактирование:
Сверху Снизу