Как подружить Arduino и Android

13.10.2017

Чтобы собраться любого робота — нужно каким-то образом передать данные или какие-то команды. Универсальным способ, с моей точки зрения, является Bluetooth — с ним все становится лучше 🙂

Самое просто, что можно сделать — это заставить светодиод помигать по нашей команде.
Для этого нам нужно:
— плата Ардуино
— Bluetooth (я использую HC-06)
— светодиод
— макета
— соединительные провода

1. Собираем
Схема очень простая и показана на рисунке ниже
Схема подключени

на HC-06 есть 4 пина
GND — подключаем к GND на плате
VCC — подключаем к 3.3V на плате
TXD — подключаем к входу 11
RXD — подключаем к входу 10

2. Код для Arduino
Код представленный ниже нужно пролить в Arduino (комментарии по коду будут ниже)

SoftwareSerial btSerial(10, 11); // RX, TX
int ledpin = 13; 
int BluetoothData;

void setup() {
  // put your setup code here, to run once:
  btSerial.begin(9600);
  btSerial.println("Use 1 or 0 for switch LED #13");
  pinMode(ledpin,OUTPUT);
}

void loop() {
   if (btSerial.available()){ 
    BluetoothData = btSerial.read();
    if(BluetoothData == '1'){   
      digitalWrite(ledpin, HIGH);
      btSerial.println("LED #13 ON");
    }
    if(BluetoothData == '0'){
      digitalWrite(ledpin, LOW);
      btSerial.println("LED #13 OFF");
    }
  }
  delay(100);
}

Комментарии по вывод на Ардуино:
RX — цифровой вывод 10 (необходимо соединить с выводом TX другого устройства)
TX — цифровой вывод 11 (необходимо соединить с выводом RX другого устройства)
LED — цифровой вывод 13

Работа с передачей данных будет с помощью SoftwareSerial — не забываем подключить необходимый заголовочный файл SoftwareSerial.h.
Дополнительную информацию по SoftwareSerial можно прочитать на сайте https://www.arduino.cc/en/Tutorial/SoftwareSerialExample.

3. Код для Android
Полный проект для можно на github по адресу https://github.com/pazhukov/BT-Ligth.
А ниже можно найти пару описаний кода на Java:
— Глобальные переменные

    BluetoothSocket clientSocket;
    String DEVICE_UID = "98:D3:33:80:5B:0A";

clientSocket — сокет, через который будут передаваться данные
DEVICE_UID — uid девайса (HC-06), можно узнать его через любой bluetooth терминал
— Подключение к девайсу

    // включаем BT, если он недоступен
    String enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE;
    startActivityForResult(new Intent(enableBT), 0);

    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();

    BluetoothDevice device = bluetooth.getRemoteDevice(DEVICE_UID);
    Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});

    clientSocket = (BluetoothSocket)m.invoke(device,1);
    clientSocket.connect();

По указанно УИД девайсу пытаемся создать канал для работы, если не получается необходимо вызвать исключения (см. полный код на githib)
— Передача данных

    OutputStream outputStream = clientSocket.getOutputStream();
    String value = "1";
    outputStream.write(value.getBytes());

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

Итого
Видео работы

Tittygram