蓝牙 HC-05 传输到 f103rb
Posted
技术标签:
【中文标题】蓝牙 HC-05 传输到 f103rb【英文标题】:bluetooth HC-05 transmission to f103rb 【发布时间】:2020-04-15 16:02:08 【问题描述】:我必须将我的 SMT32f103rb 连接到蓝牙模块 hc-05 并在连接蓝牙模块的手机和计算机之间进行传输。我像这样连接它:
hc05 VCC -> +5V stm hc05 GND -> GND stm hc05 TXD -> PA10 stm hc05 RXD -> PA9 stm下一步是使用标准密码 (1234) 将我的手机连接到 hc-05。有效 然后我在我的安卓设备上下载了串口蓝牙终端(比如windows上的hterm)。
现在我不知道下一步该做什么。应用程序连接到BT,但我不知道如何将其发送到计算机。要配置我的 stm,我使用 CubeIDE。
【问题讨论】:
你到底想做什么?将您的手机连接到嵌入式蓝牙?请提供更多细节? stm32上的蓝牙配置好了吗?它处于从属模式等...... 是的,当然。我正在尝试让几部手机连接到 BT 模块并通过例如移动终端发送信息(我也创建了自己的应用程序,但我现在真的不能用了)。我创建了连接电话-HC05,它被削减了。我也没有在配置中对 CubeIDE 做任何功能。 我也有自己的工作程序代码,在 f103rb 和 hterm 之间使用 USART 通信 【参考方案1】:我认为您正在学习这样的教程:https://www.electronicshub.org/hc-05-bluetooth-module/
我不知道你到底有什么应用程序以及它发送什么数据。这很可能是问题所在。像这里使用的应用程序不是很复杂,android中的任何BT通信都是基于BluetoothAdapter
类。您可以通过https://www.youtube.com/watch?v=iFtjox9_zAI 轻松编写自己的应用程序或从网上复制代码。
添加发送和接收功能参见 Android sample bluetooth code to send a simple string via bluetooth
使用RfcommSockets
完成发送和接收,附加OutputStream
,这是在代码中
if(bondedDevices.size() > 0)
Object[] devices = (Object []) bondedDevices.toArray();
BluetoothDevice device = (BluetoothDevice) devices[position];
ParcelUuid[] uuids = device.getUuids();
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuids[0].getUuid());
socket.connect();
outputStream = socket.getOutputStream();
inStream = socket.getInputStream();
和
public void write(String s) throws IOException
outputStream.write(s.getBytes());
或者从 PlayStore 加载应用程序 Bluetooth Terminal HC-05 并尝试使用它https://play.google.com/store/apps/details?id=project.bluetoothterminal&hl=de
如果您想发送整个 .apk 文件而不是简单的命令字符串,您必须使用另一个协议/蓝牙配置文件选项(FTP、OPP 或 OBEX)。为此获取应用 蓝牙文件传输 https://www.androidpit.com/how-to-send-apps-with-bluetooth
为了能够发送整个文件,您必须在 STM32 上实现文件系统,否则您只能使用从蓝牙接收缓冲区读取数据的程序将二进制文件写入内存,然后将其作为原始二进制数据复制到内存中。
(使用蓝牙传输文件背后的技术在http://www.diva-portal.org/smash/get/diva2:1020079/FULLTEXT01.pdf - File Transfer Using Bluetooth中解释)
【讨论】:
我已经编写了自己的应用程序,但我想看看它如何在我的手机上使用基本的 BT 终端。我下载了它,但问题是我不知道如何配置我的 stm 以便 HC-05 接收来自手机的数据。我第一次尝试简单的程序,如果 stm 检测到命令'on;' stm 上的 LED 将被切换,如果它检测到“关闭”; stm上的led不会被切换。我已经编写了自己的 usart 代码,但它适用于 windows 终端命令(如 ledon、ledoff、pulse 和 blink) 并参考您的第一个链接(electronicshub.org/hc-05-bluetooth-module)这是我正在寻找的解决方案(帮助),但不是 arduino。具体来说,代码会有所不同,不是吗? 是的,代码不同,但您可以轻松地将 Arduino 内容转换为 STM32 HAL 库代码,即Serial.read()
是 HAL_UART_Receive(&s_UARTHandle, buffer, sizeof(buffer), HAL_MAX_DELAY);
,您必须决定是否要基于中断. Serial.send()
是 HAL_UART_Transmit(&s_UARTHandle, buffer, sizeof(buffer), HAL_MAX_DELAY);
也是 visualgdb.com/tutorials/arm/stm32/uart/hal
好吧..我真的像这里的草一样绿。如何转换那些序列(/ 1)。开始(9600)?是波特吗?我猜 arduiono 中的 pinMode 是在 cubeIDE PA8 的 pinout 视图中切换到输出?
9600 是波特率。我也与arduino无关。谷歌得出 pinMode 只是意味着引脚配置为 GPIO,没有额外的功能......【参考方案2】:
配置你的stm32 pinout你可以使用STMCubeMX软件 STM32: 将管脚 PA9 和 PA10 设置为 UART。
STM32 在 Keil IDE 中有一些 USART 功能。 你可以看到我回答的问题STM32 HAL rx interrupt can't get bytes correctly
HAL_UART_Receive(&s_UARTHandle, buffer, sizeof(buffer); //receive data over usart
HAL_UART_Transmit(&s_UARTHandle, buffer, sizeof(buffer), HAL_MAX_DELAY);//send data
HC-05 阅读数据表以了解必须发送哪个命令 AT:
HC-05 必须使用 AT COMMAND AT+ROLE=0
配置为从机
所有的 AT 指令都是由 USART 发出的
嵌入式系统需要阅读大量文档,尤其是数据表。 hc-05 数据表http://www.electronicaestudio.com/docs/istd016A.pdf
【讨论】:
以上是关于蓝牙 HC-05 传输到 f103rb的主要内容,如果未能解决你的问题,请参考以下文章