Mobile phone bluetooth connection HC05 control microcontroller

Mobile app:

1. First, you need to authorize the Bluetooth permission to the app:

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />

2. Obtain the MAC address of the mobile phone paired with Bluetooth

 
 
ListView devicelist;
private BluetoothAdapter myBluetooth = null;
private Set<BluetoothDevice> pairedDevices;
public static String EXTRA_ADDRESS = "device_address";

myBluetooth = BluetoothAdapter.getDefaultAdapter();
if ( myBluetooth==null ) {
    // 设备不支持蓝牙
    Toast.makeText(getApplicationContext(), "Bluetooth device not available", Toast.LENGTH_LONG).show();
    finish();
} else if ( !myBluetooth.isEnabled() ) {
    Intent turnBTon = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(turnBTon,REQUEST_CONNECT_DEVICE);   // 开启蓝牙
}
pairedDevices = myBluetooth .getBondedDevices() ;    // return paired Bluetooth devices
 ArrayList list = new ArrayList() ;
 if ( pairedDevices .size() > 0 ) {    // paired devices exist
 for ( BluetoothDevice bt : pairedDevices ) {
    
        list.add(bt.getName().toString() + "\n" + bt.getAddress().toString());
    }
} else {
    Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show();
}

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
devicelist.setAdapter(adapter);
devicelist.setOnItemClickListener(myListClickListener);   // list_View 监听器
private AdapterView.OnItemClickListener myListClickListener = new AdapterView.OnItemClickListener() {
    @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    
        String info = ((TextView) view).getText().toString() ;
         String address = info.substring(info.length()- 17 ) ; Intent
 i = new Intent(DeviceList.this , ledControl.class ) ;/ /Transfer the MAC address of the target Bluetooth to connect to
 i.putExtra( EXTRA_ADDRESS , address) ;
 startActivity(i) ;
 }
                        
    
};

3. Connect HC05

BluetoothAdapter myBluetooth = null;
BluetoothSocket btSocket = null;
private boolean isBtConnected = false;
static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent newint = getIntent();
    address = newint.getStringExtra(DeviceList.EXTRA_ADDRESS);
    setContentView(R.layout.activity_led_control);

    btn1 = (Button) findViewById(R.id.button2);
    btnDis = (Button) findViewById(R.id.button4);
    lumn = (TextView) findViewById(R.id.textView2);

    try {
        if ( btSocket==null || !isBtConnected ) {
            myBluetooth = BluetoothAdapter.getDefaultAdapter();
            BluetoothDevice dispositivo = myBluetooth.getRemoteDevice(address);
            btSocket = dispositivo.createInsecureRfcommSocketToServiceRecord(myUUID);
            BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
            btSocket.connect();
            msg("Connected Succesful");
        }
    } catch (IOException e) {
        msg("Connected Failed. Try again.");
    }

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View v) {
            msg("Click 1 ");
            sendSignal("1");
        }
    });

    btnDis.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View v) {
            Disconnect();
        }
    });
}

private void sendSignal ( String number ) {
    if ( btSocket != null ) {
        try {
            btSocket.getOutputStream().write(number.toString().getBytes());
            Log.i("sendSigal",number.toString());
        } catch (IOException e) {
            Log.i("sendSigal",btSocket.toString());
            msg("Error");
        }
    }else{
        Log.i("sendSigal","222222");
    }
}

private void Disconnect () {
    if ( btSocket!=null ) {
        try {
            btSocket.close();
        } catch(IOException e) {
            msg("Error");
        }
    }

    finish();
}

private void msg (String s) {
    Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
}

单片机(STM32)端 串口设置:

//串口1初始化配置

void usart1_init(void)

{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);  

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
  
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
USART_Cmd(USART1, ENABLE);
USART_ClearFlag(USART1, USART_FLAG_TC); 

}


//串口1中断服务程序

void USART1_IRQHandler(void)                  

{
u8 Res;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1);//读取接收到的数据

    USART1_RX_BUF[TX2_no++]=Res; 

   // 配置自己的接受判断逻辑


else if(TX2_no == USART_RX_LEN) //接收缓冲区接收满,即接收完成
{
TX2_no = 0;
USART1_RX_STA = 1;

}

}

具体的代码,整理完毕后我会上传上来,如果大家需要也可以先私信我,共同学习!


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325624547&siteId=291194637