Русский
Русский
English
Статистика
Реклама

Wi-fi

Во Франции задержаны владельцы баров с бесплатным Wi-Fi, которые не хранили логи

13.10.2020 02:20:47 | Автор: admin


Бесплатный Wi-Fi в баре или кафе теперь стал обычным делом, и клиенты благодарны за эту услугу, особенно иностранцы в роуминге. Во многих заведениях посетителям просто сообщают название точки доступа и пароль, не затрудняя себя идентификацией пользователей и хранением журнала активности. Но оказалось, что так нельзя. Как сообщает французская газета Les Dernires Nouvelles d'Alsace, минимум пятеро управляющих баров и ресторанов в Гренобле задержаны полицией.

В этих барах не соблюдали малоизвестный закон от 2006 года, который обязывает в течение одного года хранить логи активности всех клиентов, которые подключались к Wi-Fi.

Речь идёт о законе 2006-64 от 23 января 2006 года о некоторых мерах по борьбе с терроризмом. Он распространил обязанность хранения логов, установленную для провайдеров интернета, на всех лиц, которые в отношении первичной или вторичной профессиональной деятельности предлагают населению услугу онлайн-связи, в том числе бесплатно.

В то же время Закон о доверии к цифровой экономике от 21 июня 2004 г. (известный как LCEN) обязывает интернет-провайдеров хранить данные, чтобы можно было идентифицировать всех пользователей предоставляемой ими услуги. Для нужд наблюдения и расследования уголовных правонарушений, а также с целью предоставления информации судебным органам, следует хранить следующую информацию:

  • информация, позволяющая идентифицировать пользователя (например, IP-адрес, номер телефона, адрес электронной почты);
  • данные об используемом оконечном оборудовании связи;
  • технические характеристики, а также дату, время и продолжительность каждого сообщения;
  • данные, относящиеся к запрашиваемым или используемым дополнительным услугам и их поставщикам;
  • данные, позволяющие идентифицировать получателя(-ей) сообщения.

Столкнувшись с этим текстом, у владельца бара есть два варианта. Либо он обращается к третьей стороне, которая будет собирать и хранить эти данные для передачи полиции в случае расследования, либо сам этим занимается. Но в таком случае он будет считаться поставщиком доступа с такими же обязанностями, как у коммерческих интернет-провайдеров.

Проблема в том, что до настоящего момента закон 2006-64 был малоизвестен и часто не исполнялся во Франции. Один из арестованных в Гренобле менеджеров сказал в комментарии газете: Никто, даже профессионалы lUmih (отраслевой профсоюз), которые проводят обязательное обучение в рамках возобновления действия лицензии, никогда не говорили, что я должен хранить эти данные.

Во Франции действительно есть профессиональные операторы сетей Wi-Fi, которые оказывают услуги такого рода с соблюдением всех норм, позволяя идентифицировать конечных клиентов, собирать IP-адреса, вести логи. Они работают также в отелях, конференц-центрах и т. д. Но эти подписки дорого стоят, поэтому владельцы мелких баров просто ставили маршрутизатор, не заморачиваясь формальностями.

Хотя полицейские облавы на бесплатные Wi-Fi в барах редкость во Франции, но теперешние события могут напугать многих. Тем более, по закону предусмотрено суровое наказание: Любое нарушение правил хранения данных предусматривает наказание до одного года лишения свободы и штраф до 75 тыс. евро для физических лиц и 375 тыс. евро для юридических лиц.

Нужно сказать, что в России действуют похожие правила по обязательной идентификации абонентов. Постановление правительства РФ 758, вступившее в силу 13 августа 2014 года, обязало владельцев публичных заведений, которые предоставляют бесплатный доступ к Wi-Fi, идентифицировать пользователей. Согласно постановлению и разъяснениям Минкомсвязи, идентификация может быть выполнена тремя способами: по документу, удостоверяющему личность (например, паспорту), номеру мобильного телефона или учётной записи на сайте Госуслуг.

Интересно, что Франции закон принят ещё в 2006 году, но до сих пор о нём мало кто знал, а полиция не наказывала за нарушение.

По сути, в юридически развитом обществе настолько велико количество законов, подзаконных актов и регулирующих нормативов, что практически каждый гражданин является преступником, знает он это или нет. Нормативная база слишком обширная, а нормы иногда противоречат друг другу, невыполнимы или малоизвестны.
Подробнее..

Стандарт IEEE 1609.2 защита информации в сетях V2X

06.12.2020 16:18:24 | Автор: admin

Вступление

В настоящее время интеллектуальные транспортные системы (англ.: Intelligent Transport Systems, ITS) активно развиваются. Их функционирование невозможно без создания телекоммуникационных систем, позволяющих транспортным средствам обмениваться информацией со внешними устройствами (англ. Vehicle-to-Everything, V2X). Транспортные средства накапливают информацию посредством различных сенсоров, радаров, лидаров и камер. Для обеспечения автономного вождения и передвижения машин в плотном строю (так называемый platooning) необходимо обеспечивать обмен этой информацией между различными транспортными средствами. Обмен информацией может также осуществляться с элементами дорожной инфраструктуры, что позволяет обеспечивать большую безопасность движения посредством передачи объектами инфраструктуры предупреждающих сообщений. Кроме того, существует большое число других приложений, которые обеспечивают удобство вождения и безопасность, а также уменьшают число пробок и предоставляют различные развлекательные сервисы. Разнообразные приложения порождают различные требования на задержки, надёжность и скорость беспроводной передачи данных. Однако кроме требований на производительность сети во многих случаях важно, чтобы передаваемые данные были защищены. В этой статье я хотел бы дать краткий обзор основных механизмов стандарта IEEE 1609.2, который описывает методы защиты информации в транспортных сетях, построенных по технологии Wi-Fi.

DSRC телекоммуникации

На данный момент одним из самых распространённых способов коммуникации в V2X является выделенная связь на короткие расстояния (англ.: Dedicated Short Range Communications, DSRC), для обеспечения которой используется набор стандартов беспроводной связи в транспортной среде: стандарты IEEE 1609 и IEEE 802.11p. Комитетом IEEE был выпущен специальный гайд, в котором они детально описаны. Заинтересовавшиеся могут найти его по ссылке.

Набор стандартов для DSRC Набор стандартов для DSRC

Стандарт IEEE 802.11p описывает работу физического и основной части MAC уровня модели OSI в диапазоне частот 5,9 ГГц (и 60 ГГц опционально). Как видно, этот диапазон частот отличается от частот, на которых работает "классический Wi-Fi": 2,4 ГГц и 5 ГГц. "Классические" частоты являются нелицензируемыми, и это приводит к их зашумлённости передачами устройств, работающих по другим стандартам, что крайне нежелательно для транспортных сетей, которые сделаны в частности для поддержки приложений, обеспечивающих безопасность дорожного движения. В свою очередь, диапазон частот в 5,9 ГГц является бесплатным и лицензированным в том плане, что в этом диапазоне могут работать только устройства, использующие определённый набор стандартов. Стандарт IEEE 1609.4 описывает многоканальные методы доступа к среде, которые позволяют поочерёдно передавать сразу в двух каналах, например, канале для передачи данных и канале для контрольных сообщений. IEEE 1609.3 описывает WSMP (Wave Short Message Protocol), который является альтернативой протоколам TCP/UDP и IP на транспортном и сетевом уровне соответственно. Также стандарт IEEE 1609.3 выполняет некоторые другие функции, например, выбор канала для передачи данных. Стандарт IEEE 1609.2 описывает методы обеспечения безопасной передачи данных и именно ему я хотел бы уделить внимание в данной статье.

Основные положения IEEE 1609.2

Стандарт IEEE 1609.2 основывается на асимметричной криптографии и в частности описывает методы шифрования сообщений и методы создания цифровой подписи. Единицей данных для этого стандарта является так называемый SPDU (Secured Protocol Data Unit), который состоит из защищаемых данных и специальных полей для обеспечения защиты информации. IEEE 1609.2 защищает только данные, являющиеся полезной нагрузкой для протокола транспортного уровня. То есть заголовки транспортного, сетевого, LLC, MAC, а тем более физического уровней стандарт IEEE 1609.2 не защищает. Пример пакета, который иллюстрирует местоположение защищаемых данных, представлен на рисунке ниже. Базовая структура SPDU стандарта IEEE 1609.2 представлена здесь под буквой D:

Местоположение данных, защищаемых стандартом IEEE 1609.2Местоположение данных, защищаемых стандартом IEEE 1609.2

Так как трафик в транспортных сетях по большей части является широковещательным, описывать методы шифрования я не буду, так как при шифровании у принимающего устройства есть секретный ключ, известный только ему, а у передающих открытый - расшифровать сообщений может только принимающее устройство, то есть передача должна быть не широковещательной, а по конкретному адресу. Поэтому я сосредоточусь на описании инфраструктуры для криптографии с открытым ключом (англ.: PKI, Public Key Infrastructure) применительно к транспортным сетям и на алгоритме создания и проверки цифровой подписи. Цифровая подпись используется для проверки того, что отправитель сообщения действительно является тем устройством, за которое себя выдаёт, и для проверки того, что данные не были изменены сторонним устройством. Для создания цифровой подписи устройство использует свой секретный ключ и добавляет значение цифровой подписи в специальные поля SPDU. Проверить сообщение на подлинность может любое устройство, которое знает открытый ключ, соответствующий секретному ключу передающего устройства. Так как для проверки цифровой подписи необходимо знать только открытый ключ, то добавлять цифровую подпись можно даже к широковещательным сообщениям, например, к базовым сообщениям приложений безопасности (англ.: Basic Safety Messages, BSM) и к beacon-ам (специальные кадры технологии Wi-Fi, применяемые для обмена служебной информацией). О том как устройства узнают открытый ключ, соответствующий секретному ключу, я расскажу в следующей главе.

Инфраструктура открытых ключей в сетях V2X

Сразу оговорюсь, что далее я буду говорить только о транспортных средствах, поддерживающих процедуру создания и проверки электронной подписи по стандарту IEEE 1609.2, так как на данный момент этот стандарт поддерживают не все транспортные средства. Сперва я хотел бы отметить, что у каждого транспортного средства имеется 2 типа секретных ключей: долгосрочный и краткосрочный. При этом краткосрочных ключей может быть несколько. Долгосрочный секретный ключ выдаётся при производстве транспортного средства по договорённости производителя и властей того региона, где ключ выдавался. Выдаётся он вместе с соответствующим открытым ключом, некоторой технической и идентификационной информацией о транспортном средстве и сертификатом открытого ключа (сертификат содержит открытый ключ и некоторую информацию о владельце соответствующего секретного ключа). Долгосрочный секретный ключ известен только устройству, которому он выдан, и хранится в так называемом аппаратном защитном модуле транспортного средства, из которого секретный ключ не так-то просто достать. Открытый ключ, его сертификат и некоторая идентификационная информация устройства хранятся в сертификационном центре (англ.: Certification Authority, CA), из которого другие устройства могут получить информацию о сертификате и открытом ключе зарегистрированного устройства. Стоит отметить, что во время производства нового транспортного средства оно получает также 2 открытых ключа сертификационного центра: один для проверки электронной подписи сообщений, переданных от CA, а второй на случай, если злоумышленнику удастся узнать первый секретный ключ CA. Если злоумышленнику удастся узнать этот ключ, то CA сможет сменить секретный и открытый ключ, разослав новый открытый ключ всем устройствам и подписав сообщение вторым секретным ключом. Стоит отметить, что время жизни долгосрочного секретного ключа должно быть равно времени жизни транспортного средства или по крайней мере составлять большую часть его жизни.

Теперь я хотел бы пояснить, зачем нужны краткосрочные закрытые ключи. Как я уже говорил, долгосрочный ключ рассчитан на длительное использование, поэтому хотелось бы использовать его нечасто, чтобы у злоумышленника было меньше шансов взломать этот ключ. Для этого используются секретные краткосрочные ключи. Транспортное средство генерирует несколько пар краткосрочных секретных и открытых ключей и отправляет CA сообщение с сертификатами открытых ключей. Сообщение подписывается долгосрочным закрытым ключом. После того как CA получил сертификаты краткосрочных открытых ключей от транспортного средства, он сохраняет их у себя в памяти, и далее эти сертификаты могут получить другие устройства. После отправки сертификатов краткосрочных открытых ключей CA наше устройство начинает подписывать сообщения краткосрочными секретными ключами. Периодически оно меняет свои секретные и соответствующие им открытые ключи. При этом уже использованные закрытые и соответствующие им открытые ключи стираются из памяти и больше не используются. Поэтому устройству периодически нужно генерировать новые пары открытых и закрытых ключей и рассылать соответствующие сертификаты открытых ключей на CA.

Я довольно много говорил об обмене информацией между CA и нашим устройством, но не сказал, как он осуществляется. Для пояснения я приведу следующую картинку:

Обмен информацией между сертификационным центром и транспортным средствомОбмен информацией между сертификационным центром и транспортным средством

Транспортные средства обмениваются информацией с CA посредством придорожной инфраструктуры (англ.: Road-Side Unit, RSU). Ранее я писал, что стандарт IEEE 1609.2 защищает только полезную нагрузку транспортного уровня, но не заголовки транспортного уровня и нижележащих уровней модели OSI, что позволяет RSU и другим устройствам, выполняющим роль маршрутизатора, передавать сообщения от транспортного средства к CA и обратно, даже не имея возможности узнать содержимое сообщения (если оно зашифровано, например). То есть обмен информацией между автомобилями и CA осуществляется через RSU.

Теперь я хотел бы описать обмен информацией между транспортными средствами. При отправке радиомодулем автомобиля широковещательного сообщения сущность, отвечающая за безопасность передачи данных, должна прицепить к сообщению электронную подпись и сертификат открытого ключа для проверки этой электронной подписи. При приёме сообщения другое транспортное средство должно сперва проверить, что полученный сертификат зарегистрирован и отмечен как действительный в CA, а затем использовать открытый ключ из сертификата для проверки электронной подписи. Для проверки действительности сертификата при первом его получении нужно направлять запрос в CA. Дальнейшая проверка действительности сертификата может осуществляться посредством его временного сохранения в буфере транспортного средства (то есть устройство на время запоминает, что сертификат действительный).

Стоит отдельно отметить, что CA может не только регистрировать сертификаты, но и отзывать их по истечении срока жизни или по каким-то иным причинам. Так что если злоумышленник захочет сбить систему дорожной безопасности транспортного средства с толку, но сертификат открытого ключа злоумышленника не будет зарегистрирован в CA, то у него ничего не выйдет. Больше информации об инфраструктуре открытых ключей в транспортных сетях можно узнать, например, из статьи 1 или статьи 2, на которых основывается мой рассказ про инфрастурктуру открытых ключей в V2X.

Параметры алгоритма создания электронной подписи и операции на эллиптических кривых

Для создания и проверки электронной подписи в стандарте IEEE 1609.2 используется алгоритм цифровой подписи на основе эллиптических кривых (англ.: Elliptic Curve Digital Signature Algorithm, ECDSA). Здесь я дам его краткое описание. Больше информации об этом алгоритме и криптографии на эллиптических кривых можно найти, например, в этой статье на хабре или в этой научной статье. Алгоритм ECDSA позволяет создать электронную подпись сообщения с помощью закрытого ключа, а затем проверить её с помощью открытого. То есть отправитель должен знать секретный ключ, а все принимающие устройства должны знать открытый ключ. Однако кроме знания одного из двух ключей устройства также должны знать параметры алгоритма. Первыми двумя параметрами алгоритма являются коэффициенты используемой эллиптической кривой. В алгоритме ECDSA используются эллиптические кривые форме Вейерштрасса, под которыми в криптографии подразумевается множество точек (x, y) следующего вида (далее под эллиптической кривой буду подразумевать именно это множество точек):

Здесь \mathbb{F}_p - это поле Галуа, состоящее из целых чисел от 0 до p - 1, где p - простое число, либо степень простого числа. В криптографии p выбирают либо простым числом, либо степенью двойки. Числа a и b, являющиеся параметрами эллиптической кривой, также принадлежат \mathbb{F}_p . Дополнительное условие на эти коэффициенты делает эллиптическую кривую применимой в криптографии. Под "0" подразумевается нулевой элемент эллиптической кривой, при прибавлении которого к любому элементу получится тот же самый элемент. Геометрически нулевой элемент - это бесконечно удалённая точка расширенной действительной плоскости. Стоит отметить, что эллиптическая кривая имеет конечное число элементов и при правильном введении операции сложения и взятия обратного элемента становится абелевой группой относительно этой операции сложения. Чтобы геометрически пояснить операцию сложения и взятия обратного элемента, я вставлю сюда картинку, которая иллюстрирует вид эллиптической кривой в \mathbb{R}^2 , то есть кривой вида:

Операция сложения на эллиптической кривой в форме Вейерштрасса Операция сложения на эллиптической кривой в форме Вейерштрасса

Красная кривая - это качественный вид эллиптической кривой, задаваемой уравнением выше. У такой кривой есть ось симметрии, которая в данном случае проходит через ось абсцисс. Ось симметрии позволяет ввести понятие обратного элемента: точка P эллиптической кривой называется обратной к точке M эллиптической кривой, если точка M симметрична точке P относительно оси симметрии нашей эллиптической кривой. Результат сложения симметричных точек M и P определяется следующим образом:

Стоит отметить, что на представленном выше рисунке изображена не только сама эллиптическая кривая, но и геометрический смысл операции сложения. Чтобы найти сумму двух разных точек эллиптической кривой, не симметричных относительно оси симметрии этой кривой (на рисунке точки P и Q), необходимо провести через них прямую и найти её точку пересечения с кривой (точка пересечения существует в силу условий на параметры a и b). Тогда суммой точек эллиптической кривой называется точка, обратная к указанной выше точке пересечения. Для нахождения результата сложения некоторой точки эллиптической кривой с самой собой (на рисунке P + P) необходимо провести касательную к этой точке, найти пересечение касательной с эллиптической кривой (пересечения опять-таки существует в силу условий на a и b) и взять точку, обратную к пересечению. Для реализации алгоритма ECDSA на компьютере указанные выше операции сложения необходимо записать в аналитическом виде. Это можно сделать, используя методы аналитической геометрии. Здесь я напишу лишь конечные формулы для сложения точек в полях Галуа. Будьте внимательны! Я не зря выделил последнюю фразу жирным шрифтом. Под делением в полях Галуа я подразумеваю взятие обратного элемента: элемент x поля Галуа называется обратным к элементу y поля Галуа если:

Для вычисления обратного элемента обычно используется расширенный алгоритм Евклида. С учётом замечания про взятие обратного элемента формула для сложения разных точек P (x_1, y_1) и Q (x_2, y_2) , не симметричных относительно оси симметрии эллиптической кривой, имеет следующий вид (все!!! операции по модулю p):

В свою очередь, формула для сложения точки с самой собой имеет вид:

Однако a, b и p - это не единственные параметры алгоритма ECDSA. Дело в том, что алгоритм ECDSA работает не на всей эллиптической кривой, а на её циклической подгруппе, образуемой некоторой генерирующей точкой G эллиптической кривой. Все элементы этой подгруппы получаются путём сложения точки G с самой собой некоторое число раз. Порядок этой подгруппы (то есть число элементов в ней) является пятым параметром алгоритма ECDSA. По-другому порядок подгруппы можно определить как наименьшее положительное целое число n такое, что: nG = "0". Последним параметром является так называемый кофактор подгруппы. Он определяется следующим образом:

Здесь под N подразумевается порядок всей эллиптической кривой, то есть число элементов в ней. В силу так называемой теоремы Лагранжа, n всегда является делителем числа N, так что кофактор определён корректно.

В стандарте IEEE 1609.2 возможно использование лишь определённого набора параметров, для которых нет общеизвестных методов быстрого взлома алгоритма ECDSA (о том, как его можно взломать я расскажу чуть позже). Используемый набор параметров для передающего устройства можно получить вместе с его открытым ключом от CA. Примеры этих наборов можно найти, например, в этой статье в разделе ECDSA.

Алгоритм ECDSA

Теперь перейду к описанию самого алгоритма ECDSA. Этот алгоритм работает не с самим передаваемым сообщением, а с его хэшем. Хэш-функция позволяет преобразовать сообщение произвольной длины в последовательность бит фиксированной длины. При этом данное преобразование выполняется таким образом, что восстановление всех возможных исходных значений сообщения по заданному значению хэша является вычислительно сложной задачей, тогда как вычисление самой хэш-функции можно произвести быстро. Полученную после действия хэш-функции последовательность бит можно интерпретировать как десятичное число в двоичной форме записи. Именно это число используется алгоритмом ECDSA. Если это число получается большим, чем n, то хэш сообщения необходимо урезать. Стандарт IEEE 1609.2 определяет всего 2 допустимые хэш-функции: SHA-256 и SHA-384.

Теперь перейду к описанию процедуры генерации открытого и закрытого ключей. Закрытый ключ d является случайно выбранным элементом поля Галуа, лежащим в интервале [1, n - 1]. Открытый ключ вычисляется из закрытого по следующей формуле (здесь и далее набор параметров алгоритма (p, a, b, G, n, h)):

Для вычисления значения открытого ключа по закрытому ключу и генерирующей точке существуют эффективные алгоритмы, позволяющие вычислить открытый ключ быстро. А вот обратная задача, то есть вычисление закрытого ключа по известной генерирующей точке и открытому ключу, считается сложной. Эта задача называется задачей дискретного логарифмирования, и именно на сложности её решения базируется криптографическая стойкость алгоритма ECDSA. Для того чтобы эта задача была по-настоящему сложной и не решалась за приемлемое время на обычных компьютерах, необходимо выбирать большие значения p и n. Например, для одного из специфицируемых стандартом IEEE 1609.2 набора параметров алгоритма ECDSA под названием NIST P-224 параметры p и n имеют следующие значения:

Теперь перейду к процедуре генерации электронной подписи алгоритмом ECDSA. Выпишу её в виде алгоритма (m - это исходное сообщение):

1) - Сперва необходимо выбрать случайное число:

2) - Далее вычисляем точку и число:

3) - Если r = 0, то возвращаемся к шагу 1

4) - Затем необходимо вычислить значение:

5) - Если s = 0, то возвращаемся к шагу 1

6) - Возвращаем сообщение m и пару чисел (r, s)

Процедура проверки электронной подписи выглядит следующим образом:

1) - Проверяем, что:

2) - Вычисляем значения:

3) - Вычисляем точку:

4) - Подпись действительна тогда и только тогда когда:

Проверка корректности алгоритма

Теперь проверим корректность этого алгоритма (нестрого). Сперва перепишем P в несколько другом виде, учитывая что Q = dG :

Учитывая определение u_1 и u_2 , получим:

Ранее было дано следующее определение:

Умножив обе части уравнения на k и поделив на s, мы получим, что:

А это значит, что:

Из написанной выше проверки корректности следует, что посредством этого алгоритма значение r было вычислено двумя способами: на передающем устройстве с помощью закрытого ключа и на принимающем с помощью открытого. Затем 2 значения r были сопоставлены друг с другом.

Заключение

В данной статье были рассмотрены базовые принципы функционирования стандарта IEEE 1609.2, описывающего защиту информации в транспортных сетях, работающих по технологии Wi-Fi. Сперва был рассмотрен набор стандартов для беспроводной связи в транспортных сетях. Затем был сделан обзор методов распределения открытых и генерации секретных ключей в сетях V2X. Далее была описана арифметика криптографии на эллиптических кривых и алгоритм ECDSA, используемый для создания электронной подписи в стандарте IEEE 1609.2. В конце была проверена корректность алгоритма ECDSA.

Подробнее..

Разработка кибер-безопасной информационно-технической системы высшего учебного заведения

23.03.2021 00:21:32 | Автор: admin

От автора

В данной статье рассмотрены проектирование, тестирование, разработка и внедрение кибер-безопасной информационно-технической системы высшего учебного заведения на примере моего личного, в итоге успешного опыта внедрения в Университет таможенного дела и финансов в 2019 году. Результаты могут быть применены на любом этапе создания кибер-безопасных информационно-технических систем, в том числе высшие учебные заведения, корпоративные/домашние сети и прочее.

Отвечу на все интересующие Вас вопросы в комментариях, или личных сообщениях. Я открыт к дополнениям, оптимизации, а также критике со стороны профессионалов. Приятного ознакомления!

Введение

Развитие новых видов связи, быстрое совершенствование информационно-телекоммуникационных технологий и методов обработки данных радикально меняет облик современного образования. Во всём Мире эти тенденции, наиболее четко прослеживаются на примере дистанционного обучения (ДО) в период карантина, связанного с Коронавирусом.

Еще совсем недавно Высшие учебные заведения стран при организации ДО и совместного использования необходимого дистанционной связи были лишены возможности применения традиционных технологий и сетей радиорелейных линий с ретрансляторами (единственного на то время надёжного способа передачи информации), расположенными вне населенных пунктов из-за очевидной сложности технического и экономического характера. Одним словом, из-за дороговизны технической реализации ДО.

Однако, в настоящее время, прогресс в области развития цифровых методов, компьютерных и телекоммуникационных систем и сетей позволяет серьёзным образом изменить вид действующих и будущих образовательных технологий образования в целом. По моему мнению, развитие системы современного образования в стране непосредственно связан с наличием на местах скоростных каналов связи, позволяющих обеспечивать не только локальное, но и отдаленное обучение с учетом необходимых консультаций и непосредственно необходимых для обучения демонстраций, например, через Zoom , Skype, Discord конференции, реализуя доступ к современным базам данных и используя при необходимости методы распределенной обработки данных типа ODP (Open Distributed Processing, ITU - T Rec. X.901 / ISO / IEC 10746 - 1, ITU - T Rec. X. 902 / ISO / IEC 10746 - 2 ITU - T Rec. X.904 / ISO 10746 - 4 и некоторые другие).

Более того, идея унификации беспроводной связи для всех видов сервиса привела к появлению стандартов для мобильных сетей сначала третьего поколения (3G), а в дальнейшем 4G и 5G. Так, основной целью стандартов 3G было объединение телефонной и цифровой связи в глобальных сетях мобильной связи. Основными стандартами были UMTS (W-CDMA) и CDMA-2000. Основное отличие сетей четвертого поколения от предыдущего заключается в том, что технология 4G полностью основана на протоколах пакетной передачи данных. В плане развития концепции 4G и как дальнейшее развитие серии стандартов 802.11, реализуется стандарт 802.16 (Wireless Man), который находит не только промышленное, но и коммерческое применение. Обладая большим количеством неоспоримых преимуществ, он, как и многие другие подобные решения, может находить применение только находясь относительно близко от магистральных сетей, а и реализуется путем создания сетей, имеющих локальное покрытие. При этом, необходимо отметить, что переход в более коротковолновые диапазоны, связанные с относительно большим влиянием атмосферных условий на распространение радиоволн, исследованным до настоящего времени достаточно хорошо. Однако, для известных флуктуаций атмосферных и погодных параметров соответствующие изменения параметров прохождения сигнала хотя и могут быть легко прогнозируемые, но, как показывает практика, они (наземные устройства связи) все равно оказываются, более уязвимыми по отношению к закрытым (локальных сетей внутреннего пользования) к воздействию различных природных катаклизмов, и это необходимо принимать во внимание. Аналогичная тенденция прослеживается и при реализации возможностей и работы по выделенным каналам Интернет, хотя, для обоих случаев обеспечивается защищенность канала передачи данных. При этом, как правило, проявляется растущая тенденция, связанная с дефицитом пропускной способности образовательных трафиков национального спутникового ресурса, что в конечном итоге приводит и к его удорожанию.

Итак, чётко прослеживается принципиальная необходимость решения проблемы ДО конкретного вуза посредством использования внутренних информационных ресурсов в виде электронных учебников, конспектов лекций, виртуальных лабораторных работ и других методических разработок в виде единого банка хранения всей информации при использовании своей локальной технической системы обработки и доставки информации. Последний, (в отсутствии необходимости ведения бумажного архива), должен быть защищенным и доступным в любой момент времени, как для студентов, так и для специалистов ВУЗа, способствуя повышению их профессионального уровня. При этом очевидно, что любое ДО не может обходиться без технических средств его обеспечения.

Таким образом, передо мной была поставлена задача разработки кибер-безопасной информационно-технической системы (ИТС) для главного корпуса Университета таможенного дела и финансов с целью дальнейшего её использования в качестве ДО. Причем, при реализации поставленной задачи, нужно было ознакомиться с особенностями ДО и с современным состоянием и построением защитных информационно-технических систем.

Техническая реализация

Этот раздел тесно связан с актуальностью проблематики обеспечения безопасности использования глобальной сети интернет, что очевидна для большинства пользователей и требует на каждом этапе приема-передачи и обработки сопутствующих потоков не только априорной оценки угроз и рисков, а также разработки и реализации надёжных систем защиты с целью уменьшения отрицательного влияния на достоверность и целостность информации.

В этом аспекте, прежде всего, весомый вклад вносят точки входа (доступа), обеспечивая способы подключения к сети интернет. Так, при подключении к таким точкам, человек начинает передавать данные.

Эти данные очень легко перехватить, изменить и передать совершенно другую информацию, либо же злоумышленник может получить конфиденциальное сообщение, контактную и личную информацию, которые передаёт пользователь сети.

Итак, нужно понимать, что при подключен ни к глобальной сети - открывается двухканальная связь с помощью которой можно, как отправлять данные, так их и получать. Это говорит нам о том, что каждый пользователь может подключиться к любому ресурсу, а злоумышленник может подключиться к нему, что приводит к нежелательным последствиям.

Поэтому такие точки доступа к сети интернет не могут быть полностью безопасны. Злоумышленники могут перехватывать данные, подменять их и получать доступ к вашему цифровому устройству, что ведёт к риску так называемой компрометации данных и информации. Нам же нужно максимально минимизировать все риски.

Особенности реализации информационно-технической системы в Университете таможенного дела и финансов

Все, даже безупречные современные устройства, требуют решения по оптимизации его использования, прежде всего, при так называемой привязке к непосредственному объекту внедрения ИТС. А так как мы используем Мировую(Глобальную) цифровую информацию обеспечения в ВУЗе, то нас интересует как быстро эту информацию можно найти и как в целостном режиме передать непосредственно пользователю используя локальную систему связи университета. Привязка нашей системы имеет свои особенности связаны с расположением учебных корпусов вуза. В нашем случае можно было ожидать , что используется как эфирная среда распространения электромагнитных волн для передачи/приёма сообщений (Wi-Fi), так и кабельная система (витая пара, 4 пары, RG - 45, изображена на рис 1.1 ниже) и оптическая линия по стандарту GPON.

Необходимо было предусмотреть перекрытия так называемых теневых зон средств приёма/передачи сигналов используя стандартные системы Wi-Fi обеспечения. В связи с этим, мы должны использовать такие тактические данные устройств, что смогут обеспечить непрерывную зону покрытия главного корпуса в УТДФ, который представляет собой П - образное здание . (Рис. 1.2 - 1.3, фото со спутника, и схематическое отображение Google Maps ниже).

В связи с этой особенностью мы ожидаем, что нам придётся использовать различные системы связи и устройства. Для того , чтобы не ошибиться, нам нужно было провести апробацию этой системы и устройств на уровне одной кафедры, используя лабораторное макетирование (стенд) .

На данный момент один из самых распространенных способов подключения к сети интернет реализуют с помощью технологии Wireless Fidelity (Wi-Fi), которая имеет удобный и быстрый способ соединения, используя беспроводной радио-частотный канал.

Апробация информационно-технической системы

Для тестирования системы на кафедре кибербезопасности УТДФ все компоненты сети были соединены, и сформировали стенд для апробации (схема подключения изображена на рис 1.4 ниже).

Особое внимание было уделено привязке точек доступа, реализованные с помощью оборудования Ubiquiti UniFi. Внешний вид точек доступа приведены ниже на рис. 1.5 1.6.

Эти точки доступа передают сигнал также с помощью радио - частотного канала той же сверхвысокой частоты и в них реализована технология бесшовного покрытия. Эта технология позволяет не подключаться постоянно вручную к каждой новой точке доступа, а, наоборот, оптимизировать режим связи в автоматическом режиме. Так, если Вы выходите из зоны покрытия сигнала первой точки, то в автоматическом режиме Вы подключаетесь к следующей ближайшей точки сети с минимальной задержкой (рис. 1.7 - 1.8)

Для нормального функционирования и оптимизации работы точек доступа были проведены контрольные замеры мощности сигнала точек доступа, с целью выявления "мёртвых зон" и дальнейшего выбора оптимального расположения точек доступа для обеспечения "бесшовной сети" на всех четырёх этажах учебного корпуса.

Для решения этой задачи мы использовали закрытое серверное помещение межкафедральной информационно-технической лаборатории, надёжное хранилище от посторонних людей, куда мы перенесли все устройства и начали отрабатывать возможность подключения абонентов и трансляции Интернет трафика. Для стендирования были использованы устройства Ubiquiti Uni-Fi AP так как передача происходила на относительно коротких дистанциях (до 15 метров). В качестве Интернет-трафика использовалась ветвь УТДФ, к которой был подключен главный сервер лаборатории и маршрутизировали трафик с помощью витой пары и RG - 45. Для подключения экосистемы Ubiquiti мы использовали фирменное компактное серверное решение Ubiquiti Cloud, с помощью которого смогли настроить маршрутизацию трафика, его мониторинг (не нарушая конфиденциальность абонентов), обслуживания и создания резервных копий системы (Backup). После настройки и подключения мы воспользовались программным обеспечением, которое показывает уровень сигнала каждой точки доступа, и настроили режим ретрансляции, то есть фактически создали такое бесшовное покрытие, что могло усиливать и ретранслировать сигнал на вcе дополнительное крыло главного корпуса УТДФ.

Так, на базе кафедры кибербезопасности и информационных технологий в кабинете межкафедральной учебной лаборатории УТДФ был создан прототип системы , включающий в себя две точки доступа, который отлично работал в тестовом режиме всю рабочую неделю, обслуживая коллектив и студентов кафедры кибербезопасности и информационных технологий, кафедра компьютерных наук, межкафедральную информационно-техническую учебную лабораторию, и другие аудитории в радиусе действия.

То есть, после тестирования стендовой системы мы получили положительный результат, система показала свою работоспособность и зарекомендовала себя как систему, которую можно масштабировать на весь главный корпус УТДФ . Однако, для этого нужно разработать способ распространения стабильного покрытия на весь П - образный корпус.

Масштабирование, защита и внедрение информационно-технической системы

Благодаря успешному тестированию точек доступа нам удалось рассчитать примерную дальность Wi-Fi покрытия с учётом бетонированных стен здания - от 10 до 15 метров в зависимости от количества стен. Однако, корпус не является симметричным, то есть, расположив точки доступа слишком близко мы создадим искусственные электромагнитные наводки на систему, которые имеют диструктивное влияние на информационно-техническую систему вобщем. Для решения этой задачи мы взяли второй тип точек доступа Ubiquiti Unifi Long Range (с англ. Дальней дальности) , тем самым минимизировали скопления большого количества точек доступа благодаря установленным одной точки далекой дальности для длинных коридоров, и отдельную для актового зала так как это помещение является крупнейшим в здании. Имея эти данные мы сделали набросок схемы покрытия здания УМСФ и смогли рассчитать условное месторасположение каждой "точки доступа". Ниже, на рис. 1.9 зелёным выделены точки LR, синим - AP на каждом из 4 этажей корпуса (набросок рисовали в Paint, перфекционисты - извините :)

Кафедральная, а затем и университетская Wi-Fi система способна работать в СВЧ диапазоне (именно на частотах 2,4ГГц и 5ГГц), поддерживая 802.11 a / b / g / n Стандарты Wi-Fi. При этом следует отметить широкий выбор возможных скоростей обмена сообщениями (от 6,5 до 450 Мбит / с на частоте 2,4 ГГц и от 6,5 до 300 Мбит / с на частоте 5ГГц, используя соответственно стандарты 802.11n MSC0 - MSC23 и MSC0 - MSC15).

В нашей системе беспроводное сетевое соединение реализовано с помощью технологи Power over Ethernet (PoE). Технология PoE реализует в себе использование одного кабеля витой пары для передачи данных, а также питания периферийных устройств. Для передачи напряжения чаще всего используют неиспользованные (свободные) для передачи данных пары проводов, в нашем случае это синяя и коричневая (рис. 1.10).

В нашем случае было внедрено использование пар для передачи питания и пара для данных, то есть стандарты PoE, которые обеспечивают сигнализацию между оборудованием источника питания (power sourcing equipment) и устройством питания. Для корректной работы требуется PoE адаптер, фото которого ниже на рис 1.11.

Защита информационно-технической системы

Для эффективного регулирования кибер-отношений мы должны изучать не то состояние, которое сейчас существует, а прогнозировать и моделировать те кибер-отношения элементов структуры, которые возможны будут в будущем, и формировать механизм управления рисков, исходя из будущего состояния системы.

Для защиты устройств от студентов, или потенциальных злоумышленников были проведены комплексные меры безопасности оборудования. А именно: расположение точек доступа выше 2,5 метров (на стенах, или потолке), скрытия линий питания и передачи данных в кабель-каналах (кабельтонах) на той же высоте, создание контролируемых (открытых) и неконтролируемых (закрытых) линий коммутации данных и питания на каждом этаже в закрытых серверных комнатах с ограниченной формой допуска (коробки коммутации).

Особенностью реализованной системы есть то, что она комбинирует в себе как безопасную беспроводную связь с помощью радио-частотного канала, а также является их защищенность посредством использования непрерывного контроля со стороны сервера на основе системы Ubiquiti CloudKey. Внешний вид сервера и типичная схема подключения изображена на рис 1.12.

С помощью этого сервера обеспечивается постоянный контроль и мониторинг входных и выходных данных. В частности формируется отчетная статистика, благодаря её помощи реализована система блокировки подозрительного трафика сети. Применяется шифрование и Secure Sockets Layer (SSL) сертификация. Это обеспечивает конфиденциальность обмена данными между клиентом и сервером с помощью Transmission Control Protocol / Internet Protocol (TCP / IP).

Защита сервера управления системой надёжно зашифрована с помощью биометрической защиты панели администрирования (сканирование отпечатка пальцев, сканирование лица, рис. 1.13).

Защита беспроводной сети Wi-Fi реализована с помощью метода шифрования WPA2-PSK с использованием пароля более 10 символов, который на сегодня является наиболее криптостойким алгоритмом аутентификации устройств.

Благодаря данным мерам каждый студент и любой преподаватель учебного заведения могут подключиться к сети интернет, а главное, это подключение защищено и безопасно, а также не имеет в себе угроз и рисков перехвата, то есть злоумышленники не получают доступ к передаваемой информации.

Итоги

На базе современного развития цифровых методов, компьютерных и телекоммуникационных систем, а также сетей, была поставлена цель и реализованы задачи технического оснащения дистанционного обучения, позволяющие обеспечивать не только локальное, но дистанционное обучение студентов с учётом необходимых консультаций и демонстраций через, например , Zoom, Skype, Discord конференции, что является актуальным в период карантина, связанного с коронавирусом. В ходе этих задач были рассмотрены и получены следующие результаты:

- проведён анализ информационно-технических систем высших учебных заведений, по результатам которого дальше использовали современные мировые информационно-технические сервисы такие как Google Classroom, Zoom конференции, Skype, Google Hangouts, Prometheus, SuperMemo, Stepik, Coursera, SoloLearn, Brain Code. Проведено сравнение преимуществ и недостатков (плюсы и минусы) современного состояния этих методов ДО;

- формализованы требования к защите информации в информационно-технических системах и выбора методик защищенность и конфиденциальности информации, то есть информационно-технические системы высших учебных заведений должны отвечать современным требованиям помехозащищенности и безопасности функционирования с учетом надежного обеспечения конфиденциальности, доступности и целостности учебной, научной и административной информации . В связи с чем предложенный метод криптографической сокрытие информации и защиты источников питания от несанкционированного доступа;

- в будущем озвученные ИТС и их структуру можно масштабировать на спутниковый уровень (ретрансляционный) для покрытия больших территорий.

Особая благодарность в.о. зав.кафедры кибербезопасности УТДФ Прокопович-Ткаченко Дмитрию Игоревичу за предоставленные возможности для создания ИТС, доценту кафедры кибербезопасности Тарасенко Юрию Станиславовичу за помощь с оформлением и расчётами, а также студентам Олейнику Александру, Рудакову Михаилу и Луценко Владимиру за оказанную помощь в прокладке линий коммуникации!

Спасибо за внимание!

Подробнее..

Wi-Fiв офис, на склад, завод, банк Сценарии внедренияи сборкиWi-Fiв сферы бизнеса.(Часть2)

27.04.2021 12:23:09 | Автор: admin

Оглавление

  1. Введение

  2. Wi-Fi и размер бизнеса

    2.1для малого бизнеса

    2.2для среднего

    2.3дляenterprise

  3. Сценарии примененияWi-Fiв сферах бизнеса

    3.1 Wi-Fiна заводе

    3.2Умный ритейл.Wi-Fiв магазины и ТРЦ.

    -Сеть магазинов

    -МаркетингТРЦ

    3.3Wi-Fiв отеле, ресторане, кафе.

    3.4Wi-Fiвбанках

    3.5Wi-Fiна складе

  4. Заключение

Введение

В прошлойстатьерассказ шел о технологиях и инструментах, которые внедряют вWi-Fi. Часть 2 будет о типовых сценариях внедрения. Если лень читать- проматывай(ссылка на ту же статью в блог)вниз, там будет калькулятор. Калькулятор учитывает вендора, количество точек доступа и дополнительный функционал.

Сразу оговорюсь, статья будет не только оWi-Fi6в вакууме. В каждом кейсе будет примеси других технологийи оборудования. Все статьи я составлял с помощью решений отCiscoи Aruba/Huaweiкакальтернатива.Но это не значит, что мы не найдем аналогов наZyxel.

Начнем с решений в зависимости от масштаба бизнеса. Каждый класс предприятий имеет свой подходк построение беспроводной сети.

Wi-Fi и размер бизнеса

Малый бизнес

В малом бизнесе требования к WI-Fiсетям минимальные. В офисе на20-30человек хватит1-2точек доступа.Контроллер не нужен, либо им может стать точка доступа.Если в офис приходят посетители, стоит позаботиться о гостевом доступе.Возможна интеграция склада и терминалов сбора данных через беспроводноесоединение.Кибербезопасность ограничивается антивирусами на конечном устройстве и двухфакторной аутентификацией(CiscoDuo).

Средний бизнес

Схема беспроводной сети в средней компании уже включает в себя контроллер. Контроллер управляет подключенными точками доступа. В компаниях с виртуализацией контроллер может устанавливаться на виртуальную машину.

Еще всреднем бизнесе появляется понятие кибербезопасности. Дополнительно к аутентификации добавляется межсетевой экран для анализа вирусов в трафике.В теории каждый узел может быть защищен.Вопрос: стоит ли объект защитыпотраченныхсредств.

Офис нашей компанииОфис нашей компании

В офисе любого размера есть потребность в мобильных сотрудниках.Удаленкаэкономит деньги на аренду и содержания офиса. Командировки помогают вести проект и разговаривать с сотрудниками на месте. Выезды к заказчику приближают его к покупке.Чтобы безопасно подключаться к инфраструктуре нуженбезопасный канал.CiscoAnyConnectего предоставляет.

Типовой дизайн:

Требуется подключенияWi-Fiи сетевых служб в офисе под ключ. В офисе должны быть проводная и беспроводная инфраструктура, гостевой доступ, система безопасности, унифицированные коммуникации.

Помещение 1500 м2

Кол-во сотрудников: 150 человек

Решения кейса

На уровень ядра устанавливается коммутатор доступа-Catalyst9500.

На уровне доступа-Catalyst9200.Точки доступа-CiscoAironet9117или 9120.

КонтроллерCatalyst9800-L.(может быть виртуальным)

Управление и контроль:CiscoISE(Опция)

Безопасность периметра:Firepower1010+Duo(Опция)

Продукты:CiscoDNA,Firepower+Duo+ESA/WSA,Cisco ISE, Cisco Aironet 9117.

ИнфраструктураСМБв вакуумеИнфраструктураСМБв вакууме

Enterprise

Организация

WLANна уровнебранча(офиса компании), не отличается от среднего.На глобальномуровне добавляются коммутаторы ядра иDNACenter.Enterpriseотличается от СМБпостроением кибербезопасности в компании,интеграциейбизнес-приложений(но о них мы поговорим в другой статье)и повышенной отказоустойчивостью.

Так может выглядетьIT-инфраструктураEnterpriseТак может выглядетьIT-инфраструктураEnterprise

ВEnterpriseсегментекибербезопасность более актуальна,чем в среднем бизнесе.Точекпроникновения злоумышленниковбольше, чем в среднем бизнесе.Цена ошибкивыше. Стоимость простоя региональнойсети магазиновможетдостигатьсотен миллионов рублей.

Категории средств безопасности:

  • Сканеры уязвимости

  • SIEM-системы

  • Защита приложений

  • WebApplicationFirewall

  • CDN

Каждая категория закрываетпотребностьEnterpriseв безопасности.Но эта статья больше для СМБ, поэтому не будем углубляться вподробностирешенийдля большого бизнеса.

Сценарии применения Wi-Fi в сферах бизнеса

Описание сценариев применения будет по принципу.

  • Типовой дизайн предприятия сценария

  • Технологии для решения задач сценария

  • Решения кейса

  • (Иногда) Схема исполнения

Все описанныесценарии- общее среднее по сфере бизнеса. Типовые проблемы, которые мы часто встречаем у заказчиков, описаны ниже.

Каждый бизнес особенный, и кейс может отличаться от Вашего.

Wi-Fi на заводе

Wi-fiсеть на заводе строится по подобию складской сети. Разница в производственной линии и более агрессивной среде.

Типовой дизайн:в промзоне размещенарматурныйзавод.Управление завода намерено внедритьтерминалы сбора данныхдлямаркировкиконечной продукции. На территории цеха отсутствует беспроводная сеть- ее нужнопостроить с нуля. Финансовые потери от 1 дня простоя составляютот10до 80млн рублейв зависимости от контракта.

Стандартный вид производственного предприятия изнутриСтандартный вид производственного предприятия изнутри

Применимые технологии:

Задача похожа на организациюWi-Fiна складе, с важным отличием. Есть производственная линия, управляемая промышленными ПК. Терминалы сбора данных, вместе с высоким темпом производства нагружают беспроводную сеть. Высокая цена простоя требует вложений в кибербезопасность.

Основной акцент делается на непрерывности производственного процесса.

Риски прерывания по частиITинфраструктуры:

  • Прерывание сигналовIOTустройств из-за перекрытий и чугунного оборудования

  • Физическое повреждениеIT-оборудования

  • Остановка процессов вследствие вредоносного ПО и хакерской атаки

Направленные антенны

Электромагнитные помехи, изоляционные материалы, плотные перекрытия, балки, опоры мешают распространениюWi-Fiсигнала. Без направленной антенны сигнал потеряется.ТехнологияBeamFormingподойдет для агрессивной среды завода.

Wi-Fi антенна (не в вакууме)Wi-Fi антенна (не в вакууме)

Кибербезопасность

Атака на производственную цепь- цель для злоумышленников.Основные цели- бизнес-данные,энергоснабжение, АСУ-ТП.Отвязать сеть, возможно, лучшее решение для безопасности производственного цикла. Все управление производством сводится к1-2ПК. На них установлены специальное ПО управления.

Атака на производственные процессы может проходить не впрямую на ПК управления. А через офис. Фишинговая рассылка может быть адресована в центральный офис компании, а затем прислана директору завода. Поэтому для защиты сети нужен мониторинг трафика.

Задача безопасностисводится к безопасности этихпромышленныхПК и смежных устройств.Фаерволлы, Многофакторная аутентификация и анализ трафика сети обезопасят промышленную сеть.

Пример использования:

Складское помещение нуждается в бесперебойномwi-fi.Работа на территории ведется в 3 смены. Стоимость простоя:10 млн. руб./сутки.

Одноэтажное здание

Площадь: 20000 м2

Кол-во ТСД: 20шт.

Кол-во ноутбуков15шт.

Решения кейса

На уровень ядра устанавливается коммутатор доступа-Catalyst9400.

На уровне доступа-Catalyst9200.Точки доступа-CiscoAironet9117с внешнимиантенами.

Промышленные коммутаторы:CiscoIE1000с защищенными портамиTACACS(Опция)

Контроллервотказоустойчивой конфигурации(может быть виртуальным).

Управление и контроль:CiscoISE(Опция)

Безопасность периметра:Firepower+Duo(Опция)

Продукты:

Cisco:МаршрутизаторCisco ISE(Опция),МСЭFirepower+Duo,КонтроллерточекдоступаWiFiC9800-40-K9,точкидоступаCisco Aironet 9117 Out-Door.

Huawei:USG6320,КонтроллерHuawei AC6508,точкидоступаAirEngine6760X1

Aruba:КонтроллерMobility Conductor Hardware Appliance,точкидоступа518 Series,управлениеAruba Central

Умный ритейл. Wi-Fi в магазинах и ТРЦ

Wi-Fiв ритейле использует службы склада, создает гостевой доступдля посетителейи служит для маркетинговых исследований иуведомлений.Wi-Fiмаркетинг, наверное, единственное применение технологии, которое может приносить прямую прибыль компании. ФактическиWi-Fiвмагазинеили в офисе продаж являетсяобразующейтехнологией.Склад магазина использует терминалы сбора данных, они беспроводные.

Сеть магазинов

Кейс: сетьпродуктовыхмагазиновне имеет беспроводной сети в каждой точке продаж. Проблемы недочета товарапривели к модернизации системы склада ивнедрению терминалов сбора данных (ТСД). Каждый ТСД требует подключения к беспроводной сети,значитв каждой точке продаж должен быть местныйWi-Fi.

Решение:организация беспроводной сети в точке продаж-задачане сложная.Сложности начинаютсяворганизациимагазиновв единую сетьи управление беспроводной сетью изцентрального офиса.Для построения таких сетей используютсявиртуальные контроллеры.Контроллеры размещаются на виртуальных машинах и используют мощности, которые ей выделены. Обслуживание виртуального контроллера не требует присутствия администратора в серверной. Администратор может управлять оборудованием хоть у себя дома.

Может выглядеть такМожет выглядеть так

Технологии и средства

Виртуальный контроллер

WLC(Опция)

(WirelessLocalController)может контролировать разветвленные сети, вроде той, что в кейсе. Основныепроблемыв управлении такими сетями:

  • нехватка информации о магазине(качество покрытия,загруженность устройств, безопасность в сетях, время на устранение ошибок и их кол-во)

  • Отдельные дорогостоящие специалисты на конечныхточках (магазины, офисы ит.п.)

  • Увеличение человеко-часов на обслуживание инфраструктуры как в магазине, так и в центральном офисе

WLC управляет всеми точкамидоступаизцентра управления. Центр управления это веб-интерфейсы, или CLI с которого администратор управляет параметрами каждой подключенной точки.

DNA(Опция)

DNAуправляет всеми сетевыми устройствами, чего не может сделать WLC. Этовиртуальные маршрутизаторы, коммутаторы, межсетевые экраны,контроллеры точек доступа и сами точки доступа.

Вот как выглядит пункт управления DNAВот как выглядит пункт управления DNA

Обычно DNA внедряется как подспорье раздутомуштатуинженеров.Однако внедрение DNA- дорогостоящий процесс.

Система по своим характеристиками и цене подходит среднему иEnterpriseбизнесу.

Продукты:

Cisco:МСЭFirepower 2100,контроллерКонтроллерWiFiC9800-40-K9(может быть виртуальным),точкидоступаCatalyst 9113, DNA(возможно).

Huawei:МСЭUSG 6320,КонтроллерHuawei AC6508,точкидоступаAirEngine8760-X1

Aruba:КонтроллерMobility Conductor Hardware Appliance,точкидоступа515 Series,управлениеAruba Central

МаркетингТРЦ

Кейс: Маркетинговый отдел торгового центра Юпитер сообщил о снижении спроса на продукцию. Маркетологи сошлись во мнении, что посетители хотят более индивидуального подхода. Было принято решение внедрить систему умногоWi-Fiивидеоаналитики.

WI-Fiзона в ТРЦWI-Fiзона в ТРЦ

Решение:

Технологии трекинга на территории магазина появились4-5лет назад.Последние 2 года маркетинг активно внедрял эти технологии. И сейчас Вы наблюдаете их у себя в уведомлениях на телефоне.

Эта связка дает информацию:

  • о поле

  • возрасте

  • предпочтениях

  • семейном положении

  • покупательской способности

В умелых руках эти инструменты продают посетителю те товары, которые, возможно, хочет купить покупатель.

Пример: В середине зимы вы пришли в торговый центр, в котором уже были раньше. После 10 мин прогулки в таком центре, на телефон приходитpush-уведомление магазина N с предложением купить пальто по скидке. Система предложила пальто, по нескольким причинам.

1.Скоро будет весна

2. Вы уже покупали в магазине N одежду

3. Вы даже примеряли пальто в магазинах конкурентов.

Точки доступа поддерживаютBluetoothТочки доступа поддерживаютBluetooth

Каждаякрупицаинформации- процентквероятности покупки. Как только количество информации наберет критическую массу произойдет продажа.

Точность предложения, зависит от количества информации о покупателе. Никто не любит, когда "впаривают" ненужный товар. Системы аналитики на базеwi-fiсделают предложение точнее.

Продукты:

Cisco:МСЭFirepower 2100,контроллерКонтроллерWiFiC9800-40-K9(может быть виртуальным),точкидоступаCatalyst 9130,DNA(Опция), Duo(Опция).

Huawei:МСЭUSG6320,КонтроллерHuawei AC6508,точкидоступаAirEngine8760-X1

Aruba:КонтроллерMobility Conductor Hardware Appliance,точкидоступа530Series,управлениеAruba Central

Wi-Fi в отеле, ресторане, кафе (HoReCa)

В гостиничном и ресторанном бизнесе беспроводная связь является правилом хорошего тона. Вы можете работать вкомандировке, Вы показываете презентации на переговорах в кафе или ресторане.

По факту,внедрение передовых технологий вотель- имиджевый вопрос.ХорошееWi-Fiсоединение воспринимается пользователями как стандарт, а не как дополнительное удобство.

Типовой дизайн(на примере гостиницы):

Для гостиниц характерна разветвленная сетьwi-fiточек. Так как каждый номер должен быть покрытWi-Fiсигналом, сетьпотребность в большом количестве точек.На территории отеля нет посторонних точек, значит нет конфликтамежду сигналами,интерференциии пр. Есть только большое количество перекрытий и стен.

Типовой дизайн этажа гостиницыТиповой дизайн этажа гостиницы

Технологиии сферы применения:

ГостеваяWi-Fiсеть отеля

Гостевой беспроводной сети уделяют особое внимание. Гости приезжают на командировку, по работе, или в качестве фрилансеров. Оставлять их без качественнойWi-Fiсети- удар по репутации. Вряд ли они вернутся при следующей поездке или порекомендуют отель друзьям, если сеть будет прерываться и мешать работе.

BeamForming

Поможет преодолеть стены между номерами.BeamFormingусиливает слабый сигнал, в частности, для преодоления стен.Следовательно, чтобы покрыть всю площадь сигналом, потребуется меньше точек доступа.

BSSColoring

В зонах, где конечные устройства находятся между точками доступа,антенна конечного устройства может подключаться то к одной, то к другой антенне. Из-за этого сигнал будет прерываться.

IOTи умное управление отелем(Опция)

В отель можно внедрить все то же самое что и в умный дом.Но в отеле есть котельные, электрощитовые, системы управления отелем и пр.IOTустройства и беспроводная сеть поможет управлять всеми основными системамииз единого центра.

Управление:

  • освещением, влажностью,отоплением

  • датчики движения

  • сетью, розетками

  • электронными дверьмии окнами

  • IOT-техника (умные пылесосы, колонки, телевизоры ит.п.)

Таким образом обслуживание зданием можно управлять из дома. Это ведет к снижению затрат на инфраструктуру.

Авторизация пользователейи гостевой портал

В последнее время стали популярны гостевые порталы. На гостевом портале пользователь может заказать еду в номер, подключить каналы на ТВ и забронировать время на лечебные процедуры.Пользователи заходятна портал повнутреннейсетигостиницы, без подключения к интернету.

Есть далеко не во всех отеляхЕсть далеко не во всех отелях

Пример использования:

Отель 5Season7-х этажноездание. В здание проведен10-гигабитный интернет, но ссамого начала модернизации, постояльцы жаловались на плохойWi-Fi.В конечном счете,руководство приняло решение модернизировать беспроводную сеть отеля.Тем более, что появились технологии умного управления отелем.Это внедрение повысит статус отеля среди конкурентов.

Кол-во номеров: 110шт.

Кол-воIOTустройств-2000 единиц

Решения кейса

На уровеньдоступаустанавливаются2коммутатора-Catalyst9400встэке.

На уровне доступана каждый этаж устанавливается коммутаторыCatalyst9300.Точки доступа-CiscoAironet9120сфункциейCleanAir.

Контроллер9000в отказоустойчивой конфигурации(может быть виртуальным).

Управление и контроль:CiscoISE

Безопасность периметра:Firepower2100.

Продукты:

Cisco:МСЭFirepower2100,контроллерКонтроллерWiFiC9800-40-K9,точкидоступаCatalyst9120,DNA(Опция),ISE,Duo(Опция).

Huawei:МСЭUSG6320,КонтроллерHuawei AC6508,точкидоступаAirEngine8760-X1

Aruba:КонтроллерMobility Conductor Hardware Appliance,точкидоступа550Series,управлениеAruba Central

Финансовый сектор

Под эту категорию попадают банки, компании-брокеры,финтехстартапы. Поотчетув IV квартале2020гогода совершено 29 преступлений в финансовом секторе. Главные объекты атаки- сетевое оборудование (26 из 29 атак).

Банковский залБанковский зал

Чтобы обезопасить компанию от хакеров, стоимость взлома должен бытьвысокой. Чем больше времени, денег, человеческих ресурсов потратит хакер, тем вероятнее, что взлом не случится.Без сомнения,это самый эффективным способ защиты.

В 95% банках установленwi-fi, но только 23% используютдополнительныесредства безопасности. Дополнительные средства безопасности это- песочницы, многофакторная аутентификация, анализ поведения пользователей, мониторинг сетевой активности. Каждый из перечисленных пунктов делает дорожеценувзлома.

Дизайн сети

Сетевая топология- тоже способ построить безопасность.Не будем заострять внимание на высоте монтажа точек.

Существуют требования к дизайну сети:

  • Выделение специальных зон для гостевого доступа

  • Разные права доступа гостевого и офисного доступа

  • Подавление сигнала за пределами зон

Для безопасности сети на каждом узле должна быть своя защита. На уровнекоммутатора- политика управления портами, на уровне контроллера- построение политики подключения, на уровне файрволла- аналитика поведения пользователей и аутентификация.

Так выглядит подключенные IT-продукты в банковской сфере 2019 годаТак выглядит подключенные IT-продукты в банковской сфере 2019 года

Более подробно о средствахзащиты

Песочницы

Термин не совсем правильный в рамкахWi-Fi, но раскрывающий суть. В сети создается промежуточная зона, сSSL(или другой) сертификацией.Любойвредоносповредит только виртуальную машину, на которой размещены ПО и данные.Оригиналы же будут не тронуты.

(Более подробныйответесть уKaspersky)

Шифрование потоков данных/Мониторингзашифрованного трафика злоумышленник может перехватить данные вwi-fi.Это может быть инсайдерская информация или имена доверенных лиц, которые он потом использует. Чтобы не допустить утечки, данные должны шифроваться.Шифрование происходит на уровне точек доступа и контроллера. Никакого дополнительного ПО не нужно.

Многофакторная аутентификацияИЛИ авторизация- распространенный способ защиты сетей. Простой принцип действия- любой, кто заходит в сеть, подтверждает личность генерируемым паролем, письмом илибиометрией. Способов идентификации много.

Аналитика поведения пользователей

Системы анализа пользователей в сети, пока чтоbest-practiceв мире сетевой безопасности. Сложность обмана такой системы стоит дорогов расчете денег и человеческих ресурсов.

Принцип действия систем поведенческой аналитики-

Создается образ посетителя сети, который наделяется определенными параметрами (их очень много).

  • Частота (ГГц)

  • Фреймы

  • Количество

  • Используемые приложения

  • Базовая скорость

  • Скачки триангуляции

  • И многое, многое другое (см. документацию)

Стандартный посетитель сети находится в допустимых пределах. Как только пределы нарушены, системаищет паттерны злоумышленникаили вредоносного ПО. В случае совпадения пользователь блокируется.

Продукты:

Cisco:МСЭFirepower2100,контроллерКонтроллерWiFiC9800-40-K9(может быть виртуальным),точкидоступаCatalyst9120,DNA,ISE(Опция),Duo,WirelessIPS(Fortigate)илиCyberThreatDefense,CiscoDNA(Опция),CiscoUmbrella(Опция),ESA/WSA(Опция),SecureX(Опция).

Huawei:МСЭUSG6320, КонтроллерHuaweiAC6508,точкидоступаAirEngine8760-X1

Aruba:КонтроллерMobility Conductor Hardware Appliance,точкидоступа550Series,управлениеAruba Central

Wi-Fi на складе

Типовой сценарий:

Высокие стеллажи спаллетамитовара, высокие потолки, высокое содержание пылии влажности делают распространения сигнала сложным и неравномерным. Зимой неотапливаемые склады страдают от влажности и низких температур.

К складскойWi-Fiсети подключаются терминалы сбора данных, сканеры штрихкодов и ноутбуки.Каждый терминал или ноутбук обращаются к базам данных и бизнес-приложениям.

Как видно из примера условия беспроводной сети на складе можно считать сложными, если не агрессивными.

Классическая картина на складеКлассическая картина на складе

Проблема решается комплексно

Защита от помех и высокоскоростные точки доступа.

У вендоров уже появились точки доступа с защитой от помех.Например,уCiscoэтоCleanAir.Технологиянаходит источник(и) помех и перенастраивает сеть для лучшего сигнала.

Управление политиками доступа.

У ТОП производителей точек доступа есть контроллеры с дополнительным ПО, для управления.Платформы управления могут автоматически управлять и балансировать точки доступа.

Правильное расположение точек доступа.

Даже6йстандарт не обойдет стеллаж толщиной в 3 метра. Только правильное расположение точек доступа покроет сигналом весь склад.

Чтобыузнатьгде сигнал ловит хуже, нуженпредиктивныйанализ. Есть несколько способов исполненияпредиктива.

Первыйспособ- без выхода на местность.

В специальной программе строят план помещения, указывают материалы перекрытия, высоту потолков и другие подробности.На план наносят точки доступа, и программа обсчитывает распространение сигнала. Если покрытие сигналом устраивает- точки устанавливаются в реальности.

Второй способ-с выходом на местность.

На территории предприятия устанавливаются тестовые точки доступа. Далее инженер ходит сWi-Fiантеннойпо территории склада и проверяет уровень сигнала. Преимущество метода в высокой точности, так как покрытие проверяется на практике.

Так выглядит планпредиктиваТак выглядит планпредиктива

Пример использования:

Складское помещениенуждается в бесперебойномwi-fi.Работа на территорииведется в 3 смены. Стоимость простоя: 150k$/сутки.

Одноэтажное здание

Площадь: 25 000 м2

Кол-во ТСД: 25шт.

Кол-во ноутбуков 20 шт.

Решения кейса

На уровеньдоступаустанавливается коммутатор доступа-Catalyst9400.

На уровне доступа-Catalyst9200.Точки доступа-CiscoAironet9117с внешнимиантеннами.

КонтроллерWiFiC9800-40-K9(может быть виртуальным)в отказоустойчивой конфигурации.

Управление и контроль:CiscoISE(Опция)

Безопасность периметра:МСЭFirepower2100.

Так может выглядеть инфраструктура на складеТак может выглядеть инфраструктура на складе

Продукты:

Cisco:МСЭFirepower1100,контроллерКонтроллерWiFiC9800-40-K9,точкидоступаAironet1560,ISE,Duo,CiscoDNA.

Huawei:МСЭUSG6320, КонтроллерHuaweiAC6508,точкидоступаAirEngine6760-X1E

Aruba:КонтроллерMobility Conductor Hardware Appliance,точкидоступа513Series,управлениеAruba Central

Калькулятор есть в статье в блоге

В этомкалькуляторе подобраныминимальные позициипо которым, можно примерно понятьот какой цены начинается внедрение WI-Fi.

Заключение

В этих двух статьях я постарался широкими мазкамиописатькак и куда внедряетсяWi-Fi.

Статья не освещает каждую сферу глубокои не стоит читать ее как руководство.Чтобыподобратьрешения под конкретный случай пишите нам наzakaz@olly.ru

Подробнее..

Через тернии к звёздам или LILYGO TTGO T-Internet-POE ESP32 LAN8270A

15.03.2021 10:06:02 | Автор: admin
image
Попалась мне на глаза плата LILYGO TTGO T-Internet-POE ESP32 LAN8270A и конечно я не мог пройти мимо такой интересной новинки: ESP32, LAN8270A, POE, SD карта, Wi-Fi+Ethernet Было интересно пощупать это произведение сумрачного китайского гения своими руками и протестировать в реальной работе, ведь TTX платы сулили очень интересные перспективы для использования в IoT, DIY и вообще в области Wi-Fi+Ethernet и на что фантазии хватит.

Но, как всегда, путь от рекламных проспектов на сайтах продавцов и производителя до запуска платы и проведения на ней тестов оказался очень непростым и тернистым. Далее предлагаю вашему вниманию отчёт о моих увлекательных изысканиях по этой теме.

Камень в огород LILYGO


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

Хорошим примером тут может служить LILYGO TTGO T-Internet-POE ESP32 LAN8270A (далее для краткости будем называть эту плату T-Internet-POE). Производитель сделал интересную плату, но не сделал больше ничего:

  • нет нормальной распиновки контроллера
  • нет принципиальной электрической схемы
  • нет вменяемого описания применения платы и типовых паттернов её использования
  • нет технических пояснений по работе отдельных составляющих платы
  • нет примеров кода (есть 1 (!) скетч на отвали, мальчик, не мешай работать)
  • нет сайта с документацией
  • нет форума с грамотными и мотивированными модераторами
  • нет популярных и мотивирующих статей для тех, кто интересуется этим контроллером, но не знает (не понимает) где он мог бы его применить для своих целей
  • и нет ещё множества вещей, которые должны были бы быть

Короче, нет вообще ничего и каждый, кто рискнёт купить T-Internet-POE, должен быть безупречным воином DIY, иначе у него нет ни одного шанса выстоять в этой битве с LILYGO. Много ли среди нас таких?

И как при таком подходе к делу они вообще умудряются что-то продавать? И насколько выросли бы их продажи, если бы они на минутку отложили в сторону паяльник и вспомнили о своих покупателях?

Вопросы риторические, но так или иначе далее мне придётся проделать всю работу за технический и маркетинговый отделы LILYGO.

В чём фишка?


Говоря простыми словами, на этой плате удалось более-менее удачно объединить в одном устройстве ESP32 (Wi-Fi), Ethernet, POE и ещё добавить к этому торту вишенку в виде microSD картридера. Из одного только сочетания этих составляющих сразу вытекает множество интересных вариантов применения этой платы:

  • работа по Wi-Fi с резервом в виде Ethernet канала
  • работа по Ethernet с резервом в виде Wi-Fi подключения
  • обслуживание одновременно и Wi-Fi и Ethernet линков
  • роутер между Wi-Fi и Ethernet в обе стороны
  • веб-сервер на два интерфейса
  • разные веб-сервера на разных интерфейсах
  • питание (удалённого) контроллера по POE

И множество других интересных вариантов (кстати, не нужно забывать, что кроме непосредственно сетевой составляющей, плата имеет GPIO выводы и может использоваться по своему прямому назначению, то есть в качестве IoT контроллера).

Как вы видите, сфера применения этой платы в IoT и DIY ограничена только вашей фантазией и вашими потребностями и в целом T-Internet-POE как устройство смотрится очень многообещающе.

Далее давайте попытаемся разобраться как со всем эти великолепием совладать, что, учитывая практически полное отсутствие информации по плате, является не такой простой задачей.

Технические характеристики


Мы здесь не будем приводить полный список всех технических характеристик платы вот с чем с чем, а с этим на сайтах продавцов и производителя проблем нет (проблема в том, что кроме этих характеристик там больше ничего нет). Приведём здесь только список ключевых элементов платы:

  • ESP32-WROOM (4 МБ)
  • LAN8720A (Ethernet PHY)
  • POE 802.3af
  • microSD картридер
  • 12 GPIO пинов для внешних подключений

О чём навскидку нам говорит такая конфигурация? О том, что при использовании этой платы в качестве веб-сервера, файлы можно хранить как на microSD карте памяти, так и во внутренней памяти модуля ESP32 (или и там и там сразу).

При этом 12 свободных GPIO производят двойственное впечатление с одной стороны это уже кое-что и значительно лучше чем на ESP8266, а с другой стороны после проектов на Mega 2560 с её десятками GPIO, 12 пинов смотрятся очень и очень скромно и сильно ограничивают возможности разработки тут нужно будет либо изобретать какие-то расширители портов, либо делать тандемные сборки с другими контроллерами.

Варианты контроллера


При ближайшем рассмотрении оказывается, что под одним названием существуют два разных контроллера один на ESP32-WROOM, а второй на ESP32-WROVER-B, что сходу и не разглядишь на вид платы практически одинаковые и можно играть в игру найди 10 отличий.

image

Мне достался контролер на ESP32-WROOM, поэтому дальнейшее повествование будет относится к нему.

Программатор


Инженеры LILYGO так далеко оторвались от своих пользователей, что их решения не всегда можно понять. К таким решениям относится создание ими отдельной платы программатора на чипе CP2104 для контроллера T-Internet-POE.

Зачем? Зачем нужен отдельный программатор, когда этот узел можно было интегрировать на саму плату контроллера или попросту использовать стандартные USB-TTL переходники (как делают все остальные производители железа)? Ответ, видимо, знают только разработчики LILYGO (но простим им этот маленький креатив).

image

Но мало того, что разработчики LILYGO сделали непонятную вещь, они ещё и умудрились сделать её криво:

  • во-первых они применили горячо любимые народом пины с шагом 2,0 мм
  • во-вторых они предусмотрели установку разъёма на обратную (!) сторону платы

(Разработчикам такого решения я бы порекомендовал иногда отвлекаться от работы и уделять время отдыху.)

В результате получился какой-то странный монстр. И всё бы ничего, если бы проблема ограничивалась только эстетической составляющей, но тут вылезают более серьёзные проблемы:

  • если устанавливать и крепить плату в нормальном положении, то пины программатора оказываются снизу платы и к ним невозможно подключиться без демонтажа контроллера;
  • если работать с платой без крепления то разъёмы с шагом 2,0 не обеспечивают должной жёсткости и вся конструкция грозит развалиться в любой момент и всё вокруг позамыкать.

В качестве нивелирования этого косяка разработчиков, можно порекомендовать припаивать линейку пинов с верхней стороны платы и сделать (или купить, если он продаётся) 6-пиновый 2,0 мм гибкий переходник.

Распиновка


Для начала приведём оригинальный вариант распиновки (окультуренный насколько это было возможно). Для тех кто в курсе информации достаточно, остальные мало что поймут из этой китайской грамоты.

image

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

Всего на ESP32 имеется 40 пинов (D0D39) из них 14 пинов

D6D11, D20, D24, D28-D31, D37, D38

мы исключаем из рассмотрения как практически неиспользуемые (по разным причинам, подробный разбор назначения этих пинов выходит за рамки этой статьи). Остаются:

Пины подключения Ethernet чипа LAN8720A


D18 ETH_MDIO_PIN
D19 ETH_TX_D0
D21 ETH_TX_EN
D22 ETH_TX_D1
D23 ETH_MDC_PIN
D25 ETH_RX_D0
D26 ETH_RX_D1
D27 ETH_RX_CRS

причём, D18 и D23 устанавливаются в скетче, а остальные 6 пинов чипа LAN8720A являются стандартными и задаются в библиотеке.

Поскольку производитель постеснялся предоставить принципиальную схему контроллера, то я здесь могу только привести аналогичную типовую схему подключения физики Ethernet на LAN8720A.

image

К LAN8720A также относится пин тактирования, который на плате T-Internet-POE подключён к D17 (тоже выбирается в скетче):

D17 ETH_CLOCK

и пин сброса

D5 NRST

microSD картридер


microSD картридер подключён на HSPI:

D2 SD_MISO
D12 SD_CS
D14 SD_SCLK
D15 SD_MOSI

и в случае своего использования забирает свободные для внешних подключений и выведенные на плату пины D2, D14, D15. Вопрос что выгоднее использовать картридер и потерять 3 из 12-и свободных пинов или сохранить 3 лишних GPIO и отказаться от картридера сродни вопросу что лучше: слон или конь? и вам каждый раз придётся отвечать на него при использовании платы T-Internet-POE.

Прочие пины


У нас остаются пины D0 (ETH_CLOCK, не задействован в этом качестве) и D1 (TX0) и D3 (RX0).

Свободные пины


Теперь переходим к самому интересному описанию свободных пинов, выведенных на плату контроллера.

Первой идёт группа D34, D35, D36, D39, работающая только на вход. Лучше конечно на вход, чем вообще ничего, но при таком дефиците GPIO было бы гораздо лучше, если бы эти четыре пина были полноценными GPIO.

И затем 8 полноценных GPIO, которые вы можете использовать в своих проектах. Тут нужно помнить, что хоть эти пины и являются полноценными GPIO, но некоторые из них работают весьма своеобразно (например меняют потенциал на старте контроллера и т.п.). Поэтому прежде, чем к ним что-то подключать, нужно специально выяснять и уточнять эти моменты.

D2 (SD_MISO)
D4
D12
D14 (SD_SCLK)
D15 (SD_MOSI)
D16
D32
D33

Как говорится, вот тебе, мой юный друг программирования и микроконтроллеров, 8 GPIO и ни в чём себе не отказывай.

POE


Тут нужно ещё сказать несколько слов о поддержке POE, поскольку это является одним из достоинств этой платы и одной из её фишек и для многих это будет причиной, по которой они захотят её купить и использовать.

Здесь реализована полноценная поддержка стандарта POE 802.3af с развязкой и управлением питанием на чипе SI3404.

Меня дистанционная запитка контроллера не очень интересует, поэтому этот аспект работоспособности T-Internet-POE я не тестировал, но, судя по всему, с POE здесь проблем нет.

Программная поддержка


Как вы сами понимаете, работать с T-Internet-POE можно при помощи любых программных сред, имеющих представление об этом железе, в том числе в нативном SDK (и вероятно это наиболее правильный вариант), но мы попытаемся выяснить, что можно выжать из этой железки при помощи Arduino IDE.

В качестве программной среды для экспериментов использовались Arduino IDE версии 1.8.5 и ESP32-Arduino версии 1.0.5 (последняя сборка на момент написания статьи).

Сам процесс установки поддержки ESP32 в Arduino IDE я описывать не буду потому, что этому вопросу посвящено огромное количество материалов в интернете, во всех нюансах описывающих этот процесс.

Упомяну здесь только один момент: плюс ко всему, чего не имеет этот контроллер, он ещё не имеет и нативной поддержки в ESP32-Arduino версии 1.0.5. Поэтому в качестве контроллера в менеджере плат выбирался ESP32 DEV Module с настройками:

Flash Mode: DIO
Flash Size: 4MB (32 Mb)
Partition Scheme: 4MB (1,2MB/1,5MB)

Стандартный скетч


Ниже приведён скетч, которым нас порадовал производитель платы. Там особенно комментировать нечего, он просто инициализирует Ethernet интерфейс и посылает запросы к серверу в интернете.

Полный код скетча от производителя платы
/*    This sketch shows how to configure different external or internal clock sources for the Ethernet PHY*/#include <ETH.h>#include <SPI.h>#include <SD.h>#define SD_MISO         2#define SD_MOSI         15#define SD_SCLK         14#define SD_CS           13/*   * ETH_CLOCK_GPIO0_IN   - default: external clock from crystal oscillator   * ETH_CLOCK_GPIO0_OUT  - 50MHz clock from internal APLL output on GPIO0 - possibly an inverter is needed for LAN8720   * ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL output on GPIO16 - possibly an inverter is needed for LAN8720   * ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted output on GPIO17 - tested with LAN8720*/// #define ETH_CLK_MODE    ETH_CLOCK_GPIO0_OUT          // Version with PSRAM#define ETH_CLK_MODE    ETH_CLOCK_GPIO17_OUT            // Version with not PSRAM// Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source)#define ETH_POWER_PIN   -1// Type of the Ethernet PHY (LAN8720 or TLK110)#define ETH_TYPE        ETH_PHY_LAN8720// IC-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110)#define ETH_ADDR        0// Pin# of the IC clock signal for the Ethernet PHY#define ETH_MDC_PIN     23// Pin# of the IC IO signal for the Ethernet PHY#define ETH_MDIO_PIN    18#define NRST            5static bool eth_connected = false;void WiFiEvent(WiFiEvent_t event){    switch (event) {    case SYSTEM_EVENT_ETH_START:        Serial.println("ETH Started");        //set eth hostname here        ETH.setHostname("esp32-ethernet");        break;    case SYSTEM_EVENT_ETH_CONNECTED:        Serial.println("ETH Connected");        break;    case SYSTEM_EVENT_ETH_GOT_IP:        Serial.print("ETH MAC: ");        Serial.print(ETH.macAddress());        Serial.print(", IPv4: ");        Serial.print(ETH.localIP());        if (ETH.fullDuplex()) {            Serial.print(", FULL_DUPLEX");        }        Serial.print(", ");        Serial.print(ETH.linkSpeed());        Serial.println("Mbps");        eth_connected = true;        break;    case SYSTEM_EVENT_ETH_DISCONNECTED:        Serial.println("ETH Disconnected");        eth_connected = false;        break;    case SYSTEM_EVENT_ETH_STOP:        Serial.println("ETH Stopped");        eth_connected = false;        break;    default:        break;    }}void testClient(const char *host, uint16_t port){    Serial.print("\nconnecting to ");    Serial.println(host);    WiFiClient client;    if (!client.connect(host, port)) {        Serial.println("connection failed");        return;    }    client.printf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", host);    while (client.connected() && !client.available());    while (client.available()) {        Serial.write(client.read());    }    Serial.println("closing connection\n");    client.stop();}void setup(){    Serial.begin(115200);    WiFi.onEvent(WiFiEvent);    SPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);    if (!SD.begin(SD_CS)) {        Serial.println("SDCard MOUNT FAIL");    } else {        uint32_t cardSize = SD.cardSize() / (1024 * 1024);        String str = "SDCard Size: " + String(cardSize) + "MB";        Serial.println(str);    }    pinMode(NRST, OUTPUT);    digitalWrite(NRST, 0);    delay(200);    digitalWrite(NRST, 1);    delay(200);    digitalWrite(NRST, 0);    delay(200);    digitalWrite(NRST, 1);    ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE);}void loop(){    if (eth_connected) {        testClient("baidu.com", 80);    }    delay(10000);}


Когда я в первый раз увидел этот скетч, то задался вопросом: что этим хотел сказать производитель?. Единственное назначение этого скетча показать, что эта технология в принципе работает. Это конечно хорошо, но что дальше? Что со всем этим делать не имея ни документации, ни примеров, ни вменяемой ответной реакции от производителя?

Походу получается, что ответ от LILYGO изучать программирование и создавать ПО самостоятельно (или искать готовые прошивки, хотя это и не спортивно).

Интерфейсы и пинг


Для сетевых профессионалов (и примкнувших к ним) скажу пару слов о скорости работы по интерфейсам Wi-Fi и Ethernet и их отзывчивости. Тестирование проводилось в ненагруженной гигабитной сети, зашумлённость Wi-Fi диапазона специально не контролировалась.

Первый скриншот это пинг контроллера по Wi-Fi интерфейсу. Минимум 24 мс, максимум 105 мс, среднее 67 мс.

image

Второй пинг контроллера по Ethernet интерфейсу. Минимум 0 мс, максимум 9 мс, среднее 2 мс.

image

Как вы видите, пинг по проводному Ethernet кардинально меньше, чем по Wi-Fi (что ожидаемо). Насколько хороши или плохи эти цифры предоставляю судить читателям самостоятельно, меня они вполне устраивают для моих целей.

Тестирование


Тестировать такую систему, как T-Internet-POE на скетчах, подобных предложенному производителем это несерьёзно, поэтому для тестирования контроллера применялась специализированная версия AMS, адаптированная специально для этой платы. Учитывая, что это сервер, который использует полноценные HTML, CSS, Javascript, Ajax, графические файлы и библиотеки, то успешная работа такого сервера на T-Internet-POE будет свидетельствовать о правильно спроектированном железе и возможности его использования в реальных проектах.

Примечание: тестирование производилось на внутренней, не публичной версии AMS для T-Internet-POE. Публикация и распространение этой версии не планируется, возможно это будет сделано позже, после соответствующих доработок.

Тест 1. Запускаем AMS сервер на T-Internet-POE


Запустить AMS на новом контроллере с новым чипом и сетевым интерфейсом это весьма нетривиальная задача, но тем не менее, при правильном подходе и понимании того, что ты делаешь, всё становится возможным.

Косяк номер 1


В процессе этой работы стали вылезать косяки самого контроллера T-Internet-POE и первое, что было выявлено это то, что контроллер отказывается прошиваться при вставленной microSD карте памяти. Не помогает ничего ни замена USB порта, ни питание от отдельного блока, ни нажимание кнопок, ни замена карты контроллер упорно не желает прошиваться при вставленной карте памяти.

Глюк это конкретного экземпляра или родовой дефект всех контроллеров T-Internet-POE сказать трудно (имея в своём распоряжении один экземпляр), можно только констатировать 100-процентную повторяемость и воспроизводимость проблемы.

Что это значит для нас? В практическом плане это значит, что на контроллере T-Internet-POE фактически нет картридера картридер, который блокирует прошивку контроллера это не картридер, а баг.

Что же делать? Остаётся только использовать 1,5 МБ SPIFFS, имеющийся на модуле ESP32. Да, это не очень много, но в принципе 1,5 МБ памяти для IoT устройства это более-менее приемлемо в большинстве случаев.

Косяк номер 2


Ок, от картридера мы отказались, теперь нам нужно подружиться с SPIFFS. Вроде бы задача несложная и даже привычная, но и тут нас ждёт засада: по какой-то причине утилита ESP32FS отказывается нормально работать на этом контроллере (в этой конфигурации). Перенос файлов в память модуля ESP32 приводит к последующей ошибке монтирования SPIFFS диска.

М-да В случае невозможности нормально перенести файлы (сервера) на SPIFFS диск, остаётся только один способ инициализация интерфейса через Serial соединение, и последующий перенос файлов на SPIFFS диск через веб-интерфейс. Способ конечно не очень удобный, но никак не влияющий на конечный результат файлы сервера были успешно перенесены на SPIFFS диск.

Описание самого процесса адаптации кода под новый контроллер я опускаю, поскольку это потребовало бы составления антологии наподобие полного собрания сочинений В. И. Ленина и сразу перехожу к демонстрации факта успешной работы AMS сервера на T-Internet-POE (а значит и работоспособности самой платы T-Internet-POE).

Загрузка страницы по Wi-Fi интерфейсу.

image

Загрузка страницы по Ethernet интерфейсу.

image

Выигрыш по скорости примерно в 4 раза, естественно, в пользу Ethernet. Здесь нужно ещё иметь в виду, что речь идёт о неоптимизированном коде и после проведения соответствующих работ результаты должны значительно улучшиться.

image

Работа сервера по Ethernet интерфейсу на LILYGO TTGO T-Internet-POE ESP32 LAN8270A.

Тест 2. Работа на двух интерфейсах


Тут мне придётся немного поработать разрушителем легенд. В интернете ходят упорные слухи, что одновременная работа Wi-Fi и Ethernet на связке ESP32 и LAN8270A невозможна. Это не так AMS сервер прекрасно работает на двух интерфейсах одновременно и отлично обслуживает запросы по Wi-Fi и Ethernet. Никаких проблем с зависаниями или перезагрузками ESP32 нет.

image

Вот это уже интересный результат, который открывает заманчивые перспективы: поскольку мы имеем собственный сервер, то можем как угодно управлять обслуживанием интерфейсов, например, по Wi-Fi отдавать одни сайты с одним контентом, а по Ethernet другие сайты с другим контентом. Образно говоря, бабушке по Ethernet отдавать сайт с кулинарными рецептами, а внуку по Wi-Fi сайт с избранными статьями из БСЭ.

Тест 3. Бан по одному из интерфейсов


Теперь давайте попробуем на практике реализовать идею с различным обслуживанием интерфейсов веб-сервером. В качестве примера попробуем реализовать отказ в обслуживании для подключений по одному из интерфейсов (Ethernet).

image

Клиент, подключённый к нашему контроллеру по Ethernet интерфейсу получил отказ в обслуживании.

Резервирование интерфейсов


Сама идея резервирования интерфейсов лежит на поверхности и так и просится для реализации. Подобных сценариев существует множество, например, у вас есть IoT контроллер, который подключён к локальной сети по Ethernet. В случае аварийной ситуации, при пропадании проводного линка, контроллер автоматически подключается к резервному беспроводному роутеру и продолжает свою работу.

Сетевой роутинг


Имея в своём распоряжении два рабочих сетевых интерфейса можно как угодно маршрутизировать пакеты в сети. Никто также не мешает в схему маршрутизации по Wi-Fi и Ethernet добавить маршрутизацию данных по nRF24 или LoRa или по любой другой беспроводной сети. Таким образом можно сделать любой роутер для вашей IoT системы.

Ну, и как было отмечено выше, существует ещё множество интересных вариантов использования контроллера с двумя сетевыми интерфейсами.

Итоги


Теперь давайте подведём итоги этого небольшого исследования: в общем, несмотря на некоторые косяки и детские болезни, контроллер LILYGO TTGO T-Internet-POE ESP32 LAN8270A мне понравился это отличный инструмент для построения IoT систем, особенно если вы обладаете соответствующей квалификацией и не лишены фантазии и креативного подхода к своему творчеству.

Плюсы и минусы LILYGO TTGO T-Internet-POE ESP32 LAN8270A.

Плюсы:
  • Это работает!
  • Законченное интегрированное решение Wi-Fi + Ethernet + POE + GPIO
  • Хорошая работа без зависаний и перезагрузок (проблем при тестировании выявлено не было)
  • Возможность одновременной работы по двум интерфейсам

Минусы:
  • Тотальное отсутствие документации, примеров и пояснений
  • Относительно высокий порог входа
  • Детские болезни и мелкие косяки в реализации
Подробнее..

Превращаем одноплатник Cubietruck в Wi-Fi Hotspot с Captive portal, VPN-шлюзом и Ad block

25.05.2021 10:11:06 | Автор: admin
raspap

Для построения Wi-Fi сети обычно используют готовые маршрутизаторы, функционал которых всегда ограничен прошивкой. А если необходимо добавить блокировщик рекламы, VPN шлюз и красивый Captive portal, покупать новую железку? Стоимость устройства с таким функционалом будет уже весьма высока. Можно взять Linux с Hostapd и сделать точку доступа с Wi-Fi, но в отличие от готовых маршрутизаторов не будет наглядного Web-интерфейса. И для решения этой задачи был создан проект RaspAP, который на базе устройств с ОС Debian создает Wi-Fi Hotspot с Captive portal, VPN-шлюзом, Ad block. Для RaspAP в отличие от OpenWrt не требуется непосредственная поддержка устройства, достаточно поддержки последней версии Debian. RaspAP работает поверх уже установленных ОС: Raspberry Pi OS, Armbian, Debian, Ubuntu. Как сделать Wi-Fi Hotspot на RaspAP прошу под кат.

RaspAP open-source проект создания беспроводного маршрутизатора из многих популярных устройств работающих на ОС Debian, включая Raspberry Pi. Содержит удобный Web-интерфейс для настройки, блокировщик рекламы, осуществляет шлюзование сетевого трафика через OpenVPN или WireGuard.

Используя RaspAP можно быстро развернуть Hotspot с доступом в сеть Интернет, где угодно: в магазине или торговом центре, заправке, кафе и ресторане, библиотеке, больнице, аэропорте и вокзале, а также в совершенно непривычных, уединенных местах, например на вершине горы. Благодаря наличию Captive portal, посетители подключаясь к Сети, обязательно увидят информацию, которую владелец Wi-Fi желает довести до пользователей. Это может быть информация о соглашение использования публичного hotspot, и т.д.

Поддерживаемые устройства и ОС


Для устройств на ARM-архитектуре заявлена официальная поддержка, устройства на x86 процессорах в настоящее время находится в стадии Beta.

raspap

Поддерживаемые ОС и архитектуры RaspAP

Базовой платформой работы RaspAP является устройство Raspberry Pi. Но благодаря поддержки Armbian на основе Debian, список поддерживаемых устройств становится весьма широким.

Wi-Fi Hotspot на RaspAP будет развернут на одноплатном компьютере Cubietruck, процессор AllWinner A20 (ARM32), с ОС Armbian (на базе Debian). Для задач маршрутизации сетевого трафика для нескольких клиентов процессора AllWinner A20 с двумя ядрами Cortex-A7 будет недостаточно, но вы можете взять гораздо более мощное устройства из каталога поддерживаемых проектом Armbian.

RaspAP


raspap

Под капотом RaspAP использует hostapd, dnsmasq, iptables, веб-интерфейс работает на lighttpd с php-скриптами. С точки зрения использования новых функций применяется политика спонсорства. Если оформить ежемесячное спонсорство, то ваш аккаунт на GitHub будет добавлен в группу Insiders, которые первыми получают возможность протестировать новые функции. Функции доступные на данный момент только спонсорам будут помечены Insiders Edition.

raspap

Веб-интерфейс RaspAP

Возможности RaspAP:

  • Графический интерфейс для настройки и отображения графиков активности клиентских устройств;
  • Поддержка сертификатов SSL;
  • Интеграция с Captive portal;
  • Управление DHCP-сервером;
  • Поддержка адаптеров 802.11ac 5 ГГц;
  • Автоопределение внешних беспроводных адаптеров.

Пройдемся коротко по основным функциям RaspAP.

Точка доступа


По умолчанию создается точка доступа со следующими параметрами:

  • Interface: wlan0
  • SSID: raspi-webgui
  • Wireless Mode: 802.11n 2.4GHz
  • Channel: 1
  • Security Type: WPA2
  • Encryption Type: CCMP
  • Passphrase: ChangeMe

К AP можно подключаться по ключевой паре SSID + пароль или по QR-коду. В случае бездействия клиента, AP может его отключить (требуется поддержка в драйверах). В Insiders Edition доступна возможность изменять мощность в dBm. Для обеспечения гарантированной работы можно задать ограниченное количество подключаемых клиентов.

Для Raspberry Pi Zero W доступен режим виртуализации беспроводного устройства. Единственное на борту Wi-Fi устройство будет работать в режиме клиента и точки доступа. Режим виртуализации сетевых интерфейсов работает и на других адаптерах USB Wi-Fi таких как RTL8188.

Блокировщик рекламы (Ad blocking)


Блокирует ads, трекеры и узлы из черного списка. В качестве источника черного списка выступает проект notracking, список обновляется автоматически. Блокируются следующие типы узлов: tracking, поставщики рекламы, сбор аналитики, фишинговые и мошенические сайты, содержащие вредоносные программы, веб-майнеры.

Captive portal


raspap

Captive portal

Из коробки интегрирован nodogsplash. nodogsplash легкое и простое решения создания кастомизируемых порталов. Поддерживает различные политики работы клиентов.

Поддержка дисплея для вывода состояния работы


Статистическую работу можно выводить на TFT-экран Adafruit Mini PiTFT контроллер ST7789. Скрипт вывода информации написан на Python, поэтому программный код можно легко адаптировать и для другого дисплея, например для ILI9341.

raspap

Вывод информации о работе AP

Поддержка различных сетевых устройств в качестве WAN-интерфейса (Insiders Edition)


В качестве доступа к сети Интернет, RaspAP поддерживает несколько различных типов сетевых устройств, такие как:

  • Ethernet interface (eth);
  • Wireless adapter (wlan);
  • Mobile data modem (ppp);
  • Mobile data adapter with built-in router;
  • USB connected smartphone (USB tethering);

Это особенно удобно когда вы путешествуете или работает в полевых условиях.

OpenVPN


raspap

Сетевой трафик можно туннелировать используя клиента OpenVPN. В Insiders Edition доступна возможность хранения нескольких профилей OpenVPN с функцией быстрого переключения между ними.

WireGuard (Insiders Edition)


raspap

WireGuard быстрый и современный VPN, в котором используется самая современная криптография. Он более производителен, чем OpenVPN, и обычно считается наиболее безопасным, простым в использовании и самым простым решением VPN для современных дистрибутивов Linux. Благодаря низкому overhead, если устройство работает от батареи, то время работы при использование WireGuard будет больше, чем при использование OpenVPN.

Доступ к Web-интересу настроек через SSL


raspap

Для защиты сетевого трафика от перехвата, доступно шифрование по SSL в пределах локальной сети. Проект mkcert позволяет в несколько простых шагов развернуть корневой центр сертификации и генерировать сертификаты, подписанные вашим собственным частным ЦС.

Постановка задачи


Установка RaspAP будет произведена из публичного репозитория, на Cubietruck установлена последняя версия Armbian (на основе Debian): Armbian 21.02.3 Buster, Linux 5.10.21-sunxi. На борту имеется встроенный адаптер wlan0, будет выступать в качестве клиентского доступа к сети Интернет (WAN-интерфейс). Для Hotspot подключим RTL8188 USB WiFi dongle wlan1.

  • IP конфигурация для wlan0: address 192.168.43.12 netmask 255.255.255.0 gateway 92.168.43.1.
  • IP конфигурация для wlan1: address 10.3.141.1 netmask 255.255.255.0 gateway 10.3.141.1.

Конфигурация DHCP-сервера:

  • Диапазон выдаваемых IP-адресов 10.3.141.50 10.3.141.254;
  • Шлюз/DNS-сервер: 10.3.141.1.

Для шлюзования сетевого трафика через OpenVPN установим на VPS сервер SoftEther VPN Server. SoftEther VPN Server мультипротокольный VPN-сервер, который может поднимать L2TP/IPsec, OpenVPN, MS-SSTP, L2TPv3, EtherIP-серверы, а также имеет свой собственный протокол SSL-VPN, который неотличим от обычного HTTPS-трафика (чего не скажешь про OpenVPN handshake, например), может работать не только через TCP/UDP, но и через ICMP (подобно pingtunnel, hanstunnel) и DNS (подобно iodine), работает быстрее (по заверению разработчиков) текущих имплементаций, строит L2 и L3 туннели, имеет встроенный DHCP-сервер, поддерживает как kernel-mode, так и user-mode NAT, IPv6, шейпинг, QoS, кластеризацию, load balancing и fault tolerance, может быть запущен под Windows, Linux, Mac OS, FreeBSD и Solaris и является Open-Source проектом под GPLv2.

Для VPS сервера выберем тариф на vdsina.ru за 330 р./месяц, в который включена квота на 32 ТБ трафика, чего более чем достаточно. SoftEther VPN Server будет развернут в Docker контейнере, поэтому выбор ОС CentOS/Debian/Ubuntu не принципиально важен.

Развертывание сервера выполняется просто и очень быстро, по результату необходимо отметить автоматическую выдачу DNS имени, можно не покупать доменное имя.

raspap

VPS сервер на vdsina.ru

Сервер был развернут в Московской локации, IP-адрес 94.103.85.152, dns-имя: v636096.hosted-by-vdsina.ru. Подключение к серверу будет по DNS имени.

raspap

Итоговая схема сети

Как будет выглядеть Web-интерфейс RaspAP и подключение к Hotspot


Подключение к AP SSID: raspi-webgui


Подключение к AP raspi-webgui

Конфигурационные файлы RaspAP


Для установки RaspAP есть Quick installer, но он выполняется без задания параметров и wlan0 настроен как Hotspot, что нам не подходит. Поэтому воспользуемся Manual installation, с некоторыми изменениями т.к. руководство содержит некоторые ошибки и сам RaspAP работает с некоторыми некритичными багами, из-за этого пришлось немного больше потратить время на установку. О багах будет в ходе установки.

До установки рассмотрим конфигурационные файлы, которые можно использовать как опорные для своей адаптации.

Список конфигурационных файлов (GitHub):

  • hostapd.conf служба hostapd
  • default_hostapd служба hostapd
  • 090_raspap.conf служба dnsmasq.d
  • 090_wlan1.conf служба dnsmasq.d
  • defaults.json служба raspap
  • dhcpcd.conf служба raspap
  • config.php портал конфигурации RaspAP

hostapd.conf служба hostapd

Содержит настройки AP по умолчанию такие как: ssid, channel, password и т.д.

hostapd.conf
driver=nl80211ctrl_interface=/var/run/hostapdctrl_interface_group=0beacon_int=100auth_algs=1wpa_key_mgmt=WPA-PSKssid=raspi-webguichannel=1hw_mode=gwpa_passphrase=ChangeMeinterface=wlan1wpa=2wpa_pairwise=CCMPcountry_code=RU## Rapberry Pi 3 specific to on board WLAN/WiFi#ieee80211n=1 # 802.11n support (Raspberry Pi 3)#wmm_enabled=1 # QoS support (Raspberry Pi 3)#ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] # (Raspberry Pi 3)## RaspAP wireless client AP mode#interface=uap0## RaspAP bridge AP mode (disabled by default)#bridge=br0



default_hostapd служба hostapd

Настройка службы hostapd, параметр DAEMON_CONF определяет путь к настройкам.

default_hostapd
# Location of hostapd configuration fileDAEMON_CONF="/etc/hostapd/hostapd.conf"



090_raspap.conf служба dnsmasq.d

Настройка службы dnsmasq, параметр conf-dir определяет путь к настройкам.

090_raspap.conf
# RaspAP default configlog-facility=/tmp/dnsmasq.logconf-dir=/etc/dnsmasq.d


090_wlan1.conf служба dnsmasq.d

Настройка dnsmasq для сетевого интерфейса wlan1. Содержит диапазон выдаваемых IP-адресов, и другие сетевые настройки. Необходимо обратить внимание на название файла по маске 090_[ИДЕНТИФИКАТОР_ИНТЕРФЕЙСА_HOTSPOT].conf. Если у вас сетевой интерфейс для hostspot будет назваться например wlan2, то следует задать название файла 090_wlan2.conf.

090_wlan1.conf
# RaspAP wlan0 configuration for wired (ethernet) AP modeinterface=wlan1domain-neededdhcp-range=10.3.141.50,10.3.141.255,255.255.255.0,12hdhcp-option=6,10.3.141.1


defaults.json служба raspap

Настройка DHCP серверов для интерфейсов wlan0 и wlan1.

defaults.json
{  "dhcp": {    "wlan1": {       "static ip_address": [ "10.3.141.1/24" ],      "static routers": [ "10.3.141.1" ],      "static domain_name_server": [ "10.3.141.1" ],      "subnetmask": [ "255.255.255.0" ]    },    "wlan0": {      "static ip_address": [ "192.168.43.12/24" ],      "static routers": [ "192.168.43.1" ],      "static domain_name_server": [ "1.1.1.1 8.8.8.8" ],      "subnetmask": [ "255.255.255.0" ]    },    "options": {      "# RaspAP default configuration": null,      "hostname": null,      "clientid": null,      "persistent": null,      "option rapid_commit": null,      "option domain_name_servers, domain_name, domain_search, host_name": null,      "option classless_static_routes": null,      "option ntp_servers": null,      "require dhcp_server_identifier": null,      "slaac private": null,      "nohook lookup-hostname": null    }  },  "dnsmasq": {    "wlan1": {      "dhcp-range": [ "10.3.141.50,10.3.141.255,255.255.255.0,12h" ]    },    "wlan0": {      "dhcp-range": [ "192.168.43.50,192.168.50.150,12h" ]    }  }}


dhcpcd.conf служба raspap

Настройка для сетевого интерфейса wlan0, который выходит в сеть Интернет.

dhcpcd.conf
# RaspAP default configurationhostnameclientidpersistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption classless_static_routesoption ntp_serversrequire dhcp_server_identifierslaac privatenohook lookup-hostname# RaspAP wlan0 configurationinterface wlan0static ip_address=192.168.43.12/24static routers=192.168.43.1static domain_name_server=1.1.1.1 8.8.8.8


config.php портал конфигурации RaspAP

Файл настроек графического Web-интерфейса. Содержит переменные влияющие на отображение настроек. Самый главный параметр define('RASPI_WIFI_AP_INTERFACE', 'wlan1');. В качестве значения указать сетевой интерфейс hotspot wlan1.

config.php
...define('RASPI_WIFI_AP_INTERFACE', 'wlan1');...define('RASPI_ADBLOCK_ENABLED', true);define('RASPI_OPENVPN_ENABLED', false);...


Пошаговая установкаRaspAP


Руководство установки доступно в разделе Manual installation.

Шаг 1 Подключение адаптера USB WiFi RTL8188


Подключаем адаптер в любой доступный USB порт. В Armbian драйвера уже есть, поэтому проверим подключение командой lsusb:

root@bananapim64:~# lsusbBus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 003 Device 004: ID 0bda:c811 Realtek Semiconductor Corp.Bus 003 Device 002: ID 1a40:0101 Terminus Technology Inc. HubBus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubroot@bananapim64:~#

В списке присутствует Realtek Semiconductor Corp., значит адаптер успешно распознался. Если вывести название интерфейса для подключенного адаптера, то его имя будет wlxe81e0584796d, что несколько далеко от привычного именования вида wlanX. Для задания названия для адаптера wlan1, необходимо выполнить следующие действия (более подробнее почитать про именование сетевых интерфейсов по ссылке1,ссылке2):

$ sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules$ sudo reboot

После перезагрузки в системе будет два беспроводных адаптера: wlan0 и wlan1.

Шаг 2 Настройка сетевых интерфейсов


Настроим сетевые интерфейсы в конфигурационном файле: /etc/network/interfaces.

# Network is managed by Network managerauto loiface lo inet loopback# WANauto wlan0allow-hotplug wlan0iface wlan0 inet dhcp# Wi-Fi APauto wlan1iface wlan1 inet static    address 10.3.141.1    netmask 255.255.255.0    gateway 10.3.141.1

Шаг 3 Установка RaspAP


Теперь приступаем к установке RaspAP.
Обновление системы:

sudo apt-get updatesudo apt-get full-upgrade

Установка зависимостей для не RPi OS:

sudo apt-get install software-properties-common sudo add-apt-repository ppa:ondrej/phpsudo apt-get install dhcpcd5

Установка пакетов:

sudo apt-get install -y lighttpd git hostapd dnsmasq iptables-persistent vnstat qrencode php7.3-cgi

PHP:

sudo lighttpd-enable-mod fastcgi-php    sudo service lighttpd force-reloadsudo systemctl restart lighttpd.service

Создание Web-портала:

sudo rm -rf /var/www/htmlsudo git clone https://github.com/RaspAP/raspap-webgui /var/www/htmlWEBROOT="/var/www/html"CONFSRC="$WEBROOT/config/50-raspap-router.conf"LTROOT=$(grep "server.document-root" /etc/lighttpd/lighttpd.conf | awk -F '=' '{print $2}' | tr -d " \"")HTROOT=${WEBROOT/$LTROOT}HTROOT=$(echo "$HTROOT" | sed -e 's/\/$//')awk "{gsub(\"/REPLACE_ME\",\"$HTROOT\")}1" $CONFSRC > /tmp/50-raspap-router.confsudo cp /tmp/50-raspap-router.conf /etc/lighttpd/conf-available/sudo ln -s /etc/lighttpd/conf-available/50-raspap-router.conf /etc/lighttpd/conf-enabled/50-raspap-router.confsudo systemctl restart lighttpd.servicecd /var/www/htmlsudo cp installers/raspap.sudoers /etc/sudoers.d/090_raspap

Создание конфигурации:

sudo mkdir /etc/raspap/sudo mkdir /etc/raspap/backupssudo mkdir /etc/raspap/networkingsudo mkdir /etc/raspap/hostapdsudo mkdir /etc/raspap/lighttpdsudo cp raspap.php /etc/raspap 

Установка разрешения:

sudo chown -R www-data:www-data /var/www/htmlsudo chown -R www-data:www-data /etc/raspap

Настройка контролирующих скриптов:

sudo mv installers/*log.sh /etc/raspap/hostapd sudo mv installers/service*.sh /etc/raspap/hostapdsudo chown -c root:www-data /etc/raspap/hostapd/*.sh sudo chmod 750 /etc/raspap/hostapd/*.sh sudo cp installers/configport.sh /etc/raspap/lighttpdsudo chown -c root:www-data /etc/raspap/lighttpd/*.shsudo mv installers/raspapd.service /lib/systemd/systemsudo systemctl daemon-reloadsudo systemctl enable raspapd.service

Установка стартовых настроек, настройки в каталоге ~/temp, при необходимости заменить на свои:

sudo apt-get install -y curl unzipmkdir -p ~/tempcurl -SL --output ~/temp/config_ct.zip https://github.com/devdotnetorg/Site/raw/master/Uploads/files/config_ct.zipunzip ~/temp/config_ct.zip -d ~/temprm ~/temp/config_ct.zipесли есть: sudo mv /etc/default/hostapd ~/default_hostapd.oldесли есть: sudo cp /etc/hostapd/hostapd.conf ~/hostapd.conf.oldsudo cp ~/temp/default_hostapd /etc/default/hostapdsudo cp ~/temp/hostapd.conf /etc/hostapd/hostapd.confsudo cp config/090_raspap.conf /etc/dnsmasq.d/090_raspap.confsudo cp ~/temp/090_wlan1.conf /etc/dnsmasq.d/090_wlan1.confsudo cp ~/temp/dhcpcd.conf /etc/dhcpcd.confsudo cp ~/temp/config.php /var/www/html/includes/sudo cp ~/temp/defaults.json /etc/raspap/networking/sudo systemctl stop systemd-networkdsudo systemctl disable systemd-networkdsudo cp config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdevsudo cp config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network 

Оптимизация PHP:

sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' /etc/php/7.3/cgi/php.inisudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' /etc/php/7.3/cgi/php.inisudo phpenmod opcache

Настройка маршрутизации:

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/90_raspap.conf > /dev/nullsudo sysctl -p /etc/sysctl.d/90_raspap.confsudo /etc/init.d/procps restartsudo iptables -t nat -A POSTROUTING -j MASQUERADEsudo iptables -t nat -A POSTROUTING -s 192.168.43.0/24 ! -d 192.168.43.0/24 -j MASQUERADEsudo iptables-save | sudo tee /etc/iptables/rules.v4

Включение hostapd:

sudo systemctl unmask hostapd.servicesudo systemctl enable hostapd.service

OpenVPN:

sudo apt-get install openvpnsudo sed -i "s/\('RASPI_OPENVPN_ENABLED', \)false/\1true/g" /var/www/html/includes/config.phpsudo systemctl enable openvpn-client@clientsudo mkdir /etc/raspap/openvpn/sudo cp installers/configauth.sh /etc/raspap/openvpn/sudo chown -c root:www-data /etc/raspap/openvpn/*.sh sudo chmod 750 /etc/raspap/openvpn/*.sh

Ad blocking:

sudo mkdir /etc/raspap/adblockwget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/hostnames.txt -O /tmp/hostnames.txtwget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/domains.txt -O /tmp/domains.txtsudo cp /tmp/hostnames.txt /etc/raspap/adblocksudo cp /tmp/domains.txt /etc/raspap/adblock sudo cp installers/update_blocklist.sh /etc/raspap/adblock/sudo chown -c root:www-data /etc/raspap/adblock/*.*sudo chmod 750 /etc/raspap/adblock/*.shsudo touch /etc/dnsmasq.d/090_adblock.confecho "conf-file=/etc/raspap/adblock/domains.txt" | sudo tee -a /etc/dnsmasq.d/090_adblock.conf > /dev/null echo "addn-hosts=/etc/raspap/adblock/hostnames.txt" | sudo tee -a /etc/dnsmasq.d/090_adblock.conf > /dev/nullsudo sed -i '/dhcp-option=6/d' /etc/dnsmasq.d/090_raspap.confsudo sed -i "s/\('RASPI_ADBLOCK_ENABLED', \)false/\1true/g" includes/config.php

При конфигурирование через Web-интерфейс столкнулся с багом, который при изменение настроек DHCP сервера на интерфейсе wlan1 удаляет файл конфигурации 090_wlan1.conf и не создает его заново. В результате DHCP сервер не выдает IP-конфигурацию новым клиентам. Временное решение этой проблемы заключается в блокировке файла на удаление, необходимо выполнить следующую команду (по блокировке файлов почитать по ссылке):

sudo chattr +i /etc/dnsmasq.d/090_wlan1.conf

После установки необходимо перезагрузить систему:

sudo reboot now

После перезагрузке появится Wi-Fi точка доступа с SSID raspi-webgui и паролем ChangeMe. Портал будет доступен по адресу: http://10.3.141.1.

Установка SoftEther VPN Server на VPS сервер


На сервер v636096.hosted-by-vdsina.ru установим Docker по официальному руководству Install Docker Engine on Ubuntu.

Создание сети для Docker контейнеров


Для подсети в которой будет контейнер с SoftEther VPN Server определим следующие параметры:

  • Название сети: vpnnetwork;
  • Subnet: 172.22.0.0/24;
  • Driver: bridge;
  • Range: 172.22.0.0/25;
  • gateway: 172.22.0.127;
  • HostMin: 172.22.0.1;
  • HostMax: 172.22.0.126;
  • Hosts/Net: 126.

Для создание внутренней сети Docker выполним команду:

$ docker network create --driver bridge --subnet 172.22.0.0/24 --ip-range=172.22.0.0/25 --gateway 172.22.0.127 vpnnetwork

Для проверки доступности сети выполнить команду: ping 172.22.0.127.

Создание контейнера с SoftEther VPN Server


Для создание контейнера будем использовать образ siomiz/softethervpn. До запуска основного контейнера необходимо создать конфигурацию, в которой указать пароль для управления сервером параметр SPW и пароль для управления хабом параметр HPW. Файл конфигурации будет располагаться по пути /usr/vpnserver/vpn_server.config. Выполнить следующие команды:

$ mkdir -p /usr/vpnserver$ docker run --name vpnconf -e "SPW={PASSWORD}" -e "HPW={PASSWORD}" siomiz/softethervpn echo$ docker cp vpnconf:/usr/vpnserver/vpn_server.config /usr/vpnserver/vpn_server.config$ docker rm vpnconf

Для уменьшения размера контейнера возьмем образ на основе Alpine, все журналы log в null. Выполнить следующие команды для создание контейнера:

$ docker run --name vps-server-softethervpn -d --cap-add NET_ADMIN --restart always --net vpnnetwork --ip 172.22.0.2 -p 443:443/tcp -p 992:992/tcp \-p 1194:1194/udp -p 5555:5555/tcp -v /usr/vpnserver/vpn_server.config:/usr/vpnserver/vpn_server.config \-v /dev/null:/usr/vpnserver/server_log -v /dev/null:/usr/vpnserver/packet_log -v /dev/null:/usr/vpnserver/security_log siomiz/softethervpn:alpine

Если контейнер запустился, то переходим к следующему шагу.

Настройка SoftEther VPN Server


Для настройки SoftEther VPN Server лучше использовать графическую утилиту для ОС Windows. Для загрузки необходимо перейти на страницу SoftEther Download Center. В списке Select Component, выбрать SoftEther VPN Server Manager for Windows, далее Select Platform windows. Можно выбрать пакет .zip без необходимости установки. Пакет softether-vpn_admin_tools-v4.34-9745-rtm-2020.04.05-win32.zip распаковать и запустить vpnsmgr.exe.

Создаем новый профиль кнопка New Setting, указываем следующие настройка:

  • Setting Name: VDSina_ru_main_server
  • Host Name: v636096.hosted-by-vdsina.ru
  • Port Number: 443
  • Password: пароль который был указан в переменной SPW при создание конфигурационного файла vpn_server.config

Затем подключаемся к серверу кнопка Connect.

При первом подключение появится вопрос об включение поддержки протокола IPSec. Если в дальнейшем планируете подключать мобильные устройства без использования программных клиентов, то выбрать Да. В данном случае поддержка IPSec не требуется, отвеваем Нет.

Для настройки алгоритма шифрования нажать на кнопку Encryption and Network. По умолчанию включен алгоритм DHE-RSA-AES256-SHA. Из списка выбрать другие более стойкие комбинации шифрования, но нужно помнить чем сильнее алгоритм, тем больше нагрузка на CPU сервера и на конечное маршрутизирующее устройство.

По умолчанию будет доступен хаб DEFAULT, удаляем его.

Создаем новый хаб кнопка Create a Virtual Hub. Укажем Virtual Hub Name: VPNROOT. Открываем настройки хаба кнопка Manage Virtual Hub.

Создадим пользователя подключения, кнопка Manage Users, затем кнопка New. Аутентификация будет по паре логин/пароль, укажем имя: officeuser1.

Для отделение подсети клиентов VPN сервера и подсети Docker контейнеров включим NAT, кнопка Virtual NAT and Virtual DHCP Server (SecureNAT), далее кнопка Enable SecureNAT. Изменим подсеть VPN клиентов на: 192.168.30.x, закроем окно, кнопка Exit.

На этом настройка сервера закончена.


Последовательность действий по настройке SoftEther VPN Server

Получение файлов конфигурации *.ovpn


Для подключения OpenVPN клиента необходимо получить файлы конфигурации *.ovpn, для этого переходим на главный экран настроек SoftEther VPN Server и нажимаем на кнопку OpenVPN / MS-SSTP Settings. Далее, в следующем окне генерируем файлы конфигурации, кнопка Generate a Sample Configuration File for OpenVPN Clients. Сохраняем архив OpenVPN_Sample_Config_v636096.hosted-by-vdsina.ru_20210519_150311.zip, для дальнейшего подключения потребуется файл f1167ecd086e_openvpn_remote_access_l3.ovpn.


Последовательность действий по получению файлов конфигурации *.ovpn

Настройка OpenVPN на RaspAP


Создание маршрутов
Теперь переходим в консоль Cubietruck и добавляем маршруты:

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADEsudo iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPTsudo iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

Делаем копию существующих маршрутов и сохраняем новые

cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.baksudo iptables-save | sudo tee /etc/iptables/rules.v4

Настройка профиля OpenVPN

Переходим на портал по адресу 192.168.43.12/openvpn_conf и указываем данные для подключения:

  • Username: officeuser1
  • Password: указанный для officeuser1 в SoftEther VPN Server
  • Для конфигурационного файла выбираем файл f1167ecd086e_openvpn_remote_access_l3.ovpn.

Сохраняем настройки и перезапускаем OpenVPN. Если подключение удалось, но в поле IPV4 ADDRESS будет публичный IP-адрес VPN сервера: 94.103.85.152 (v636096.hosted-by-vdsina.ru).

raspap
Страница настроек OpenVPN в RaspAP

Настройка Captive portal


Установка Captive portal в руководстве Captive portal setup.

Для установки выполним следующие действия:

sudo apt-get updatesudo apt-get install -y libmicrohttpd-devcd ~/git clone https://github.com/nodogsplash/nodogsplash.gitcd nodogsplashmakesudo make install

Далее необходимо внести изменения в конфигурационный файл /etc/nodogsplash/nodogsplash.conf. Указать следующие параметры:

...GatewayInterface wlan1...GatewayAddress 10.3.141.1...

Регистрация службы и запуск:

sudo cp ~/nodogsplash/debian/nodogsplash.service /lib/systemd/system/sudo systemctl enable nodogsplash.servicesudo systemctl start nodogsplash.service sudo systemctl status nodogsplash.service

Страницы html для изменение дизайна страниц располагаются по пути: /etc/nodogsplash/htdocs/. Теперь выполним подключение к AP SSID: raspi-webgui.

Устранение проблем


Первым делом необходимо проверить IP-конфигурацию сетевых интерфейсов, командами: ifconfig или ip a.

Проверить занятость портов, командами:

netstat -ntlp | grep LISTENlsof -i | grep LISTENlsof -nP -i | grep LISTEN

Если установка RaspAP выполняется на Ubuntu, то вы можете столкнуться с конфликтом использования 53 порта, который занят службой systemd-resolved. Для отключения данной службы, воспользоваться материалом How to disable systemd-resolved in Ubuntu.

Проверить статусы используемых служб, выполнить следующие команды:

sudo systemctl status hostapd.servicesudo systemctl status dnsmasq.servicesudo systemctl status lighttpd.servicesudo systemctl status openvpn-client@clientsudo systemctl status nodogsplash.servicesudo systemctl status raspapd.service


Что дальше?


Для проверки совместимости необходимо RaspAP развернуть на Banana Pi BPI-M64 (Armbian 21.02.1 на основе Ubuntu 18.04.5 LTS). Далее, развернуть на x86 с другим более новым адаптером, например USB Realtek 8811CU Wireless LAN 802.11ac. На GitHub размещен репозиторий raspap-docker, который оборачивает RaspAP в контейнер, но по факту запускает скрипт автоматической установки, что несколько неудобно и неправильно. Поэтому для более широкого распространения RaspAP необходимо его правильно обернуть в Docker контейнер для ARM и x86 архитектур.

Итог


Проект RaspAP безусловно заслуживает внимания, основные функции работают отлично. Это единственный проект связанный с Wi-Fi сетями, работающий поверх существующей ОС, у которого работает Web-интерфейс (пока есть небольшие баги). Для личного использования, теста, стоит попробовать. Но для продакшен в бизнесе пока лучше не использовать, необходимо более детально просмотреть исходный код и конфигурацию на предмет безопасности. В любом случае, проект добавил себе в закладки, надеюсь баги исправят в скором времени.



На правах рекламы


VDSina предлагает виртуальные серверы на Linux и Windows выбирайте одну из предустановленных ОС, либо устанавливайте из своего образа.

Присоединяйтесь к нашему чату в Telegram.

Подробнее..

Wi-Fi Интернет в соседнюю комнату

14.06.2021 14:06:00 | Автор: admin

Когда мы купили квартиру и делали в ней ремонт, телефоны были еще кнопочными, а Wi-Fi роутеры если и существовали, то в качестве диковинки. Предполагалось, что интернет будет подключен через витую пару к компу, а сам комп будет стоять на балконе, потому что балкон будет теплым и в нем будет кабинет. Квартира была без отделки, и поэтому мы решили сделать умный ход чтобы не тащить провода под плинтусами от коридора до балкона (как обходить двери?) мы заложили гофру в бетонный пол и протащили кабель напрямки. И нет, штробить бетон не пришлось, потому как он и так был снят для монтажа теплого водяного пола. Первые пару лет я даже гордился таким решением. Еще бы! Никаких дыр в стенах, никаких уродских кабель-каналов и интернет где нужно! Но года через 2-3 начали появляться всякие гаджеты, мы купили Wi-Fi роутер и тут появилась проблема.

Схема 1. Часть плана квартирыСхема 1. Часть плана квартиры

На схеме роутер отмечен синим крестиком.

Если в кабинете и в соседней комнате все было шикарно, то на кухне (она же зал, где диван и все часто тусят) сигнала почти не было. Мешала несущая кирпичная стена. Для решения вопроса я рассматривал 3 варианта:

1. Купить новый мощный роутер, который будет пробивать все преграды. За и против:

+ Изящное решение: не надо ничего сверлить и переделывать глобально.

- В 2011 году ВОЗ отнес мобильники к канцерогенным факторам и рекомендовал пользоваться проводной гарнитурой, громкой связью и чатиться для того, чтобы не подносить телефон в режиме связи близко к голове. Тогда я сам это читал на их сайте, однако сейчас, когда я полез за ссылью эта информация оттуда исчезла. Может потому что обнаружилось, что мобильники на 100% безопасны и ежегодное увеличение процента больных раком мозга тут не причем, а может потому что это мешало увеличивать продажи... Несмотря на троеточие я реально не знаю. И, да, я в курсе, что у роутера другая частота, но сидеть жопой на мощном излучателе и проверять на себе все равно не хочется.

- Промышленный роутер будет пробивать стену и отдавать данные от себя, но ведь ему еще и принимать данные нужно с обычного устройства, которое такую преграду может не пробить. Будет ли это вообще работать?

2. Купить повторители.

+ Опять же не надо ничего вскрывать и сверлить и нет минусов предыдущего пункта.

- Учитывая схему нашей квартиры и расположение розеток нужно минимум 2 повторителя, чтобы обойти стену.

- Выглядят повторители опять же по уродски, как огромный зарядник торчащий из стены, только зарядник можно убрать, а эти приблуды будут всегда торчать из стены и занимать розетки.

3. Продырявить стену рядом с роутером и поставить в зале свой роутер.

+ Надежный сигнал

+ Опрятный внешний вид

- Непонятно как это реализовывать и возможно ли это вообще?

Честно сказать, простого решения как соединить 2 бытовых роутера проводом, чтобы они работали, как один я не нашел. Если кто знает, подскажите! Вообще этот третий вариант мне подсказал сам роутер, вернее его внешний вид:

Роутер D-Link DIR-615Роутер D-Link DIR-615

Зачем ему две антенны? Вот бы взять одну и протащить в соседнюю комнату? Я позвонил в магазин, торгующий железом и спросил:

-Подскажите, у роутера такого-то есть 2 антенны, они обе равноценные? Каждая и передает и принимает? Или одна только передает, а другая только принимает сигнал?

-ХЗ, вежливо ответил продавец и порекомендовал звякнуть производителю.

Я так и сделал.

- ХЗ, вежливо ответил производитель.

Оговорюсь, что насчет вежливости это не сарказм. Парень, который меня консультировал, сказал, что у него первый раз такое спрашивают, потом долго выяснял, куда-то ходил и с кем-то созванивался, однако внятно ответить зачем роутеру две антенны так и не смог.

Тогда я решил рискнуть и купил удлинитель. Вот такой:

Удлинитель антенны роутераУдлинитель антенны роутера

Сначала поэкспериментировал так. Выкрутил одну антенну из роутера совсем, а вторую прикрутил через удлинитель и отнес на максимальное расстояние от роутера. Работает! Также проверил другое гнездо роутера работает! После этого пробурил отверстие. Сверлил на уровне около 4 см над полом, предварительно сняв плинтуса.

Схема 2. Синяя полоса рядом с крестиком показывает место прокладки кабеля.Схема 2. Синяя полоса рядом с крестиком показывает место прокладки кабеля.

Самым сложным в этом процессе было найти бур подходящей длинны. Толщина стены оказалась 50 см! Не то, чтобы было легко ее пробить и попасть куда нужно, но найти нужный инструмент (не покупать же из-за одной дырки!) было сложнее.

Решение оказалось идеальным. Обе антенны, как выяснилось опытным путем, равноценны.

В зале антенна просто торчит на проводе (он довольно жесткий) в неприметном месте.

В результате все розетки свободны, сигнал уверенный и при этом не избыточный.

Кстати упомяну еще один лайф-хак запитать роутер через таймер в розетку. Вот такой:

Таймер за 300 р.Таймер за 300 р.

Зачем?

Во-первых, затем, что нет лишнего излучения ночью, когда инетом никто не пользуется.

Во-вторых, такая штука очень помогает соблюдать режим. Как мне самому, так и ребенку. Да, на таймере есть кнопка ручного включения. Но таймер вместе с роутером стоит высоко на шкафу, просто так не дотянешься, а когда он вырубает инет я уже всегда лежу в кровати и прокрастинирую в телефоне вставать и идти лезть на шкаф мне просто лень. И, да, с нашими стенами сотовый интернет у нас почти не ловится. Вобщем схема рабочая.

В третьих, ежедневное отключение роутера на 7 часов продлевает ему жизнь, а перезагрузка только на пользу.

Правда, у такого таймера есть недостаток. Ночью, когда очень тихо, слышно как он тикает. Лично меня это парило, поэтому довольно быстро я заменил его на другой, электронный.

Вся эта история приключилась со мной уже много лет назад и вероятно сейчас есть более изящные решения вопроса, но возможно кому-то подойдет именно такой вариант. От себя могу сказать, что схема отлично обкатана и 100% рабочая. У меня до сих пор все тот же роутер. Также с годами выяснилось (особенно когда ребенок дорос до личного гаджета), что в вопросе таймера п. 2 стал для нас гораздо более актуальным, чем п.1

Подробнее..

Программирование устройств на основе модуля ESP32

09.10.2020 14:15:38 | Автор: admin
Микроконтроллер это интегральная схема, способная выполнять программы. Сегодня на рынке представлено множество таких моделей от самых разных производителей. Цены на эти устройства продолжают падать. Однокристальные чипы находят широкое применение в самых разнообразных сферах: от измерительных приборов до изделий развлечений и всевозможной домашней техники. В отличие от персональных компьютеров микроконтроллер сочетает в одном кристалле функции процессора и периферийных устройств, содержит оперативную память и постоянное запоминающее устройство в для хранения кода и данных, однако обладает значительно мешьшими вычислительными ресурсами. ESP32 это микроконтроллер, разработанный компанией Espressif Systems. ESP32 представляют собой систему на кристалле с интегрированным Wi-Fi и Bluetooth контроллерами. В серии ESP32 используется ядро Tensilica Xtensa LX6. Платы с ESP32 обладают хорошей вычислительной способностью, развитой периферией при этом весьма популярны ввиду низкой цены в диапазоне 7$ 14$: Aliexpress, Amazon.

Данная статья не претендует на роль исчерпывающего руководста, скорее представляет собой сборник источников материала и рекомендаций. В статье я хочу затронуть вопросы с которыми мне пришлось столкнуться при выборе программных средств для разработки проекта, а также некоторые кейсы практического применения модулей ESP32. В следующей статье я хочу показать наглядный пример использования ESP32 в качестве котроллера управления для небольшой двухколесной мобильной платформы. Поэтому здесь рассмотрим такие детали как:

  • Выбор среды разработки;
  • Настройка рабочего окружения, компиляция и загрузка проекта ESP-IDF;
  • Обработка сигналов ввода/вывода GPIO;
  • Широтно-импульсная модуляция с использованием модуля MCPWM;
  • Аппартный счетчик PCNT;
  • Подключение к WI-Fi и MQTT.


Обзор модуля ESP32-WROOM-32E


Согласно datasheet модуль содержит:

MCU
ESP32-D0WD-V3 embedded, Xtensa dual-core 32-bit LX6 microprocessor, up to 240 MHz
448 KB ROM for booting and core functions
520 KB SRAM for data and instructions
16 KB SRAM in RTC

Wi-Fi
802.11b/g/n
Bit rate: 802.11n up to 150 Mbps
A-MPDU and A-MSDU aggregation
0.4 s guard interval support
Center frequency range of operating channel: 2412 ~ 2484 MHz

Bluetooth
Bluetooth V4.2 BR/EDR and Bluetooth LE specification
Class-1, class-2 and class-3 transmitter
AFH
CVSD and SBC

Hardware
Interfaces: SD card, UART, SPI, SDIO, I 2 C, LED PWM, Motor PWM, I 2 S, IR, pulse counter, GPIO, capacitive touch sensor, ADC, DAC
40 MHz crystal oscillator
4 MB SPI flash
Operating voltage/Power supply: 3.0 ~ 3.6 V
Operating temperature range: 40 ~ 85 C
Dimensions: See Table 1

Certification
Bluetooth certification: BQB
RF certification: FCC/CE-RED/SRRC
Green certification: REACH/RoHS

image
Функциональная блок-диаграмма

Более подробно с особенностями микроконтроллера можно ознакомится на википедии .

В основе модуля лежит микросхема ESP32-D0WD-V3 *. Встроенный чип разработан с учетом возможности масштабирования и адаптации. Центральный процессор содержит два ядра, которыми можно управлять индивидуально, а тактовая частота ЦП регулируется от 80 МГц до 240 МГц. Чип также имеет сопроцессор с низким энергопотреблением, который можно использовать вместо ЦП для экономии энергии при выполнении задач, не требующих больших вычислительных мощностей, таких как мониторинг состояния пинов. ESP32 объединяет богатый набор периферийных устройств, начиная от емкостных сенсорных датчиков, датчиков Холла, интерфейса SD-карты, Ethernet, высокоскоростного SPI, UART, IS и IC.
Техническая документация представлена на официальном ресурсе

Информацию про распиновку модуля ESP-WROOM-32 можно легко найти на просторах сети, как здесь

Выбор среды разработки


Arduino IDE


Микроконтроллеры семейства AVR, а затем и платформа Arduino появились задолго до ESP32. Из ключевых особенностей Arduino является относительно низкий порог вхождения, позволяющий практически любому человеку создать что-то быстро и легко. Платформа внесла важный вклад в open source hardware сообщество и позволила приобщиться огромному числу радиолюбителей. Среду разработки Arduino IDE можно свободно скачать с оффсайта . Не смотря на очевидные ограничения по сравнению с профессиональной средой разработки, Arduino IDE покрывает 90% из того, что требуется достичь для любительских проектов. В сети также имеется достаточное количество статей на тему установки и настройки Arduino IDE для программирования модулей ESP32, например: Arduino core for the ESP32, habr.com, voltiq.ru и randomnerdtutorials.com.

Программируя ESP32 в среде Arduino необходимо учитывать распиновку, как указано на странице arduino-esp32

image
Распиновка модуля ESP32

Основное преимущество данного подхода разработки заключается в быстром вхождении и легкости создания проектов, используя те же принципы, как и для Arduino. А также использование многих библиотек, как и для Arduino. Еще одной хорошей особенностью является возможность совмещать библиотеки и принципы разработки Arduino с оригинальным ESP-IDF фреймворком.

PlatformIO


Как сказано на официальном ресурсе : Cross-platform PlatformIO IDE and Unified Debugger Static Code Analyzer and Remote Unit Testing. Multi-platform and Multi-architecture Build System Firmware File Explorer and Memory Inspection Другими словами PlatformIO это экосистема для разработки встроенных устройст, поддерживающая множество платформ, включая Arduino и ESP32. В качестве IDE используется Visual Studio Code или Atom. Установка и настройка достаточно простая после установки редактора кода выбираем PlatformIO из списка плагинов и устанавливаем. Опять же в сети много материалов на данную тему, начиная от официального источника здесь и здесь, и продолжая статьями с подробными иллюстрациями здесь и здесь.
PlatformIO по сравнению с Arduino IDE оладает всеми качествами современной среды разработки: организация проектов, поддержка плагинов, автодополнение кода и много другое.
Особенностью разработки на PlatformIO является унифицированная структура проекта для всех платформ

project_dir lib    README platformio.ini src     main.cpp


Каждый проект PlatformIO содержит файл конфигурации с именем platformio.ini в корневом каталоге проекта. platformio.ini имеет разделы (каждый из которых обозначен [заголовком]) и пары ключ / значение внутри разделов. Строки, начинающиеся с символа точка с зяпятой ; игнорируются и могут использоваться для комментариев. Параметры с несколькими значениями можно указать двумя способами:
  1. разделение значения с помощью , (запятая + пробел);
  2. многострочный формат, где каждая новая строка начинается как минимум с двух пробелов.


Следующей фичей разработки для ESP32 является возможность выбора фреймворка: Arduino или ESP-IDF. Выбирая Arduino в качестве фреймворка мы получаем ранее описанные преимущества разработки.

image

В составе PlatformIO входит удобный инструментарий билда, загрузки и отладки проектов

image

Espressif IoT Development framework


Для ESP32 компания Espressif разработала фреймворк под названием IoT Development Framework, известный как ESP-IDF. Его можно найти на Github здесь. Проект содержит очень хорошую документацию и снабжен примерами, которые можно брать за базу. Установка и настройка среды окружения хорошо описана в разделе Get Started. Имеется несколько вариантов установки и работы с фреймворком.

Клонирование проекта из репозитория и ручная установка утилит.

Клонирование проекта из Github

mkdir -p ~/espcd ~/espgit clone --recursive https://github.com/espressif/esp-idf.git


Для Windows установка утилит разработки возможна с помощью инсталлятора или с помощью скриптов для командной строки:

cd %userprofile%\esp\esp-idfinstall.bat


Для PowerShell

cd ~/esp/esp-idf./install.ps1


Для Linux и macOS

cd ~/esp/esp-idf./install.sh


Следующим шагом является настройка переменных окружений среды. Если установка инструментов разработки была выполнена на Windows с помощью инсталлятора, то ярлык на командную консоль добавляется в меню и на рабочий стол, после чего можно открывать командную оболочку и работать с проектами. Альтернативный спрособ запуска командной оболочки для Windows:

%userprofile%\esp\esp-idf\export.bat

или Windows PowerShell:
.$HOME/esp/esp-idf/export.ps1


Linux и macOS:
. $HOME/esp/esp-idf/export.sh

Следует обратить внимание на пробел между точкой и путем к скрипту

Далее в руководстве рекомендуется добавить алиас на скрипт настройки переменных окружения в пользовательский профиль если работа производитя в системе Linux или macOS. Для этого необходимо скопировать и вставить следующую команду в профиль своей оболочки (.profile, .bashrc, .zprofile, и т.д.):
alias get_idf='. $HOME/esp/esp-idf/export.sh'


Вызывая команду get_idf в консоль экспортируются необходимы переменные окружения. В моем случае также необходимо было прописать алиас на запуск виртуального окружения python

alias esp_va=source $HOME/.espressif/python_env/idf4.2_py2.7_env/bin/activate

и добавить его в следующий алиас
alias get_idf='esp_ve && . $HOME/esp/esp-idf/export.sh'


Для создание нового проекта с нуля можно склонировать исходники с github.com или скопировать из каталога с примерами esp-idf/examples/get-started/hello_world/.

Информация о структуре проекта, утилитах компиляции, загрузки, настройки и др. Находиться здесь

Проект представляет собой каталог со следующей структурой:

- myProject/             - CMakeLists.txt             - sdkconfig             - components/ - component1/ - CMakeLists.txt                                         - Kconfig                                         - src1.c                           - component2/ - CMakeLists.txt                                         - Kconfig                                         - src1.c                                         - include/ - component2.h             - main/       - CMakeLists.txt                           - src1.c                           - src2.c             - build/


Конфигурация проекта содержится в файле sdkconfig в корневом каталоге. Для изменения настроек необходимо вызвать команду idf.py menuconfig (или возможно idf.py.exe menuconfig в Windows).
В одном проекте обычно создаются два приложения project app (основной исполняемый файл, т.е. ваша кастомная прошивка) и bootloader app (программа начального загрузчика проекта).
components это модульные части автономного кода, которые компилируются в статические библиотеки (файлы .a) и связаны с приложением. Некоторые из них предоставляются самой ESP-IDF, другие могут быть получены из других источников.
Утилита командной строки idf.py предоставляет интерфейс для простого управления сборками проекта. Ее расположение в Windows %userprofile%\.espressif\tools\idf-exe\1.0.1\idf.py.exe. Она управляет следующими инструментами:

  • CMake настраивает проект для сборки
  • Консольный сборщик проекта: Ninja, либо GNU Make)
  • esptool.py для прошивки модулей.

Каждый проект имеет один файл CMakeLists.txt верхнего уровня, который содержит параметры сборки для всего проекта. Минимальная конфигурация файла включает следующие необходимые строчки:
cmake_minimum_required(VERSION 3.5)include($ENV{IDF_PATH}/tools/cmake/project.cmake)project(myProject)


Проект ESP-IDF можно рассматривать как совокупность компонентов, в котором каталог main является главным комонентом, запускающим код. Поэтому в данной директории также содержится файл CMakeLists.txt. Чаще всего его структура подобна:
idf_component_register(SRCS "main.c" INCLUDE_DIRS ".")

Где указывается, что исходный файл main.c необходимо зарегистрировать для компонента, а файлы заголовков содержаться в текущем каталоге. При необходимости можно переименовать каталог main устаовив EXTRA_COMPONENT_DIRS в прокте CMakeLists.txt. Подробно можно ознакомиться здесь

Помимо этого в каталоге находится исходный main.с (имя может быть любое) файл с точкой входа функцией void app_main(void).
Кастомые компоненты создатся в каталоге components. Подробнее процесс описан в разделе Component Requirements.

Подключение модуля ESP32 компьютеру в большинстве случаев проиводится с помощью USB-кабеля подобно платам Arduino за счет имеющегося бутлоадера. Подробнее процесс описан здесь . Едиственное, что необходимо это наличие драйвера конвертора USB to Uart в системе, который можно скачать по ссылкам из приведенного источника. После установки драйвера, необходимо определить номер COM-порта в системе для загрузки скомпилированной прошивки в модуль.
Конфигурирование. В большинстве случаев подходят настройки по умолчанию. Но для вызова консольного интервейса меню необходимо перейти в каталог проекта и в командной строке набрать:

idf.py menuconfig


image
Меню с конфигурационными настройками

После вызова этой команды файл sdkconfig будет создан, если его ранее не было или заново сконфигурирован. В более ранних туториалах можно встретить команды make menuconfig, что являются уставревшими.
Добавление кастомных настроек в файл sdkconfig возможно вручную, например:

## WiFi Settings кастомное меню #CONFIG_ESP_HOST_NAME="имя точки"CONFIG_ESP_WIFI_SSID="название точки доступа"CONFIG_ESP_WIFI_PASSWORD="пароль"


Но предпочтительным является способ с помощью дополнительного конфигурационного файла Kconfig.projbuild, который необходимо располагать в каталоге с компонентом. Содержимое файла может быть следующим:

# put here your custom config valuemenu "Example Configuration"config ESP_WIFI_SSID    string "Keenetic"    default "myssid"    help    SSID (network name) for the example to connect to.config ESP_WIFI_PASSWORD    string "password"    default "mypassword"    help    WiFi password (WPA or WPA2) for the example to use.endmenu


После вызова команды idf.py menuconfig в файле sdkconfig автоматически добавиться дополнительный раздел. Вызов команды idf.py menuconfig возможен и в проекте PlatformIO, однако нужно учитывать факт отличия структура проекта PlatformIO от классического ESP-IDF, из-за чего файл sdkconfig с может заново сгенериться и потярять кастомные настройки. Тут возможны вышеупомянутые варианты правка файла руками, временнное переименование каталога src в main, или настройка файла CMakeLists.txt

Компиляция и загрузка проекта.
Для билда проекта необходимо набрать команду

idf.py build


Эта команда скомпилирует приложение и все компоненты ESP-IDF, а затем сгенерирует загрузчик, таблицу разделов и двоичные файлы приложения.

$ idf.py buildRunning cmake in directory /path/to/hello_world/buildExecuting "cmake -G Ninja --warn-uninitialized /path/to/hello_world"...Warn about uninitialized values.-- Found Git: /usr/bin/git (found version "2.17.0")-- Building empty aws_iot component due to configuration-- Component names: ...-- Component paths: ...... (more lines of build system output)[527/527] Generating hello-world.binesptool.py v2.3.1Project build complete. To flash, run this command:../../../components/esptool_py/esptool/esptool.py -p (PORT) -b 921600 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x10000 build/hello-world.bin  build 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.binor run 'idf.py -p PORT flash'


Следует учитывать, что первоначальный процесс компиляции даже простого проекта занимает время, так, в отличие от Arduino фреймворка компилируются многие дополнительные модули ESP-IDF. Дальнейшее изменение исходников приводит только к компиляции этих же файлов. Исключение составляет изенения конфигурации.

Для загрузки скомпилированных двоичных файлов (bootloader.bin, partition-table.bin и hello-world.bin) на плату ESP32 необходимо запустить команду

idf.py -p PORT [-b BAUD] flash


где PORT мы заменяет на тот, что нам нужно (COM1, /dev/ttyUSB1), а также опционально можем изменить скорость загрузки, указав необходимое значения для BAUD

Для остлеживания загруженной программы можно использовать любую утилиту мониторинга com-порта, как HTerm , CoolTerm , или использовать утилиту мониторинга IDF Monitor, для ее запуска необходимо ввести команду:

idf.py -p PORT monitor


ESP-IDF Eclipse Plugin



Документация по установки и настройки плагина находится здесь

image

Предустановки для использования:

  • Java 11 and above; (хотя и на java 8 работает, возможно из-за этого глюки);
  • Python 3.5 and above;
  • Eclipse 2020-06 CDT;
  • Git;
  • ESP-IDF 4.0 and above ;


Плагин довольно неплохо интегрирован в среду разработки, автоматизирует львиную долю функционала. Но, к сожалению, не без ложки дегтя. В eclipse версиях позже 2019-09 в esp-idf проектах в Windows до сих пор присутствует баг с индексированием исходных файлов

image

Кроме этого наблюдаются и другие глюки, когда проект просто не билдится по непонятным причинам. Помогает только зарытие проекта и перезагрузка eclipse.

ESP-IDF Visual Studio Code Extension


И последний, на мой взгляд самый интересный вариант это официальный плагин для Visual Studio Code.
Как и PlatformIO легко устанавливается из раздела расширений. Установка и настройка ESP-IDF фреймворка в этом расширении представлена в качестве меню onboarding, о чем также говорится в описании. Загрузка и установка всех компонентов происходит автоматически в процессе прохождения этапов меню. Можно привести все скрины процесса, но они интуитивно понятны, и практически не требуют пояснения. В пользу PlatformIO можно отметить более удобный инструментарий билда, загрузки и мониторинга проекта. В отличие от этого esp-idf плагин управляется с помощью меню команд, что можно вызвать с помощью клавиши F1, или сочетании клавишь, описанных в мануале.

image
Первоначальная настройка плагина

Преимущество использования плагина в том, что соблюдается классическая структура проекта, нет необходимости как-то еще шаманить с настройками (в PlatformIO такая необходимость возникает). Есть один нюанс, если мы хотим открыть ранее созданных проект в visual studio code с esp-idf плагином, то нам всего лишь необходимо скопировать в корень с проектом каталог .vscode, который можно получить сгенерировав хотя бы один раз шаблонный проект с помощью esp-idf плагина.

image
Меню команд

FreeRTOS



Согласно википедии FreeRTOS многозадачная операционная система реального времени (ОСРВ) для встраиваемых систем.. FreeRTOS обеспечивает мультизадачность за счет совместного использования процессорного времени всеми потоками, или в терминологии ОС задачами (task). На мой взгляд наиболее полное и внятное руководство по FreeRTOS на русском находится здесь . На языке оригинала мануалы можно изучить из официального источника. Я лишь приведу рисунок состояния задач

image

FreeRTOS была портирована на широкий спектр аппаратных платформ, включая процессоры Xtensa, используемые в ESP32. Подробнее можно ознакомиться в документации

GPIOs


GPIO или универсальный ввод/вывод это возможность дискретного управления пина сигналом 1 или 0.

Как видно из самого названия такие пины имеют два рабочих режима ввод или вывод. В первом случая мы читаем значение, во втором записываем. Еще одним важным фактором при работе с GPIO является уровень напряжения. ESP32 это устройство с напряжением 3,3 В. Поэтому следует быть осторожным при работе с другими устройствами, которые имеют 5В и выше. Также важно понимать, что максимальный ток, которым можно нагружать вывод GPIO, составляет 12 мА. Для использования функций GPIO, предоставляемых ESP-IDF нам необходимо подключить заголовок driver/gpio.h. Затем можно вызвать gpio_pad_select_gpio (), чтобы указать функцию данного вывода. На ESP32 доступно 34 различных GPIO. Они обозначены как:

  • GPIO_NUM_0 GPIO_NUM_19
  • GPIO_NUM_21 GPIO_NUM_23
  • GPIO_NUM_25 GPIO_NUM_27
  • GPIO_NUM_32 GPIO_NUM_39

Следующая нумерация не входит в число пинов 20, 24, 28, 29, 30 и 31.
Таблицу с распиновком можно посмотреть здесь
Следует обратить внимание, что пины GPIO_NUM_34 GPIO_NUM_39 используют только режим ввода. Их нельзя использовать для вывода сигнала. Кроме того, контакты 6, 7, 8, 9, 10 и 11 используются для взаимодействия с внешней флеш-картой по SPI, не рекомендуется их использовать для других целей, но если очень хочется, то можно. Тип данных gpio_num_t это перечисление со значениями, соответствующими номерам пинов. Рекомендуется использовать эти значения, а не числа. Направление пина устанавливается с помощью функции gpio_set_direction (). Например, для установки пина как выход:

gpio_set_direction(GPIO_NUM_17, GPIO_MODE_OUTPUT);


Для установки пина в качестве входа:

gpio_set_direction(GPIO_NUM_17, GPIO_MODE_INPUT);


Если мы настроили GPIO как выход, то можем установить его значение равным 1 или 0, вызывая gpio_set_level ().

Следующий пример переключает GPIO раз в секунду:

gpio_pad_select_gpio(GPIO_NUM_17);gpio_set_direction(GPIO_NUM_17, GPIO_MODE_OUTPUT);while(1) {    printf("Off\n");    gpio_set_level(GPIO_NUM_17, 0);    vTaskDelay(1000 / portTICK_RATE_MS);    printf("On\n");    gpio_set_level(GPIO_NUM_17, 1);    vTaskDelay(1000 / portTICK_RATE_MS);}


В качестве альтернативы настройке всех атрибутов отдельных пинов мы можем установить свойства одного или нескольких контактов с помощью вызова функции gpio_config (). Она принимает в качестве входных данных структуру gpio_config_t и устанавливает направление, pull up, pull down и настройки прерывания для всех выводов, представленных в битовой маске. Например:

gpio_config_t gpioConfig;gpioConfig.pin_bit_mask = (1 << 16) | (1 << 17);gpioConfig.mode = GPIO_MODE_OUTPUT;gpioConfig.pull_up_en = GPIO_PULLUP_DISABLE;gpioConfig.pull_down_en = GPIO_PULLDOWN_ENABLE;gpioConfig.intr_type = GPIO_INTR_DISABLE;gpio_config(&gpioConfig);


Pull up и pull down настройки
Обычно читается, что входной пин GPIO имеет сигнал высокого или низкого уровня. Это означает, что он подключен к источнику питания или к земле. Однако, если пин не подключен ник чему, то он находится в плавающем (floating) состоянии. Часто необходимо установить начальный уровень неподключенного пина как высокий или низкий. В таком случае производится аппаратная (подключение c помощью резисторов) или программная поддяжка вывода соответственно к +V pull up или к 0 pull down. В ESP32 SDK мы можем определить GPIO как pull up или pull down с помощью функции gpio_set_pull_mode (). Эта функция принимает в качестве входных данных номер контакта, который мы хотим установить, и режим поддяжки, связанный с этим контактом. Например:
gpio_set_pull_mode (21, GPIO_PULLUP_ONLY);


GPIO обработка прерывания
Чтобы обнаружить изменение входного сигнала на пине мы можем периодически опрашивать его сотояние, однако это не лучшее решение по ряду причин. Во-первых мы должны циклически делать проверку, тратя процессорное время. Во-вторых в момент опроса состояние пина может быть уже не актуальное за счет задержки и можно пропустить входные сигналы. Решением этих проблем является прерывание. Прерывание похоже на дверной звонок. Без звонка нам придется периодически проверять, есть ли кто-нибудь у двери. В исходном коде мы можем определить функцию обратного вызова прерывания, которая будет вызываться, когда вывод изменяет значение своего сигнала. Мы также можем определить, что является причиной вызова обработчика, установив следующие параметры:
  • Disable не вызывать прерывание при изменении сигнала;
  • PosEdge вызов обработчика прерывания при изменении с низкого на высокий;
  • NegEdge вызов обработчика прерывания при изменении с высокого на низкий;
  • AnyEdge вызов обработчика прерывания либо при изменении с низкого на высокий, либо при изменении с высокого на низкий;


image

Обработчик прерывания может быть отмечен для загрузки в ОЗУ во время компиляции. По умолчанию сгенерированный код находится во флэш-памяти. Если предварительно пометить его как IRAM_ATTR, он будет готов к немедленному выполнению из опреативной памяти.

void IRAM_ATTR my_gpio_isr_handle(void *arg) {...}


image

Кто работал с микроконтроллерами, знает, что опработка входных сигналов от кнопок сопровождается дребезгом контактов. Что может интерпретироваться, как серия переходов, и следовательно, серия событий обработчика прерывания. Для этого мы должны внести в код обработку дребезга контактов. Для этого нам надо считать исходное событие, дождаться, пока вибрации не утихнут, а затем выполнить повторную выборку входного состояния.

image

Следующий пример демонстрирует обработку прерывания входных сигналов. Настоятельно рекомендую ознакомится с управлением очередями во FreeRTOS для дальнейшего понимания кода, если вы еще с этим не знакомы. В примере показаны две задачи:
test1_task, которая разблокируется при наступлении события прерывания при активации сигнала на пине 25, и в консоль единократно выводится сообщение Registered a click;
test2_task периодически опрашивается, и при активации сигнала на пине 26 каждые 100 мсек в консоль выводится сообщение GPIO 26 is high!.
В примере также установлен программный таймер xTimer, он не является обязательным для данного случая, скорее как пример асинхронной задержки.
Антидребезг производится с помощью функции timeval_durationBeforeNow, которая проверяет, длится ли нажатие более 100 мсек. Есть и другие программные шаблоны против дребезга, но смысл примерно тот же. В составе ESP-IDF также имеется пример работы GPIO

Обработка входных сигналов
#include <stdio.h>#include "freertos/FreeRTOS.h"#include "freertos/task.h"#include "driver/gpio.h"#include "esp_log.h"#include "freertos/queue.h"#include "c_timeutils.h"#include "freertos/timers.h"static char tag[] = "test_intr";static QueueHandle_t q1;TimerHandle_t xTimer;#define TEST_GPIO (25)static void handler(void *args) {    gpio_num_t gpio;    gpio = TEST_GPIO;    xQueueSendToBackFromISR(q1, &gpio, NULL);}void test1_task(void *ignore) {    struct timeval lastPress;    ESP_LOGD(tag, ">> test1_task");    gpio_num_t gpio;    q1 = xQueueCreate(10, sizeof(gpio_num_t));    gpio_config_t gpioConfig;    gpioConfig.pin_bit_mask = GPIO_SEL_25;    gpioConfig.mode = GPIO_MODE_INPUT;    gpioConfig.pull_up_en = GPIO_PULLUP_DISABLE;    gpioConfig.pull_down_en = GPIO_PULLDOWN_ENABLE;    gpioConfig.intr_type = GPIO_INTR_POSEDGE;    gpio_config(&gpioConfig);    gpio_install_isr_service(0);    gpio_isr_handler_add(TEST_GPIO, handler, NULL);    while(1) {        //ESP_LOGD(tag, "Waiting on queue");        BaseType_t rc = xQueueReceive(q1, &gpio, portMAX_DELAY);        //ESP_LOGD(tag, "Woke from queue wait: %d", rc);        struct timeval now;        gettimeofday(&now, NULL);        if (timeval_durationBeforeNow(&lastPress) > 100) {            if(gpio_get_level(GPIO_NUM_25)) {                ESP_LOGD(tag, "Registered a click");                if( xTimerStart( xTimer, 0 ) != pdPASS ) {                    // The timer could not be set into the Active state.                }            }        }        lastPress = now;    }    vTaskDelete(NULL);}void test2_task(void *ignore) {    gpio_set_direction(GPIO_NUM_26, GPIO_MODE_INPUT);    gpio_set_pull_mode(GPIO_NUM_26, GPIO_PULLDOWN_ONLY);    while(true) {        if(gpio_get_level(GPIO_NUM_26)) {            ESP_LOGD(tag, "GPIO 26 is high!");            if( xTimerStart( xTimer, 0 ) != pdPASS ) {                    // The timer could not be set into the Active state.                }        }        vTaskDelay(100/portTICK_PERIOD_MS);    }}void vTimerCallback( TimerHandle_t pxTimer ) {    ESP_LOGD(tag, "The timer has expired!");}void app_main(void){    xTaskCreate(test1_task, "test_task1", 5000, NULL, 8, NULL);    xTaskCreate(test2_task, "test_task2", 5000, NULL, 8, NULL);    xTimer = xTimerCreate("Timer",       // Just a text name, not used by the kernel.                            2000/portTICK_PERIOD_MS,   // The timer period in ticks.                            pdFALSE,        // The timers will auto-reload themselves when they expire.                            ( void * ) 1,  // Assign each timer a unique id equal to its array index.                            vTimerCallback // Each timer calls the same callback when it expires.                        );}



PCNT (Pulse Counter)



Модуль PCNT (счетчик импульсов) предназначен для подсчета количества нарастающих и / или спадающих фронтов входного сигнала. Каждый блок модуля имеет 16-битный регистр со знаком и два канала, которые можно настроить для увеличения или уменьшения значения счетчика. Каждый канал имеет входной сигнал, который фиксирует изменение сигнала, а также вход управления, который можно использовать для включения или отключения счета. Входы имеют дополнительные фильтры, которые можно использовать для устранения нежелательных выбросов сигнала.

Счетчик PCNT имеет восемь независимых счетных единиц (units), пронумерованных от 0 до 7. В API они указаны с помощью pcnt_unit_t. Каждый модуль имеет два независимых канала, пронумерованных 0 и 1 и указанны с помощью pcnt_channel_t.
Конфигурация предоставляется отдельно для каждого канала устройства с помощью pcnt_config_t и охватывает:

  • Номер юнита и номер канала к которому относится эта конфигурация;
  • Номера GPIO импульсного входа и входа стробирующего импульса;
  • Две пары параметров: pcnt_ctrl_mode_t и pcnt_count_mode_t для определения того, как счетчик реагирует в зависимости от состояния управляющего сигнала и того, как выполняется подсчет положительного / отрицательного фронта импульсов.
  • Два предельных значения (минимальное / максимальное), которые используются для установления точек наблюдения и запуска прерываний, когда счетчик импульсов достигает определенного предела.


Затем настройка конкретного канала выполняется путем вызова функции pcnt_unit_config () с указанной выше конфигурационной структурой pcnt_config_t в качестве входного параметра.
Чтобы отключить импульс или управляющий вход в конфигурации, нужно указать PCNT_PIN_NOT_USED вместо номера GPIO.

После выполнения настройки с помощью pcnt_unit_config () счетчик сразу же начинает работать. Накопленный значение счетчика можно проверить, вызвав pcnt_get_counter_value ().

Следующие функции позволяют управлять работой счетчика: pcnt_counter_pause (), pcnt_counter_resume () и pcnt_counter_clear ()

Также возможно динамически изменять ранее установленные режимы счетчика с помощью pcnt_unit_config (), вызывая pcnt_set_mode ().

При желании контакт импульсного входа и контакт входа управления можно изменить на лету с помощью pcnt_set_pin ().

Модуль PCNT имеет фильтры на каждом из импульсных и управляющих входов, добавляя возможность игнорировать короткие выбросы в сигналах. Длина игнорируемых импульсов предоставляется в тактовых циклах APB_CLK с помощью вызова pcnt_set_filter_value (). Текущие настройки фильтра можно проверить с помощью pcnt_get_filter_value (). Цикл APB_CLK работает на частоте 80 МГц.
Фильтр запускается / приостанавливается вызовом pcnt_filter_enable () / pcnt_filter_disable ().
Следующие события, определенные в pcnt_evt_type_t, могут вызвать прерывание. Событие происходит, когда счетчик импульсов достигает определенных значений:

  • Минимальные или максимальные значения счетчика: counter_l_lim или counter_h_lim, указанные в pcnt_config_t;
  • Достижение уставки 0 или уставки 1, что устанавливаются с помощью функции pcnt_set_event_value ().
  • Количество импульсов = 0


Чтобы зарегистрировать, включить или отключить прерывание для указанных выше событий, необходимо вызвать pcnt_isr_register (), pcnt_intr_enable (). и pcnt_intr_disable (). Чтобы включить или отключить события при достижении пороговых значений, также потребуется вызвать функции pcnt_event_enable () и pcnt_event_disable ().
Чтобы проверить, какие пороговые значения установлены на данный момент, нужно использовать функцию pcnt_get_event_value ().
Пример из ESP-IDF представлен здесь

Я использовать счетчик PCNT для вычислени скорости вращения колеса. Для этого необходимо считать количество импульсов на оборот, после чего обнлять счетчик.

Пример кода
typedef struct {      uint16_t delay; //delay im ms      int pin;      int ctrl_pin;      pcnt_channel_t channel;      pcnt_unit_t unit;      int16_t count;} speed_sensor_params_t;esp_err_t init_speed_sensor(speed_sensor_params_t* params) {      /* Prepare configuration for the PCNT unit */    pcnt_config_t pcnt_config;    // Set PCNT input signal and control GPIOs    pcnt_config.pulse_gpio_num = params->pin;    pcnt_config.ctrl_gpio_num = params->ctrl_pin;    pcnt_config.channel = params->channel;    pcnt_config.unit = params->unit;    // What to do on the positive / negative edge of pulse input?    pcnt_config.pos_mode = PCNT_COUNT_INC;   // Count up on the positive edge    pcnt_config.neg_mode = PCNT_COUNT_DIS;   // Keep the counter value on the negative edge    pcnt_config.lctrl_mode = PCNT_MODE_REVERSE; // Reverse counting direction if low    pcnt_config.hctrl_mode = PCNT_MODE_KEEP;    // Keep the primary counter mode if high    pcnt_config.counter_h_lim = INT16_MAX;    pcnt_config.counter_l_lim = - INT16_MAX;     /* Initialize PCNT unit */    esp_err_t err = pcnt_unit_config(&pcnt_config);    /* Configure and enable the input filter */    pcnt_set_filter_value(params->unit, 100);    pcnt_filter_enable(params->unit);    /* Initialize PCNT's counter */    pcnt_counter_pause(params->unit);    pcnt_counter_clear(params->unit);    /* Everything is set up, now go to counting */    pcnt_counter_resume(params->unit);    return err;}int32_t calculateRpm(speed_sensor_params_t* params) {    pcnt_get_counter_value(params->unit, &(params->count));    int32_t rpm = 60*(1000/params->delay)*params->count/PULSE_PER_TURN;    pcnt_counter_clear(params->unit);    return rpm;}



Широтно-импульсная модуляция (ШИМ) с использованием модуля MCPWM


Информация о модуле представлена здесь
В сети имеется много статей на тему ШИМ, особенно если искать применительно к Arduino.
Википедия дает короткое и емкое определение Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) процесс управления мощностью методом пульсирующего включения и выключения прибора. Принцип регулирования с помощью ШИМ изменение ширины импульсов при постоянной амплитуде и частоте сигнала.

image

Частота ШИМ Ардуино 488,28 Гц., разрешение 8 разрядов (0255), и имеется возможность использования шести аппаратных выводов 3, 5, 6, 9, 10, 11. Однако, используя настройки регисторов микроконтроллера AVR можно добиться и других значений частоты ШИМ.
Микроконтроллер ESP32 имеет в своем арсенале отдельный модуль MCPWM, а точнее два модуля, каждый из которых имеет три пары ШИМ выводов

image

Далее в документации выходы отдельного блока помечены как PWMxA / PWMxB.
Более подробная блок-схема блока MCPWM представлена ниже. Каждая пара A / B может синхронизироваться любым из трех таймеров Timer 0, 1 и 2. Один и тот же таймер может использоваться для синхронизации более чем одной пары выходов ШИМ. Каждый блок также может собирать входные данные, такие как сигналы синхронизации, обнаруживать сигналы тревог, такие как перегрузка по току или перенапряжение двигателя, а также получать обратную связь с помощью сигналов захвата, например, на положение ротора.

image

Объем конфигурации зависит от типа двигателя, в частности, от того, сколько выходов и входов требуется, и какой будет последовательность сигналов для управления двигателем.
В нашем случае опишем простую конфигурацию для управления щеточным двигателем постоянного тока, который использует только некоторые из доступных ресурсов MCPWM. Пример схемы показан ниже. Он включает в себя H-мост для переключения поляризации напряжения, подаваемого на двигатель (M), и обеспечения достаточного тока для его управления.

image

Конфигурация включает следующие шаги:

  • Выбор блока MPWn, который будет использоваться для привода двигателя. На плате ESP32 доступны два модуля, перечисленных в mcpwm_unit_t.
  • Инициализация двух GPIO в качестве выходных сигналов в выбранном модуле путем вызова mcpwm_gpio_init (). Два выходных сигнала обычно используются для управления двигателем вправо или влево. Все доступные параметры сигналов перечислены в mcpwm_io_signals_t. Чтобы установить более одного вывода за раз, нужно использовать функцию mcpwm_set_pin () вместе с mcpwm_pin_config_t.
  • Выбор таймера. В устройстве доступны три таймера. Таймеры перечислены в mcpwm_timer_t.
  • Установка частоты таймера и начальной загрузки в структуре mcpwm_config_t.
  • Вызов mcpwm_init () с указанными выше параметрами.


Способы управления ШИМ следующие:

  • Мы можем установить высокое или низкое значение для конкретного сигнала с помощью функции mcpwm_set_signal_high () или mcpwm_set_signal_low (). Это заставит двигатель вращаться с максимальной скоростью или остановиться. В зависимости от выбранного выхода A или B двигатель будет вращаться вправо или влево.
  • Другой вариант подать на выходы сигнал ШИМ, вызвав mcpwm_start () или mcpwm_stop (). Скорость двигателя будет пропорциональна режиму ШИМ.
  • Чтобы изменить режим ШИМ, необходимо вызвать mcpwm_set_duty () и указать значение режима в ролцентах. При желании можно вызвать mcpwm_set_duty_in_us (), чтобы устанавливать значение в микросекундах. Проверить текущее установленное значение можно с помощью вызова mcpwm_get_duty (). Фазу сигнала ШИМ можно изменить, вызвав mcpwm_set_duty_type (). Коэффициент заполнения устанавливается индивидуально для каждого выхода A и B с помощью mcpwm_generator_t. Значение коэффициента заполнения относится к длительности высокого или низкого выходного сигнала. Это настраивается при вызове mcpwm_init (), как описано выше, и выборе одной из опций в mcpwm_duty_type_t.


Пример кода для коллекторного двигателя находится здесь

В своем проекте я практически использовал код из примера, немного подкорректировав его и добавил управление вторым двигателем. Для независимого управления ШИМ-каналами необходимо каждый из них настроить отдельным таймером, например MCPWM_TIMER_0 и CPWM_TIMER_1:

Пример кода
void mcpwm_example_gpio_initialize(void){    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT);    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT);    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM1A, GPIO_PWM1A_OUT);    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM1B, GPIO_PWM1B_OUT);    //mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM_SYNC_0, GPIO_SYNC0_IN);    mcpwm_config_t pwm_config;    pwm_config.frequency = 1000;    //frequency = 500Hz,    pwm_config.cmpr_a = 0;    //duty cycle of PWMxA = 0    pwm_config.cmpr_b = 0;    //duty cycle of PWMxb = 0    pwm_config.counter_mode = MCPWM_UP_COUNTER;    pwm_config.duty_mode = MCPWM_DUTY_MODE_0;    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);    //Configure PWM0A & PWM0B with above settings    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_1, &pwm_config);    //Configure PWM0A & PWM0B with above settings          // deadtime (see clock source changes in mcpwm.c file)    mcpwm_deadtime_enable(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_BYPASS_FED, 80, 80);   // 1us deadtime    mcpwm_deadtime_enable(MCPWM_UNIT_0, MCPWM_TIMER_1, MCPWM_BYPASS_FED, 80, 80);  }



Подключение к WI-Fi и работа с MQTT


Тема протокола Wi-FI достаточно обширная. Для описания протокола понадобиться серия отдельных статей. В официальном руководстве можно ознакомиться с разделом Wi-Fi driver. Описание программного API находится здесь . Примеры кода можно посмотреть здесь

Библиотеки Wi-Fi обеспечивают поддержку для настройки и мониторинга сетевых функций ESP32 WiFi. Следующие доступные конфигурации:

  • Режим станции (также известный как режим STA или режим клиента WiFi). ESP32 подключается к точке доступа.
  • Режим AP (он же режим Soft-AP или режим точки доступа). Станции подключаются к ESP32.
  • Комбинированный режим AP-STA (ESP32 одновременно является точкой доступа и станцией, подключенной к другой точке доступа).
  • Различные режимы безопасности для вышеперечисленных (WPA, WPA2, WEP и т. Д.)
  • Поиск точек доступа (активное и пассивное сканирование).
  • Смешанный режим для мониторинга пакетов WiFi IEEE802.11.


MQTT протокол. Ознакомится с темой можно здесь или здесь . Руководство ESP-IDF с примерами находится здесь .

Для настройки MQTT в коде сначала необходимо подключиться к сети Wi-Fi. После чего установить подключение к брокеру. Обработка сообщения производится в коллбеке в качестве параметра которого выступает esp_mqtt_event_handle_t event. Если тип события равен MQTT_EVENT_DATA, значит можно парсить топик и данные. Можно настроить различное поведение в результате успешного подключения, отключение и подписки на топики.

Пример подключени к Wi-Fi:
tcpip_adapter_init();    wifi_event_group = xEventGroupCreate();    ESP_ERROR_CHECK(esp_event_loop_create_default());    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL));    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();    ESP_ERROR_CHECK( esp_wifi_init(&cfg) );    ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );    ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );    wifi_config_t sta_config = {        .sta = {            .ssid = CONFIG_ESP_WIFI_SSID,            .password = CONFIG_ESP_WIFI_PASSWORD,            .bssid_set = false        }    };    ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config) );    ESP_LOGI(TAG, "start the WIFI SSID:[%s] password:[%s]", CONFIG_ESP_WIFI_SSID, "******");    ESP_ERROR_CHECK( esp_wifi_start() );    ESP_LOGI(TAG, "Waiting for wifi");    xEventGroupWaitBits(wifi_event_group, BIT0, false, true, portMAX_DELAY);    //MQTT init    mqtt_event_group = xEventGroupCreate();    mqtt_app_start(mqtt_event_group);



Подключение к MQTT брокеру
void mqtt_app_start(EventGroupHandle_t event_group){    mqtt_event_group = event_group;    const esp_mqtt_client_config_t mqtt_cfg = {        .uri = "mqtt://mqtt.eclipse.org:1883",    //mqtt://mqtt.eclipse.org:1883        .event_handle =  mqtt_event_handler,        .keepalive = 10,        .lwt_topic = "esp32/status/activ",        .lwt_msg = "0",        .lwt_retain = 1,    };    ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());    client = esp_mqtt_client_init(&mqtt_cfg);    esp_mqtt_client_start(client);



Обработчик MQTT
esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event){    esp_mqtt_client_handle_t client = event->client;    int msg_id;    command_t command;    // your_context_t *context = event.context;    switch (event->event_id) {        case MQTT_EVENT_CONNECTED:             xEventGroupSetBits(mqtt_event_group, BIT1);            ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");            msg_id = esp_mqtt_client_subscribe(client, "esp32/car/#", 0);            msg_id = esp_mqtt_client_subscribe(client, "esp32/camera/#", 0);            ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);            break;        case MQTT_EVENT_DISCONNECTED:            ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");            break;        case MQTT_EVENT_SUBSCRIBED:            ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);            msg_id = esp_mqtt_client_publish(client, "esp32/status/activ", "1", 0, 0, 1);            ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);            break;        case MQTT_EVENT_UNSUBSCRIBED:            ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);            break;        case MQTT_EVENT_PUBLISHED:            ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);            break;        case MQTT_EVENT_DATA:            ESP_LOGI(TAG, "MQTT_EVENT_DATA");            printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);            printf("DATA=%.*s\r\n", event->data_len, event->data);            memset(topic, 0, strlen(topic));            memset(data, 0, strlen(data));            strncpy(topic, event->topic, event->topic_len);            strncpy(data, event->data, event->data_len);            command_t command = {                .topic = topic,                .message = data,            };            parseCommand(&command);            break;        case MQTT_EVENT_ERROR:            ESP_LOGI(TAG, "MQTT_EVENT_ERROR");            break;        default:            break;    }    return ESP_OK;}



На этом я завершаю свое повествование об использовании модуля ESP32. В статье были рассмотрены примеры на ESP-IDF, как фреймворка максимально использующего ресурсы модуля. Программирование с использованием других платформ, как javaScript, MicroPython, Lua можно найти на соответствующих ресурсах. В следующей статье, как уже упоминалось, я приведу практический пример использовании микроконтроллера. Сравню программный подход Arduino и ESP-IDF.
Подробнее..

Платформа с web-камерой на ESP32

13.10.2020 00:06:12 | Автор: admin
Идея собрать мобильную платформу с web-камерой на борту появилась практически спонтанно. Мне хотелось иметь в арсенале скромной домашней автоматизации что-то вроде IP-камеры. И тут даже не столько вопрос в цене или в качестве, скорее это можно назвать творческим экспериментом. Материалом для вдохновения были различные статьи DIY и проекты вроде этого

В сборе конструкция выглядит так

image

Комплектующие


В качестве базы выступает мобильная двухпалубная робо-платформа Car Chassis 2WD Mini Kit

image

Размеры платформы: 135 мм х 135 мм х 80 мм

Приводом являются два стандартных мотор-колеса с редуктором и двигателем постоянного тока с растровыми дисками для датчиков скорости:

  • номинальный ток: 250 мА макс. при напряжении 3,6 В
  • крутящий момент 800 г/см (при напряжении 6В)
  • напряжение питания: 6 8 В
  • скорость вращения без нагрузки: 170 об/мин (при напряжении 3,6 В)
  • передаточное число редуктора: 1: 48
  • оси выходят с двух сторон
  • диаметр осей: 5 мм
  • размеры: 64x20x20 мм
  • вес: 26 г


В качестве драйвера электродвигателя выбран модуль MX1508
Почитать про модуль можно здесь

image

Технические параметры:

  • Напряжение питания: 2 10 В
  • Рабочий драйвера на один канал: 1.5 А (пиковый ток 2.5 А, не более 10 секунд)
  • Входной сигнал логика: 5 В
  • Габариты: 24,7 х 21 х 0,5 мм


Для горизонтального и вертикального перемещения IP камеры выбраны популярные серводвижки SG90 2кг

image

На сайте производителя представлена следующая спецификация:

  • Weight: 9g
  • Dimension: 2312.2x29mm
  • Stall torque: 1.8kg/cm(4.8v)
  • Gear type: POM gear set
  • Operating speed: 0.1sec/60degree(4.8v)
  • Operating voltage: 4.8v
  • Temperature range: 0_ 55
  • Dead band width: 1us
  • Power Supply: Through External Adapter
  • servo wire length: 25 cm
  • Servo Plug: JR (Fits JR and Futaba)


Для web-камеры был выбран держатель FPV Bracket Kit

image

Описание держателя в интернет-магазине: FPV позволит ориентировать FPV-камеру в 3-х плоскостях. Простое подключение и управление позволит быстро собрать и подключить платформу к контроллеру или полетному контроллеру. Используется вместе с сервоприводами EMAX 9g ES08A Mini Servo или сервами SG90 (с некоторыми доработками).
С некоторыми доработками следует учитывать, набор пришлось дорабатывать напильником в прямом смысле. Но для DIY за $0.36 вполне себе ничего. Некоторые жаловались, что даже доработка не помогла, и сервы не подошли по размерам, в моем же случае все норм. Используется два движка SG90 для горизонтального и вертикального перемещения камеры. Вариант спроектировать и распечатать на 3D-принтере тоже рассматривался, но остановился пока на этом держателе.

IP Камера на базе ESP32 CAM

image

Согласно описанию: The I2S subsystem in the ESP32 also provides a high speed bus connected directly to RAM for Direct Memory Access. Putting it simply, you can configure the ESP32 I2S subsystem to send or receive parallel data under hardware control.
Т.е. можно настроить интерфейс I2S ESP32 для отправки или получения параллельных данных под аппаратным управлением, что и реализовано для подключения камеры. Разработкой данной платы занимается компания Seeed Studio, здесь представлена цена $9.90, но в наших радиомагазинах продают за $8, видимо не только Seeed Studio их может производить.

Технические данные:

  • The smallest 802.11b/g/n Wi-Fi BT SoC Module
  • Low power 32-bit CPU,can also serve the application processor
  • Up to 160MHz clock speedSummary computing power up to 600 DMIPS
  • Built-in 520 KB SRAM, external 4MPSRAM
  • Supports UART/SPI/I2C/PWM/ADC/DAC
  • Support OV2640 and OV7670 cameras,Built-in Flash lamp.
  • Support image WiFI upload
  • Support TF card
  • Supports multiple sleep modes.
  • Embedded Lwip and FreeRTOS
  • Supports STA/AP/STA+AP operation mode
  • Support Smart Config/AirKiss technology
  • Support for serial port local and remote firmware upgrades (FOTA)


Источник питания


Управление платформы от автономного питания длительное время без подзарядки не предусматривалось. Поэтому в качестве источника был выбран модуль питания 2А на 18650 с USB-выходом с одним слотом.

image

Характеристики:
  • Тип аккумулятора: 18650 Li-Ion (без защиты)
  • Напряжение зарядного устройства: от 5В до 8В
  • Выходные напряжения:
  • 3В непосредственно с аккумулятора через защитное устройство
  • 5В через повышающий преобразователь.
  • Максимальный выходной ток:
  • Выход 3В 1А
  • Выход 5В 2А
  • Максимальный ток зарядки: 1А
  • Тип входного разъёма: micro-USB
  • Тип выходного разъёма: USB-A
  • Потребителей 5В от перегрузки и короткого замыкания
  • Габаритные размеры:
  • Печатная плата: 29,5 х 99,5 х 19 мм
  • Всего устройства: 30 х 116 х 20 мм


В качестве основного контроллера выбран ESP-WROOM-32

Ранее я описывал характеристики ESP32 более детально. Здесь приведу базовые характеристики модуля:
  • 32-битный двуядерный микропроцессор Xtensa LX6 до 240 МГц
  • Флеш-память: 4 МБ
  • Беспроводная связь Wi-Fi 802.11b/g/n до 150 Мб/c, Bluetooth 4.2 BR/EDR/BLE
  • Поддержка STA/AP/STA+AP режимов, встроенный стек TCP/IP
  • GPIO 32 (UART, SPI, I2C, I2S интерфейсы, ШИМ, SD контроллеры, емкостные сенсорные, АЦП, ЦАП и не только
  • Питание: через microUSB разъем (CP2102 преобразователь) или выводы
  • Шаг выводов: 2.54 мм (можно вставить в макетную плату)
  • Размер платы: 5.2 х 2.8 см


В качестве датчиков скорости применены два оптических энкодеров Noname для подсчета импульсов вращения растровых дисков мотор-колеса

image

Характеристики:
  • Напряжение питания: 3,3В 5В
  • Ширина паза датчика: 6 мм;
  • Тип выхода: аналоговый и цифровой
  • Индикатор: cостояние выхода


Для измерения расстояния применен популярный ультразвуковой дальномер HC-SR04

image

Характеристики:
  • Напряжение питания: 5 В
  • Потребление в режиме тишины: 2 мА
  • Потребление при работе: 15 мА
  • Диапазон расстояний: 2400 см
  • Эффективный угол наблюдения: 15
  • Рабочий угол наблюдения: 30


Программные реализации


Первым шагом стало знакомство и прошивка модуля ESP32 CAM.
Описание работы с модулем представлены на Харбе, здесь, здесь и на других ресурсах.
В основном статьи описывают простой процесс прошивки с помощью Arduino IDE. В большинстве случает этого достаточно, и меня по-началу этот вариант тоже устраивал.

image

В радиомагазинах модули ESP32-CAM продаются с камерой OV2640, поэтому в скетче необходимо сделать небольшое изменение:

// Select camera model//#define CAMERA_MODEL_WROVER_KIT//#define CAMERA_MODEL_ESP_EYE//#define CAMERA_MODEL_M5STACK_PSRAM//#define CAMERA_MODEL_M5STACK_WIDE#define CAMERA_MODEL_AI_THINKER


А также указать SSID и пароль к точке доступа Wi-Fi

const char* ssid = "REPLACE_WITH_YOUR_SSID";const char* password = "REPLACE_WITH_YOUR_PASSWORD";


Одним из условий работы web-камеры в моем случае является возможность передавать видеопоток через прокси-сервер Keenetic. Я использую домашний роутер Keenetik Viva. Сервис KeenDNS предоставляет доменное имя домашнему web-ресурсу. Но к моему удивлению первая попытка завершилась неудачей. При попытке удаленного доступа через интернет я получил ошибку Header fields are too long for server to interpret. С подобной проблемой я не первый столкнулся. Решением данной проблемы является изменение конфигурации CONFIG_HTTPD_MAX_REQ_HDR_LEN, например

#define CONFIG_HTTPD_MAX_REQ_HDR_LEN 2048


В случае с Arduino IDE ESP32 модули уже скомпилированны и представлены в виде статических библиотек, которые располагаются в Windows по пути %userprofile%\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\tools\sdk\
Просто изменение параметра в заголовке ничего не даст.
То есть для изменения конфигурации нам необходимо перекомпилировать библиотеки ESP-IDF.
Решением стало клонирование проекта github.com/espressif/esp-who. В каталоге с примерами находим проект camera_web_server, делаем изменение параметра максимальной длины заголовка, ну а также не забываем указать настройки подключения к Wi-Fi

image

Для того, чтобы проект скомпилировался, пришлось установить еще один чек-бокс Support array rtc_gpio_desc for ESP32

image

После успешной компиляции и загрузки проекта переходим по соответствующему IP адресу в браузере и попадаем на страницу с интерфейсом нашей web-камеры.

image

Интерфейс похож на Arduino примеры, но добавлен некоторый функционал.

Я внес небольшие изменения в исходный файл app_httpd.c для управления сигналом вывода GPIO_NUM_2 с web-интерфейса. Хотя в описании модуля говориться об использовании пинов для нужд SD-карты, но я ее не использую, поэтому могу задействовать данные пины.

void app_httpd_main(){gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);static esp_err_t cmd_handler(httpd_req_t *req){.......//строчка 736else if(!strcmp(variable, "gpio2")) {    if (val == 0)                gpio_set_level(GPIO_NUM_2, 0);            else                gpio_set_level(GPIO_NUM_2, 1);    }


Для дистанционного управления я наверстал незамысловатую панель на Node-Red, что крутиться на Raspberry pi.

image

Изображение видеопотока удалось встроить в ноду template:

<iframe     src="http://personeltest.ru/away/192.168.1.61"    width="300" height="300"></iframe>


Тут важен один момент: необходимо встраивать именно http, в случае https будут проблемы с Content-Security-Policy. Если же и в этом случае будут возникать проблемы, то можно попробовать добавить заголовки:

<script>    var meta = document.createElement('meta');    meta.httpEquiv = "Content-Security-Policy";    meta.content = "default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline';";document.getElementsByTagName('head')[0].appendChild(meta);</script>


Для управления пином GPIO_NUM_2 модуля ESP32-CAM после внесения изменений в прошивку следует выполнять следующий http GET запрос:

http://192.168.1.61/control?var=gpio2&val=1 //или 0


На интерфейсе панели это переключатель wakeup, в рабочем потоке это выглядит так

image

где функция request:

var newMsg = {}var i = msg.payload ? 1 : 0;newMsg.query = "control?var=gpio2&val=" + inode.send(newMsg)


Настройки ноды http request:

image

Остальные параметры и статусы передаются по MQTT

Подключение к Wi-Fi и MQTT


Я приведу примеры, используя Arduino фреймворк, так как я на нем также экспериментировал. Но в итоге рабочее приложение у меня на ESP-IDF.

Подключение заголовка #include <WiFi.h>

Функция подключения к Wi-Fi для Arduino фреймворка
void setup_wifi(){  Serial.println("Starting connecting WiFi.");  delay(1000);  for (int8_t i = 0; i < 3; i++)  {    WiFi.begin(ssid, password);    uint32_t start = millis();    while (WiFi.status() != WL_CONNECTED && ((millis() - start) < 4000))    {      Serial.print(".");      delay(500);    }    if (WiFi.status() == WL_CONNECTED)    {      Serial.println("WiFi connected");      Serial.println("IP address: ");      Serial.println(WiFi.localIP());      return;    }    else    {      Serial.println("Connecting Failed");      //WiFi.reconnect(); // this reconnects the AP so the user can stay on the page    }  }}



В функции присутствует цикл на три итерации, т.к. с первой попытки часто не подключается, а затем бесконечно ждет статуса WL_CONNECTED. Может как-то по-другому еще можно решить, но так точно работает.

Подключение к MQTT для Arduino фреймворка выполняется с помощью библиотеки github.com/knolleary/pubsubclient.git.

Для использования библиотеки необходимо подключить заголовок #include <PubSubClient.h>

Функция подключения к MQTT
bool setup_mqtt(){  if (WiFi.status() == WL_CONNECTED)  {    if (!client.connected())    {      client.setServer(mqtt_server, 1883);      client.setCallback(callback);    }    Serial.print("Connecting to MQTT server ");    Serial.print(mqtt_server);    Serial.println("...");    String clientId = "ESP32_car_client";    if (client.connect(clientId.c_str()))    {      Serial.println("Connected to MQTT server ");      //subscribing to topics      client.subscribe("esp32/car/#");      client.subscribe("esp32/camera/#");      return true;    }    else    {      Serial.println("Could not connect to MQTT server");      return false;    }  }  return false;}



Вначале мы проверяем, что подключены к Wi-Fi, затем подключаемся к брокеру client.setServer(mqtt_server, 1883);

И устанавливаем коллбек функцию client.setCallback(callback);

MQTT коллбек функция
void callback(char *topic, byte *payload, unsigned int length){  Serial.println("Message arrived ");  memset(payload_buf, 0, 10);  for (int i = 0; i < length; i++)  {    payload_buf[i] = (char)payload[i];  }  command_t mqtt_command = {      .topic = topic,      .message = payload_buf};  xQueueSend(messageQueue, (void *)&mqtt_command, 0);}



В случае успешного подключения подписываемся на топики

client.subscribe("esp32/car/#");client.subscribe("esp32/camera/#");


Были замечены случаи отваливания MQTT соединения, поэтому была добавлена проверка в периодическую задачу опроса.

Периодическая задача опроса
void pollingTask(void *parameter){  int32_t start = 0;  while (true) {    if (!client.connected()) {      long now = millis();      if (now - start > 5000) {        start = now;        // Attempt to reconnect        if (setup_mqtt()) {          start = 0;        }      }    }    else {      client.loop();      int val = digitalRead(WAKEUP_PIN);      if (val == LOW) {        Serial.println("Going to sleep now");        esp_deep_sleep_start();      }    }    vTaskDelay(100 / portTICK_PERIOD_MS);  }  vTaskDelete(NULL);}



Пример подключения к Wi-FI и MQTT c помощью ESP-IDF был описан в предыдущей статье

В случае использования ESP-IDF глюков при подключении к Wi-Fi и MQTT не наблюдалось. Один нюанс при обработке данных из MQTT топика в функции esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event): при типе события MQTT_EVENT_DATA следует учитывать параметры event->topic_len и event->data_len и брать имя топика и данные именно соответствующей длины, в противном случае мы получим мусор. Для этого мы можем создать буферные массивы или выделить память динамически (затем освободить ее), и скопировать данные, например так

strncpy(topic, event->topic, event->topic_len);strncpy(data, event->data, eventdata_len);


Отправка данных в топик производится с помощью функции esp_mqtt_client_publish

esp_mqtt_client_publish(client, topics[i], topic_buff[i], 0,0,0);


Обработка данных ультразвукового датчика HC-SR04


HC-SR04 дешевый и популярный датчик для проектирования устройств с микроконтроллерами. Как обычно в сети куча материала на эту тему: здесь и здесь. Описание также можно посмотреть здесь, а краткий даташит здесь.
Если коротко, то для начала измерения расстояния необходимо подать высокий сигнал длительностью 10 s на пин Trig. Это инициирует передачу сенсором 8 циклов ультразвукового импульса с частотой 40 кГц и ожидания отраженного ультразвукового импульса. Когда датчик обнаруживает ультразвуковой сигнал от приемника, он устанавливает для вывода Echo высокий уровень и задержку на период (ширину), пропорциональный расстоянию. Чтобы вычислить расстояние необходимо вычислить формулу:

distance = duration * 340 м/с = duration * 0.034 м/мкс, где

340 м/с скорость распространения звука в воздухе.

image

В Arduino фреймворке функция pulseIn позволяет узнать длительность импульса в s
Для ESP-IDF есть проект ESP-IDF Components library, в котором также есть компонент ultrasonic для HC-SR04.

Пример кода
esp_err_t ultrasonic_measure_cm(const ultrasonic_sensor_t *dev, uint32_t max_distance, uint32_t *distance){    CHECK_ARG(dev && distance);    PORT_ENTER_CRITICAL;    // Ping: Low for 2..4 us, then high 10 us    CHECK(gpio_set_level(dev->trigger_pin, 0));    ets_delay_us(TRIGGER_LOW_DELAY);    CHECK(gpio_set_level(dev->trigger_pin, 1));    ets_delay_us(TRIGGER_HIGH_DELAY);    CHECK(gpio_set_level(dev->trigger_pin, 0));    // Previous ping isn't ended    if (gpio_get_level(dev->echo_pin))        RETURN_CRITICAL(ESP_ERR_ULTRASONIC_PING);    // Wait for echo    int64_t start = esp_timer_get_time();    while (!gpio_get_level(dev->echo_pin))    {        if (timeout_expired(start, PING_TIMEOUT))            RETURN_CRITICAL(ESP_ERR_ULTRASONIC_PING_TIMEOUT);    }    // got echo, measuring    int64_t echo_start = esp_timer_get_time();    int64_t time = echo_start;    int64_t meas_timeout = echo_start + max_distance * ROUNDTRIP;    while (gpio_get_level(dev->echo_pin))    {        time = esp_timer_get_time();        if (timeout_expired(echo_start, meas_timeout))            RETURN_CRITICAL(ESP_ERR_ULTRASONIC_ECHO_TIMEOUT);    }    PORT_EXIT_CRITICAL;    *distance = (time - echo_start) / ROUNDTRIP;    return ESP_OK;}



В комментариях присутствует объяснение к алгоритму. Измерение длительности импульса происходит в цикле while пока уровень сигнала высокий на Echo пине (после // got echo, measuring) после чего расстояние измеряется

*distance = (time - echo_start) / ROUNDTRIP

Коэффициент для получения расстояния в сантиметрах ROUNDTRIP = 58.

В Arduino фреймворке это выглядит еще проще

Пример кода
#include "ultrasonic.h"portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;#define PORT_ENTER_CRITICAL portENTER_CRITICAL(&mux)#define PORT_EXIT_CRITICAL portEXIT_CRITICAL(&mux)Ultrasonic::Ultrasonic() {  pinMode(GPIO_NUM_33, OUTPUT);  pinMode(GPIO_NUM_26, INPUT);}uint32_t Ultrasonic::calculateDistance() {    PORT_ENTER_CRITICAL;    digitalWrite(GPIO_NUM_33, LOW);    delayMicroseconds(2);    digitalWrite(GPIO_NUM_33, HIGH);    delayMicroseconds(10);    digitalWrite(GPIO_NUM_33, LOW);    duration = pulseIn(GPIO_NUM_26, HIGH);    PORT_EXIT_CRITICAL;    distance = duration / 58;    return distance;}uint32_t Ultrasonic::getDistance() {    return distance;}



Была попытка использования библиотеки ultrasonic ESP-IDF для Arduino проекта ESP32, но работает это дело до первого глюка датчика. Почему так, точно выяснить не удалось. Глюк датчика это периодически просчет в импульсах и выдача ложных показаний, в вычисленных цифрах это выглядит, как расстояние более 20000 см. На форумах пишут, что это из-за некачественного датчика (китайская копия).

Измерение скорости с помощью оптических датчиков


Оптический модуль считывания импульсов создан на основе компаратора LM393 и щелевого датчика. Предназначен для использования с растровыми дисками, которые одеваются на вал редуктора или электродвигателя.

Как обычно на эту тему уже есть статьи: digitrode.ru, mirrobo.ru, и arduino-kit.ru.

Схема датчика:

image

В Arduino фреймворке мы вычисляем скорость следующим образом:
определяем переменную (структуру) счетчика, например
typedef struct {  int encoder_pin = ENCODER_PIN; // pulse output from the module  unsigned int rpm = 0; // rpm reading  volatile byte pulses = 0; // number of pulses  unsigned long timeold = 0;  unsigned int pulsesperturn = 20;} pulse_t;


Затем в функции setup мы должны зарегистрировать входной пин и прерывание на него

pinMode(pulse_struct.encoder_pin, INPUT);attachInterrupt(pulse_struct.encoder_pin, counter, FALLING);


Далее вычисляется количество оборотов в минуту

pulse_struct.rpm =         (60 * 1000 / pulse_struct.pulsesperturn )/         (1000)* pulse_struct.pulses;


Пример кода
void pulseTask(void *parameters) {  sensor_data_t data;  data.sensor = OPTICAL_SENSOR;  portBASE_TYPE xStatus;   while (true) {      //Don't process interrupts during calculations      detachInterrupt(0);      pulse_struct.rpm =         (60 * 1000 / pulse_struct.pulsesperturn )/         (1000)* pulse_struct.pulses;      pulse_struct.pulses = 0;      data.value = pulse_struct.rpm;      //Restart the interrupt processing      attachInterrupt(0, counter, FALLING);      Serial.print("optical: ");      Serial.println(data.value);     //Sending data to sensors queue    xStatus = xQueueSend(sensorQueue, (void *)&data, 0);    if( xStatus != pdPASS ) {     printf("Could not send optical to the queue.\r\n");    }    taskYIELD();    vTaskDelay(1000 / portTICK_PERIOD_MS);   }}



В ESP-IDF для этих целей можно использовать аппаратный счетчик PCNT, который был описан в предыдущей статье.

Пример кода обрабатываемой задачи
typedef struct {      uint16_t delay; //delay im ms      int pin;      int ctrl_pin;      pcnt_channel_t channel;      pcnt_unit_t unit;      int16_t count;} speed_sensor_params_t;void pulseTask(void *parameters) {  sensor_data_t data_1;  sensor_data_t data_2;  data_1.sensor = OPTICAL_SENSOR_1;  data_2.sensor = OPTICAL_SENSOR_2;  portBASE_TYPE xStatus;  speed_sensor_params_t params_1 = {      .delay = 100,      .pin = ENCODER_1_PIN,      .ctrl_pin = GPIO_NUM_0,      .channel = PCNT_CHANNEL_0,      .unit = PCNT_UNIT_0,      .count = 0,  };    ESP_ERROR_CHECK(init_speed_sensor(&params_1));    speed_sensor_params_t params_2 = {      .delay = 100,      .pin = ENCODER_2_PIN,      .ctrl_pin = GPIO_NUM_1,      .channel = PCNT_CHANNEL_0,      .unit = PCNT_UNIT_1,      .count = 0,  };    ESP_ERROR_CHECK(init_speed_sensor(&params_2));    while(true) {        data_1.value = calculateRpm(&params_1);        data_2.value = calculateRpm(&params_2);        sensor_array[OPTICAL_SENSOR_1] = data_1.value;        sensor_array[OPTICAL_SENSOR_2] = data_2.value;        printf("speed 1 = %d\n", data_1.value);        printf("speed 2 = %d\n", data_2.value);        xStatus = xQueueSend(sensorQueue, (void *)&data_1, 0);        xStatus = xQueueSend(sensorQueue, (void *)&data_2, 0);        if( xStatus != pdPASS ) {        printf("Could not send optical to the queue.\r\n");        }        vTaskDelay(100 / portTICK_PERIOD_MS);}}



ШИМ управление


Про управление сервоприводами на Arduino можно почитать на developer.alexanderklimov, wiki.amperka.ru.
Как сказано в источнике выше: сервопривод это механизм с электромотором, который может поворачиваться в заданный угол и удерживать текущее положение. Практически мы имеем дело с широтно-импульсной модуляцией, где от ширины импульса сигнала зависит угол поворота привода.

image

Для ESP32 на Arduino фреймворке можно использовать библиотеку ESP32Servo

Для этого мы подключаем заголовок

#include <ESP32Servo.h>


Создаем объект

Servo servo_horisontal;


Указываем выходной пин

 servo_horisontal.attach(SERVO_CAM_HOR_PIN);


После этого можем записывать необходимое значение величины поворота

servo_horisontal.write(value);


ШИМ управление для других типов устройств на Arduino фреймворке производится с помощью библиотеки esp32-hal-ledc.h
Микроконтроллеры ESP32 не поддерживают стандартную функцию Arduino analogWrite() для ШИМ. Вместо их прдусмотрены функции:
ledcSetup(channel, freq, resolution_bits) указываются канал, частота и разрешение
ledcAttachPin(GPIO, channel) указываются порт и канал
ledcWrite(channel, dutycycle) указываются канал и коэффициент заполнения ШИМ-сигнала
Примеры можно увидеть
Как видно из названия, изначально функции проектировались для управления светодиодными модулями, но их также используют и для других целей.

В ESP-IDF фреймворке управление серво-приводом осуществляется так же, как и управление коллекторным с использованием модуля MCPWM, как описано в предыдущей статье. Пример MCPWM servo motor control можно посмотреть здесь

Пример кода
static uint32_t servo_per_degree_init(uint32_t degree_of_rotation){    uint32_t cal_pulsewidth = 0;    cal_pulsewidth = (SERVO_MIN_PULSEWIDTH + (((SERVO_MAX_PULSEWIDTH -          SERVO_MIN_PULSEWIDTH) * (degree_of_rotation)) / (SERVO_MAX_DEGREE)));    return cal_pulsewidth;}void mcpwm_example_servo_control(void *arg){    uint32_t angle, count;    //1. mcpwm gpio initialization    mcpwm_example_gpio_initialize();    //2. initial mcpwm configuration    printf("Configuring Initial Parameters of mcpwm......\n");    mcpwm_config_t pwm_config;    pwm_config.frequency = 50;    //frequency = 50Hz, i.e. for every servo motor time period should be 20ms    pwm_config.cmpr_a = 0;    //duty cycle of PWMxA = 0    pwm_config.cmpr_b = 0;    //duty cycle of PWMxb = 0    pwm_config.counter_mode = MCPWM_UP_COUNTER;    pwm_config.duty_mode = MCPWM_DUTY_MODE_0;    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);    //Configure PWM0A & PWM0B with above settings    while (1) {        for (count = 0; count < SERVO_MAX_DEGREE; count++) {            printf("Angle of rotation: %d\n", count);            angle = servo_per_degree_init(count);            printf("pulse width: %dus\n", angle);            mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, angle);            vTaskDelay(10);     //Add delay, since it takes time for servo to rotate, generally 100ms/60degree rotation at 5V        }    }}



Т.е. нам необходимо инициализировать модуль с помощью функции mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);
А затем задавать значение угла
mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, angle);

C примерами использования модуля MCPWM для разных типов привода можно ознакомиться на github.
Пример управления коллекторным двигателем также был представлен в предыдущей статье.

Хочется отметить, что подобная платформа представляет собой дифференциально-управляемую неголономную систему. Двигатели имеют разброс в характеристиках, поэтому приходится задавать программное смещение для одного их них для обеспечения равномерной скорости. Ознакомиться с теорией можно на сайте robotosha.ru robotosha.ru/robotics/robot-motion.html. Для оптимального управления мотор-редукторами применен PID-алгоритм с обратной связью в виде оптических датчиков. Описание алгоритма представлено здесь и здесь.
Описание уравнений движения, а также алгоритмов управления выходит за рамки данной статьи. Дифференциальная кинематика еще не реализованы в коде.

Sleep Modes


Согласно документации, а также описания в статье, ESP32 может переключаться между различными режимами питания:
  • Active mode
  • Modem Sleep mode
  • Light Sleep mode
  • Deep Sleep mode
  • Hibernation mode


В таблице приведены различия потребления тока в разных режимах.

image

Я задействовал режим Deep Sleep mode в случае отсутствия высокого сигнала на пине GPIO_NUM_13

gpio_set_direction(WAKEUP_PIN, GPIO_MODE_INPUT);esp_sleep_enable_ext0_wakeup(WAKEUP_PIN,1); //1 = High, 0 = Low


В случае отсутствия внешнего воздействия я подтянул вход 10к резистором к 3.3 В, хотя можно и программно. А в задаче периодического опроса проверяю состояние сигнала входа

if(!gpio_get_level(WAKEUP_PIN)) {         printf("Going to sleep now\n");        esp_deep_sleep_start();    }


На этом буду завершать описание. Был показан практический пример использования модулей ESP32 с различной периферией. Также затронуты некоторые вопросы программной реализации и сравнение подходов ESP-IDF и Arduino.
Подробнее..

WI-FI 6 ЧТО ЭТО? КАКИЕ СЕРВИС ПОДКЛЮЧАТЬ? СЦЕНАРИИ ИСПОЛЬЗОВАНИЯ (ЧАСТЬ 1)

15.04.2021 16:11:54 | Автор: admin

ЧТО ЖЕ ТАКОЕ WI-FI 6 И ЧЕМ ОН ЛУЧШЕ ПРОШЛХ ФОРМАТОВ

Резюме

Wi-Fi 6 (или802.11 ax) новый стандарт беспроводных сетей. Новый формат, который создавался с целью исправить баги прошлых стандартов. К 2021му году у WiFi накопилось достаточно нерешенных проблем.

  • Конфликт между точками Wi-Fi

  • Разрыв сигнала с точкой

  • Однопоточность сигнала. 1 сигнал 1 устройство

  • Энергопотребление

Wi-Fi 6 создавался для решения этих проблем.

ОТЛИЧИЯ WI-FI 6 ОТ СТАРХ ФОРМАТОВ

Новые технологии решают недостатки прошлых стандартов. Ниже подробный список.

MU-MIMO

Что решает:Проблема конфликта точек Wi-Fi

Как действует:у точки доступа/роутера может быть не одна антенна. Из-за большого количества антенн устройства могут конфликтовать друг с другом. Такие конфликты ведут к разрывам сигналов и сбоям обмена информации. MU-MIMO дает каждому устройству свою собственную антенну.

OFDMA

Что решает:Проблема однопоточности

Как действует:до выхода Wi-Fi 6 точки доступа отправляли пакеты данных по очереди. Если в сети было больше 5 устройств это могло нивелировать широкополосный интернет. OFDMA одновременно делит сигнал между всеми устройствами. Каждое устройство получает столько трафика, сколько требуется.

Пример:В конференц-залах возможны сотни устройств в одной сети. В прошлых стандартах трафика бы не хватало, потому что есть большая очередь из устройств. OFDMA разобьет трафик по всей очереди, тем самым решив проблему.

BSS COLORING

Что решает:Конфликт между точками / конечными устройствами

Как действует:Точка доступа окрашивает сеть. Устройства, которые подключаются к сети видят только свои точки доступа. Таким образом точка доступа отличает свои устройства от чужих, тем самым, решает проблему конфликта точек.

Пример:В торговом центре может быть настоящий зоопарк точек доступа и тем более конечных устройств (мобильных телефонов, планшетов, смарт-часов и т.п.) В сети регулярно пополняется список подключенных устройств. Устройства, которые подключались ранее могут конфликтовать с соседними точками. BSS coloring решает эту проблему.

TARGET WAKE TIME (TWT)

Что решает:Энергопотребление

Как действует:как только точка перестает использоваться, она сразу переходит в режим ожидания. Если у конечных устройств нет постоянных фоновых процессов, экономия электроэнергии может достигать 90%.

Пример:Wi-Fi на складе затратнее, чем может казаться. Чтобы избежать интерференции сигнала из-за преград (стеллажи, полки, грузы) приходится увеличивать количество точек доступа. Конечные устройства используются только в момент погрузки/разгрузки и изменения положения товара, все остальное время сеть простаивает. Это неминуемо ведет к пустому расходу энергии. Для таких сценариев и создавался (TWT)

BEAM FORMING

Что решает:Разрыв сигнала с точкой

Как действует:Точка доступа направляет сигнал в сторону конечного устройства. Из-за преград сигнал может ослабевать или теряться.

Пример:В офисе может быть большое количество кабинетов. Ставить в каждом Wi-Fi точку экономически невыгодно, но и оставлять людей без сети, тоже не имеет смысла. Пара точек Wi-Fi 6 точек доступа могут закрыть потребность всего офиса.

Чуть более сложно, зато наглядно, это описано в видео. Кликай.

ЧТО УСТАНОВИТЬ ПОВЕРХ WI-FI 6

Теперь поговорим о сценариях использовании Wi-Fi 6 и о внедряемых сервисах. Сейчас существует огромный выбор решений, которые упрощают жизнь бизнесу. Мы разобьем их на подкатегории

  • Маркетинг

  • Склад

  • Производство

  • Управление

  • Безопасность

В следующей статье мы будем собирать готовые решения под каждый тип бизнеса.

МАРКЕТИНГ

Большинство решений предназначено для отслеживания позиции потенциального заказчика. Инструменты, которые внедряются поверх Wi-Fi, помогают определить профиль заказчика.

Аналитика потребительских привычек

Такие решения внедряются в магазины и торговые центры. На территории размещения wi-fi, строится тепловая карта. Красные зоны показывают самые посещаемые места. Далее можно использовать эти данные для более точного размещения торговых точек.

Профилирование клиента

На основании посещаемости маркетинговых зон, системы аналитики могут профилировать заказчика. Т е предоставлять рекламные акции, интересные только определенному профилю заказчика.

К примеру: женщине 30-45 лет, которая большую часть времени была возле магазинов мебели, могут быть интересна реклама товаров для дома и ремонта квартиры.

Wi-Fi ловушки

После того, как профиль посетителя создан можно отправлять ему актуальную рекламу и опросы. Специальное ПО позволяет рассылать рекламные уведомления или показывать промо ролики, при аутентификации в сеть.

СКЛАД

Решения Wi-Fi для склада полностью раскрываются только в паре с IOT устройствами. Склад всегда считается Серой зоной любого бизнеса из-за регулярных потерь/недочёта товаров. Для получения контроля над складом существует WMS решения

WMS (Warehouse Management System)

Такие системы позволяют вести учет и мониторить склад.

Возможности WMS систем:

  • Интеграция с CRM

  • Рекомендации к позиционированию грузов в рабочем пространстве

  • Интеграция со службами логистики

  • Управление человеческими ресурсами

В данном случае Wi-Fi является фундаментом, на котором будут размещаться такие решения.

УПРАВЛЕНИЕ

Целый массив решений помогает компаниям управлять персоналом.

Системы RTLS (Real-time Locating Systems) на базе Wi-Fi

Системы предназначены для отслеживания людей или объектов на исследуемой территории. Данная технология может работать вместе с инфракрасными или ультразвуковыми датчиками.

Формирование корпоративных политик

Корпоративные политики могут мониторить трафик и регистрировать посещение сторонних сайтов и ресурсов. Если работник посещает сайт конкурента или биржи по поиску работы, система это зарегистрирует.

Еще можно предотвратить утечку корпоративных данных, отслеживать геопозицию и блокировать устройство, в случае потенциально-опасных действий.

БЕЗОПАСНОСТЬ

Защищенный доступ к корпоративным сетям

Корпоративная Wi-Fi сеть может стать точкой атаки злоумышленников. Одного пароля на вход может быть недостаточно. ИБ решения на базе двухфакторной аутентификации добавляют трудностей злоумышленникам. Увеличение стоимости взлома является самым эффективным средством защиты.

Предиктивная аналитика угроз

У каждой кибер- угрозы есть признаки и сигнатуры. Для того чтобы находить вредоносное ПО внутри Wi-Fi сети инженеры придумали приложения для анализа угроз. Эти приложения подключаются к потоку данных и, с помощью нейронных сетей, анализируют поведение пользователей.

В СЛЕДУЮЩЕЙ ЧАСТИ

В следующей части мы обсудим готовые решения на базе WI-FI 6 для разных сценариев и типов и размеров кампаний

Подробнее..

Starlink Спутниковый интернет от Илона Маска Разбор

19.11.2020 16:18:00 | Автор: admin
Как думаете, сколько всего спутников человечество вывело на орбиту за всю свою историю?

Со времени запуска Спутника 4 октября 1957 года в космос были выведены более 9000 аппаратов, но только около 2000 из них функционируют в настоящее время. Остальные сгорели в атмосфере или сломались и стали космическим мусором на орбите.


А Илон Маск уже скоро собирается выпустить на орбиту земли 12 000 спутников по 260 кг каждый.И это только начало потом он планирует расширить сеть до 42 000 штук.Вы поняли Суммарно это существенно больше того, что было запущено за всю историю человечества! И главное он уже начал это делать!

Зачем? Как минимум спутниковый интернет это дорого и сложно и к тому же недостаточно быстро!

1 Мб- 5$

Поэтому он решил создать свой собственный интернет с блекджеком ну и как положено, покрывающий связью весь земной шар и доступный каждому и в чем-то он сможет быть лучше той же оптики!Сегодня мы выясним возможно ли такое и расскажем подробно о проекте Starlink. Как это работает при чем тут SpaceX!

История


Илон Маск анонсировал Starlink в январе 2015 года. Но почему мы говорим об этом сейчас, потому что кое-что произошло, но для начала немного о проекте и его истории

Сказать, что проект амбициозный ничего не сказать.Ведь Илон в своем выступлении пообещал, что новая спутниковая сеть будет способна покрыть практически всю территорию нашего голубого шарика и обеспечить до 50% пропускной способности всего мирового интернет-трафика тем самым произведя революцию в отрасли!

Правда с уточнением, что в густонаселенных местах, например в больших городах, до 10% трафика, но все равно это очень впечатляет.



Итак в чем же идея?

Для начала выясним какие сегодня есть проблемы у спутникового интернета!Например, одна из них это задержка. Она огромна и составляет порядка 500 мс.В CS:GO не погоняешь, да и вообще она сильно отстает от сегодняшних требований к интернету.

Чтобы понять, как она возникает, нам надо немного понять орбитальную механику!Вы знаете, что спутники летают на определенных расстояниях от земли, то есть по орбитам. Орбит этих много, они разные и служат для разных целей.Например, орбита Международной Космической Станции это около 400 километров, а орбита спутников GPS около 20 000 километров.

Такая орбита выбрана, чтобы каждый спутник покрывал определенную и большую область на планете ведь чем дальше ты от Земли, тем большую площадь можно увидеть.

С интернет-спутниками, да и с большинством телекоммуникационных спутников, все примерно также, только они летают еще дальше от Землина так называемой Геостационарной орбите на высоте около 35 000 километров от поверхности Земли.

У такой орбиты есть плюсы можно запустить всего несколько мощных спутников и они покроют всю поверхность планеты, но естественно есть и минусы, главные из которых задержка и относительно маленькая скорость передачи данных. Ведь сигналу нужно пройти путь туда-обратно, то есть 70000 километров. Именно это и рождает такую большую задержку.

Скажу по секрету, мы с Борей работали в спутниковом операторе я сам тестировал эту связь и помню это злосчастную задержку. А самый дорогой ресурс был та самая пропускная полоса на спутниках их же мало.

И что же предложили Starlink для решения этой проблемы?Смотрите! Вместо отправки нескольких спутников, на Геостационарную орбиту они решили вывести много маленьких спутников на Низкую Околоземную орбиту, то есть на высоту около 500 километров, которые будут постоянно находиться в связи друг с другом и с Землей. И мало того они не будут висеть в одной точке, а будут постоянно находиться в движении.

Ну и сколько же спутников надо вывести, чтобы создать такую живую паутину вокруг земли?

Мы уже ответили в начале, но это по-прежнему взрывает мозг. Янапомню для начала 12 000 штук, а потом еще 42 000. Число то какое, не иначе пасхалочка от Илона.

И пошло поехало...Первые тестовые спутники SpaceX запустили в 2018 году. В будущей сети они не будут принимать участие, однако они послужили для проверки систем связи.

Дальше уже в мае 2019 года, тоже в тестовом режиме, были запущены уже 60 первых предсерийных спутников версии 0.9, между собой они еще не умели общаться, но вот специальные антенны для связи с Землей уже были.

А вот уже с ноября 2019 года SpaceX уже начала выведение серийных спутников основной группировки версии 1.0. Это уже пригодные для использования спутники и на данный момент на орбите находится уже 844 спутника.

А каждый следующий запуск пополняет группировку примернона 60 спутников за раз.



Но как же это так, спросите вы? Тогда на выведение этих тысяч спутников им потребуются десятки лет, если за полгода запустили только около 500 штук.

Планы по запускам спутников Starlink уSpaceX просто грандиозные.Во-первых, они планируют выйти на запуск каждые 2 недели по 60 спутников к сентябрю. Во-вторых, это число явно не финальное, так как одна из целей SpaceX это возможность запусков одного и того же ракетоносителя с перерывами между запусками менее суток.

Вы ведь помните, что SpaceX научились сажать свои ускорители на Землю и использовать их повторно? Это значит, что запусков будет больше намного больше!



Ну и главное новая сверхтяжелая ракета Starship, разработка которой ведется очень активно, по расчетам она будет способна за раз выводить до 400 спутников Starlink!

Как это будет работать?


Скажем так это уже работает!

Для начала работы системы в полноценном режиме не нужно выводить десятки тысяч спутников. В принципе система уже позволяет себя тестировать и на сайте Starlink недавно можно было оформить заявку на бета-тест.

Сейчас на орбите уже 844 спутника и, по словам Маска, это обеспечивает значительный операционный потенциал. Фактически уже идет закрытое бета-тестирование, а с 27 октября начали рассылать приглашения на открытый бета-тест.

А вот, что произошло почти ровно год назад 22 октября:

Илон Маск отправил первый твит через систему Starlink!



Уже есть множество замеров скорости но о них позже.

Полноценное завершение первой фазы подразумевает выведение около 4 000 спутников, что уже обеспечит покрытие всей планеты.

Концепцию самой сети мы примерно поняли, теперь о поговорим о её устройствах.

О самих спутниках


Но о спутниках подробностей компания не дает, но вот информация из тех данных которые SpaceX подали в Федеральную комиссию по связи США.



Каждый спутник оснащен системой лазеров и 4 фазированными антеннами. Кроме того на спутниках есть ионные двигатели на основе криптона, которые нужны для изменения орбиты спутников, а также для того, чтобы натурально сжигать их в атмосфере Земли, когда их срок службы подходит к концу.

Лазеры нужны для того, чтобы спутники могли обмениваться информацией друг с другом и как бы передавать ее как эстафетную палочку.

Про саму систему лазерной передачи данных вообще ничего неизвестно кроме того, что спутники смогут одновременно общаться спятьюсоседями.

Представьте, что это будет как оптоволокно, только без самого волокна ведь в космосе оно не особо нужно!

Антенны же необходимы для связи со станциями пользователей на Земле. Они должны обеспечивать большую пропускную способность и иметь возможность работать с множеством пользователей одновременно. Известно, что они будут работать в Кей-Альфа и Кей-Ю диапазонах ( K u и K a ).

А что такое станция на земле?


По заявлениям самого Маска это антенна размером не больше коробки от пиццы. И для ее подключения необходимо будет лишь воткнуть ее в розетку и направить в небо!

То есть, чтобы вы понимали, процесс настройки антенны сегодня не такой простой я помню как сам это делал несколько лет назад!





Но давайте вспомним задержку мы помним, что она будет существенно ниже но на сколько? Приготовьтесь!

После реализации первой фазы задержка при связи со спутником составит около трех с половиной миллисекунд.

3 ms по спутнику вы только представьте и из любой точки мира!

Сравните с тем спутниковым интернетом, что есть сейчас. Тут задержка более чем в 100 раз меньше!

Мы поняли это будет существенно лучше текущего спутникого интернета, но мыслите дальше: Starlink будет быстрее оптоволоконного интернета на Земле!

Канал Real Engineering приводит очень классный пример.Для кого важны низкие задержки? Для геймеров? Ничего подобного для брокеров! У одних риски получить хедшот от пятиклассника, у других слить в трубу сделку надесятки миллионов долларов из-за грёбаного пинга!

Представьте, что вы сидите в Лондоне и вам надо срочно продать акции на Нью-Йоркской бирже. Конечно же ситуация абсолютно ежедневная для каждого из нас!

Через Starlink задержка составит 43 мс, а при использовании современного интернета это время составляет около 76 мс. То есть разница в 77%, а это огромное число? хоть мы и говорим о миллисекундах!

Главное, что за такое уменьшение задержки финансовые рынки мира готовы заплатить очень большие деньги. Если в прошлом, ради ускорения всего на 5 мс был проложен новый оптоволоконный кабель из Великобритании в США стоимостью в 300 миллионов долларов. Иэто только из Лондона в Нью-Йорк, а ведь есть ещё Гонконг, Сингапур, Токио. Тут уменьшение задержки будет еще больше!

При этом система надежна: если выходит из строя какой-то один спутник, то информация просто пойдет по другой цепи паутины.

То есть мало того, что система позволит надежнее и быстрее работать, так она еще и будет доступна из любой точки планеты. Неважно где в центре Тихого океана или в центре большого города!

В августе этого года уже появились первые данные пользовательских тестов. Даже обладая только маленькой частью того количества спутников, о которых идет речь, скорости уже отлично позволяют вам загружать видео в Instagram или смотреть видео на YouTube!



Давайте глянем что там предлагают тестировщикам: $499 терминал с антенной и встроенным Wi-Fi роутером, $99 месячная абонентская плата, Скорость: 50-150 Мбит, и задержку до 40 мс с улучшением до 20 мс уже в течении года! Для бета-теста вообще отлично. И понятно, что это еще совсем не финальная цена. Она легко может снизиться, когда проект наберет первичную большую пользовательскую базу! А приложение StarLink уже доступно в Apple Store и Google Play!



Более того нашлось уже первое применение:SpaceX предоставила пожарным из Вашингтона два наземных терминала системы Starlink, пишет The Verge. Он пригодились для тушения пожаров в лесах, где есть явная нехватка интернета

Также в будущем система будет полезна при других стихийных бедствиях, например, землетрясениях, когда наземная связь повреждена.



Но конечно не обходится без критики. Астрономическое сообщество выступило с опасением, что такое количество спутников будут очень сильно влиять на информацию получаемую телескопами на земле.

И действительно в 2019 году, после запуска первой партии спутников 19 из них в течение 5 минут мешали работе телескопа DECam (Dark Energy Survey), который предназначен для поисков следов темной энергии.В результате инженеры компании выкрутились придумали, что надо спутники покрывать специальным темным покрытием, которое сделает их как бы невидимыми для телескопов.

И пока что нет никакой информации о том, например, насколько сильно будет влиять окружение на сигнал, например кроны деревьев, горы, облака. Но по идее, чем больше спутников, тем меньше будут мешать помехи.

Что касается стоимости для абонентов. Есть только приблизительные цифры и звучат они так. Стоимость тарелки от 100 до 300 долларов и абонентская плата в 80 долларов в месяц.

Это уже сильно ближе к реальным ценам за интернет дорого, но явно не 5$ за Мб.

Но понятно, что с ростом числа абонентов и возможной будущей конкуренции с другими компаниями, эта стоимость явно будет снижаться! А другие компании есть например компания OneWeb!

Ну и конечно люди, которые бояться чипирования через 5G вышки, от этого проекта вообще сойдут с ума!

В общем, система будет улучшаться и совершенствоваться постоянно, но пока что вопросов еще много.

Давайте немного помечтаем о том, к чему нас приведет такой проект.Только представьте Интернет везде! В море на кораблях, в небе в самолетах, где угодно! Быстрое, стабильное и качественное соединение. А допустим, если вставлять антенны в крыши автомобилей. Все это делает нас все ближе к полноценной реализации Интернета Вещей!

А если помечтать и например уменьшить тарелку, до размеров антенны в телефоне: это интернет всегда и везде.



И ведь это не пустые примеры например, так случилось с GPS в свое время. Ведь первый GPS-приемник был совсем не маленький! А сейчас он уже есть в наручных часах!

Итого




Не знаю как вам, но мне очень нравится то, как развиваются современные технологии и без сомнений мы вошли в новую космическую эпоху!

Кроме того у Илона Маска есть еще один проект Neurolink, о котором мы тоже собираемся вам рассказать. Это конечно будет про то самое чипирование
Подробнее..

Перевод Стартап из Швейцарии разработал систему беспроводной связи для подводного дрона

17.05.2021 20:19:35 | Автор: admin

Швейцарский стартап Hydromea показал прототип первого в мире подводного дрона, оснащенного системой беспроводной связи. Компания продемонстрировала работу робота в специально созданном бассейне. Сам дрон небольшого размера, благодаря чему его очень легко транспортировать. Что интересно, дрон оборудован камерой, передающей видеопоток в формате Full HD на расстояние до 50 метров. Опыт в разработке подобных систем у Hydromea огромный: компания уже несколько лет развивает технологии, связанные с автономной подводной робототехникой.

Чудо-рыба-wireless-дрон


Прототип ExRay

Прототип дрона назвали ExRay. Вместо троса с коммуникациями связь с роботом держат при помощи подводной системы связи LUMA. Устройство передает данные с помощью коротких световых импульсов.

ExRay имеет семь подруливающих устройств: 4 вертикальных и 3 горизонтальных. Помимо этого, девайс оснащен камерой с зум-объективом, а еще у него есть 2 светодиодные фары.

Вот полные характеристики робота:

  • 70 см длина;
  • 7 кг масса;
  • 50 м дальность связи сейчас;
  • 100 м прогнозируемая дальность связи с роботом;
  • от 6 до 8 часов продолжительность работы без заряда;
  • 10 Мб/с скорость передачи данных.


В текущей конфигурации робот подходит для использования лишь в закрытых искусственных водоемах. Но этот нюанс команда хочет доработать.

Цена и дата начала продаж устройства пока неизвестны. Запуск в серийное производство намечен на следующий год.

LUMA в массы


Оптическая система LUMA

Самая большая сложность в решении задачи создания беспроводного подводного робота заключалась в разработке технологии передачи данных. Для решения этой и других схожих проблем с сигналами под водой компания создала оптический блок LUMA.

Внешне устройство представляет собой модуль в прозрачном пластиковом корпусе. Последний служит защитой от экстремально низкого давления. Модем переводит данные в световые импульсы синего спектра, при помощи которых дрон и передает необходимую информацию.


По словам разработчиков, синий цвет выбран вполне осознанно. Он способен проникать дальше, чем световое излучение с другой длиной волны.

Модем бесперебойно передает сигналы на расстояние 50 100 м на глубине до 6 тыс. метров. Именно этот прибор от Hydromea лег в основу нового подводного дрона.

Зачем дрону такая связь


Разработка подводного дрона более сложная задача, чем создание наземных или воздушных автономных систем.

Какие есть варианты обеспечения связью под водой?

  • Радиоволны, но их дальность не очень велика.
  • Звуковые волны слишком медленные, нельзя быть уверенным в их надежности.
  • Проводное соединение. На сегодня это самый распространенный вариант. Но и у него есть минусы, включая лимит на радиус перемещения.

Есть несколько сфер, в которых просто необходимо применение подводных беспроводных роботов для получения важных сведений:

  • подводные исследования;
  • морской энергетический сектор;
  • строительство и ремонт водных объектов.

Уже сейчас разработчики ExRay видят несколько сценариев использования аппарата в замкнутых затопленных пространствах:

  • в плотинах гидроэлектростанций;
  • закрытых водных путях;
  • балластных цистерн на судах.

Предполагается, что в этих случаях использование нового дрона будет, менее дорогим, более безопасными менее рискованны, чем традиционные методы исследования.

Подробнее..

Особенности защиты беспроводных и проводных сетей. Часть 2 Косвенные меры защиты

28.08.2020 12:23:00 | Автор: admin


Продолжаем разговор о методах повышения безопасности сетей. В этой статье поговорим о дополнительных мерах безопасности и организации более защищенных беспроводных сетей.


Предисловие ко второй части


В предыдущей статье Особенности защиты беспроводных и проводных сетей. Часть 1 Прямые меры защиты шла речь о проблемах безопасности сети WiFi и прямых методах защиты от несанкционированного доступа. Были рассмотрены очевидные меры для предотвращения перехвата трафика: шифрование, скрытие сети и фильтрация по MAC, а также специальные методы, например, борьба с Rogue AP. Однако помимо прямых способов защиты существуют ещё и косвенные. Это технологии, которые не только помогают улучшить качество связи, но и дополнительно способствуют улучшению защиты.


Две главных особенности беспроводных сетей: удаленный бесконтактный доступ и радиоэфир как широковещательная среда передачи данных, где любой приемник сигнала может прослушивать эфир, а любой передатчик может забивать сеть бесполезными передачами и просто радиопомехами. Это, помимо всего прочего, не лучшим образом сказывается на общей безопасности беспроводной сети.


Одной безопасностью жив не будешь. Наде ещё как-то работать, то есть обмениваться данными. А с этой стороны к WiFi много других претензий:


  • пробелы в покрытии (белые пятна);


  • влияние внешних источников и соседних точек доступа друг на друга.



Как следствие, из-за описанных выше проблем снижается качество сигнала, связь теряет устойчивость, падает скорость обмена данными.


Разумеется, поклонники проводных сетей с удовольствием отметят, что при использовании кабельных и, тем более, оптоволоконных соединений, таких проблем не наблюдается.


Возникает вопрос: а можно как-то решить эти вопросы, не прибегая к каким-либо кардинальным средствам вроде переподключения всех недовольных к проводной сети?


Где начало всех проблем?


На момент зарождения офисных и прочих WiFi сетей чаще всего поступали по нехитрому алгоритму: ставили одну-единственную точку доступа в центре периметра с целью максимального покрытия. Если для удаленных участков мощности сигнала не хватало, к точке доступа добавлялась усиливающая антенна. Очень редко добавлялась вторая точка доступа, например, для удаленного директорского кабинета. Вот, пожалуй, и все усовершенствования.


Такой подход имел свои основания. Во-первых, на заре становления беспроводных сетей оборудование для них стоило дорого. Во-вторых, установить больше точек доступа означало столкнуться с вопросами, на которые тогда не было ответов. Например, как организовать бесшовное переключение клиента между точками? Как бороться с взаимной интерференцией? Как упростить и упорядочить управление точками, например, одновременное применение запретов/разрешений, мониторинг и так далее. Поэтому гораздо проще было поступить по принципу: чем меньше устройств, тем лучше.


В то же время точка доступа, размещенная под потолком, вещала по круговой (точнее сказать, округлой) диаграмме.


Однако формы архитектурных строений не очень хорошо вписываются в округлые диаграммы распространения сигнала. Поэтому куда-то сигнал почти не доходит, и его нужно усиливать, а где-то вещание выходит за рамки периметра и становится доступным для посторонних.



Рисунок 1. Пример покрытия при использование единственной точки в офисе.


Примечание. Речь идет о грубом приближении, в котором не учитываются препятствия для распространения, а также направленность сигнала. На практике формы диаграмм для разных моделей точек могут отличаться.


Ситуацию можно улучшить, если использовать больше точек доступа.


Во-первых, это позволит более эффективно распределить передающие устройства по площади помещения.


Во-вторых, появляется возможность снизить уровень сигнала, не позволяя ему выходить за периметр офиса или другого объекта. В этом случае, чтобы считать трафик беспроводной сети, нужно почти вплотную приблизиться к периметру или даже войти в его пределы. Примерно так же действует злоумышленник, чтобы вклиниться во внутреннюю проводную сеть.



Рисунок 2. Увеличение числа точек доступа позволяет лучше распределить покрытие.


Давайте ещё раз рассмотрим оба рисунка. На первом четко прослеживается одна из главных уязвимостей беспроводной сети сигнал можно ловить на приличном расстоянии.


На втором рисунке ситуация не так запущена. Чем больше точек доступа, тем эффективнее зона покрытия и при этом мощность сигнала уже почти не выходит за пределы периметра, грубо говоря, за пределы кабинета, офиса, здания и других возможных объектов.


Злоумышленнику придется как-то незаметно подкрадываться поближе, чтобы перехватить относительно слабый сигнал \"с улицы\" или \"с коридора\" и так далее. Для этого надо вплотную приблизиться к офисному зданию, чтобы, например, встать под окнами. Либо пытаться проникнуть в само офисное здание. В любом случае это повышает риск засветиться на видеонаблюдении, попасть на глаза охране. При этом значительно сокращается временной интервал для атаки. Это уже трудно назвать \"идеальными условиями для взлома\".


Разумеется, остается ещё один "первородный грех": беспроводные сети вещают в доступном диапазоне, который могут перехватить все клиенты. Действительно, сеть WiFi можно сравнить с Ethernet-HUB, где сигнал передается сразу на все порты. Чтобы этого избежать, в идеале каждая пара устройств должна общаться на своем частотном канале, в который не должен встревать никто другой.


Вот вкратце основные проблемы. Рассмотрим пути их решения.


Средства защиты: прямые и косвенные


Как уже было сказано в предыдущей статье, идеальной защиты добиться в любом случае не получится. Но можно максимально затруднить проведение атаки, сделав результат нерентабельным по отношению к затраченным усилиям.


Условно средства защиты можно разделить на две основные группы:


  • технологии прямой защиты трафика, такие как шифрование или фильтрация по MAC;


  • технологии, изначально предназначенные для других целей, например, для повышения скорости, но при этом косвенным образом усложняющие жизнь злоумышленнику.



О первой группе было рассказано в первой части. Но в нашем арсенале есть ещё и дополнительные косвенные меры. Как уже было сказано выше, увеличение числа точек доступа позволяет снизить уровень сигнала и сделать равномерной зону покрытия, а это усложняет жизнь злоумышленнику.


Еще один нюанс повышение скорости передачи данных упрощает применение дополнительных мер безопасности. Например, можно на каждом ноутбуке установить VPN клиент и передавать данные даже внутри локальной сети по зашифрованным каналам. Это потребует некоторых ресурсов, в том числе и аппаратных, но уровень защиты при этом существенно повышается.


Ниже мы приводим описание технологий, которые позволяют улучшить работу сети и косвенным образом повысить степень защиты.


Косвенные средства улучшения защиты что может помочь?


Client Steering


Функция Client Steering предлагает клиентским устройствам вначале использовать диапазон 5ГГц. Если эта возможность клиенту недоступна, он всё равно сможет использовать 2.4ГГц. Для устаревших сетей с малым числом точек доступа основная работа строится в диапазоне 2.4ГГц. Для частотного диапазона 5ГГц схема с одной точкой доступа во многих случаях окажется неприемлема. Дело в том, что сигнал с большей частотой хуже проходит сквозь стены и огибает препятствия. Обычная рекомендация: для обеспечения гарантированной связи в диапазоне 5ГГц предпочтительнее работать в прямой видимости от точки доступа.


В современных стандартах 802.11aс и 802.11ax за счет большего числа каналов можно установить несколько точек доступа на более близком расстоянии, что позволяет снизить мощность, при этом не потеряв, а даже выиграв в скорости передачи данных. В итоге применение диапазона 5ГГц усложняет жизнь злоумышленников, но улучшает качество связи для клиентов, находящихся в пределах доступности.


Данная функция представлена:


  • в точках доступа Nebula и NebulaFlex;


  • в межсетевых экранах с функцией контроллера.



Auto Healing


Как было сказано выше, контуры периметра помещения плохо вписываются в округлые диаграммы точек доступа.


Чтобы решить эту проблему, во-первых, нужно использовать оптимальное количество точек доступа, во-вторых, уменьшить взаимное влияние. Но если просто взять и вручную снизить мощность передатчиков такое прямолинейное вмешательство может привести к ухудшению связи. Особенно это будет ощутимо при выходе одной или нескольких точек доступа из строя.


Auto Healing позволяет оперативно подстраивать мощность без потери надежности и скорости передачи данных.


При использовании этой функции контроллер проверяет состояние и работоспособность точек доступа. Если одна из них не работает, то соседние получают указание увеличить мощность сигнала, чтобы заполнить белое пятно. После того как точка доступа снова заработала, соседние точки получают указание уменьшить мощность сигнала, чтобы снизить уровень взаимных помех.


Бесшовный WiFi роуминг


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


Настройка пороговых значений уровня сигнала для подключения и отключения беспроводных клиентов (Signal Threshold или Signal Strength Range)


При использовании одинокой точки доступа эта функция, в принципе, значения не имеет. Но при условии, когда работают несколько точек, управляемых контроллером, можно организовать мобильное распределение клиентов по разным AP. Стоит напомнить, что функции контроллера точек доступа есть во многих линейках маршрутизаторов от Zyxel: ATP, USG, USG FLEX, VPN, ZyWALL.


В указанных выше устройствах есть функция для отключения клиента, который подключен к SSID со слабым сигналом. Слабый означает, что сигнал ниже порога, установленного на контроллере. После того, как клиент был отключен, он отправит пробный запрос для поиска другой точки доступа.


Например, клиент подключился к точке доступа с сигналом ниже -65dBm, если порог отключения станции -60dBm, в этом случае точка доступа отключит клиента с таким уровнем сигнала. Теперь клиент запускает процедуру переподключения и уже подключится к другой точке доступа с сигналом, превышающим или равным -60dBm (пороговое значение сигнала станции).


Это имеет важную роль при использовании нескольких точек доступа. Тем самым предотвращается ситуация, когда большая часть клиентов скапливается на одной точке, в то время как другие точки доступа простаивают.


Помимо этого, можно ограничить подключение клиентов со слабым сигналом, с большой вероятностью находящихся за периметром помещения, к примеру, за стеной в соседнем офисе, что также позволяет рассматривать данную функцию как косвенный метод защиты.


Переход на WiFi 6 как один из путей повышения уровня безопасности


О преимуществах прямых средств защиты мы уже говорили ранее в предыдущей статье Особенности защиты беспроводных и проводных сетей. Часть 1 Прямые меры защиты.


Сети WiFi 6 обеспечивают более высокую скорость передачи данных. С одной стороны, новая группа стандартов позволяет увеличить скорость, с другой разместить ещё больше точек доступа на той же площади. Новый стандарт позволяет использовать меньшую мощность для передачи на более высокой скорости.


Повышение скорости обмена данными.


Переход на WiFi 6 предполагает повышение скорости обмена до 11Gb/s (тип модуляции 1024-QAM, каналы 160 МГц). При этом новые устройства, поддерживающие WiFi 6 обладают большей производительностью. Одной из главных проблем при внедрении дополнительных мер безопасности, таких как VPN канал для каждого пользователя это падение скорости. С WiFi 6 станет легче применять дополнительные системы защиты.


BSS Coloring


Ранее мы писали, что более равномерное покрытие позволяет снизить проникновение сигнала WiFi за периметр. Но при дальнейшем росте числа точек доступа даже использование Auto Healing может быть недостаточно, так как чужой трафик от соседней точки всё равно будет проникать в зону приема.


При использовании BSS Coloring точка доступа оставляет специальные метки (раскрашивает) свои пакеты данных. Это позволяет игнорировать влияние соседних передающих устройств (точек доступа).


Улучшенный MU-MIMO


В 802.11ax также есть важные улучшения технологии MU-MIMO (Multi-User Multiple Input Multiple Output). MU-MIMO позволяет точке доступа обмениваться данными с несколькими устройствами одновременно. Но в предыдущем стандарте эта технология могла поддерживать только группы из четырех клиентов на одной частоте. Это облегчало передачу, но не прием. WiFi 6 использует многопользовательский MIMO 8x8 для передачи и приема.


Примечание. Стандарт 802.11ax увеличивает размер групп MU-MIMO во входящем потоке, обеспечивая более эффективную производительность сети WiFi. Многопользовательский исходящий канал MIMO является новым дополнением к 802.11ax.


OFDMA (Orthogonal frequency-division multiple access)


Это новый метод доступа к каналам и управления разработан на основе технологий, которые уже были опробованы в технологии сотовой связи LTE.


OFDMA позволяет отправлять более одного сигнала по одной и той же линии или каналу одновременно, назначая интервал времени для каждой передачи и применяя частотное разделение. В результате не только растет скорость за счет лучшей утилизации канала, но и повышается безопасность.


Резюме


Сети WiFi с каждым годом становятся всё более безопасными. Использование современных технологий позволяет организовать приемлемый уровень защиты.


Прямые методы защиты в виде шифрования трафика весьма неплохо себя зарекомендовали. Не забываем и про дополнительные меры: фильтрация по MAC, скрытие идентификатора сети, Rogue AP Detection (Rogue AP Containment).


Но есть ещё и косвенные меры, улучшающие совместную работу беспроводных устройств и повышающие скорость обмена данных.


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


Здравый смысл подсказывает, что для повышения безопасности все средства хороши: и прямые, и косвенные. Такое сочетание позволяет максимально усложнить жизнь злоумышленнику.


Полезные ссылки:


  1. Telegram chat Zyxel


  2. Форум по оборудованию Zyxel


  3. Много полезного видео на канале Zyxel (Youtube)


  4. Особенности защиты беспроводных и проводных сетей. Часть 1 Прямые меры защиты


  5. Wi-Fi или витая пара что лучше?


  6. Синхронизация точек доступа Wi-Fi для совместной работы


  7. Wi-Fi 6: нужен ли новый стандарт беспроводной связи обычному пользователю и если да, то зачем?


  8. WiFi 6 MU-MIMO и OFDMA: Две опоры вашего успеха в будущем


  9. Будущее WiFi


  10. Использование мультигигабитных коммутаторов как философия компромисса


  11. Два в одном, или миграция контроллера точки доступа в шлюз


  12. WiFi 6 уже здесь: что предлагает рынок и зачем нам эта технология


  13. Улучшаем работу Wi-Fi. Общие принципы и полезные штуки


  14. Улучшаем работу Wi-Fi. Часть 2. Особенности оборудования


  15. Улучшаем работу Wi-Fi. Часть 3. Размещение точек доступа


  16. Синхронизация точек доступа Wi-Fi для совместной работы


  17. Свои 5 копеек: Wi-Fi сегодня и завтра


Подробнее..

FCC открыла 6 ГГц диапазон для Wi-Fi почему за это на нее подали в суд, и как развивается ситуация

22.08.2020 16:14:02 | Автор: admin
Обсуждаем ситуацию и мнения ассоциаций, назвавших решение комиссии незаконным.


/ CC BY / John Schnobrich

Больше частот лучше для пользователей


Причиной открытия 6-гигагерцового диапазона для работы домашних беспроводных сетей стало желание FCC высвободить перегруженные частоты 2,4 и 5 ГГц. Новый спектр предлагает семь дополнительных каналов, сокращает помехи и увеличивает скорость Wi-Fi почти до 10 Гбит/с.

Решение FCC поддержали в Wi-Fi Alliance. Организация даже разработала новый протокол Wi-Fi 6E. В Apple и Facebook заявили, что он позволит им запустить проекты виртуальной реальности и стриминговые платформы с высоким качеством изображения. На этой неделе Google уже запросила разрешение на тестирование Wi-Fi на 6 ГГц корпорация планирует улучшить качество широкополосного соединения для своих IoT-устройств.

Но есть и организации, назвавшие решение FCC крайне неудачным и даже незаконным.

Кто считает, что это плохая идея


Опасения высказалиспециалисты из Национальной организации управления спектром США.По их мнению, работа домашних сетей на частоте 6 ГГц создаст помехи для систем, которые уже его используют. В нескольких крупных американских городах он отведен для полицейских и пожарных служб. Существует вероятность, что с распространением нового стандарта в домашних сетях, спецслужбы будут вынуждены модифицировать свою ИТ-инфраструктуру.

О чем мы пишем на Хабре:


Ассоциация Utilities Technology Council (UTC), которая занимается развитием технологий в сфере коммуникаций, подала на Комиссию по связи в суд. Глава UTC заявляет, что FCC не имела права предоставлять 6-гигагерцовый спектр для массового использования без соответствующих методов предотвращения помех. Так, возникает риск создать проблемы с коммуникациями в областях, где на кону стоят человеческие жизни.


/ CC BY / Stephen Phillips

Еще одной организацией, подавшей на FCC в суд, стала Национальная ассоциация телерадиовещателей США (NAB). Её представители называют решение комиссии незаконным, так как оно не учитывает интересы телевизионных и телекоммуникационных компаний. Загрузка этого канала может ухудшить качество предоставляемых телевизионщиками услуг.

Свои опасения по поводу 6-гигагерцовых сетей также высказали американские военные и владельцы погодных станций.

Реакция комиссии


Глава FCC Аджит Пай (Ajit Pai) говорит, что волноваться не о чем специалисты технического отдела комиссии провели тесты и новый стандарт не мешает работе других систем и каналов связи. В то же время ИТ-компании, производящие оборудование для беспроводных сетей, должны будут внедрить механизмы предотвращения помех. Но в каком направлении продолжит развиваться ситуация станет понятно после первых судебных слушаний.

О работе интернет-провайдеров в нашем корпоративном блоге:

Подробнее..

Проект Openwifi как выглядит открытый Wi-Fi-чип

23.09.2020 12:10:47 | Автор: admin
Речь идет о первой свободной распространяемой реализации Wi-Fi 802.11a/g/n на базе программно-определяемой радиосистемы SDR (software-defined radio). Поговорим об этом проекте.


/ CC BY / Victor Aznabaev

Что это за проект


Большинство прошивок для Wi-Fi-устройств закрыты, поэтому нельзя проверить, присутствуют ли в них какие-либо бэкдоры. Специалисты из лаборатории IDLab, сформированной на базе Гентского и Антверпенского университетов в Бельгии, решили исправить ситуацию и запустили проект Openwifi. Это открытая реализация Wi-Fi на FPGA, совместимая с Linux. Свои наработки инженеры представили на конференции FOSDEM 2020, посвященной свободному ПО.

Весь код со схемами аппаратного обеспечения лежат на GitHub и распространяются по лицензии AGPLv3. Хотя в этом проекте использовали несколько сторонних модулей например коммерческие приёмопередатчики. Прежде чем начинать работу с Openwifi, нужно учитывать их лицензии.

Как он устроен


Аппаратная часть системы основана на FPGA от Xilinx и радиопередатчике AD9361. Также здесь задействовали архитектуру SoftMAC, которая реализует беспроводной стек 802.11 на стороне драйвера. За эту задачу отвечает подсистема mac80211, предоставляемая ядром Linux. Схему авторы проекта разместили в своем репозитории.



В основе программной части лежит OpenOFDM открытая реализация OFDM-декодера на Verilog. Взаимодействовать с Wi-Fi-модулем можно с помощью штатных утилит Linux ifconfig и iwconfig, а также специализированной программы sdrctl она позволяет обращаться к драйверу Openwifi через netlink. Для управления беспроводными драйверами из пользовательского пространства авторы использовали библиотеки nl80211 и cfg80211.

Среди основных возможностей системы стоит выделить полосу пропускания в 20 МГц и диапазон частот от 70 МГц до 6 ГГц, квантование времени по MAC-адресу и реализацию протокола DCF на стороне FPGA, который является базовым протоколом доступа в сетях Wi-Fi.

Каковы его перспективы


Openwifi находится на ранних этапах разработки, поэтому о высокой пропускной способности говорить не приходится. Авторы добились скорости скачивания в 30,6 и 38,8 Мбит/с для TCP и UDP. Скорость выгрузки несколько меньше 17,0 и 21,5 Мбит/с соответственно.


/ CC BY / Frank Wang

В перспективе разработчики планируют увеличить эти показатели. На их дорожной карте также стоит добавление поддержки стандарта Wi-Fi 802.11ax. В целом резиденты Hacker News говорят, что Openwifi это еще один важный шаг на пути к полностью открытому аппаратному обеспечению для беспроводных сетей. Осталось реализовать соответствующий радиочастотный чип главное, чтобы не возникло проблем с патентами различных корпораций.

О чем мы пишем в корпоративном блоге VAS Experts:

Подробнее..

Баг в ESP-IDF MDNS, Wireshark и при чём тут единороги

29.11.2020 22:13:53 | Автор: admin

Всем привет. Я занимаюсь коммерческой разработкой в IoT, в основном мы используем модули от Espressif - ESP8266 и ESP32.

В рамках "догфудинга" мы иногда берём свои продукты домой и используем в повседневной жизни. И вот, однажды, от одного из сотрудников поступила жалоба: после установки новой тестовой прошивки на устройстве, его домашняя сеть сначала начала жестоко глючить и зависать, а потом ситуация нормализовалась, но наш девайс более не был виден ни в локальной сети, ни в облаке.

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

Разведка

Для начала, я решил собрать максимальное количество данных про ситуацию в её терминальной стадии. Не перезагружая устройство, я запустил Wireshark в режиме Monitor Mode, настроив фильтрацию на MAC-адрес устройства. Выяснилось, что девайс уверен, что его сеть в порядке - он упорно слал роутеру какие-то данные, однако роутер ему ничего не отвечал. Хм, подозрительно.

В админке роутера девайс тоже был виден как подключенный. Но почему же нету обратной связи? На этот вопрос я получил ответ, когда решил подключить к этому же роутеру ещё одно устройство (точнее, один из своих devkit-ов), и убрал фильтрацию в Wireshark. Оказывается, у роутера поменялся MAC-адрес! Хм, подозрительно. Поменялся он ровно на один последний бит, при этом вся остальная техника эту подмену осознала, а вот наше устройство - нет, и упорно отсылало данные на старый мак-адрес, который, конечно же, никто уже не слушал.

Ладно, пришло время узнать больше. Перезагружаем роутер. Теоретически, это же должно вернуть его MAC в "обычное" состояние? И действительно, MAC вернулся. Но зависший девайс уже был "в коме", и упорно не хотел ничего делать. Ничего нового мы от него уже не узнаем, так что перезагружаем и его. А заодно, дабы собрать больше данных, пропишем в Wireshark пароль от роутера, чтобы он расшифровал весь трафик.

Коллапс

Тут произошло что-то странное. Сначала девайс, как положено, вернулся в сеть. А дальше началось... Количество сообщений в окне Wireshark начало расти с невероятной скоростью. Впрочем, через несколько минут всё остановилось - роутер снова решил проявить свою альтернативную, отличающуюся на один бит, сущность. Ладно, у нас есть дамп, давайте посмотрим, что это было.

And the winner is... 99% захваченных пакетов были про MDNS. Мы действительно используем его, чтобы телефоны могли найти наши девайсы в локальной сети, и работать с ними даже в условиях отсутствия облака (что иногда случается по разным причинам, начиная с "забыли заплатить за интернет", и заканчивая сбоями у Amazon). Но почему так много? Интервал между сообщениями - десятки миллисекунд, и соотношение "входящих/исходящих" (по отношению к девайсу) примерно одинаковое. Что ж, пора раскуривать.

Последовательность пакетов была следующая:

  1. Девайс регистрируется в multicast-группе MDNS, чтобы иметь возможность получать запросы на обнаружение.

  2. Девайс отправляет collision-query-пакет с запросом ANY на полный адрес своего "сервиса", чтобы узнать, есть ли в сети кто-то, кому он может "помешать".

  3. Роутер перенаправляет collision-query-пакет всем устройствам multicast-группы, включая сам девайс.

  4. Девайс отправляет advertise-пакет с PTR, SRV, TXT и A/AAAA записями multicast-группе MDNS, сообщая, что он появился в сети.

  5. Роутер перенаправляет advertise-пакет всем устройствам multicast-группы, включая сам девайс.

  6. 2-5 пункты начинают повторяться с большой скоростью.

Сразу становится понятно, почему проблема не проявлялась на нашем тестовом окружении в офисе - наши роутеры не перенаправляют multicast самому отправителю. Но почему мы не видели этого поведения на старой прошивке? И действительно, откатив девайс до старой версии, я стабилизировал ситуацию. Начинаем бить в бубен.

Делаем diff. Видим, что немного поменялся код внутренней логики, не влияющий на сетевую часть. Что ж, это можно отмести почти сразу. Ещё поменялся номер версии... Ну да, с 0.9 на 0.10. Не может же это влиять? Или... Ладно, пока оставим эту мысль. Ищем, где отправляются пакеты из MDNS.

Debugger? printf!

Как поступил бы на моём месте любой профессиональный разработчик? Правильно: начал обмазывать логами все места отправки пакетов в файле mdns.c. Поиск быстро привёл меня к функции _mdns_create_probe_packet. Поискав по файлу места, из которых она вызывается (и пройдя по стеку вызовов немного дальше), я остановился на строчке #2917 в функции mdns_parse_packet. В логах это место действительно появлялось очень часто. Подозрение пало на вызов _mdns_check_txt_collision. Тут начала вырисовываться картина происходящего: девайс, получая свой же advertise, находил в нём TXT-запись, и сравнивал его со своим TXT. Но ведь он сам его отправил! Ладно, смотрим код самой функции. Я даже приведу его тут по частям, с описанием происходящего.

size_t data_len = 1;if (len == 1 && service->txt) {  return -1;//we win} else if (len > 1 && !service->txt) {  return 1;//they win} else if (len == 1 && !service->txt) {  return 0;//same}

Тут мы создаём переменную data_len, а так же проверяем наличие TXT-записи в нашем service. Вроде бы всё нормально - тут мы проходим дальше.

mdns_txt_linked_item_t * txt = service->txt;while (txt) {  data_len += 2 + strlen(service->txt->key) + strlen(service->txt->value);  txt = txt->next;}if (len > data_len) {  return 1;//they win} else if (len < data_len) {  return -1;//we win}

Тут мы высчитываем длину буфера, в который должен влезть наш TXT из сервиса, а заодно сравниваем эту длину с тем, что мы получили из эфира.

uint8_t ours[len];uint16_t index = 0;char * tmp;txt = service->txt;while (txt) {  tmp = (char *)malloc(2 + strlen(txt->key) + strlen(txt->value));  if (tmp) {    sprintf(tmp, "%s=%s", txt->key, txt->value);    _mdns_append_string(ours, &index, tmp);    free(tmp);  } else {    HOOK_MALLOC_FAILED;    // continue  }  txt = txt->next;}int ret = memcmp(ours, data, len);if (ret > 0) {  return -1;//we win} else if (ret < 0) {  return 1;//they win}return 0;//same

Ну и тут мы кодируем наш TXT в буфер, размер которого уже просчитали (и проверили), и сравниваем его содержимое с полученным.

Уже нашли ошибку? Я тоже заметил её не сразу, поэтому решил пройтись по коду построчно. Опять же, помог мне с этим printf.

Когда я "упал" на проверке длины, я немного удивился. Но как? Ведь "правильная" длина (которую 10мс назад отправил сам девайс) точно совпадает с "входящей"! Давайте ещё раз взглянем на её подсчёт.

mdns_txt_linked_item_t * txt = service->txt;while (txt) {  data_len += 2 + strlen(service->txt->key) + strlen(service->txt->value);  txt = txt->next;}

Окей, тут явно виден проход по linked-list. Мы берём очередной элемент, берём длину его key и value... Стоп. Его или service->txt? Так, понятно...

Выходит, из-за бага в коде (который, если верить git blame, лежит там уже очень много лет), мы всегда берём длину от первого элемента. Но как это работало всё это время? А вот так: нам повезло. Всё это время TXT-записи, которые мы добавляли, по сумме длин чётко совпадали с длиной первого, умноженного на N. Получается, стоило нам добавить новый элемент, поменять порядок элементов, или изменить длину любого из них - и всё, баг начинал проявляться. Но при чём тут номер версии? Ах да, мы же передаём его в MDNS... Паззл сошёлся.

И что дальше?

Соответствующий issue в ESP-IDF я отправил, в своих рабочих копиях мы это место исправили, и наши девайсы прекратили сводить с ума бедные роутеры.

Но тут встал правильный вопрос: а сколько ещё таких багов может быть в SDK? Проект большой, кода много (а часть ещё и стороннего - в виде submodule). Наверняка есть что-то интересное, странное, ужасное...? То, что не вылезает у нас на тестировании, но может создать нам проблем в случайный момент времени.

Так при чём тут единороги?

С этой мыслью я написал @Andrey2008 вспоминая про PVS-Studio. Он любезно согласился попробовать посмотреть на этот проект, а также поделился триальной версией ключа для PVS-Studio, чтобы я мог попытаться проанализировать код самостоятельно. Забегая вперёд, скажу, что там есть, на что посмотреть... Но об этом - в следующей серии.

А поймал ли единорог этот баг?

К сожалению, data flow PVS-Studio не нашёл этой проблемы с linked-list. Но будем справедливы - я тоже обратил внимание на эту ошибку не с первого раза (и даже не с третьей вычитки кода). Андрей говорит, что подобную диагностику добавить можно - а значит, одна из следующих версий может начать ловить такие гейзенбаги.

Подробнее..

Перевод Linksys WRT54G роутер, случайно ставший легендарным

02.02.2021 12:18:59 | Автор: admin

В мире, где роутеры всё больше напоминают перевёрнутых пауков, чем предметы, которые бы хотелось видеть в своей гостиной, есть только несколько устройств, которые можно было бы назвать знаменитыми. Примерами подобного могут быть AirPort Стива Джобса и mesh-роутеры Eero. Но лавры победителя в этой категории получает модель роутера Linksys, которой уже исполнилось уже почти 20 лет, и всё благодаря изначально незадокументированной особенности, ставшей чрезвычайно популярной у определённой пользовательской базы. Сегодня мы поговорим о сине-чёрном образце маршрутизатора беспроводного доступа Linksys WRT54G. Именно этот роутер показал миру, на что должны быть способны беспроводные маршрутизаторы.

1988 год


Linksys был основан двумя иммигрантами из Тайваня Джени и Виктором Цао в 1988 году. По информации в профиле 2004 года на Inc., компания задумывалась как посредник между изобретателями и производителями на рынке Тайваня, но в 1990-х сама занялась производством оборудования, со временем придя к рынку домашних сетей и начав доминировать на нём в начале 2000-х.


Хотя сегодня он не особо впечатляет, однако роутер EtherFast помог Linksys стимулировать создание нового рынка домашних сетей. И это было ещё ДО того, как WiFi стал играть важную роль.

Как чёрный и синий стали неофициальными цветами домашних сетей в начале 2000-х


Сегодня большинство людей особо не задумывается о вопросе покупки роутера для дома. Сейчас можно за несколько долларов купить подержанный или за 20 долларов новый.

Однако в конце 1990-х о роутерах совершенно никто не знал, этого рынка ещё не существовало на радарах многих компаний-изготовителей сетевого оборудования, потому что необходимость сетей ограничивалась офисами. Это означало, что установка роутера была и чрезвычайно дорогой, и невозможной для простых смертных.

Подобное положение дел помогает компаниям, находящимся на периферии, недостаточно больших, чтобы ловить крупную рыбу, но достаточно мелких, чтобы увидеть для себя новые возможности. На протяжении первого десятка лет существования компании Джени и Виктор Цао пользовались такими возможностями, при сдвигах рынков улучшая позиционирование своего сетевого оборудования.

В начале 90-х оборудование Linksys приходилось продавать с собственными драйверами. Однако когда появилась Windows 95, сетевые возможности были уже встроены в неё. Это означало, что совершенно внезапно пропало основное препятствие к получению доли рынка компанией Linksys: возник увеличивающийся спрос на её сетевые адаптеры, устанавливаемые внутрь десктопов и ноутбуков.

Виктор помогал в руководстве и работе с технологиями, а Джени занималась сделками о продажах с крупными розничными сетями, например, с Best Buy, что способствовало превращению сетевых карт в мейнстрим мира технологий.

Однако реальным шансом, на многие годы сделавшим Linksys лидером, стало создание Виктором роутера, изначально нацеленного на домашних пользователей. Когда дайлап-модемы начали выходить из моды, возникла неожиданная потребность.

Когда в конце 90-х начался постепенный расцвет широкополосного Интернета, имевшего гораздо большую цену, чем дайлап, Виктор понял, что люди захотят подключить все свои домашние компьютеры к одной линии, говорится к профиле Джени и Виктора на Inc. Для этого им бы понадобился роутер высокотехнологичный разветвитель, позволяющий подключать к одному модему несколько компьютеров.

Повторюсь, компании, с которыми конкурировала Linksys, были сосредоточены на рынке, где роутеры стоили почти столько же, сколько и сам компьютер. Однако Виктор нашёл идеальную нишу: роутер за 199 долларов, поставляемый с простым в настройке ПО и достаточно понятный для простых смертных. К тому же он имел уникальный дизайн, которым прославилась Linksys смесь синего и чёрного пластика с рядом крошечных светодиодов спереди.

В обзоре кабельного/DSL-роутера EtherFast PC Magazine замечает, что Linksys сделала гораздо больше, чем просили пользователи.

Цена в 200 долларов стала бы прорывом для роутера с двумя портами Ethernet, однако Linksys уместила в эту коробку гораздо больше возможностей, писал рецензент Крейг Эллисон. Роутер, способный работать со скоростями до 100 мегабит, может похвастаться четырьмя портами и теоретически способен работать с сотнями IP-адресов.

Возможно, он не был чрезвычайно надёжным, как его более дорогие конкуренты, однако имел разумную цену для домашнего устройства.

Роутер приобрёл огромный успех, благодаря которому Linksys поднялась на вершину зарождающегося рынка. На самом деле, единственной ошибкой в реализации роутера было отсутствие поддержки беспроводного соединения. Однако громкое имя Linksys означало, что как только она появится, у нового устройства будет готовая аудитория, которую порадует его низкая цена и простота пользования.

Особенно популярным стал один роутер, однако причины этого оказались для Linksys неожиданными.

500 миллионов долларов


За такую сумму гигант в производстве сетевого оборудования Cisco приобрёл Linksys в 2003 году. Поглощение произошло в то время, когда Linksys сама зарабатывала полмиллиарда долларов в год, и быстро росла в основном за счёт успеха своих роутеров. В интервью NetworkWorld Виктор Цао утверждал, что конфликтов между роутерами Linksys и сетевой инфраструктурой Cisco не существует. Они решали свои задачи по-разному, в чём Cisco вскоре убедится на собственном горьком опыте.


WRT54G был не просто дешёвым его можно было хакать.

Как случайная особенность беспроводного роутера Linksys превратила скучный роутер в устройство для фанатов


Во многих смыслах серия роутеров WRT54G стала чем-то вроде Nintendo Entertainment System мира беспроводных роутеров. Появившись примерно на заре истории популярности беспроводных роутеров, она продемонстрировала гораздо большую гибкость, чем задумывалось производителем. Хоть она и не была единственной, однако находилась в огромном количестве домов по всему миру.

Несмотря на гораздо меньшую славу, его успех был сравним с современным ему Motorola RAZR его можно было найти практически повсюду, в домах и мелких компаниях по всему миру. Несмотря на своё страшное название, WRT54G был тем роутером, который покупали люди, нуждающиеся в беспроводном роутере.

И высока вероятность того, что он по-прежнему используется во многих местах, несмотря на устаревшие стандарты безопасности и чрезвычайно древний внешний вид. (Вспоминается история компьютера Amiga, управлявшего системами отопления и вентиляции целого школьного округа.)

Однако причина, по которой серия WRT54G продержалась так долго, несмотря на использование беспроводного протокола, фактически устаревшего 12 лет назад, может заключаться в его особенности, которая изначально не была задокументирована. Эта особенность сохранилась, несмотря на все сложности, вызванные поглощением компании. Случайно или нет, но в WRT54G скрывалось нечто фундаментальное для встроенной прошивки роутера: ПО на основе Linux.

В этом и заключалась проблема Linksys должна была выпустить исходный код своей прошивки под лицензией GNU General Public License, требующей распространять производное ПО с теми же условиями, что и ПО, на основании которого оно было создано.

Эндрю Миклас, участвовавший в создании списка рассылки о ядре Linux, рассказал, что ему лично довелось связаться с сотрудником компании и убедиться, что ПО было основано на Linux но со временем этот сотрудник прекратил с ним общаться.

Миклас сообщил, что его интерес к файлу прошивки частично был вызван стремлением к улучшению поддержки в Linux относительно нового тогда стандарта 802.11g, который поддерживался устройством.

Я знаю, что некоторые компании-производители беспроводных устройств сомневались, стоит ли выпускать драйверы в open source, потому что беспокоились, что параметры их радиооборудования можно будет изменять вне пределов спецификации. Однако если драйверы уже написаны, разве есть какое-то техническое препятствие к тому, чтобы их нельзя было просто рекомпилировать под оборудование Intel и выпустить как бинарные модули?

Миклас обнаружил нечто интересное, то, чего в ПО быть не должно. Это был недосмотр со стороны Cisco, которую ожидал неприятный сюрприз, связанный с популярным продуктом, продававшимся всего несколько месяцев. По сути, произошло следующее: один из поставщиков, похоже, использовал прошивку на основе Linux в чипах, поставляемых Broadcom, и не сообщил об этом Linksys, которая в рамках поглощения передала это ПО Cisco.

В колонке 2005 года для Linux Insider юрист Хизер Микер, специализирующаяся на проблемах интеллектуальной собственности и ПО с открытым исходным кодом, сообщила, что Cisco было довольно трудно разобраться во всём этом самостоятельно:

Из этого дела можно сделать вывод о сложности контроля разработки ПО в нашу эпоху вертикальной разобщённости. Cisco ничего не знала об этой проблеме, несмотря на проверку интеллектуальной собственности Linksys перед покупкой. Однако Linksys, вероятно, тоже ничего не знала о проблеме, потому что покупала чипсеты у Broadcom, а Broadcom также, вероятно, не знала, поскольку, в свою очередь, вывела разработку прошивки чипсета на аутсорс иностранной компании.

Чтобы выявить проблему, Cisco пришлось бы провести расследование вглубь на три уровня интеграции продуктов. Любой специалист по слияниям и поглощениям скажет вам, что это попросту невозможно. Дело не в неряшливости или нерадивости, дело в непрозрачности.

Венчурный капиталист, активист open source и бывший лидер проекта дистрибутива Debian Linux Брюс Перенс рассказал LinuxDevices, что не стоит винить в произошедшем Cisco, однако она всё равно столкнулась с проблемами соответствия требованиям лицензии open source.

Обычно субподрядчики не особо усердно докладывают клиентам об их обязанностях по лицензии GPL, рассказывает Перенс. (Также он добавил, что, несмотря на предложение помощи Cisco, ответа он не дождался.)

Как бы то ни было, информация о роутере с прошивкой в open source всплыла на поверхность, и пост Микласа быстро привлёк внимание сообщества фанатов. Автор поста на Slashdot сразу смог увидеть открывшиеся возможности: Это может быть интересным: вероятно, появится возможность создания суперкрутой прошивки для точки доступа с IPsec, нативной поддержкой ipv6 и т.д.!

Когда читатели Slashdot узнали об этом, они начали выдвигать требования.

Примерно спустя месяц после выпуска поста на Slashdot компания без особого энтузиазма выпустила свою open-source-прошивку.


WRT54G без корпуса. Благодаря Linux-прошивке устройство стало мишенью как для программных, так и для аппаратных хаков.

Хакерам открылся целый мир возможностей, а сторонние разработчики быстро добавили в оригинальное оборудование функции, о которых никогда не задумывался производитель. По сути, это был бытовой роутер, который можно было взломать и заставить выдавать гораздо более мощный беспроводной сигнал, чем это допускалось Федеральной комиссией по связи, превратить его в SSH-сервер или в VPN для домашней сети. Был и ещё более яркий пример роутер можно было превратить в мозг робота.

Также он стал фундаментом для полезного открытого ПО, например, OpenWrt и Tomato. То есть возникла целая инфраструктура, позволявшая расширить возможности роутера намного больше, чем допускалось его производителем.

По сути, Cisco под угрозой судебного иска оказалась вынужденной выпустить прошивку на основе Linux под лицензией GPL, но не была в восторге от того, что устройство, успех которого позволил ей наконец попасть в дома пользователей, предоставляло им гораздо большие возможности.

Как писал Lifehacker в 2006 году, это был идеальный способ превращения своего роутера за 60 долларов в роутер за 600 долларов. То есть, теоретически, успех устройства на рынке обернулся для Cisco убытком.

Поэтому в результате компания провела апгрейд роутера, который по сути стал даунгрейдом: устранила Linux-прошивку, заменив её проприетарным аналогом, урезав объём ОЗУ и ПЗУ, что усложнило замену прошивки на сторонние версии. Это разгневало пользователей, и Cisco (вероятно, осознав свой провал) выпустила Linux-версию роутера под названием WRT54GL, в которой восстановила удалённые спецификации.

Эту модель и сегодня можно найти на Amazon, и она по-прежнему имеет страницу поддержки на сайте Linksys. Несмотря на то, что её максимум всего 54 мегабита/с по беспроводному каналу, довольно жалкий показатель по сравнению с современными роутерами по той же цене, она по-прежнему продаётся.

Вся неразбериха с GPL наносила урон ещё годы спустя после обнаружения проблемы с прошивкой по итогу Cisco пришлось заплатить Free Software Foundation. Однако это, в конечном итоге, создало имидж брэнду Linksys. Сегодня компания продаёт целую линейку чёрно-синих роутеров, сохраняющих поддержку открытых прошивок. (Однако стоят они намного дороже, чем WRT54G.)

Мы хотим, чтобы эта книга расширила аудиторию платформы WRT54G и использования встроенных устройств в целом, раскрывая потенциал, который способна предложить эта платформа, цитата из введения книги 2007 года Linksys WRT54G Ultimate Hacking. Авторам книги сыграло на руку то, что WRT54G был встроенной системой со возможность хакинга, при этом очень популярной и использующейся для множества различных целей, как развлекательных, так и практичных. Да, хакинг устройства стал настолько распространённым, что выпустили целую 400-страничную книгу, посвящённую этой теме.

Надо внести ясность большинство людей, покупавших WRT54G в Best Buy, скорее всего, не волновало то, что прошивка находится в open source. Но это решение создало своего рода культ устройства. Последователи этого культа помогали поддерживать длительный интерес к устройству и среди тех, кто был далёк от хакинга.

Это было практически ненамеренное сарафанное радио. Когда обычный человек спрашивал у своего друга-технаря, какой роутер стоит купить, тот рекомендовал ему понятно какую модель.


В статье 2016 года на Ars Technica сообщалось, что роутер по-прежнему приносил миллионы долларов в год компании Linksys, которая к тому времени была продана Belkin. Несмотря на то, что модель и близко не была столь же мощной, как её более дорогие аналоги, WRT54GL (да, именно версия с Linux) сохранила свою аудиторию и на втором десятке лет, потому что воспринималась как чрезвычайно надёжная и простая в использовании.

Мы продолжаем делать её, потому что люди продолжают её покупать, говорил в то время продакт-менеджер Винс ЛаДука, заявивший, что роутер продолжает продаваться потому, что детали для него продолжают производить.

Выше я сказал, что WRT54G во многих смыслах стал аналогом Nintendo Entertainment System для беспроводных роутеров. И я считаю, что особенно справедливо это в контексте его довольно впечатляющей загробной жизни, как и у NES. Несмотря на свой солидный возраст и неподходящий для гостиной внешний вид, он хорошо продавался многие годы после истечения срока годности, в немалой степени и из-за использования открытых драйверов.

Если ваша пользовательская база просит вас что-то сохранить, то вам стоит к этому прислушаться.



На правах рекламы


Виртуальные серверы с защитой от DDoS-атак, скоростью интернета в 500 Мегабит, новейшим железом и возможностью устанавливать ОС со своих ISO, даже MikroTik RouterOS. Всё это про наши эпичные серверы. Максимальная конфигурация 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe! Поспешите заказать.

Подробнее..

Wi-Fi для мамы

07.12.2020 02:05:58 | Автор: admin

Постановка задачи


Сделать Wi-Fi в 2+ комнатной квартире, при этом чтобы скорость в любой локации должна быть не ниже 90Мбит/с на любом современном мобильном устройстве (IEEE 802.11ac).

Предполагаем, что наша типовая квартира содержит типовой набор пользователей:

  1. Просто пользователь (используем базовый ЯндексDNS)
  2. Боящаяся интернета бабушка (ЯндексDNS, без мошеннических сайтов и вирусов)
  3. Студент 5 курса, которому нужен Интернет без ограничений (выход в Интернет через VPN в Европу, DNS 8.8.8.8)
  4. Школьник 7 класса, которому по административным причинам надо выключать Интернет в 21:00 час по будням и в 22:00 часа по выходным (используем ЯндексDNS Семейный и по расписанию выключаем/включаем SSID).

Радио моделирование


Начну с того, что как правило, если в квартире бетонные стены и количество комнат 2 и более, то одной точкой доступа Wi-Fi будет не обойтись, ведь 20 Мбит/с на диване у окна сегодня нас уже не устраивают, а это значит что минимальный уровень сигнала на клиенском устройстве долже быть не ниже -65дБ.

Вот пример:
Ставим одну точку доступа в прихожей, в 5 ГГц диапазоне зона копрытия до -65дБ выглядит так:

imageimage
Поэтому надо добавить еще как минимум 2 точки доступа, получаем следующее:

imageimage
image

Так уже лучше, с количеством и расположением точек доступа определились.

Настройка Wi-Fi на базе Mikrotik hAP ac


1. Схема сети и адресный план

image
Piccy.info - Free Image Hosting

2. Обновление ПО и установка пакета поддержки multicast для IPTV. Это легко нагуглить.

3. Предлагаю создать 4 VLAN-а: 10,20,30,40, под каждого типа пользователя

/interface bridge vlanadd bridge=bridge_vlan_10 tagged=VLAN_10_TRUNK_ETH5,VLAN_10_TRUNK_ETH4 vlan-ids=10add bridge=bridge_vlan_20 tagged=VLAN_20_TRUNK_ETH5,VLAN_20_TRUNK_ETH4 vlan-ids=20add bridge=bridge_vlan_30 tagged=VLAN_30_TRUNK_ETH5,VLAN_30_TRUNK_ETH4 vlan-ids=30add bridge=bridge_vlan_40 tagged=VLAN_40_TRUNK_ETH5,VLAN_40_TRUNK_ETH4 vlan-ids=40/interface vlanadd interface=ether4 name=VLAN_10_TRUNK_ETH4 vlan-id=10add interface=ether5 name=VLAN_10_TRUNK_ETH5 vlan-id=10add interface=ether4 name=VLAN_20_TRUNK_ETH4 vlan-id=20add interface=ether5 name=VLAN_20_TRUNK_ETH5 vlan-id=20add interface=ether4 name=VLAN_30_TRUNK_ETH4 vlan-id=30add interface=ether5 name=VLAN_30_TRUNK_ETH5 vlan-id=30add interface=ether4 name=VLAN_40_TRUNK_ETH4 vlan-id=40add interface=ether5 name=VLAN_40_TRUNK_ETH5 vlan-id=40/interface bridge portadd bridge=bridge_vlan_10 interface=ether2 pvid=10add bridge=bridge_vlan_10 interface=ether3 pvid=10add bridge=bridge_vlan_10 interface=wlan_2.4_GHz pvid=10add bridge=bridge_vlan_10 interface=wlan_5_GHz pvid=10add bridge=bridge_vlan_10 interface=VLAN_10_TRUNK_ETH5 priority=0 pvid=10add bridge=bridge_vlan_20 interface=VLAN_20_TRUNK_ETH5 priority=0 pvid=20add bridge=bridge_vlan_30 interface=VLAN_30_TRUNK_ETH5 priority=0 pvid=30add bridge=bridge_vlan_40 interface=VLAN_40_TRUNK_ETH5 priority=0 pvid=40add bridge=bridge_vlan_20 interface=wlan_2.4_GHz_virtual_2 pvid=20add bridge=bridge_vlan_20 interface=wlan_5_GHz_virtual_2 pvid=20add bridge=bridge_vlan_30 interface=wlan_2.4_GHz_virtual_3 pvid=30add bridge=bridge_vlan_30 interface=wlan_5_GHz_virtual_3 pvid=30add bridge=bridge_vlan_40 interface=wlan_2.4_GHz_virtual_4 pvid=40add bridge=bridge_vlan_40 interface=wlan_5_GHz_virtual_4 pvid=40add bridge=bridge_vlan_10 interface=VLAN_10_TRUNK_ETH4 priority=0 pvid=10add bridge=bridge_vlan_20 interface=VLAN_20_TRUNK_ETH4 priority=0 pvid=20add bridge=bridge_vlan_30 interface=VLAN_30_TRUNK_ETH4 priority=0 pvid=30add bridge=bridge_vlan_40 interface=VLAN_40_TRUNK_ETH4 priority=0 pvid=40

4. Задать группы для интерфейсов

/interface listadd comment=defconf name=WANadd comment=defconf name=LAN/interface list memberadd list=LANadd interface=ether1 list=WANadd interface=bridge_vlan_10 list=LANadd interface=bridge_vlan_20 list=LANadd interface=bridge_vlan_30 list=LANadd interface=bridge_vlan_40 list=LAN

5. Задать IP адреса на LAN интерфейсах. Например, берем сеть 172.16.2.0.24 и делим ее на 4 штуки по /26

/ip addressadd address=172.16.2.126/26 interface=bridge_vlan_20 network=172.16.2.64add address=172.16.2.190/26 interface=bridge_vlan_30 network=172.16.2.128add address=172.16.2.254/26 interface=bridge_vlan_40 network=172.16.2.192add address=172.16.2.62/26 interface=bridge_vlan_10 network=172.16.2.0

6. Задать IP адрес на WAN интерфейсе (если он статический)

/ip addressadd address=XXX.XXX.XXX.XXX/XXX interface=ether1 network=XXX.XXX.XXX.XXX

7. Задать маршрут по-умолчанию в сторону провайдера

/ip routeadd distance=1 gateway=XXX.XXX.XXX.XXX

8. Задать DHCP сервера

/ip pooladd name=vlan_10_dhcp_pool ranges=172.16.2.21-172.16.2.59add name=vlan_20_dhcp_pool ranges=172.16.2.85-172.16.2.123add name=vlan_30_dhcp_pool ranges=172.16.2.159-172.16.2.187add name=vlan_40_dhcp_pool ranges=172.16.2.223-172.16.2.251/ip dhcp-server networkadd address=172.16.2.0/26 dns-server=77.88.8.8,77.88.8.1 domain=home.local gateway=172.16.2.62 netmask=26add address=172.16.2.64/26 dns-server=77.88.8.88,77.88.8.2 domain=home.local gateway=172.16.2.126 netmask=26add address=172.16.2.128/26 dns-server=8.8.8.8,8.8.4.4 domain=home.local gateway=172.16.2.190 netmask=26add address=172.16.2.192/26 dns-server=77.88.8.7,77.88.8.3 domain=home.local gateway=172.16.2.254 netmask=26/ip dhcp-serveradd address-pool=vlan_10_dhcp_pool disabled=no interface=bridge_vlan_10 name=dhcp_server_vlan_10add address-pool=vlan_20_dhcp_pool disabled=no interface=bridge_vlan_20 name=dhcp_server_vlan_20add address-pool=vlan_30_dhcp_pool disabled=no interface=bridge_vlan_30 name=dhcp_server_vlan_30add address-pool=vlan_40_dhcp_pool disabled=no interface=bridge_vlan_40 name=dhcp_server_vlan_40

9. Не забыть про igmp snooping для IPTV приставки

/interface bridgeadd igmp-snooping=yes name=bridge_vlan_10add igmp-snooping=yes name=bridge_vlan_20add igmp-snooping=yes name=bridge_vlan_30add igmp-snooping=yes name=bridge_vlan_40/routing igmp-proxy interfaceadd alternative-subnets=0.0.0.0/0 interface=ether1 upstream=yes

10. сделать VPN туннель до вашего VPS сервера для обхода блокировок (настройка сервера VPN на Debian будет ниже)

/interface l2tp-clientadd connect-to=XXX.XXX.XXX.XXX disabled=no ipsec-secret=XXXXXXX keepalive-timeout=disabled name=l2tp-out1 password=XXXXXX profile=default use-ipsec=yes user=XXXXXX

11. Сделать Policy Based Routing для трафика из того SSID, трафик от которого должен идти через VPN туннель.

/ip firewall mangleadd action=mark-routing chain=prerouting new-routing-mark=VPN_route_mark passthrough=yes src-address=172.16.2.128/26/ip routeadd check-gateway=ping distance=1 gateway=10.1.1.1 routing-mark=VPN_route_mark

12. Сделать NAT

/ip firewall natadd action=masquerade chain=srcnat out-interface-list=WAN src-address=172.16.2.0/25add action=masquerade chain=srcnat out-interface=l2tp-out1 src-address=172.16.2.128/26add action=masquerade chain=srcnat out-interface-list=WAN src-address=172.16.2.192/26

13. Можно убрать лишнее из правил межсетевого экрана, а потом закрыть то что хочется.

/ip firewall filteradd action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untrackedadd action=drop chain=input comment="defconf: drop invalid" connection-state=invalid disabled=yesadd action=accept chain=input comment="defconf: accept ICMP" protocol=icmpadd action=accept chain=input comment="defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1add action=drop chain=input comment="defconf: drop all not coming from LAN" disabled=yes in-interface-list=!LANadd action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsecadd action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsecadd action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related disabled=yesadd action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untrackedadd action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid disabled=yesadd action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new disabled=yes in-interface-list=WAN

14. Настроить профили безопасности для SSID

/interface wireless security-profilesset [ find default=yes ] supplicant-identity=MikroTikadd authentication-types=wpa-psk,wpa2-psk eap-methods="" group-ciphers=tkip,aes-ccm mode=dynamic-keys name=Profile_Home_wireless supplicant-identity="" \    unicast-ciphers=tkip,aes-ccm wpa-pre-shared-key=home-wifi-00 wpa2-pre-shared-key=home-wifi-00add authentication-types=wpa-psk,wpa2-psk eap-methods="" group-ciphers=tkip,aes-ccm mode=dynamic-keys name=Profile_Secure_wireless supplicant-identity=\    "" unicast-ciphers=tkip,aes-ccm wpa-pre-shared-key=secure-wifi-00 wpa2-pre-shared-key=secure-wifi-00add eap-methods="" group-ciphers=tkip,aes-ccm name=Profile_Children_wireless supplicant-identity="" unicast-ciphers=tkip,aes-ccm wpa-pre-shared-key=\    children-wifi-00 wpa2-pre-shared-key=children-wifi-00

15. Настроить сам Wi-Fi с четырьмя SSID

/interface wirelessset [ find default-name=wlan1 ] band=2ghz-g/n country=russia distance=indoors installation=indoor mode=ap-bridge name=wlan_2.4_GHz security-profile=\    Profile_Home_wireless ssid=Home_wireless tx-power=13 tx-power-mode=all-rates-fixed vlan-id=10 wireless-protocol=802.11 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_2.4_GHz multicast-buffering=disabled name=wlan_2.4_GHz_virtual_2 \    security-profile=Profile_Secure_wireless ssid=Secure_wireless vlan-id=20 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_2.4_GHz multicast-buffering=disabled name=wlan_2.4_GHz_virtual_3 \    security-profile=Profile_Home_wireless ssid=VPN_wireless vlan-id=30 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_2.4_GHz multicast-buffering=disabled name=wlan_2.4_GHz_virtual_4 \    security-profile=Profile_Children_wireless ssid=Children_wireless vlan-id=40 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledset [ find default-name=wlan2 ] band=5ghz-n/ac channel-width=20/40mhz-Ce country=russia distance=indoors installation=indoor mode=ap-bridge name=\    wlan_5_GHz security-profile=Profile_Home_wireless ssid=Home_wireless_pro tx-power=13 tx-power-mode=all-rates-fixed vlan-id=10 wireless-protocol=\    802.11add keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_5_GHz multicast-buffering=disabled name=wlan_5_GHz_virtual_2 \    security-profile=Profile_Secure_wireless ssid=Secure_wireless_pro vlan-id=20 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_5_GHz multicast-buffering=disabled name=wlan_5_GHz_virtual_3 \    security-profile=Profile_Home_wireless ssid=VPN_wireless_pro vlan-id=30 wds-cost-range=0 wds-default-cost=0 wps-mode=disabledadd keepalive-frames=disabled mac-address=XX:XX:XX:XX:XX:XX master-interface=wlan_5_GHz multicast-buffering=disabled name=wlan_5_GHz_virtual_4 \    security-profile=Profile_Children_wireless ssid=Children_wireless_pro vlan-id=40 wds-cost-range=0 wds-default-cost=0 wps-mode=disabled

16. Выключаем детскую сеть по расписанию:

/system scheduleradd interval=1d name=Switch_OFF_children_1 on-event=swich_off_children_2.4 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=21:00:00add interval=1d name=Switch_ON_children_1 on-event=swich_on_children_2.4 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=07:00:00add interval=1d name=Switch_OFF_children_2 on-event=swich_off_children_5 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=21:00:00add interval=1d name=Switch_ON_children_2 on-event=swich_on_children_5 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \    start-date=nov/28/2020 start-time=07:00:00/system scriptadd dont-require-permissions=no name=swich_off_children_2.4 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless disable wlan_2.4_GHz_virtual_4"add dont-require-permissions=no name=swich_on_children_5 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless enable wlan_5_GHz_virtual_4"add dont-require-permissions=no name=swich_on_children_2.4 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless enable wlan_2.4_GHz_virtual_4"add dont-require-permissions=no name=swich_off_children_5 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\    "interface wireless disable wlan_5_GHz_virtual_4"

17. Оставить возможность настраивать роутер локально

/ip neighbor discovery-settingsset discover-interface-list=LAN/tool mac-serverset allowed-interface-list=LAN/tool mac-server mac-winboxset allowed-interface-list=LAN18.Мелочи/system clockset time-zone-name=Europe/Moscow/system identityset name=Miktorik-1

На Miktorik-1, Miktorik-2 делаем все тоже самое, только меняя адреса VLAN-ов в соответствие с адресным планом.

VPN сервер на базе Debian


XXX.XXX.XXX.XXX - ваш public IP#sudo apt-get install libgmp3-dev gawk flex bison make#sudo wget https://download.openswan.org/openswan/openswan-latest.tar.gz#sudo tar -xvzf openswan-latest.tar.gz#cd openswan-2.6.51#sudo make programs#sudo make install#sudo nano /etc/ipsec.confconfig setup   nat_traversal=yes   virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12   oe=off   protostack=netkeyconn L2TP-PSK-NAT   rightsubnet=vhost:%priv   also=L2TP-PSK-noNATconn L2TP-PSK-noNAT   authby=secret   pfs=no   auto=add   keyingtries=3   rekey=no   ikelifetime=8h   keylife=1h   type=transport   left=XXX.XXX.XXX.XXX   leftprotoport=17/1701   right=%any   rightprotoport=17/%any   #sudo nano /etc/ipsec.secretsXXX.XXX.XXX.XXX %any: PSK "PASSWORD"#sudo nano /root/ipsec#sudo iptables --table nat --append POSTROUTING --jump MASQUERADE#sudo echo 1 > /proc/sys/net/ipv4/ip_forward#for each in /proc/sys/net/ipv4/conf/*#do#echo 0 > $each/accept_redirects#echo 0 > $each/send_redirects#done#sudo /etc/init.d/ipsec restar#sudo chmod +x /root/ipsec#sudo sh /root/ipsec#sudo nano /etc/xl2tpd/xl2tpd.conf[global]port = 1701ipsec saref = yessaref refinfo = 30[lns default]ip range = 10.1.1.2-10.1.1.100local ip = 10.1.1.1refuse chap = yesrefuse pap = yesrequire authentication = yesppp debug = yespppoptfile = /etc/ppp/options.xl2tpdlength bit = yesname = VPN-1#sudo nano /etc/ppp/options.xl2tpdrequire-mschap-v2ms-dns 8.8.8.8ms-dns 8.8.4.4asyncmap 0authcrtsctslockhide-passwordmodemdebugname VPN-1proxyarplcp-echo-interval 30lcp-echo-failure 4#sudo nano /var/log/syslog#sudo nano /etc/ppp/chap-secretsuser-1 VPN-1 PASSWORD *#sudo /etc/init.d/ipsec restartsudo /etc/init.d/xl2tpd restart#sudo ipsec verifyFIREWALL#sudo apt-get install ufw#sudo ufw disable#sudo ufw allow ssh#sudo ufw allow 500/udp#sudo ufw allow 1701/udp#sudo ufw allow 4500/udp#sudo ufw allow from 10.1.1.0/24#sudo ufw default allow routed#sudo ufw delete ssh#sudo ufw allow 4444#sudo ufw enable

Просмотр состояния FW

#sudo ufw status verbose

Просмотр логов если что-то блокируется

#sudo ufw logging low#sudo tail -f /var/log/ufw.log

Отключение логирования, чтобы не забивать место на диске

#sudo ufw logging off


Меняем порт ssh на другой

sudo nano /etc/ssh/sshd_configPort 4444sudo systemctl restart sshd

Проверка нет ли попыток взлома

sudo cat /var/log/auth.log | grep "authentication failure"

Готово!

Теперь VPN сервер будет работаеть даже с iPhone через 4G!
Подробнее..

Конвергенция Wi-Fi и IoT для современных кампусных сетей

29.12.2020 20:14:34 | Автор: admin
Привет, Хабр! Сегодня мы предлагаем поговорить не столько о продуктах и технологиях Huawei, сколько о гибридных решениях, которые строятся на базе точек доступа Wi-Fi и устройств интернета вещей.



Всё более широкое распространение IoT требует создания унифицированных беспроводных кампусных сетей таких, которые сочетали бы в себе традиционную функциональность Wi-Fi, пусть и шестого уже поколения, с возможностями, которые обещает нам мир, наполненный неисчислимой россыпью сенсоров.



Если ещё пять-семь лет назад концепция интернета вещей казалась далёкой от практического применения, сейчас IoT вовсю внедряют в корпоративные сети и городскую инфраструктуру. К примеру, в Москве как раз в наши дни реализуется колоссальный проект по создания системы умного освещения, в которой включение и выключение каждого светильника производится дистанционно сигналом через сеть 5G. Не оставлен в стороне и транспорт: автобусы или такси удобно снабдить множеством датчиков, позволяющих не только отслеживать параметры самих транспортных средств, но и собирать статистику, например, по загруженности дорог.

Присматриваются к IoT и организации, управляющие стадионами, крупными торговыми центрами, развлекательными комплексами и другими городскими объектами. Интернет вещей необходим им для сбора и обработки информации о посетителях.

Ещё одна сфера применения IoT учёт активов. Например, для промышленных предприятий. Здесь интернет вещей помогает решать задачи инвентаризации и эффективного использования сложного дорогостоящего оборудования. Много интересного по этой части делают также в медицинских и образовательных организациях.



Чем в этой связи может быть полезно построение совместных сетей Wi-Fi и IoT? Начать стоит с основных проблем, с которыми рискует столкнуться потенциальный заказчик решения IoT, отделённого от существующей сетевой инфраструктуры.

Во-первых, внедрять и сопровождать придётся две разные системы. А это капитальные расходы на размещение точек доступа и сенсоров, прокладку СКС, подключение управляющих устройств для контроля двух сетей. Во-вторых, итоговое решение будет не только дорогим, но и чрезвычайно сложным в эксплуатации.

Помочь заказчикам, испытывающим потребность в развёртывании и сетей беспроводного доступа Wi-Fi, и сетей IoT, призвана конвергентная архитектура. Она основана на применении точек доступа Huawei, допускающих расширение функциональности с помощью дополнительных аппаратных элементов. В такой точке доступа имеется отдельный слот, куда при необходимости вставляется стандартизированный IoT-модуль, например Zigbee или сканер меток RFID. Существуют и такие точки доступа, которые уже в базовой комплектации включают в себя миниатюрный Bluetooth-маяк. Эта дополнительная функциональность позволяет точке доступа не только работать по прямому назначению раздавать Wi-Fi в диапазонах 2,4 и 5 ГГц, но и собирать информацию, общаясь с IoT-устройствами (смартфонами, носимыми метками, электронными ценниками, терминалами съёма данных и пр.).

Дальше по обычной проводной сети все данные поступают в те системы верхнего уровня, которые управляют конечными устройствами интернета вещей.



Общаясь со своими заказчиками, мы выявили несколько наиболее востребованных на сегодняшний день сценариев применения IoT. Среди них и такой неочевидный на первый взгляд, как позиционирование клиентов или сотрудников. Эта механика может понадобиться, допустим, при построении систем внутренней навигации на определённой территории или систем управления персоналом (второй вариант особенно актуален для медицинских учреждений).

Другой распространённый IoT-сценарий анализ пассажиропотока или трафика посетителей. Это интересно, например, ритейлерам. В частности, эта технология позволяет владельцам гипермаркетов с учётом потоков покупателей оптимизировать размещение торговых точек и выкладку товаров, подбирать правильное место и время для проведения маркетинговых акций.

Ещё одна большая задача управление ресурсами. Актуальна она на производстве, в складских комплексах и любых других объектах, где необходимо постоянно контролировать местонахождение и статус различных технических средств, например погрузчиков.



Системы внутреннего позиционирования и навигации


Архитектура подобных IoT-систем состоит из нескольких уровней. На нижнем располагаются терминалы, смартфоны, ноутбуки, активные или пассивные метки (RFID, BLE и пр.). Выше находятся точка доступа Wi-Fi со встроенным модулем IoT, кампусная сеть и контроллер доступа. Венчает пирамиду управляющее всей системой программное обеспечение. В решениях внутренней навигации, к примеру, в роли такого ПО выступает специальная платформа отслеживания, которая связана с мобильным приложением, установленным на смартфоне сотрудника или клиента.

Отдельный, самый верхний архитектурный слой представляет собой аналитическая платформа, которая берёт данные (включая ретроспективные) из платформы отслеживания и помогает делать выводы на основе маршрутов, тепловых карт, геозонирования и т. д.



Остановимся на платформе отслеживания и её возможностях. Она собирает данные с конечных устройств, подсчитывая количество и продолжительность посещений того или иного объекта на контролируемой территории. Платформа позволяет разделить эту территорию на зоны и получать полную информацию о том, как перемещаются между этими зонами целевые объекты IoT-устройства или конкретные люди.



Мобильная часть платформы, устанавливаемая на смартфоны сотрудников или клиентов, является необходимым элементом IoT-систем внутренней навигации. Помимо всего прочего, она позволяет значительно повысить точность позиционирования клиентского терминала за счёт информации с модуля Bluetooth и гироскопа устройства.

В этой платформе, которая ведёт, например, клиента по торговому центру, можно предусмотреть разнообразные маркетинговые функции, реализуемые при прохождении маршрута.



Насколько точны такие системы позиционирования? Ответ наглядно показан на схеме выше. С помощью сочетания данных от правильно расставленных точек доступа Wi-Fi и с гироскопа смартфона удаётся достичь точности до 5 м. Повысить её до 3 м можно с помощью активной метки Wi-Fi, только нужно учитывать её высокую стоимость и достаточно высокое энергопотребление.

Если прикладная задача требует погрешности определения координат цели на уровне не более 3 м, рациональнее будет построить систему позиционирования с использованием установленного в точке доступа Bluetooth-маячка.



Системы управления активами


Перейдём к следующей прикладной задаче, которая решается с помощью интернета вещей и конвергентных систем Wi-Fi + IoT.

С какими трудностями сталкиваются предприятия, которым необходимо провести инвентаризацию? В первую очередь с низкой эффективностью процесса. Он тянется долго, сопровождается ошибками, возникающими по вине человеческого фактора, а собранные данные зачастую нуждаются в перепроверке.

Кроме того, текущий статус использования активов зачастую неизвестен. Теряются не только флэшки, но и техсредства покрупнее. Например, тот же погрузчик. Скорее всего, он находится на территории предприятия, но где именно, вопрос. Нет зачастую и статистики по реальной эксплуатации активов: использовался ли потерянный погрузчик хоть раз за последний месяц, посещал ли он зарядную станцию?

Добавляют хлопот и неопределённые потери активов. Погрузчик может быть случайно перемещён в другую зону, где никто не станет его искать, или его умыкнули злоумышленники.



Чем здесь будет полезна конвергентная система Wi-Fi + IoT? Решение, построенное на основе точек доступа Huawei с установленными в них IoT-модулями, умеет собирать данные с активных и пассивных меток, размещённых на оборудовании. Метки контроля тока, например, помогают понять реальный статус использования активов по потреблению ими электричества. Метка позиционирования позволяет в реальном времени контролировать местонахождение интересующих нас устройств. А благодаря ручному считывателю RFID-меток можно отказаться от бумажных стикеров с номерами и проводить инвентаризацию, просто пронося сканер мимо промаркированных объектов на определённом расстоянии. Данные с метки поступают в терминал, который отправляет их в сеть Wi-Fi и далее к системам вышестоящего уровня.

Всё это помогает обеспечивать полную достоверность получаемой в ходе инвентаризации информации и высокую скорость её сбора.



Рассмотрим частный случай системы контроля ценных активов, которая построена на основе активных меток. Такая метка постоянно сообщает свой статус IoT-модулю в точке доступа Wi-Fi. Соответственно, отчёт о наличии и использовании того или иного актива в конкретной локации можно получить мгновенно в режиме онлайн. Как следствие, серьёзно сокращаются и трудозатраты в сравнении с инвентаризацией по классике.

Плановая инвентаризация активов общего назначения, допустим связанная с увольнением сотрудника или переездом отдела в другой офис, тоже существенно ускоряется. Представим, что все активы уже снабжены RFID-метками. Теперь достаточно загрузить в ручной сканер задание на инвентаризацию, обойти помещение и синхронизировать список из задания со списком только что дистанционно считанных меток.



Дополнительные возможности по части контроля активов предоставляет технология геозонирования. Наряду с прочим она позволяет определить точные границы области, которую не должен покидать конкретный актив (цеха, выставочного зала, гаража и т. д.). При выходе актива за границы такой зоны программная платформа сформирует предупреждение и отправит его ответственному лицу.



Вот ещё один пример активного контроля использования оборудования в реальном времени. На фото выше вы видите прикреплённую к системному блоку ПК активную RFID-метку, которая регистрирует потребление энергии. Контролировать таким образом можно какую угодно технику, будь то медицинский прибор или станок ЧПУ. Помимо информации о местонахождении устройства и самом факте его работы, эта метка может передать и данные о потребляемом токе, то есть, по сути, о текущем режиме работы оборудования. Это позволяет собирать статистику по коэффициентам использования и простоя аппаратуры, анализировать эти сведения и решать задачи по оптимизации её эксплуатации.



Системы электронных ценников


С каждым годом добавляется прикладных задач, решение которых может быть основано на связке Wi-Fi + IoT. Так, наши клиенты и заказчики всё больше интереса проявляют к внедрению систем электронных ценников в розничной торговле.

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

Решение, конечно, есть. В уже развёрнутой современной сети Wi-Fi магазина в точки доступа Huawei устанавливаются модули управления электронными ценниками. Оператору магазина остаётся только разместить в торговом зале миниатюрные ESL ценники на основе цветной или монохромной электронной бумаги. Они несут информацию о цене, могут менять свой цвет (например, чтобы выделить скидочные товары), оборудованы светодиодной системой привлечения внимания, но, главное, все они управляются централизованно. Так что, когда потребуется оперативно изменить ценники в огромной торговой сети, достаточно будет поменять одно число в ERP-системе предприятия.



С точки зрения архитектуры решение довольно простое. На нижнем уровне находятся сами электронные ценники, которые обмениваются данными с расположенной уровнем выше точкой доступа Wi-Fi, снабжённой IoT-модулем. Ещё выше корпоративная сеть и контроллер, управляющий сетевыми устройствами. Параллельно с ним работает система управления ESL. На самом верху функционирует ERP-система торговой сети, формирующая запросы на изменение цен.

Прикладных задач, которые решаются установкой IoT-модулей в точки доступа Wi-Fi, очень много. И хотя многие проекты ещё пребывают на стадии POC-тестов, однако те сценарии, о которых мы рассказали, получили путёвку в жизнь. Об этом свидетельствует и то, как быстро растёт число компаний, готовых строить свои островки интернета вещей уже сегодня.
Подробнее..

Обзор точки доступа Cisco Aironet 1815W или последний довод сетевика

27.05.2021 22:07:59 | Автор: admin

Так как Catalyst 9105AXW достать не получилось, то я решил опубликовать обзор на Cisco Aironet 1815W.

Жить одним днем

Мне кажется, одной из главных проблем в жизни сетевика, это наличие СКС. А точнее отсутствие.

Я неоднократно встречал ситуацию, когда в помещения, где вообще не планировалось размещать сотрудников, появляется кабинет с 5 сотрудниками или кто-то решил что СКС это дорого, поэтому давайте только по одной розетке ставить, но при этом мы покупаем оборудование Cisco. И конечно же всем нужен Wi-Fi (который изначально не планировался), несколько принтеров, IP-телефоны, телевизор и компьютеры, а у вас в лучшем случае одна розетка RJ-45. И вот тут нас спасёт Cisco Aironet 1815W, где есть и Wi-Fi и порты Ethernet, и даже PoE out.

Внешний вид

Ну что тут сказать. Это конечно не 9ХХХ серия, где похоже Cisco решили назад позвать дизайнера (вспоминая 27ХХ) и точка доступа выглядит не просто как кирпич (28ХХ и 38ХХ), а довольно симпатично и её можно даже поставить на стол (увы нет).

У меня массовое применение её пришлось для гостиничных номеров, где была только одна розетка СКС под телевизор, а Wi-Fi точка была в коридоре и в номерах лучше было пользоваться 4G чем Wi-Fi, побыстрее будет. И так как никто не смог согласовать размещение этой точки доступа пришлось прятать её за телевизор. С такими размерами, точка доступа отлично прячется за телевизор (к слову скажу, что экран из телевизора довольно хороший, но лучше хоть так).

А ещё лучше всего, она становится, прям вместо блока розеток СКС.

Возможности

Конечно в этой точке доступа не 3х3 или 4х4 как в старших моделях, а всего 2х2, но для условий комнаты или небольшого помещения, где будут находиться 3-5 человек это вообще не принципиально.

RLAN

Помимо размера главное достоинство, это 3 Ethernet-порта и даже один с PoE.

Для того чтобы воспользоваться этими портами, существует технология RLAN. Кстати хорошо расписано тут Configure RLAN on 9800 WLC.

В настройках портов так же много всего и dot1x и веб авторизация, но этим функционалом пока не пользовался ничего сказать не могу.

Когда мы тестировали эту точку доступа на 5508 весь трафик с портов туннелировался и выходил через контроллер, что меня расстраивало (возможно я не нашел как в 8.5 это отключить без изменения типа точки доступа на FlexConnect). В 9800-CL мы можем сами определять, что будет уходить в туннель CAPWAP, а что будет выходить локально.

Потребляемая мощность

8.5 Вт!!!!! На фоне 1562i, для которой надо UPOE это просто праздник какой-то

А теперь задачка

У нас уже есть VLAN, который используется для планшетов и этот же VLAN используется для Телевизоров. В нем транслируется IPTV через multicast. Как думаете, что будет если включить телевизор через 1815W и настроить выход этого vlan локально, через коммутатор? Правильно, ничего хорошего. Ситуация такая: При включении канала, у нас работает IPTV. Но!! при этом, на Uplink Wi-Fi контроллера начинается широковещательный шторм.

Если трафик выпускать через контроллер, то проблем нет. Кстати, об этом нигде в мануалах не написано, что не стоит использовать vlan которые уже есть на SSID-ах и выпускать трафик локально через коммутатор.

Проблему решил просто создав для планшетов отдельный vlan. Интересная вещь, если вы переключите политику с центральной маршрутизации на локальную, то настройка применится на лету, а вот DHCP нет. Только перезагрузка точки доступа (минут 30 потратили на это, пытаясь понять что происходит).

Так как данный пост не проплачен Cisco, поговорим о минусах.

Минусы

Как вы видели выше, эта точка доступа может монтироваться как вместо сетевой розетки, так и просто горизонтально. НО! Для реализации этого в точке доступ очень хитро сделано подключение. А именно, основное подключение идет сзади

Как вы думаете, что это за PoE и Pass-Thru. Задумка, наверно была такая. Приходит два сетевых линка, вы убираете розетку. Устанавливаете точку доступа в подрозетник, один линк идет в PoE и питает точку доступа, второй уходит насквозь и снизу забираем чистый линк. Да, при таком монтаже все отлично.

А если у нас горизонтальный монтаж? А тогда купите дополнительно еще коробочку:

Иначе увидите это:

Ну а что, стильно, молодёжно. Кстати перемычки пришлось обжимать самим, так как заказывать какие-то специальные уж совсем не хочется. Так что на стол просто так эту точку положить не получится.

Если вам интересно, что же делает эта перемычка, расскажу. Она, соединяет вход PoE точки доступа, с портом который прокинут внутри точки доступа вниз, куда вы подаете сигнал от коммутатора.

Спрашивается, почему нельзя было это сделать джамперами.

А теперь еще интересная вещь.

Вдруг вам захотелось подключиться к точке доступа консолью, и..

Конечно, у всех завалялась парочка таких консолей, от других коммутаторов, точек доступа (нет). Для того чтобы подключиться нужно купить переходник

Конечно, можно сказать, что мало места, где тут RJ-45 вставить, но простите. Все давно уже придумано

Mini-USB. Уже давно используется, хотя конечно не везде заменяет на 100% обычную консоль.Mini-USB. Уже давно используется, хотя конечно не везде заменяет на 100% обычную консоль.

А теперь как вы думаете, что будет если точку доступа с настройками RLAN перезапустить?

те кто читал предыдущую статью, думаю догадались. Подсказка CSCvs08564

И да, баг уже починили.

А все просто, порты которые нужно отдельно активировать на КАЖДОЙ точке доступа (Где тут логика, вообще не понятно), после перезапуска опять становятся выключенными. А теперь как вы думаете, что делают люди, когда у них что-то не работает и оно под рукой? Правильно, перезагружают. В итоге замкнутый круг, разомкнуть который можно только пригрозив карой небесной, чтобы в руки не брали даже.

В итоге, посидев пару дней, повспоминав всё что забыто, я написал таки скрипт, прикрутил к Zabbix (кстати, а ваша система мониторинга хорошо интегрируется с самописными скрпитами?) и у меня появилась своя автоматизация, которая лезет на контроллер, ищет все точки доступа с политикой RLAN, далее отдаем Zabbix, он формирует этот список и далее идет второй скрипт, который по каждой точке смотрит состояние порта, если он отключен, он его включает но при этом уведомляет Zabbix, что там было отключено.

Послесловие или не все точки доступа одинаковые

Если вам очень понравился функционал 1815w, а у вас такой нет и вам очень грустно. Не расстраиваетесь, тем же функционалом обладает 2802i и 3802i. Но, так как там второй порт (он же AUX) создавался изначально под другие цели (в виде Etherchannel c 3850), то то что работает на 1815W, на 2802i может не заработать. У нас был кейс, когда телевизор не захотел работать через 2802i (точнее, он пинговался, но вот HTTP точка дропала) и закончилось это...

After discussing the issue in depth with our escalation and development team we came to the conclusion that RLAN with local switching has never been tested on Barbados AP platform i.e. 2800 AP models. I have raised an enhancement bug for this feature to be added in future controller releases. The bug is still internal so cant share much details. Some portions of code related to RLAN config is copied from 1815 AP model to 2800 APs which might be helping the desktop/laptop clients to pass traffic in RLAN local switching mode. But this is yet to be properly tested in our labs and to be added in the feature matrix of the 2800 APs. Current Controller/AP codes does not support RLAN local switching.

Возможно уже починили, проблема была на 17.2. На 17.5 не проверяли. На этой позитивной ноте разрешите откланяться.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru