Урок 5. Подключение и отправка команд. Связываем Arduino и телефон на Android через Bluetooth

  Переглядів 3,675

Astar Channel

Astar Channel

5 років тому

#android #java #arduino #bluetooth
В этом уроке реализуем подключение к bluetooth-устройству из найденных, а так же сопряженных. Создадим два класса, первый из которых будет осуществлять подключение при помощи BluetoothSocket, а второй будет осуществлять передачу команд при помощи выходного потока OutputStream.
Bluetooth модуль HC-06 goo.gl/VHhNXi
Arduino UNO goo.gl/aiN1D8
Arduino NANO goo.gl/mWuTVZ
Проект Android Studio в ZIP-архиве goo.gl/XmoioS
Два метода для проверки разрешений goo.gl/tAq4n2
Скетч к проекту из видеоурока goo.gl/PSQ7jX
Android Studio скачать goo.gl/kJbNkt
Для тех кто хочет помочь финансово
Yandex.Деньги: 410012064564580
Заранее огромное спасибо =)

КОМЕНТАРІ: 31
@dokte210
@dokte210 4 роки тому
Спасибо за проект в zip-архиве) Всё супер! )
@astron7620
@astron7620 3 роки тому
Спасибо! Очень нужный урок!
@evbl7005
@evbl7005 5 років тому
Спасибо. Все работает без ошибок. :)
@user-bo5kb5ob7c
@user-bo5kb5ob7c 3 роки тому
Здравствуйте! Почему то приложение вылетает при попытке соединиться. Модуль hc-05
@iGooD79
@iGooD79 4 роки тому
Здравствуйте подскажите пожалуйста, у меня прога вылетает при создании connecta, как только запускаю ConnectThread программа закрывается
@AsTaR75256
@AsTaR75256 4 роки тому
Добрый день, а что в логах написано?
@iGooD79
@iGooD79 4 роки тому
public ConnectThread(BluetoothDevice device) { try { Method method = device.getClass().getMethod("createRfcommSocket ", new Class[]{int.class}); mBluetoothSocket = (BluetoothSocket) method.invoke(device, 1); mProgressDialog.show(); } catch (Exception e) { e.printStackTrace(); } } я запускал с телефона приятеля у меня нет андроида, после выбора устройства в списке найденных устройств, программа сворачивалась, если отключить эту функцию то не вылетает. Правда я коннектился с другими блютус устройствами а не с ардуином, может в этом проблема?! может нужно другой метод использовать для подключения к сокету?
@AsTaR75256
@AsTaR75256 4 роки тому
То что вы конектились к другому устройству - это проблема. К телефону можно другим способом подключиться, пишите в ВК , я расскажу как
@van9kuk631
@van9kuk631 3 роки тому
Здравствуйте, я хотел попробовать реализовать такую задачу, на свой лад, и подключаться только к определенному модулю по его адресу, без поиска всех доступных блютуз девайсов, подключение вроде бы проходит(лампочка на блютуз модуле загорается), но передача данных не идет, не могли бы вы подсказать в чем может быть проблема или что изменить в вашей реализации чтобы убрать поиск девайсов? public class Mansarda extends AppCompatActivity { static final UUID mUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); BluetoothSocket btSocket = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mansarda); android.widget.Button btn_back = (android.widget.Button)findViewById(R.id.button_back); Button btn_on = (Button)findViewById(R.id.button4); Button btn_off = (Button)findViewById(R.id.button3); BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); System.out.println(btAdapter.getBondedDevices()); BluetoothDevice hc05 = btAdapter.getRemoteDevice("AB:90:78:56:37:61"); System.out.println(hc05.getName()); int counter = 0; do { try { btSocket = hc05.createRfcommSocketToServiceRecord(mUUID); System.out.println(btSocket); btSocket.connect(); System.out.println(btSocket.isConnected()); } catch (IOException e) { e.printStackTrace(); } counter++; } while (btSocket.isConnected() && counter < 3); btn_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try{ Intent intent = new Intent(Mansarda.this,MainActivity.class); startActivity(intent);finish(); }catch(Exception e){} } }); btn_on.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { byte[] tosend = "1".getBytes(); OutputStream outputStream = btSocket.getOutputStream(); outputStream.write(tosend); } catch (IOException e) { e.printStackTrace(); } } }); btn_off.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { byte[] tosend = "0".getBytes(); OutputStream outputStream = btSocket.getOutputStream(); outputStream.write(tosend); } catch (IOException e) { e.printStackTrace(); } } }); try { btSocket.close(); System.out.println(btSocket.isConnected()); } catch (IOException e) { e.printStackTrace(); } }
@AsTaR75256
@AsTaR75256 3 роки тому
Работа с блютузом производится только в стороннем потоке
@van9kuk631
@van9kuk631 3 роки тому
@@AsTaR75256 Понял, спасибо, решил делать по вашим урокам)
@AsTaR75256
@AsTaR75256 3 роки тому
@@van9kuk631 если работа будет производиться в основном потоке андроид прилижения, то пользовательский интерфейс будет блокироваться. Да и не факт что соединение вообще будет, а если будет то явно будет не стабильным. Смотрите официальное руководство от Гугла developer.android.com/guide/topics/connectivity/bluetooth
@user-bo5kb5ob7c
@user-bo5kb5ob7c 3 роки тому
Здравствуйте! В андроид студио хочу написать небольшую програмку, которая бы отправляла команду по блютуз, модифицирую Ваш код Сейчас у меня так формируется строка, которую по нажатию кнопки смартфон отправляет по блютуз: public void enableLed2() { if (connectedThread != null && connectThread.isConnect()) { String command2 = ""; command2 = "time_12:39 "; connectedThread.write(command2); } } Хочу же чтобы вместо 12:39 улетало значение, заданного в выпадающем списке времени @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayAdapter timeadapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item,time); timeadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); final Spinner spTime = (Spinner) findViewById(R.id.spTime); spTime.setAdapter(timeadapter); spTime.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { Toast.makeText(getBaseContext(), adapterView.getSelectedItem().toString(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView adapterView) { } }); Как я понимаю надо из спиннера spTime как то получить выбранное время и потом как то засунуть в command2. Подскажите пожалуйста как нужно модифицировать данный код?
@AsTaR75256
@AsTaR75256 3 роки тому
За хранение и отображение данных в спинере отвечает его адаптер. У тебя это ArrayAdapter. Используй getSelectedItem() (вроде так называется) для получения выбранного элемента.
@user-vk7wl2wb6b
@user-vk7wl2wb6b 2 роки тому
среда разработки не та , похожа на FL вообщем то не информативно для тех кто хотел бы научится, то что ты умеешь так мне это не интересно 😁😁😁👎
@AsTaR75256
@AsTaR75256 2 роки тому
Ну найди другой ресурс для обучения) в чем проблема?
@user-vk7wl2wb6b
@user-vk7wl2wb6b 2 роки тому
@@AsTaR75256 у меня нет проблем, проблема у тебя, а вернее недостаток, если ты даешь урок то не на своем уровне знаний и понимания ведь я смотрю что б научится, а не слушать словесный поток без принципиального и взаимосвязного изложения инфы, что говорит о том что ты должен пересмотреть свое изложение инфы , или называть свои видео не укроки... а - ,, мои понты N 5,,
@AsTaR75256
@AsTaR75256 2 роки тому
@@user-vk7wl2wb6b в общем понятно. Никакой обоснованной конкретики у тебя нет. Единственную цель твою, которую я вижу -- это тупо кого-нибудь захейтить) А что касается проблем, я тебе бы посоветовал разобраться в себе. Ведь научиться не можешь именно ты и искать информацию получается ты так же не можешь, а потому говорить мне о том что это у меня проблема -- ну такое... ). Как показывает статистика на моих видеороликах -- больше положительных отзывов, чем отрицательных. И даже если кто то что то не понимает я всегда иду на контакт и могу помочь тем кто хочет разобраться. Ну а на тебя я думаю нет смысла даже тратить время. Если не умеешь вести диалог конструктивно то вряд-ли ты добьешься каких то положительных результатов)
@user-vk7wl2wb6b
@user-vk7wl2wb6b 2 роки тому
@@AsTaR75256 хм.. бред... мне вообще пххх, зачем мне кого то тролить мне интересна ардуинка а твое бла, бла не раскрыла сути да и вообще можно твои обьяснения в видосе интерпритировать примерно так...,, вот смотрите это код, и написал его Я,, а если вам не понятны мои уроки идите и не возрашайтесь..... ладно на свои вопросы я нашол ответы на сайте ардуино. тебе всех благ.
@AsTaR75256
@AsTaR75256 2 роки тому
Я уже написал в чем твоя проблема. Научись конструктивно высказывать свое мнение и критику, а не бла бла как ты говоришь )
Уроки Ардуино. ПИД регулятор
28:57
Заметки Ардуинщика
Переглядів 446 тис.
Зомби Апокалипсис  часть 1 🤯#shorts
00:29
INNA SERG
Переглядів 1,9 млн
Артем Пивоваров х Klavdia Petrivna - Барабан
03:16
Artem Pivovarov
Переглядів 3,5 млн
Эти культовые фразы из фильмов перевели НЕПРАВИЛЬНО
17:58
Skyeng: онлайн-школа английского языка
Переглядів 342 тис.
Уроки Ардуино #1.1 - действия с переменными и константы
6:34
Заметки Ардуинщика
Переглядів 477 тис.
Уральские Пельмени - Семейка
1:12:29
Терапия юмором↺
Переглядів 969 тис.
Зомби Апокалипсис  часть 1 🤯#shorts
00:29
INNA SERG
Переглядів 1,9 млн