[香橙派开发系列]使用蓝牙和手机进行信息的交换

这篇具有很好参考价值的文章主要介绍了[香橙派开发系列]使用蓝牙和手机进行信息的交换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

隔了这么久我准备再玩一下香橙派,最近这段时间还是比较的忙,我搭建了个论坛和博客,经常被网络攻击,所以我也是一直在弄网络去了,然后今天比较空闲就想着把单子做一下,这个单子需要使用到HC05蓝牙模块,所以我准备写一篇博客来使用香橙派控制HC05蓝牙模块。

一、HC05蓝牙模块

这个模块是非常经典的一个蓝牙模块,我之前有一单也是使用到这个模块,可以看一下我的这个视频【作息控制系统使用说明】,这个项目也是使用到蓝牙模块的,只不过当时时间紧任务重所以就没有写一篇博客来好好记录一下这个项目,等后面我会单独拿一个模块来介绍一下我做的这些小项目。

1.HC05概述

HC05是嵌入式蓝牙串口通讯模块,也就是使用串口就可以和HC05进行通讯并发送信息给蓝牙的接收端,这个模块有两种工作方式:

1 命令响应工作模式

2 自动连接工作模式

在自动连接的工作模式下又可以分为主、从、回环这三种模式,当传输数据时,根据事先设定的方式连接并传输数据。

在命令模式下,用户可以使用串口连接模块,并发送AT指令对模块进行设置。

2.HC05的连接图

这里我直接使用TTL to USB进行连接,因为我要设置一下这个模块的一些传输和内容。

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

这里和串口连接的模式一样

HC05 TTL
3.3 VCC
TXD RXD
RXD TXD
GND GND

3.进入HC05的命令模式

首先我们需要通过AT指令来设置模块的一些内容,然后我们才好进入下面的一些操作,首先在这个模块上有一个按钮

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

在上电之前需要长按这个按键,然后再上电就可以进入命令模式,在进入命令模式后,模块上的LED等会缓慢的闪烁,如果没有进入就会闪得很快。

4.常用的AT指令

AT指令列表已经烂大街了,所以这里不全部说明,我只拿出一些常用的来说明即可。

4.1 检查AT是否上线

AT\r\n

如果模块在就会返回OK

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

4.2 重启模块

AT+RESET\r\n

如果执行成功就会返回OK,并进入自动连接模式

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

4.3 获取软件版本号

AT_VERSION?\r\n

执行完成后会返回版本信息和OK

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

4.4 恢复默认状态

AT+ORGL\r\n

执行完成后会返回OK,并将模块恢复为出厂设置。

4.5 获取蓝牙的名称

AT+NAME?\r\n

执行完成后会返回蓝牙名称并返回OK

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

4.6 设置蓝牙模块的波特率

AT+UART=波特率,停止位,校验位\r\n

这里我们设置一个比较常见的,波特率9600,停止位1位,无校验位

AT+UART=9600,1,0

这样就可以了。

4.7 查询蓝牙的连接模式

AT+CMODE?\r\n

返回当前模式,1代表任意模式,也就是蓝牙名称和蓝牙地址都可以连接,这里就不多说了,一般默认是1就可以了。

4.8 查询模块角色

AT+ROLE?

这里默认的是Slave从角色,也就是被动连接,不用动。

5.连接电脑

这里我踩了个大坑,因为我之前的设置是将波特率改为9600了,所以在串口的时候我就用9600进行连接,结果没有任何的反应,后面查了一下手册才发现它默认的波特率是38400,就很尴尬。

这里连接好电脑后先发送个AT指令来查看一下是否返回OK,如果没返回有可能是因为坏了或者是你没长按按键进入命令模式。

然后修改一下波特率,因为我们后面初始化串口不想给那么大的波特率

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

初始化完成后要记得重启一下模块,然后模块的波特率就设置好看,但是AT指令模式下还是那个波特率(又踩坑了,当不想改文章)。

6.通过HC05发送消息

这里我先用stm32来演示,因为我还在做单子所以先拿这个演示。

首先先写串口的初始化函数,这里我使用的是USART1,初始化代码就不展示了,因为今天的主题不是stm32,然后在main函数中我们使用重写的printf来通过串口发送数据。不知道的可以看我这篇博客异步通讯点灯。

int main(){
    OLED_Init();
    MX_Init_KEY();
    MX_Init_HC05();
	while(1){
        printf("hello\r\n");
        OLED_ShowString(1, 1, "hello");
	}
}

然后需要在手机上下载蓝牙调试宝,在应用商城都可以下载,这我就不给你们压缩包了,要不然我老喜欢挂码。

首先要把蓝牙模块连接到面包板上,然后就用手机连接好蓝牙

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

记住串口反接并且要接地即可。

然后打开蓝牙助手的界面

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

找到里面有一个HC-05,然后连接即可,第一次连接需要你输入一个配对码,这里输入1234或者0000都可以

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

然后给单片机上电后就会显示出hello来

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

学到这你已经会使用蓝牙进行发送信息了,stm32就先不再出现了,后面就是香橙派的内容了。

7.stm32完整代码

usart.c

#include "hc05.h"

void MX_Init_HC05(){
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    USART_InitTypeDef USART_InitStruct = {0};
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    USART_InitStruct.USART_BaudRate = 9600;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART1, &USART_InitStruct);
    USART_Cmd(USART1, ENABLE);
}

int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);  
    USART1->DR = (u8) ch;      
	return ch;
}

二、香橙派串口通讯

在介绍使用香橙派使用HC05模块前先介绍一下串口通讯,并如何配置串口通讯。

1.打开串口设备

在香橙派中,串口通讯是使用设备来进行传输的, 所以我们需要在系统设置中将串口进行打开。

在打开之前先了解一下香橙派的串口引脚分布

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

在3b中有3个串口可供选择,然后通过

sudo orangepi-config

来开启设备,进入到设置页面

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

然后选择第一个,按一下回车即可,然后在下面的页面中选择Hardware

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

然后找到你要开启的串口

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

我这选择的是UART7,使用方向键移动到那后按一下空格就选中,然后按一下回车保存,之后会提示是否重启,然后按一下回车就可以重启了。

重启完成后使用

ls /dev/ ttyS*

来查看可操作的设备文件,这里只会显示你开启的设备

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

我们刚才选择了UART7后它这里就会有相应的设备,那个ttyS1是默认开启的,我们不用理他。

2.接线

这里就需要非常非常注意了,我在测试的时候就是这里没有弄好,线接反了,导致一直发送不了。

按照前面给的那张图进行接线后我们就可以写代码了。

注意:这里很重要,很多人玩51单片机来玩这个会忽略一个问题就是GND必须要和单片机的GND接在一起,很多人会单独给这个引脚接GND是错误的。

3.串口函数

这里使用的串口函数库是

#include <wiringSerial.h>

3.1 打开串口文件

int serialOpen(const char* path, int butrl);

第一个参数是设备的路径,比如说我们这需要使用到UART1,那设备地址就是/dev/ttyS7

第二个参数是波特率,比如9600。

这个函数的返回值是一个文件描述符,我们使用一个变量来接收就可以了。

3.2 关闭串口文件

void serialClose(int fd);

参数是打开的设备描述符。

3.3 发送一个字符

void serialPutchar(int fd, char c);

将一个字符发送到打开的文件描述符fd所对应的设备文件。

3.4 发送一个规定好的字符串

void serialPuts(int fd, char* s);

发送一个规定好的字符串,然后以0结尾。

3.5 printf

void serialPrintf(int fd, char* message, ...);

这个和printf的用法类似。

3.6 返回等待读取的字符数

int serialDataAvail(int fd);

返回的是等待读取的字符数。

3.7 读取字符

int serialGetChar(int fd);

返回下一个待读取的字符,如果这个在10s内没有读取到字符就会返回-1。

3.8 缓冲区函数

void serialFlush(int fd);

抛弃所有接收的数据或者等待写入设备完成。

4.输出内容

通过学习了上面的内容后我们可以简单写一个输出字符的代码来输出0~9

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int main(){
    int fd = -1, i;
    wiringPiSetup();
    fd = serialOpen("/dev/ttyS7", 9600);    // 设置串口设备和波特率
    if (fd < 0){
        // 设备打开失败
        printf("设备打开失败\n");
        return -1;
    }
    serialFlush(fd);
    for (i = 0; i < 10; i++){
        serialPutchar(fd, i + '0');
    }
    
    serialClose(fd);     // 关闭设备
}

运行效果如下:

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

然后也可以使用printf来个高级一点的输出

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int main(){
    int fd = -1, i;
    wiringPiSetup();
    fd = serialOpen("/dev/ttyS7", 9600);    // 设置串口设备和波特率
    if (fd < 0){
        // 设备打开失败
        printf("设备打开失败\n");
        return -1;
    }
    serialFlush(fd);
    for (i = 0; i < 10; i++){
        serialPrintf(fd, "this is%d\r\n", i);
    }
    
    serialClose(fd);     // 关闭设备
}

输出的内容如下:

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

5.接收内容

我们可以通过串口来接收一下用户输入的内容,并判断输入的字符是不是我们需要的,然后通过串口返回

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int main(){
    int fd = -1, i;
    int c;
    wiringPiSetup();
    fd = serialOpen("/dev/ttyS7", 9600);    // 设置串口设备和波特率
    if (fd < 0){
        // 设备打开失败
        printf("设备打开失败\n");
        return -1;
    }
    serialFlush(fd);
    while(1){
        c = serialGetchar(fd);
        if (c == -1){
            break;
        }
        if (c == '1'){
            serialPrintf(fd, "this is 1");
        }
        printf("%c", c);
    }
    
    serialClose(fd);     // 关闭设备
}

输出的内容:

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

这里大家可以看到我在这个while循环中添加了一个printf,但是没有截屏给出效果,是因为在这个串口运行的过程中一直在读取的是串口的设备,没有使用输入输出流设备,所以导致我们在输入后没办法显示出内容来,这个的解决办法我还不太清楚,等我研究好了我在出一篇文章来介绍。

6.接收字符串

做串口最让人沉醉的就是读取字符串的操作了,在wiringSerial中有一个函数可以获取缓冲区的长度,我们可以判断这个来读取输入的数据的长度,然后使用一个for循环来循环读取和放置在一个数组中,之后进行输出即可,代码如下:

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int main(){
    int fd = -1;
    int i, ch, j = 0, len;
    char str[1024];
    wiringPiSetup();
    fd = serialOpen("/dev/ttyS7", 9600);
    if (fd < 0){
        printf("打开设备文件失败\n");
        return -1;
    }
    while(1){
        len = serialDataAvail(fd);     // 获取缓冲区的长度
        if (len == -1){
            // 超时退出循环
            break;
        }
        else if(len > 0){
            serialPrintf(fd, "%d\n", len);    // 这一行是测试的
            for (i = 0; i < len;  i++){
                ch = serialGetchar(fd);       // 读取字符
                str[j++] = ch;
            }
            break;
        }
        
    }
    
    str[j] = '\0';
    printf("%s\n", str);
    serialClose(fd);
    return 0;
}

三、使用hc05连接香橙派

学会了上面的操作后我们就可以来用香橙派连接hc05了,这个操作也非常非常的简单,和单片机的连接一致,注意不要连错就行了。

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

1.通过蓝牙发送字符串给手机

本质的思路还是一样的,就是使用串口是输入输出就可以搞定,代码如下:

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int main(){
    int fd = -1, i;
    int c;
    wiringPiSetup();
    fd = serialOpen("/dev/ttyS7", 9600);    // 设置串口设备和波特率
    if (fd < 0){
        // 设备打开失败
        printf("设备打开失败\n");
        return -1;
    }
    serialFlush(fd);
    while(1){
        serialPrintf(fd, "hello\r\n");
        delayMicroseconds(30000);     // 延时函数,免得发送得过快
    }
    
    serialClose(fd);     // 关闭设备
}

然后在调试助手中就可以看到蓝牙模块发送的内容了:

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

2.手机发送内容给香橙派

这里可以使用刚才我们测试的接收字符串,只不过这里有一个问题就是这个工具只能发送字符所对应的ascii码,不能正常的输入字符进行输出。

比如我们手机输入字符0,那就得输入ascii码的30

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

然后在香橙派中就会显示:

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

然后我们还可以用这个来输入0~9

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

然后显示

[香橙派开发系列]使用蓝牙和手机进行信息的交换,香橙派,单片机

学会了这个后我们就可以编写一个用蓝牙点灯的程序了,其实就是使用蓝牙接收到关键字后给LED灯高低电平,这里就直接给代码了,不展示图片了

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <string.h>

int main(){
    int fd = -1;
    int i, ch, j = 0, len;
    char str[1024];
    wiringPiSetup();
    fd = serialOpen("/dev/ttyS7", 9600);
    if (fd < 0){
        printf("打开设备文件失败\n");
        return -1;
    }
    while(1){
        len = serialDataAvail(fd);
        if (len == -1){
            break;
        }
        else if(len > 0){
            serialPrintf(fd, "%d\n", len);
            for (i = 0; i < len;  i++){
                ch = serialGetchar(fd);
                str[j++] = ch;
            }
            break;
        }
        
    }
    
    str[j] = '\0';
    printf("%s\n", str);

    if (strcmp(str, "0")){
        // 点灯
    }
    else{
        // 灭灯
    }

    serialClose(fd);
    return 0;
}

总结

串口很好玩,蓝牙模块也好玩,学会了这一节我们就可以使用蓝牙做一个简单的远程开关灯的项目了,当然拿香橙派做这个项目就很浪费,毕竟香橙派可以直接使用网络来实现,做一个网页,然后内网穿透,这样可以很容易的在远程进行控制了,等我最近忙完有时间我做一个。

大家可以关注一下我的论坛和博客,有不懂的或者有趣的问题可以放在我的论坛中进行提问

马桶论坛

马桶博客
也可以加入我们我交流群:247294351文章来源地址https://www.toymoban.com/news/detail-834705.html

到了这里,关于[香橙派开发系列]使用蓝牙和手机进行信息的交换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP32用作经典蓝牙串口透传模块与手机进行串口通信

    ESP32-WROOM-32模组集成了双模蓝牙包括传统蓝牙(BR/EDR)、低功耗蓝牙(BLE)和 Wi-Fi,具有广泛的用途:Wi-Fi 支持极大范围的通信连接,也支持通过路由器直接连接互联网;而蓝牙可以让用户连接手机或者广播 Bluetooth LE Beacon 以便于信号检测。 蓝牙特性: • 支持标准 Class-1、

    2024年02月09日
    浏览(41)
  • 蓝牙通信 Android开发实现手机间通过蓝牙传输文件

    MainActivity.java 根据以上代码的结构和功能,我会将它们分为以下几部分: 权限请求和检查 requestPermissions() 方法 checkLocationPermission() 方法 onRequestPermissionsResult() 方法 初始化和设置 onCreate() 方法 onStart() 方法 onActivityResult() 方法 蓝牙设备搜索和配对 discoverDevices() 方法 与列表交互

    2024年03月27日
    浏览(51)
  • 使用charles(fildder ,Wire shark)对安卓模拟器(手机)进行抓包,获取http请求响应信息

    主要将Charles抓包的配置,和遇到问题进行了一个整理, 本教程,主要解决,按照Charles抓包配置之后,还是无法成功进行抓包。并且网络无法访问通的问题 https://www.52pojie.cn/thread-1600964-1-1.html charles的配置和安卓系统的配置,需要参照这个来。 win版 https://blog.csdn.net/qq_45564088

    2024年02月14日
    浏览(48)
  • 使用香橙派 学习Linux的串口开发

    关于串口也是之前学习过很多次了,详见: 认识串口 和 蓝牙模块HC08_hc08蓝牙模块_mjmmm的博客-CSDN博客 串口的再认识-CSDN博客 香橙派提供了两路串口 , 第一路就是在刷机时串口连接的引脚( 对应驱动ttyS0 ),第二路就是物理引脚8和10( 对应驱动ttyS5 ) : 此处要请出老朋友

    2024年02月08日
    浏览(39)
  • 极速版手机蓝牙APP开发

    “这是一个充满科技风的手机蓝牙APP” App Inventor是一款谷歌公司开发的手机编程软件,主要支持各种安卓软件的开发。不知道大家是否在做单片机项目时,是否遇到这样的一个烦恼,需要一款蓝牙APP来实现控制功能,但市面上现成的蓝牙APP并不好用,实现的功能参差不齐,但

    2024年02月07日
    浏览(46)
  • 【Android开发基础】蓝牙信息的获取(Bluetooth)

    描述:蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。蓝牙使当前的一些便携移动设备和计算机设备能够不需要电缆就能连接到互联网,并且可以无线接入互联网。

    2024年02月09日
    浏览(42)
  • 前端js使用jsrsasign,生成RSA秘钥,获取一系列信息(公钥,私钥,模数,指数等)进行加密解密

    前言: 之前的项目里用的RSA加解密的时候是生成固定的公钥(模数,指数)和私钥放在代码里进行数据的解密。现在要修改成前端自己生成(模数和指数)传给后台。后台加密数据返回给我。我在用私钥解密。 后面查了很多,开始的window.crypto里的方法可以生成公钥和私钥,

    2024年02月16日
    浏览(84)
  • 安卓实战开发之——使用 WIFI 进行设备搜索并获取相应信息

    目录 一、前言 二、准备条件 三、功能要求 四、显示效果 五、关键代码  此玩意是本人很早很早(记不清有多早了,反正很早)做过的一个课程任务了,无意之中翻到了,所以把它放上来。不愿再找以前写的代码了,所以放的文档里的截图。 首先需要安装配置好Java开发环境

    2024年02月09日
    浏览(39)
  • 手机,蓝牙开发板,TTL/USB模块,电脑四者之间的通讯

    通过手机蓝牙连接WeMosD1R32开发板,开发板又通过TTL转USB与电脑连接.手机通过蓝牙控制开发板上的LED灯的开,关,闪等动作,在电脑上打开串口监视工具观察其状态.也可以通过电脑上的串口监视工具来控制开发板上LED灯的动作,而在手机蓝牙监测工具中显示灯的状态. 手机,TTL转USB转

    2024年02月03日
    浏览(39)
  • ios开发 swift5 苹果手机怎样获取蓝牙设备的mac地址

    如设备蓝牙名为: 蓝牙名_mac app这边展示蓝牙名的时候,就只展示 蓝牙名 , 去掉后面的 _mac 其他用到蓝牙名的地方,都用这样的方式处理 如下图,箭头部分就是广播出的mac地址 如果不是通过搜索获取到peripheral,而是通过retrievePeripherals方法获取到peripheral。这个时候就只能获

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包