曾经想用 Android 手机控制您的机械机器人或使用自定义遥控器设计机器人,在本教程中,我们将了解用于上述和许多其他情况的蓝牙模块 HC-05。在这里,我们将了解 HC-05 模块的连接和工作,以及它与自定义 android 应用程序的接口。
基本
在电子和通信方面,无线通信正在迅速取代有线连接。旨在取代电缆连接 HC-05 使用串行通信与电子设备进行通信。通常,它用于使用短距离无线连接来连接手机等小型设备以交换文件。它使用 2.45GHz 频段。数据传输速率最高可达 1Mbps,范围为 10 米。
HC-05 模块可以在 4-6V 的电源电压范围内工作。它支持 9600、19200、38400、57600 等波特率。最重要的是它可以在主从模式下运行,这意味着它不会从外部来源发送或接收数据。
基本
在电子和通信方面,无线通信正在迅速取代有线连接。旨在取代电缆连接 HC-05 使用串行通信与电子设备进行通信。通常,它用于使用短距离无线连接来连接手机等小型设备以交换文件。它使用 2.45GHz 频段。数据传输速率最高可达 1Mbps,范围为 10 米。
HC-05 模块可以在 4-6V 的电源电压范围内工作。它支持 9600、19200、38400、57600 等波特率。最重要的是它可以在主从模式下运行,这意味着它不会从外部来源发送或接收数据。
引脚说明
- Enable –此引脚用于设置数据模式或 AT 命令模式(设置为高电平)。
- VCC –连接到 +5V 电源。
- 地 –连接到供电系统的地。
- Tx(发送器)——该引脚串行发送接收到的数据。
- Rx(接收器)-用于通过蓝牙串行广播数据。
- 状态 –用于检查蓝牙是否正常工作。
操作模式
HC-05 蓝牙模块可用于两种操作模式:命令模式和数据模式。
命令模式
在命令模式下,您可以通过 AT 命令与蓝牙模块进行通信,用于配置模块的各种设置和参数,如获取固件信息、更改波特率、更改模块名称,可用于将其设置为主或从。
关于 HC-05 模块的一点是它可以配置为通信对中的主站或从站。为了选择其中一种模式,您需要激活命令模式并发送适当的 AT 命令。
数据模式
进入数据模式,在此模式下,模块用于与其他蓝牙设备进行通信,即在此模式下进行数据传输。
用微控制器编程 HC-05
代码技术参数:
- Arduino-Uno 用作微控制器。
- 名称: HC-05
- 密码:1234(或0000)
- 类型:从
- 模式:数据
- 波特率:9600,8 个数据位,无奇偶校验和 1 个停止位
//Define the variable that contains the led
#define ledPin 7
int state = 0;
void setup() {
//Setting the pin mode and initial LOW
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(9600); // Default communication rate
}
void loop() {
// Checks if the data is coming from the serial port
if(Serial.available() > 0){
state = Serial.read(); // Read the data from the serial port
}
Deciding functions for LED on and off
if (state == '0') {
digitalWrite(ledPin, LOW); // Turn LED OFF
// Send back, to the phone, the String "LED: ON"
Serial.println("LED: OFF");
state = 0;
}
else if (state == '1') {
digitalWrite(ledPin, HIGH);
Serial.println("LED: ON");;
state = 0;
}
}
与 HC-05 交互的 Android 应用程序
现在,我们将开发一个小的android 应用程序来演示蓝牙模块和android 应用程序的连接。为此,我们将使用 Android Studio 和上述微控制器上的 C 代码。
Algorithm:
Create an empty project on Android Studio
Create a ListView containing all the available bluetooth devices.
Get the name and MAC-address of HC-05 module.
Open connection with HC-05 module.
Instruct the module with data as bytes.
理解代码
1.获取ListView中的所有蓝牙设备
此代码用于 MainActivity 或将显示列表的第一个活动,然后在选择设备时,控制活动将发出命令。
// Initializing the Adapter for bluetooth
private BluetoothAdapter BluetoothAdap = null;
private Set Devices;
// comes in Oncreate method of the activity
BluetoothAdap = BluetoothAdapter.getDefaultAdapter();
// Method to fill the listwith devices
private void pairedDevices()
{
Devices = BluetoothAdap.getBondedDevices();
ArrayList list = new ArrayList();
if (Devices.size() > 0) {
for (BluetoothDevice bt : Devices) {
// Add all the available devices to the list
list.add(bt.getName() + "\n" + bt.getAddress());
}
}
else {
// In case no device is found
Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show();
}
// Adding the devices to the list with ArrayAdapter class
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
devicelist.setAdapter(adapter);
// Method called when the device from the list is clicked
devicelist.setOnItemClickListener(myListListener);
}
2.获取设备名称和MAC地址
现在我们将为列表创建一个 OnClick 侦听器,以便可以从设备中提取名称和 MAC 地址。
// On click listener for the Listview
private AdapterView.OnItemClickListener myListListener = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView av, View v, int arg2, long arg3)
{
// Get the device MAC address
String name = ((TextView)v).getText().toString();
String address = info.substring(info.length() - 17);
// Make an intent to start next activity.
Intent i = new Intent(MainActivity.this, Control.class);
// Put the data got from device to the intent
i.putExtra("add", address); // this will be received at control Activity
startActivity(i);
}
};
3.建立两者之间的联系
控件中的 connect()函数。 Java将有助于建立两者之间的联系。
BluetoothAdapter myBluetooth = null;
BluetoothSocket btSocket = null;
// This UUID is unique and fix id for this device
static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
// receive the address of the bluetooth device
Intent intent = getIntent();
address = intent.getStringExtra("add");
try {
if (btSocket == null || !isBtConnected) {
myBluetooth = BluetoothAdapter.getDefaultAdapter();
// This will connect the device with address as passed
BluetoothDevice hc = myBluetooth.getRemoteDevice(address);
btSocket = hc.createInsecureRfcommSocketToServiceRecord(myUUID);
BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
Now you will start the connection
btSocket.connect();
}
}
catch (IOException e) {
e.printStackTrace();
}
4.最后指挥HC-05模块
这里首先我们将检查我们的套接字是否已连接,然后我们将继续避免空指针异常。
// Function for commanding the module
private void turnOffLed()
{
if (btSocket != null) {
try { // Converting the string to bytes for transferring
btSocket.getOutputStream().write("0".toString().getBytes());
}
catch (IOException e) {
e.printStackTrace();
}
}
}
现在终于,当我们用 HC-05 模块和 Android 编程完成我们的第一个基本项目时,我们可以转向复杂的电子机器人,并使用这个惊人的模块 HC-05 将有线连接到无线,而且我们现在知道如何制作自定义应用程序。