Комплект умного дома – Протокол связи Bluetooth

Комплект умного дома - Протокол связи Bluetooth Лодки

Добавляем основной код

Пришла пора вдохнуть жизнь в наше приложение. Открываем файл MainActivity.java (src → ru.amperka.arduinobtled). Изначально он содержит следующий код:

MainActivityAutogen.java
packageru.amperka.arduinobtled;
 
importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;
 
publicclass MainActivity extends Activity {
 
        @Override
	protectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);}
 
	@Override
	publicboolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);returntrue;}
 
}

Дополним код в соответствии с тем, что нам нужно:

  1. Будем включать Bluetooth, если он выключен.

  2. Будем обрабатывать нажатия на кнопки

  3. Будем посылать информацию о том, какая кнопка была нажата.

Передавать на Arduino мы будем один байт с двузначным числом. Первая цифра числа — номер пина, к которому подключен тот или иной светодиод, вторая — состояние светодиода: 1 — включен, 0 — выключен.

Число-команда, рассчитывается очень просто:
Если нажата красная кнопка, то берется число 60 (для красного светодиода мы выбрали 6-й пин Arduino) и к нему прибавляется 1 или 0 в зависимости от того, должен ли сейчас гореть светодиод или нет. Для зеленой кнопки всё аналогично, только вместо 60 берется 70 (поскольку зеленый светодиод подключен к 7 пину).
В итоге, в нашем случае, возможны 4 команды: 60, 61, 70, 71.

Смотрите про коптеры:  Строим роботанк с управлением по Wifi, камерой, пушкой, блекджеком и т.д / Хабр

Напишем код, который реализует всё сказанное.

MainActivity.java
packageru.amperka.arduinobtled;
 
importjava.io.IOException;importjava.io.OutputStream;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;
 
importandroid.app.Activity;importandroid.bluetooth.BluetoothAdapter;importandroid.bluetooth.BluetoothDevice;importandroid.bluetooth.BluetoothSocket;importandroid.content.Intent;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Toast;importandroid.widget.ToggleButton;
 
publicclass MainActivity extends Activity implementsView.OnClickListener{
 
    //Экземпляры классов наших кнопок
    ToggleButton redButton;
    ToggleButton greenButton;
 
    //Сокет, с помощью которого мы будем отправлять данные на Arduino
    BluetoothSocket clientSocket;
 
    //Эта функция запускается автоматически при запуске приложения
    @Override
    protectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        //"Соединям" вид кнопки в окне приложения с реализацией
        redButton =(ToggleButton) findViewById(R.id.toggleRedLed);
        greenButton =(ToggleButton) findViewById(R.id.toggleGreenLed);
 
        //Добавлем "слушатель нажатий" к кнопке
        redButton.setOnClickListener(this);
        greenButton.setOnClickListener(this);
 
        //Включаем bluetooth. Если он уже включен, то ничего не произойдетString enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE;
        startActivityForResult(new Intent(enableBT), 0);
 
        //Мы хотим использовать тот bluetooth-адаптер, который задается по умолчанию
        BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
 
        //Пытаемся проделать эти действияtry{//Устройство с данным адресом - наш Bluetooth Bee//Адрес опредеяется следующим образом: установите соединение//между ПК и модулем (пин: 1234), а затем посмотрите в настройках//соединения адрес модуля. Скорее всего он будет аналогичным.
            BluetoothDevice device = bluetooth.getRemoteDevice("00:13:02:01:00:09"); 
 
            //Инициируем соединение с устройствомMethod m = device.getClass().getMethod("createRfcommSocket", newClass[]{int.class});
 
            clientSocket =(BluetoothSocket) m.invoke(device, 1);
            clientSocket.connect();
 
            //В случае появления любых ошибок, выводим в лог сообщение}catch(IOException e){
            Log.d("BLUETOOTH", e.getMessage());}catch(SecurityException e){
            Log.d("BLUETOOTH", e.getMessage());}catch(NoSuchMethodException e){
            Log.d("BLUETOOTH", e.getMessage());}catch(IllegalArgumentException e){
            Log.d("BLUETOOTH", e.getMessage());}catch(IllegalAccessException e){
            Log.d("BLUETOOTH", e.getMessage());}catch(InvocationTargetException e){
            Log.d("BLUETOOTH", e.getMessage());}
 
        //Выводим сообщение об успешном подключении
        Toast.makeText(getApplicationContext(), "CONNECTED", Toast.LENGTH_LONG).show();
 
    }
 
    @Override
    publicboolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);returntrue;}
 
 
    //Как раз эта функция и будет вызываться 
 
    @Override
    publicvoid onClick(View v){
 
        //Пытаемся послать данныеtry{//Получаем выходной поток для передачи данныхOutputStream outStream = clientSocket.getOutputStream();
 
            int value =0;
 
            //В зависимости от того, какая кнопка была нажата, //изменяем данные для посылкиif(v == redButton){
                value =(redButton.isChecked()?1:0) 60;}elseif(v == greenButton){
                value =(greenButton.isChecked()?1:0) 70;}
 
            //Пишем данные в выходной поток
            outStream.write(value);
 
        }catch(IOException e){//Если есть ошибки, выводим их в лог
            Log.d("BLUETOOTH", e.getMessage());}}}

2 Параметры соединения

Параметры, определяющие соединение:

  • Интервал соединения

    Интервал соединения может принимать любое из значений между 7.5 мс и 4.0 секундами с шагом в 1.25 мс. Он задается центральным устройством в пакете запроса соединения. Центральное устройство может принять во внимание Предпочитаемые Параметры Соединения Периферийного Устройства (PPCP). Центральное устройство вправе принять их, модифицировать или отклонить.

  • Задержка ведомого (Slave Latency)

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

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

  • Таймаут наблюдения (Supervision Timeout)

    Таймаут наблюдения используется для определения потери соединения. Он определяется как максимальное время между двумя полученными пакетами данных, прежде чем соединение считается потерянным. Его значение может задаваться в диапазоне между 100 мс и 32 секундами с шагом 10 мс. Другое условие выглядит следующим образом:

    Таймаут наблюдения > (1 задержка ведомого) * интервал соединения * 2

    Существует исключение, для которого таймаут наблюдения не применяется – в момент, когда соединение создано, но еще не установлено. В этом случае ведущее устройство примет решение о потере соединения, если не получит пакета от ведомого в течении 6 интервалов соединения.

  • Расширение длины данных (DLE)

    Это опция, которая позволяет пакетам данных содержать большее количество полезной нагрузки (до 251 байта, в случае, когда эта настройка выключена, полезная нагрузка составляет 27 байт). Эта возможность введена в версии 4.2 спецификации Bluetooth.

  • Максимальная единица передачи (MTU)

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

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

    Примечание: Для достижения максимальной пропускной способности убедитесь, что включено расширение длины передаваемых данных (в случае, если вы используете Bluetooth 4.2 или новее). Это поможет снизить количество избыточно передаваемых служебных данных, таких как заголовки пакетов, за счет уменьшения числа пакетов.

1 Протокол атрибутов (ATT)

АТТ определяет, в каком виде сервер представит свои данные клиенту и как эти данные будут структурированы. Существует две роли, связанные с АТТ:

  • Сервер:

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

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

  • Клиент:

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

    Данные, предоставляемые сервером, сгруппированы в атрибуты. Атрибут это общий термин для любых типов данных, предоставляемых сервером, он определяет структуру этих данных. Например, сервисы и характеристики (будут описаны позднее) являются атрибутами. Ниже состав атрибута:

  • Тип атрибута (универсальный уникальный идентификатор, UUID)

    Это 16-битное (в случае стандартных атрибутов Bluetooth SIG) или 128-битное число (в случае атрибутов, определенных разработчиком устройства, vendor-specific UUID).

    Например, UUID для одобренного консорциумом атрибута значения температуры 0x2A1C. Одобренные консорциумом типы атрибутов имеют один общий (за исключением 16 бит) специальный 128-битный UUID:

    0000XXXX-0000-1000-8000-00805F9B34FB

    16-битный UUID будет подставлен вместо символов ХХХХ в базовом UUID.

    Собственный UUID может быть любым 128-битным числом, не совпадающим ни с одним из одобренных Bluetooth-SIG базовых UUID. Например, разработчик может создать свой собственный UUID для показаний температуры, такой как:

    F5A1287E-227D-4C9E-AD2C-11D0FD6ED640

    Одно из преимуществ использования стандартных UUID состоит в уменьшении размера пакета, так как UUID может быть передан в виде 16-битного числа, вместо передачи полного 128-битного числа.

  • Дескриптор атрибута

    Это 16-битное число, которое сервер присваивает каждому из своих атрибутов. Это число используется клиентом как ссылка на конкретный атрибут, и сервер гарантирует, что эта ссылка будет уникальной для атрибута, которому она присвоена, в течении всего времени существования соединения между устройствами. Дескриптор может иметь любое значение в диапазоне 0x0001-0xFFFF, значение 0х0000 зарезервировано.

  • Права атрибута

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

3.2 Характеристики

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

  • Свойства: представлены набором бит, определяющих то, каким образом значение характеристики может использоваться. Пример свойств: чтение, запись, запись без ответа, уведомление, индикация.

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

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

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

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

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

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

Если устройство заявляет о совместимости с сервисом, оно должно полностью соответствовать спецификации сервиса, опубликованной Bluetooth SIG. Это важно, если вы хотите разработать устройство, которое будет гарантированно подключаться к устройствам, изготовленными другим производителем.

Вы можете найти список одобренных сервисов здесь, и их спецификации здесь. Одобренные характеристики находятся по этому адресу.

Заготовка

Разработка для ОС Android ведется в среде разработки ADT, Android Development Tools. Которую можно скачать с портала Google для разработчиков.
После скачивания и установке ADT, смело его запускаем. Однако, еще рано приступать к разработке приложения. Надо еще скачать Android SDK нужной версии. Для этого необходимо открыть Android SDK Manager «Window → Android SDK Manager». В списке необходимо выбрать нужный нам SDK, в нашем случае Android 2.3.3 (API 10). Если телефона нет, то выбирайте 2.3.3 или выше; а если есть — версию, совпадающую с версией ОС телефона. Затем нажимаем на кнопку «Install Packages», чтобы запустить процесс установки.

Комплект умного дома - Протокол связи Bluetooth

После завершения скачивания и установки мы начинаем создавать приложение. Выбираем «File → New → Android Application Project». Заполним содержимое окна так, как показано на рисунке.

Комплект умного дома - Протокол связи Bluetooth

В выпадающих списках «Minimum Required SDK», «Target SDK», «Compile With» выбираем ту версию, которую мы скачали ранее.
Более новые версии SDK поддерживают графические темы для приложений, а старые нет. Поэтому в поле «Theme» выбираем «None».
Нажимаем «Next».

Снимаем галочку с «Create custom launcher icon»: в рамках данной статьи не будем заострять внимание на создании иконки приложения. Нажимаем «Next».

В появившемся окне можно выбрать вид «Activity»: вид того, что будет на экране, когда будет запущено приложение. Выбираем «Blank activity», что означает, что мы хотим начать всё с чистого листа. Нажимаем «Next».

В нашем приложении будет всего одно Activity, поэтому в появившемся окне можно ничего не менять. Поэтому просто жмем на «Finish».

Все, наше приложение создано.

Комплект умного дома – протокол связи bluetooth

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

logo bluetooth 2 200

Все больше и больше производителей Умных домов, строят свои устройства на основе протокола Bluetooth. По надёжности он, кстати, ничем не хуже тех же стандартов Z-Wave или ZigBee. Bluetooth – это та же технология, с помощью которой мы связываем наши мобильный телефон и гарнитуру.

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

Bluetooth-Smart – такое название получила новая технология. Её преимуществом является невысокое энергопотребление, что очень удобно при работе с умными дверными замками и выключателями, которые не имеют постоянного доступа к розетке.

История

bluetooth phoneBluetooth – протокол беспроводной передачи данных. Технология позволяет обмениваться информацией между несколькими устройствами, к примеру, ноутбуком и телефоном. Этот протокол связи поддерживают не только эти гаджеты, но и многие принтеры, гарнитуры, мышки, клавиатуры. Для передачи данных Bluetooth использует надежную радиочастоту.

Технология позволяет связывать между собой устройства в радиусе до 100 метров. Дальность связи сильно зависит от преград и зачастую гораздо меньше.

Идея создания Bluetooth-сети появилась в Швеции в 1994 году. Известная компания Ericsson установила памятный камень в честь Гаральда Блютуса. На памятнике появилась даже надпись, которая благодарила великого человека за то, что его имя дало название новой технологии.

В 1998 году эта же компания в команде с Nokia, Intel, IBM и Toshiba приступили к работе над новым протоколом передачи данных, который сегодня известен нам как Bluetooth. В мае этого же года появилась SIG – специальная группа, которая занималась разработкой устройств для новой технологии. В нее могла войти любая желающая компания. Сегодня SIG вмещает в себя более 3000 участников, многие из которых состоят в ней с момента её создания.

bluetooth garnituraВ июле 1999 года появилась первая версия протокола – Bluetooth 1.0. Его сразу начали внедрять в различные гаджеты. Дальнейшие работы над технологией велись с целью повышения надёжности и скорости передачи информации, а также снижения энергопотребления. Сегодня пользователям уже доступна спецификация Bluetooth 5.0, но пока более широко используется версия Bluetooth 4.0.

Принцип работы

В комплекте Умного дома, использование технологии Bluetooth схоже с ZigBee и Z-Wave. Так как сам этот протокол связи маломощный, то и дальность действия невысока. Любой датчик, например, датчик разбития стекла, подключается по протоколу Bluetooth к ближайшему подобному устройству, имеющему уже два интерфейса передачи данных: Wi-Fi и Bluetooth, либо Bluetooth и ZigBee. Которое, в свою очередь, передаёт сигнал по Wi-Fi дальше – либо сразу вам на смартфон, либо в облако.

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

Каждое Bluetooth-устройство оснащено специальной микросхемой. Сегодня можно встретить гаджеты, которые будут иметь радиус действия в 100 метров. Еще одна особенность радиотехнологии Bluetooth – способность стабильно работать «через стенку». То есть устройства могут связываться между собой, находясь в разных комнатах. Нет необходимости настраивать и подключать гаджеты к системе. Как только Bluetooth-устройство будет находиться в радиусе действия, оно автоматически соединиться с другими приборами. Причем один гаджет может работать с множеством других (по принципу точка – много точек).

Современный чип Bluetooth имеет компактные размеры – менее 1 см. Частота, на которой работает технология, позволяет снизить потребляемую мощность к 1 мВт.

Интеллектуальные устройства BlueTooth

bluetooth soundВсе Bluetooth-устройства делятся на две категории: подключаемые гаджеты и Bluetooth-шлюзы. В системе Xiaomi у вас всегда есть возможность увидеть список устройств, которые могут быть шлюзами, через приложение Mi Home и вкладку Profile.

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

На сегодняшний день рынок умных устройств постепенно пополняется Bluetooth-устройствами. У Xiaomi тоже можно найти подходящие гаджеты. Среди них:

Беспроводный выключатель Yeelight Bluetooth Wireless Switch

yeelight bluetooth wireless switchИнтеллектуальный выключатель позволяет вам избежать хлопот с прокладкой кабеля. Устройство может быть установлено в любом удобном месте на клейкую двухстороннюю ленту. Выключатели способны работать с любыми видами умных светильников.

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

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

Yeelight Bluetooth Wireless Switch поддерживает версию Bluetooth 4.2.

Ночник Mijia Bedside Lamp

mijia bedside lampСветильник Mijia порадует ваши глаза мягким и приятным светом. Вы можете выбирать из 16 миллионов оттенков или же включить режим автоматической смены цветов, благодаря чему в вашей спальне будет обитать особая атмосфера. Устройство также дает вам возможность самостоятельно настраивать яркость и температуру освещения.

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

Добавив светильник к системе, у вас появится возможность давать голосовые команды. Кроме того, устройство может даже настраивать освещение в соответствии с текущей температурой в комнате. Размеры устройства составляют 100х100х221 мм.

Интеллектуальный ночник Mijia Bedside Lamp поддерживает версию Bluetooth 4.2.

Контроллер Xiaomi Cube

xiaomi cubeУправляйте всеми приборами в доме с помощью одного маленького кубика! Сверхчувствительный датчик позволяет устройству точно распознавать ваши действия и запускать определенные сценарии. Контроллер имеет шесть положений, с помощью которых вы можете менять освещение, включать телевизор, переключать радиостанции и управлять другой техникой.

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

Вы также можете подстроить каждое действие под себя. Контроллер имеет компактные размеры – 45х45х45 мм. Встроенного аккумулятора будет достаточно для 2-х лет стабильной работы.

Контроллер Xiaomi Cube поддерживает версию Bluetooth 4.1.

Детский светильник Динозаврик Xiaomi Philips EyeCare Smart Ceiling LED Lamp

xiaomi philips eyecare smart ceiling led lampСветильник сочетает в себе милую детскую игрушку и интеллектуальную конструкцию, которая оберегает глаза ваших детей. Устройство отлично подходит для использования во время работы, учебы и сна. Размер светильника составляет 320х320х73 мм.

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

Умное устройство оснащено 240 светодиодами с высоким индексом цветопередачи, которые обеспечивают естественное освещение. Светильник также имеет режим Moonlight, который помогает вам уснуть. Свет становится мягче, а яркость снижается до 0,1 люмен.

Светильник Xiaomi Philips EyeCare Smart Ceiling LED Lamp поддерживает версию Bluetooth 4.2.

Что в итоге?

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

Вероятно, пользователи смогут управлять всей системой умного дома с помощью своего смартфона, не используя специальные мосты. Для ZigBee и Z-Wave такая возможность кажется недоступной, тогда как Bluetooth уже довольно близок к этому. Протокол вполне способен вытеснить другие беспроводные технологии и завоевать симпатию пользователей своей относительно низкой ценой и простотой в использовании.

Где купить умные устройства на основе BlueTooth?

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

Настройки bluetooth в режиме разработчика – пошаговая инструкция для смартфонов android

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

  1. Показывать блютуз-устройства без названий. Эта функция говорит сама за себя. Если отключим названия устройств, то будем видеть только их MAC адреса.

    Комплект умного дома - Протокол связи Bluetooth

  2. Версия блютуз AVRCP – управление различными устройствами (телевизор дом.кинотеатр и другие). Эта функция позволяет выбрать версию от 1.3 до 1.6.

    Комплект умного дома - Протокол связи Bluetooth

  3. Запуск аудиокодека через блютуз. Позволяет выбрать определенный аудиокодек из списка.

    Комплект умного дома - Протокол связи Bluetooth

  4. Выбор частоты дискретизации для передачи по блютуз.

    Комплект умного дома - Протокол связи Bluetooth

  5. Выбрать глубину кодирования звука.

    Комплект умного дома - Протокол связи Bluetooth

  6. Режим аудиоканала (моно или стерео)

    Комплект умного дома - Протокол связи Bluetooth

  7. Выбор качества воспроизведения

    Комплект умного дома - Протокол связи Bluetooth

  8. Максимально количество подключенных устройств.

    Комплект умного дома - Протокол связи Bluetooth

Вот столько смартфон имеет настроек блютуз на Андроиде. Возможно, они будут дополняться и меняться с дальнейшими версиями ОС.

Ответы на вопросы читателей

Я не могу обновить программное обеспечение без Play Market. А Play Market говорит, что нужно обновить программное обеспечение.

Обновите версию Андроид либо переустановите Play Market через сайт apkmirror. Если не поможет, придется делать сброс настроек (hard reset).

Позавчера купили новый телефон (Samsung galaxy A50). После обновления ПО карта SD перестала читаться, в т.ч. на других телефонах.

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

Когда будет доступно новое обновление Андроид?

У меня телефон Huawei U9500, и я не знала, что надо обновить версию. Сейчас у меня Андроид 4.0.3, как обновить прошивку до новой версии?

Процесс обновления прошивки Huawei описан здесь . Вкратце, есть два способа обновления прошивки Huawei U9500.

  1. Достаем аккумулятор, зажимаем кнопки громкости на телефоне. После этого начнется процесс обновления Андроид.
  2. Заходим в Настройки -> Память -> Обновление ПО -> Обновление SD-карты, запускаем обновление ОС Android.

Как обновить версию Андроид? Читала на разных сайтах, пробовала, не получается. У меня Android 4.4.4.

У меня Samsung Duos, версия Андроид 4.1.2 не могу обновить операционную систему до большей версии. Помогите, пожалуйста, обновить!

Для начала нужно узнать, можно ли обновить Андроид на вашем телефоне до версии 5.x. Оказывается, нет. Дело в том, что технические характеристики вашего телефона не позволяют вам устанавливать более новые версии Android.

Пытаюсь обновить версию 8 до самой новой. Пишет «Ошибка» и показывает вскрытого Андроида с висящим над ним красным треугольником с восклицательным знаком.

Приобрел НТС one m7. Не могу обновить Андроид 4.4.2. Аппарат не находит обновление ПО, как решить эту проблему? Как его обновить?

У меня Moto x play, обновлять систему не хочу, постоянно появляется сообщение «Доступно ПО android 6.0.1”, которое дико раздражает.

Для отключения обновлений прошивки, перейдите в настройки Android, раздел О телефоне – Обновление ПО и отключите обновления, сняв галочку напротив соответствующего пункта.

Полетела память на устройстве (телефон перестал включаться), ее заменили, но прошивку поставили не родную. Обновлений для нее нет. Можно ли мне через Kies откатить Андроид (поставить родную) и обновлять ее?

Планшет Acer Iconia A1-810. У меня нет обновлений прошивки. нажимаю обновление системы и пишет «для вашего устройства обновление требуется».

Не открывается номер сборки на Андроиде. Кликала долго. Как быть?

Отправка данных


Отправка данных девайсу осуществляется путём записи значения в характеристику, а конкретнее вызовом метода

writeValue()

объекта характеристики с

ArrayBuffer

в качестве аргумента. Для преобразования строки в

ArrayBuffer

проще всего воспользоваться

TextEncoder

// Отправить данные подключенному устройству
function send(data) {
  data = String(data);

  if (!data || !characteristicCache) {
    return;
  }

  writeToCharacteristic(characteristicCache, data);
  log(data, 'out');
}

// Записать значение в характеристику
function writeToCharacteristic(characteristic, data) {
  characteristic.writeValue(new TextEncoder().encode(data));
}


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

String

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

// Отправить данные подключенному устройству
function send(data) {
  data = String(data);

  if (!data || !characteristicCache) {
    return;
  }

  data  = 'n';

  if (data.length > 20) {
    let chunks = data.match(/(.|[rn]){1,20}/g);

    writeToCharacteristic(characteristicCache, chunks[0]);

    for (let i = 1; i < chunks.length; i  ) {
      setTimeout(() => {
        writeToCharacteristic(characteristicCache, chunks[i]);
      }, i * 100);
    }
  }
  else {
    writeToCharacteristic(characteristicCache, data);
  }

  log(data, 'out');
}

Чтобы облегчить обработку сообщений на стороне контроллера, добавим в конец отправляемого сообщения символ подачи строки (

n

Далее сообщение разбивается на куски с помощью регулярного выражения, корректно обрабатывающего символы возврата каретки (CR, r) и подачи строки (LF, n), после чего первая часть отправляется сразу, а на отправку других выставляются таймеры с задержкой, кратной 100 миллисекундам.

Обмен данными между терминалом и браузером, кликабельно

Работает! Мы получили полнофункциональный двусторонний обмен данными с устройством и на этом с JS всё.

Получение данных


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

characteristicvaluechanged

характеристики. Сделать это следует после включения уведомлений. Также будет правильно снять обработчик с характеристики при отключении устройства:

// Включение получения уведомлений об изменении характеристики
function startNotifications(characteristic) {
  log('Starting notifications...');

  return characteristic.startNotifications().
      then(() => {
        log('Notifications started');
        // Добавленная строка
        characteristic.addEventListener('characteristicvaluechanged',
            handleCharacteristicValueChanged);
      });
}

// Отключиться от подключенного устройства
function disconnect() {
  if (deviceCache) {
    log('Disconnecting from "'   deviceCache.name   '" bluetooth device...');
    deviceCache.removeEventListener('gattserverdisconnected',
        handleDisconnection);

    if (deviceCache.gatt.connected) {
      deviceCache.gatt.disconnect();
      log('"'   deviceCache.name   '" bluetooth device disconnected');
    }
    else {
      log('"'   deviceCache.name  
          '" bluetooth device is already disconnected');
    }
  }

  // Добавленное условие
  if (characteristicCache) {
    characteristicCache.removeEventListener('characteristicvaluechanged',
        handleCharacteristicValueChanged);
    characteristicCache = null;
  }

  deviceCache = null;
}

// Получение данных
function handleCharacteristicValueChanged(event) {
  let value = new TextDecoder().decode(event.target.value);
  log(value, 'in');
}

event.target.value

— это объект

, содержащий

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

TextDecoder

), мы перегоняем массив байтов в текст.

Отправка данных из терминала и получение в браузере, кликабельно

Тестирование показывает, что прием сообщений с устройства работает стабильно, с окончанием строки символами CR, LF или без них. Длинные сообщения доходят полностью, но разбиваются кратно 20 байтам.

Схема подключения робота quadruped:

Соберите механику, подключите Tream-Power Shield, сервоприводы, датчик расстояния и откалибруйте робота, как это описано на странице Сборка QUADRUPED. Электроника Калибровка. Далее на боковые панели установите Bluetooth HC-05 и кнопку, первый модуль подключается к шине UART (в примере используется аппаратная шина UART), а второй к любому выводу Arduino Uno (в примере используется вывод D12).

Вы можете изменить выводы 2 и 3 для подключения датчика HC-SR04 на любые другие, указав их в скетче при объявлении объекта objSensor.

СервоприводыTrema Power Shield
1 конечностьГоризонтальный сустав (№ 0)вывод 4 на белой колодке
Вертикальный сустав (№ 1)вывод 5 на белой колодке
2 конечностьГоризонтальный сустав (№ 2)вывод 6 на белой колодке
Вертикальный сустав (№ 3)вывод 7 на белой колодке
3 конечностьГоризонтальный сустав (№ 4)вывод 8 на белой колодке
Вертикальный сустав (№ 5)вывод 9 на белой колодке
4 конечностьГоризонтальный сустав (№ 6)вывод 10 на белой колодке
Вертикальный сустав (№ 7)вывод 11 на белой колодке

Вы можете изменить выводы 4-11 для подключения сервоприводов на любые другие, указав их в скетче при объявлении массива объектов pinServo[8]. Трехпроводные шлейфы сервоприводов устанавливаются следующим образом:

  • Оранжевый провод подключается к выводу на белой колодке.
  • Красный провод подключается к выводу на красной колодке.
  • Коричневый провод подключается к выводу на чёрной колодке.
BluetoothTrema Power Shield
Bluetooth HC-05вывод RXвывод TX на колодке Serial
вывод TXвывод RX на колодке Serial
вывод K (Key)вывод A0 на белой колодке
вывод V (Vcc)любой вывод на красной колодке
вывод G (GND)любой вывод на чёрной колодке

Вы можете изменить вывод A0 для подключения Bluetooth на любой другой, указав его в скетче при объявлении объекта objHC05.

Выводы RX и ТХ модуля подключаются проводами к выводам TX и RX колодки с надписью Serial. Трёхпроводной шлейф подключённый к выводам K, V, G, устанавливается следующим образом:

  • Вывод K (Key) подключается к выводу на белой колодке.
  • Вывод V (Vcc) подключается к выводу на красной колодке.
  • Вывод G (GND) подключается к выводу на чёрной колодке.
КнопкаTrema Power Shield
Trema-кнопкавывод S (Signal)вывод 12 на белой колодке
вывод V (Vcc)любой вывод на красной колодке
вывод G (GND)любой вывод на чёрной колодке

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

Трёхпроводной шлейф подключённый к выводам S, V, G, устанавливается следующим образом:

  • Вывод S (Signal) подключается к выводу на белой колодке.
  • Вывод V (Vcc) подключается к выводу на красной колодке.
  • Вывод G (GND) подключается к выводу на чёрной колодке.

Представленная ниже схема совпадает со схемой из инструкции по сборке QUADRUPED, но к ней добавились два модуля: bluetooth (подключается к выводам A0, TX и RX) и кнопка (подключается к выводу D12).

Элементы схемы: «Э0»…«Э7» – сервоприводы, «Э8» – датчик расстояния, «Э9» – Trema bluetooth модуль, «Э10» Trema кнопка.

Управление:

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

  • Отключите питание пульта (если оно было подано), нажмите на джойстик (как на кнопку) и подайте питание пульта. После выполнения этих действий bluetooth модулю пульта будет назначена роль мастера и он начнёт поиск ведомого с именем «QUADRUPED» и PIN-кодом «1212».
  • Подключите питание робота (если оно не было подано), нажмите и удерживайте кнопку сопряжения не менее 1 секунды (её можно нажимать в любое время). После нажатия на кнопку, bluetooth модулю робота будет назначена роль ведомого с именем «QUADRUPED» и PIN-кодом «1212», и он будет ожидать подключение мастера.
  • Для выполнения повторного сопряжения (если оно потребуется) нужно выполнить те же действия как для пульта, так и для робота.
  • Как только связь будет установлена, суставы робота «оживут» и он будет выполнять команды пульта. Если Вы отключите питание пульта, то суставы робота ослабнут и вновь оживут при подаче питания пульта.

Управление роботом с пульта выполняется следующим образом:

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

Часть ii: подключение схемы и программа для canny 3 tiny

Для начала, чтобы никого в авторских правах не обидеть уточню, что идею подключить контроллер к HC-06, по управлять им через приложение «Serial bluetooth terminal» и некоторые приемы при разработке диаграммы, я позаимствовал с

, но само собой я их адаптировал под свою задачу.

Схема подключения выглядит следующим образом:

Концевик и геркон подключены к выводам контроллера №6 и №5, наушники к выводу №4 (у него есть ВЧ ШИМ), UART RX – это вывод № 1, UART TX – вывод № 2, вывод № 3 используется для подачи « 5В», вывод «-» — для связи с «землей».

Вот как это выглядит в сборе:

Диаграмму (программу) для СANNY 3 tiny я разрабатывал в CannyLab версии 1.42, возможно в других версиях среды разработки и с другими контроллерами, надо будет внести изменения в диаграмму.

Вот, что получилось:

Блоки связанные с настройкой контроллера и отправкой сообщения по UART, разбирали в прошлой статье.

Разберём подробней два оставшихся.

Блок «Получение сообщения по UART», отвечает за включение сирены(наушников). В принципе он нужен, чтобы разобрать пример, получения сообщения по UART.

Вначале мы проверяем есть ли полученные данные в UART, если есть, то подаем на вход «Е» D-триггера единицу, в таком случае триггер копирует значение со входа “D” в который мы запишем первые два символа из сообщения пришедшего по UART. Я не хотел всё усложнять поэтому дальше мы используем простую схему.

Предполагаем, что по UART к нам придет любое число от 00 до 99, переводим это число из символьной формы в числовую (рекомендую почитать как работает блок конвертера у меня с ним был небольшой «затык»). Дальше любое значение “>0” на входе детектора переднего фронта вызывает единичный сигнал, который включит на 5 секунд выход №4, работающий в режиме ВЧ ШИМ.

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

Перейдем к блоку «Формирование сообщения». Его реализация на первый взгляд может показаться необычной. Объясняется это тем, что я толком не разобрался как работать с программой Serial bluetooth terminal и с аналогичным bluetooth протоколом в Xamarin.

Забегу немножко вперёд и скажу, что я так и не научился гарантированно получать на смартфоне отправленное с контроллера сообщение. Если с проводным UART в прошлой статье все было очевидно, то с Bluetooth на практике вместо отправленного сообщения может прочитаться только его часть и смысл передаваемой команды нарушиться.

Я решил, что самое простое решение — это передавать одно число, которое гарантированно дойдет до адресата без потерь.

В нашем случае мы мониторим дискретное состояние геркона и концевика. То есть у нас всего 4 возможные комбинации: геркон и концевик выключены, включен только кто-то один, оба включены.

Поскольку геркон и концевик дают дискретный сигнал (0/1) нужно как-то их различить. Для этого умножим значение сигнала геркона на 2. Теперь получается, что сумма сигналов даст нам значения от 0 до 3.

Теперь разберем не очевидный вариант с прибавлением к этому значению пятидесяти. Дело в том, что CannyLab передает в UART пару символов, то есть вместо 3 допустим 03, но как я говорил есть риск потери части информации. Например, из значения 01, программа на смартфоне может прочитать только первый «0», а это уже будет ошибка.

Можно было бы заморочиться и преобразовать данные, заменив, например символ «D1» регистра какой-нибудь буквой или пробелом, но я решил сделать проще. Я превратил значение 01 в 51 (02 в 52 и т.д.). Пятерка не несет сигнала и я ее вырезаю на уровне программы для смартфона. Таким образом, у нас всегда гарантированно остается полезная часть сообщения.

Загружаем программу в контроллер, нажимаем «запустить», если все работает как задумано, то HC-06 начнет периодически мигать красным светодиодом.

Далее сопрягаем смартфон с адаптером. Теперь можно проверить работоспособность в приложении «Serial Bluetooth terminal» или любом другом с похожим функционалом.

Запишите адрес Bluetooth адаптера, он нам пригодится в следующей главе.

Как видите данные приходят, в зависимости от состояния датчиков, а если отправить «11», то в наушниках послышится противный писк. Можно было бы на этом и остановиться, но давайте набросаем примитивное приложение.

Оцените статью
Радиокоптер.ру
Добавить комментарий