0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术标准socket编程应用于英创主板的蓝牙接口

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-05 10:30 次阅读

蓝牙(bluetooth)技术是一种低功耗短距离的无线通信技术,被广泛应用于10米以内的嵌入式设备通信当中。其最高传输速度根据蓝牙协议的版本不同,有1Mbps(BR、LE)、2-3Mbps(EDR)、24Mbps(HS)之分。在工业现场,蓝牙技术可以代替串行线缆,实现无线通信。在智能手机普及的今天,通过蓝牙与手机建立连接,手机作为上位机发送指令给下位机,可以实现低成本的UI控制方案。

BlueZ是当前比较成熟的蓝牙协议栈,作为Linux系统的官方协议栈,集成在Linux内核之中。英创公司在ESM928x的Linux系统中,又移植了BlueZ用户空间协议栈和相关工具,使得ESM928x Linux平台能够支持蓝牙技术,通过socket编程实现蓝牙无线连接,代替串行线缆进行通信。

图1ESM928xW系列主板+底板

用户使用蓝牙串口功能主要分为两个步骤:蓝牙功能配置和socket应用程序编写。

1、蓝牙功能配置

1、加载ap2610蓝牙模块上电驱动

insmod /lib/modules/4.1.14/ap6210_bt_bcm20710.ko

2、加载蓝牙固件,设定波特率、蓝牙地址、使能hci等

brcm_patchram_plus --patchram /lib/firmware/ap6210/bcm20702a.hcd --baudrate 3000000 --enable_hci --bd_addr aa:00:55:44:33:22 --no2bytes --tosleep 5000 /dev/ttyS5 1> /dev/null&

3、启动dbus后台服务

dbus-daemon --system --nofork --nopidfile &

4、以兼容模式启动bluetooth后台服务

/libexec/bluetooth/bluetoothd -C &

5、启动hci0,并设置name和可见属性

hciconfig hci0 up

hciconfig hci0 name esm9287

hciconfig hci0 piscan

hciconfig hci0 reset

以上5个步骤已经写成一个shell脚本set_bluetooth.sh,用户也可以直接运行该脚本完成以上设置。至此,完成了对蓝牙的设置,可以通过hciconfig hci0 -a来查看蓝牙信息,如图2。这时,其他蓝牙设备就可以搜索到esm9287,图3所示是android手机搜索到esm9287蓝牙设备,点击即可完成配对。

图2使用hciconfig查看蓝牙信息

图3搜索esm9287并配对

2、Socket应用编程

蓝牙协议栈中的RFCOMM协议实现了对串口RS232仿真,最多能提供两个蓝牙设备之间60路的连接。应用程序中,可以使用socket进行服务端和客户端的编程,其过程与TCP/IP的socket通信没有太大区别。

a)环境配置

开发bluez协议栈的蓝牙应用需要用到libbluetooth.so和相关头文件,需要添加到eclipse对应的蓝牙项目中。libbluetooth.so是编译bluez协议栈生产的动态链接库,提供了头文件bluetooth.h、hci_lib.h、sdp_lib.h中的函数实体,实现蓝牙地址与常用数据类型的转换、hci设备和sdp服务的一系列操作函数。

1、在项目中新建文件夹include/bluetooth,其中放入蓝牙协议相关头文件;新建文件夹lib,其中放动态链接库libbluetooth.so。

图4新建include和lib文件夹

2、进入项目Properties设置,添加项目下的include文件夹为GCC C++ Compiler和GCC C Complier编译器的头文件路径(下图是GCC C++ Compiler的设置,GCC C Compiler设置步骤相同)。

图5添加头文件搜索路径

3、为Sourcery G++ Lite C++ Linker链接器添加libbluetooth.so库文件及搜索路径,如下图。

图6添加编译库及搜索路径

b)服务端程序

1、申请蓝牙RFCOMM socket

s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);

2、绑定本地适配器,BDADDR_ANY默认为第一个可用蓝牙适配器

loc_addr.rc_family = AF_BLUETOOTH;

loc_addr.rc_bdaddr = *BDADDR_ANY;

loc_addr.rc_channel = (uint8_t) 1;

bind(s, (structsockaddr *)&loc_addr,sizeof(loc_addr));

3、设置socket监听模式,这里只允许建立一个连接

listen(s, 1);

4、等待连接

client = accept(s, (structsockaddr *)&rem_addr, &opt);

5、select模式读取socket数据流

while(1)

{

FD_ZERO(&working_set);

max_sd = client;

FD_SET(client, &working_set);

timeout.tv_sec = 3 * 60;

timeout.tv_usec = 0;

// Call select() and wait 5 minutes for it to complete.

printf("Waiting on select() %ld sec...\n", timeout.tv_sec);

intrc_select = select(max_sd + 1, &working_set, NULL, NULL, &timeout);

// Check to see if the select call failed.

if(rc_select < 0)

{

perror(" select() failed");

break;

}

elseif(rc_select > 0)

{

if(FD_ISSET(max_sd,&working_set))

{

// read data from the client

bytes_read = read(client, buf,sizeof(buf));

if( bytes_read > 0 ) {

printf("received: [%s]\n", buf);

}

else

{

break;

}

write(client,ack,sizeof(ack));

}

}

// Else if rc_select == 0 then the 5 minute time out expired.

else

{

printf(" select() timed out.\n");

break;

}

}

6、关闭套接字

close(client);

close(s);

c)客户端

1、申请蓝牙RFCOMM socket

s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);

2、设置蓝牙连接服务器的地址

structsockaddr_rc addr = { 0 };

// set the connection parameters (who to connect to)

addr.rc_family = AF_BLUETOOTH;

addr.rc_channel = (uint8_t) 1;

str2ba( dest, &addr.rc_bdaddr );

3、连接蓝牙服务器

// connect to server

status = connect(s, (structsockaddr *)&addr,sizeof(addr));

4、读写socket数据流

for(i = 0; i < 3; i++)

{

// send a message

write(s, message[i], strlen(message[i])+1);

printf("write "%s" to %s\n", message[i],dest);

bytes_read = read(s, buf,sizeof(buf));

if( bytes_read > 0 ) {

printf("received: [%s]\n", buf);

}

}

其中,message[i]为发送内容的地址。

5、关闭socket

close(s);

在一张板子上运行蓝牙rfcomm服务程序,在另一张板子上运行蓝牙rfcomm客户端程序,如图6、图7所示:

图7服务端程序

图8客户端程序

通过socket编程,蓝牙应用程序可以像tcp/ip的网络编程一样,建立连接,实现无线通信。如果有用户对蓝牙的串口socket编程感兴趣,可以联系我们。我们将提供驱动文件、蓝牙库文件及相应的示例程序。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35337
  • 安卓
    +关注

    关注

    5

    文章

    2130

    浏览量

    57200
收藏 人收藏

    评论

    相关推荐

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准技术协会信
    的头像 发表于 12-24 09:57 102次阅读

    socket 多线程编程实现方法

    在现代网络编程中,多线程技术被广泛应用于提高服务器的并发处理能力。Socket编程是网络通信的基础,而将多线程
    的头像 发表于 11-12 14:16 358次阅读

    socket 编程基础入门

    Socket 编程基础入门 在计算机网络中,Socket 是一个抽象层,它将网络通信的细节隐藏起来,为开发者提供了一个简单的接口来发送和接收数据。S
    的头像 发表于 11-12 14:03 315次阅读

    什么是socket编程 socket与tcp/ip协议的关系

    什么是Socket编程 Socket编程是一种网络编程技术,它允许程序之间进行通信。在计算机科学中,so
    的头像 发表于 11-01 16:01 335次阅读

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 485次阅读

    单片机哪家好?用单片机,就找锐恩!

    集成度和技术水平,目前针对行业集成定制的SOC广泛应用于消防、安防、小家电、数码周边、灯控等领域。 2、行业专用ASIC芯片: 定制化产品能够有效增强产品的竞争力,围绕行业应用需求,ENXX-ASIC
    发表于 10-09 14:52

    锐恩科技引领微控制器MCU技术创新,赋能多元化应用!

    行业取得了显著成绩。例如,锐恩的MCU被广泛应用于消费电子、工业控制、仪表仪器、数码电子、安防监控、智能家居、医疗设备、照明控制、汽车电子等,在汽车电子领域为汽车智能化提供了坚实的硬件基础。在安防
    发表于 09-29 13:40

    锐恩科技,以实力打造国产单片机替代品牌!

    今天我们要介绍的深圳锐恩科技的单片机。 鉴于我国集成电路产业起步较晚,核心研发技术非常的短缺,导致了我国芯片需要依赖进口。而可替代进口MCU的国产芯片,产品性能必须要稳定。 深圳锐恩科技是一国
    发表于 09-25 09:49

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 402次阅读

    中软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息技术应用创新综合服务中心主办,中软国际协办的,2024年大连市信息技术应用创新产业发展大会
    的头像 发表于 08-27 16:49 879次阅读

    如何理解socket编程接口

    Socket编程接口是一种网络编程的基本概念,它提供了一种在不同计算机之间进行通信的方法。 Socket
    的头像 发表于 08-16 10:48 418次阅读

    通过大小鼠无血压测量实验明白了无血压测量技术的重要性

    血压测量技术的重要性:无血压测量技术是一种非侵入性的测量方法,可以避免对动物造成不必要的伤害。在医学研究中,无血压测量
    发表于 04-22 09:40

    泰斯特承办“联企投汇·周三会”,协同打造智能网联新高地

    2024年3月27日,由市委统战部、市工商联主办、武汉市高新技术产业协会协办的“联企投汇·周三会”第十三期活动在武汉英泰斯特电子技术有限公司(以下简称“泰斯特”)成功举办。
    的头像 发表于 03-29 09:50 517次阅读

    股份今日登陆科

    山东中软件商用中间件股份有限公司(以下简称“中股份”)近日在上海证券交易所科板成功上市,标志着这家国内知名的民营软件和信息技术服务企业正式进入资本市场,迎来全新的发展机遇。
    的头像 发表于 03-13 14:19 541次阅读

    PCB企业力三期项目顺利投产

    近日,PCB企业四川力电子科技股份有限公司三期(载板厂和特种板厂)顺利投产。通过这个项目,力公司成功地将业务范围从单一的普通通孔多层板扩展到了高端的IC载板、MiniLED基板
    的头像 发表于 01-15 14:20 620次阅读