无线开发板哪家强?工程师测给你看
在物联网应用中,无线是不可或缺的一环,而这些应用不仅对功耗很敏感,对于成本也很严格。目前,绝大厂商都有自己的无线MCU产品,每家无线MCU各具特色,也是竞争比较激烈的一块市场。
不过,虽然说工程师选择变多了,但也容易眼花缭乱。在实际开发中,也有会面对许多问题。今天,我们就“下了血本”,搞到一些形态各异的无线开发板,包括蓝牙、Wi-Fi或者蓝牙带CAN的开发板,让工程师实际上手试用产品,并给出自己的实际开发体验。
Beetle ESP32 C6迷你开发板测评
作者:DavidZH
更多相关测评: https://www.eeworld.com.cn/a9yLaLG
开 箱
有幸获得EEWORLD 的FireBeetle 2 ESP32 C6 Mini 开发板, 和一个一元硬币的大小差不多,这么小的板子看看隐藏了多大的智慧;
一、板载资源了解
正面可以看见一个RST 复位按键+一个BOOT 按键,采用TYPE-C 口方式;反面则集成锂电池充电管理芯片TP4057 和LDO RT9080;
通过资料了解FireBeetle 2 ESP32 C6 Mini 是采用乐鑫的ESP32C6 20MHZ 的WIFI 6 ,且支持TWT 的低功耗,因此板载的预留BAT 接口,可以对WIFI 6 的低功耗特性进行测试;
外围的晶振配合电容组成了最小系统;
二、板载外设
麻雀虽小,五脏俱全;FireBeetle 2 ESP32 C6 Mini 虽然体积小,但外设资源却不少;
如图所示可以看出ADC, UART, I2C, SPI, JTAG.SDIO 都有,虽然采用复用,对于单独进行验证芯片还是不错的选择;
按照如上的外设资源进行逐个验证。
三、 MCU 资源
FireBeetle 2 ESP32 C6 Mini 的最大特点是采用ESP32 C6, WIFI6 的特性中有TWT 的低功耗,相对于WIFI 4或者WIFI5 在IOT 的应用中有天然优势;
另外该芯片支持多种协议,在后期进行Matter over wifi 或者Matter over Thread 也是不错的选择,但具体是否能有描述的这么第的功耗,需要进一步验证;
-
搭载ESP32-C6芯片,支持Wi-Fi、BLE、Zigbee、Thread通讯协议
-
支持Wi-Fi 6协议,更低延迟,更低功耗
-
超低功耗,deep-sleep 14uA
-
集成锂电池充电功能
-
支持电池电压检测,了解设备电量信息
主控ESP32 C6 支持的无线 特性如下:
-
WIFI协议:IEEE 802.11b/g/n/ax
-
IEEE 802.11ax (20 MHz-only non-AP mode)
-
WIFI频宽:2.4 GHz 频带支持 20 MHz 和 40 MHz 频宽
-
WIFI模式:Station 模式、SoftAP 模式、SoftAP+Station 模式和混杂模式
-
WIFI频率:2.4GHz
-
帧聚合: TX/RX A-MPDU, TX/RX A-MSDU
-
蓝牙
-
蓝牙协议:Bluetooth 5、Bluetooth mesh
-
蓝牙频率:125 Kbps、500 Kbps、1 Mbps、2 Mbps
目前依然是延续了乐鑫的产品,WiFi+蓝牙的SOC; 对于是否支持WiFi的WPA3 加密,以及相关应用协议的支持和蓝牙5 支持的应用有待探索。
Arduino 开发环境搭建
FireBeetle 2 ESP32 C6 Mini 采用的是乐鑫ESP32 C6 ,主要的开发环境有如下几种;
-
ESP-IDF+VSCODE
-
ESP-IDF+Platform IO
-
Micropython 及其类似
-
Arduino
以上四种方式都可以对ESP32-C6 进行软件开发和验证, 主要看自己的熟悉程度;
以下以Arduino 为IDE 的开发环境进行搭建;主要是官方和第三方都有非常多库可以直接用;
一、安装Arduino 开发环境;
在Arduino 官方下载,选择V2.3 以上版本,否则无法支持到ESP32 C6 芯片;
二、安装ESP32-C6 的相关支持;
在开发板中选择ESP32 然后安装3.0 的版本;3.0 的版本才支持ESP32 C6, 更新会花费很长时间, 由于网络原因可能要很久;
可以在Windows 的Microsoft store 中安装Watt Tookit 工具,可以加速, 具体功能自行研究。
三、Arduino 的配置:
将Beetle ESP32 C6 Mini Mini 通过TypeC 口与PC 相连;打开Arduino 后进行配置;
1、选择开发板类型和COM 口;
在文件-示例中可以看见相关例子;
在工具中有烧录的相关配置,一般默认就可以;
新建工程BeetleESP32C6 保存; 会出现:BeetleESP32C6 和libraries 文件夹,前者放ino 的编程文件, 后者放库文件(IDE 自己安装的库或者第三方库都可以)
工程文件:
我们可以发现Arduino 的工程目录下并没有生成可执行文件, 需要进行如下操作;
在工具-导出已经编译的二进制文件;
此时在工作目录下就有生成相应的可执行文件;可以采用乐鑫的官方工具进行烧录;
还有就是如果按照官方的开发板支持包,可以在Arduino 中直接寻找,不用在网上胡乱搜索;在首选项->其他开发板管理;
连接Beetle ESP32 C6 Mini 与USB 转UART 功能;
外设之 SPI 驱动ST7789 TFT
Beetle ESP32 C6 Mini 的SPI 外设有一组硬件的资源如下:
SCK->GPIO23
MOSI->GPIO22
MISO->GPIO21
CS 则可以设计为任何其他GPIO 管脚;
对于TFT 屏幕驱动,一般会选择LVGL+TFT_eSPI 实现,通过查询可以知道TFT_eSPI 目前还没有支持到Esp32-C6 所有直接采用ST7789 库来驱动。
总结:对于驱动屏幕而言,最好是采用RTOS+GUI 进行事件调度。
N32WB45xL-EVB全功能评估板测评
作者:yang8555u
更多相关测评: https://www.eeworld.com.cn/aKqnjr5
一、开箱
前几日收到了寄过来的开发板,今日终于有空来做一个开发板的分享。
拆开快递后,是一个印有国民技术商标的白色纸盒,内附国民技术的开发板N32WB452一枚及配件USB-A转USB MINIUSB连接线。
包裹的红色泡沫棉我已经去掉啦,开发板到手很开心,开箱图如下:
可以看到开发板已经板载了NS-LINK调试器(在左下角),左侧中部区域则是开发板的主控,N32WB452LEQ6,QFN88脚封装。板子上还自带蓝牙天线、触摸按键、多路LED灯、蜂鸣器、SPI-FLASH、电位器等一系列外设,方便用户评估开发板的各项外色号,如GPIO,I2C,SPI,BLE,UART等等。N32WB452LEQ6作为一个双核MCU,为M4+M0的架构,主频最大可达144MHz,144KB的RAM和512KB的ROM,可谓资源丰富,非常适合做智能指纹锁、蓝牙网关等应用。
开发板正面图如下:
开发板反面图如下:
二、下载配套资料
在国民技术的FTP站点中(ftp://58.250.18.138),可以下载N32WB452的各项资料。
以WIN10为例,在此电脑中添加网络位置
点击后,填写ftp://58.250.18.138/:
一路点下来,并命名好,即可看到文件夹:
开发板的相关资料在ftp://58.250.18.138/国民技术产品资料/无线连接产品/N32WB452xx_V2.0.0
将其复制到本地电脑中即可。
三、运行例程
keil默认大家都会装,就不再说明,本次我用的是MDK 5.37版本。
在如图所示目录中,安装开发板的Keil支持包,即Nationstech.N32WB452_DFP.1.0.3.pack
安装完毕后,打开RT-Thread例程,RT_Thread1_ThreadCreation,双击工程文件,并运行:
在左侧APP目录中,添加printf打印函数,以方便观察程序运行时间
在使用USB数据线连接开发板后,编译并下载至开发板,即可看到D1/D10两个LED灯交替闪烁,并在串口调试助手中有数据打印出:
串口助手界面:
成功!例程已经成功运行在开发板上了!
在RT-Thread完整版中点灯及ADC的使用
上一次发帖,我曾经请教过论坛里的各位,想试图找到N32WB452的RT-Thread的完整版系统SDK,可惜收获的回答是No。在获得这个回答后,曾考虑过移植RT-Thread到N32WB452上,但发现,RTThread的官方移植的N32G457的SDK也是可以直接下到N32WB452里的,个人推测因为都是国民技术的芯片,且寄存器、处理器内核都是一样的,所以能通用。当然了,N32WB452对比N32G457,多出了蓝牙外设,蓝牙外设的有关例程暂时只支持keil,不支持RT-Thread Studio,我尝试移植蓝牙组件到RT-Thread SDK下使用,暂时没有成功,因为牵涉到太多文件的修改,这个就放在后期再做尝试。
回到主题,本期及后几期帖子,都会评测RT-Thead在N32WB452上的相关运行实验。
##一、创建工程
在RT-Thread官网,下载RT-Thread Studio,并在SDK管理器中,下载N32G45X的开发板支持包,如图所示:
下载完成后,即可创建RT-Thread新工程,如图:
##二、修改工程文件
在board.h中,修改FLASH大小为512,如图:
打开drv_gpio.c文件,将PIN_NUBERS一栏由64改为100,否则,某些引脚我们想使用的时候将找不到,如图:
##三、GPIO的使用
参考N32WB452的原理图,可以知道在开发板中央的四个LED灯D1/D10/D11/D12和轻触按钮K04的位号及对应连接的引脚,考虑到使用方便,我们将其在main.c中预先声明。
关于RT-Thread的ADC,咱还没整明白,所以这部分依旧采用N32的官方库函数进行开发。
在RT-Thread中使用I2C读取温湿度传感器数据
本期主题是通过RT-Thread的I2C API,对板载的HDC2010温湿度传感器读取数据和手头上自备的一个HDC1080温湿度传感器读取数据。
默认N32的工程已经创建好,就不再重复描述。
#一、I2C配置
在工程根目录,打开RT-Thread Settings,如图:
打开后,开启软件模拟I2C选项,如图:
在硬件菜单配置中,使能软件模拟的I2C1,并设定引脚为47脚和48,如图:
(该引脚的来由是板载的温湿度传感器HDC2010对应的I2C2_SDA/I2C2_SCL引脚,并参考drv_gpio.c)。
在开发板上J24/J23处,安装短路帽。
#二、HDC2010温湿度传感器驱动编写
参考HDC2010的官方手册,链接为:http://www.ti.com/cn/lit/gpn/hdc2010 。HDC2010的湿度精度为±2%,温度精度为典型值 ±0.2°C,算是性价比很高的一款器件。
在手册中,列出了HDC2010的I2C地址,我们右移一位后可得通信I2C地址为0x40(RT-Thread可自动移位地址以完成读写)
手册中详细罗列了I2C读取的时序、操作。
在7.6章节,可以看到公开的寄存器地址及其说明,在本次实验中,我们需要的用到温度相关寄存器,湿度相关寄存器,配置相关寄存器,器件ID相关寄存器。其他寄存器暂未用到。
7.6.2章节,介绍了温度值转换实际温度的转换公式,如图:
7.6.3章节,介绍了湿度值转换实际温度的转换公式,如图:
7.6.17章节,介绍了配置的各个选项及其说明,如图:
在充分阅读手册后,我们的HDC2010驱动编写将会更加得心应手。
雅特力AT32WB415系列测评
作者:KING_阿飞
更多相关测评: https://www.eeworld.com.cn/aC04GuL
在FreeRTOS中点灯
很荣幸能获得雅特力AT32WB415系列蓝牙BLE 5.0 MCU的评测机会,为此按照我以前的评测的习惯,附上我的Github:,所有评测代码均开源分享。
一、了解板子资源
雅特力的单片机,这次是我第一次使用,按照我之前的经验。一定要去看数据手册,这个很重要。资料地址:雅特力科技 : 32位微控制器的创新领导者! (arterytek.com) 相比其他国产MCU厂商,雅特力的资料库十分齐全,便于我们开发,这里给雅特力点赞????????????
我们知道在这次给我送测的板子,是板载下载器的。
具体的芯片资源,我就不在这里给出,感兴趣的小伙伴可以去官网查看。
二、移植FreeRTOS
-
我们首选下载FreeRTOS的源文件,我们可以去FreeRTOS的官网下载:https://www.freertos.org 也可以在官方给的中间件中找到对应的源文件,这里我使用官网下载的最新源码包(FreeRTOS LTS 202012.04)进行移植。
-
然后在,keil中添加文件FreeRTOS的文件,将相关文件添加。注意:内存那里我们悬着heap_4,虽然我们芯片是ARM-M4带MPU,但是不支持FPU,所以我们这里使用CM3的port。
4.最后记得把FreeRTOS的头文件引入。
三、点灯
代码大家直接去Github上面就可以看到,在这里我就不放出。
移植MCU控制蓝牙,蓝牙固件烧录
一、蓝牙固件代码烧录
雅特力AT32WB415是合体芯片,一个MCU加一个蓝牙,中间连接了一个串口,带2个UART, 其中UART21与MCU USART3连接。我们可以通过ArteryICPProgrammer这个软件烧入固件代码。这里我用到的版本是V3.0.03,第一次下载请给AT-Link固件升级一下,这个软件就可以升级。
页面中 第一个固件就是蓝牙的,另一个就是我们MCU的固件。
官方的蓝牙固件包在其页面下就可以找到雅特力科技 : 32位微控制器的创新领导者! (arterytek.com)
该工程是ARM9的工程,需要安装Legacy Support才能够编译, 用户可根据自己的环境在以下
路径进行下载: www2.keil.com/mdk5/legacy,这里我把我编译的bin文件放在仓库中,大家需要的可以自取。
官方文件中的指南里面就讲的比较清楚,我在这里不过多赘述。讲几个需要注意的点:蓝牙的地址是0x000000的、在复位是应该有一个时序的问题,需要先复位MCU在复位蓝牙、我们手机的蓝牙必须使用类似LightBlue这类的软件才可以连接,直接是无法连接上,这部分我也没有涉及过,属于知识盲区了。希望有人可以在这方面研究一下。
二、MCU代码的移植
其实在,官方里面的文档也写了,我们没必要继续重复造轮子了(其实就是懒????)
具体的移植步骤就不多说,也比较简单,有问题可以在评论区提出。这里讲一些我在移植过程中的问题,这样的效果更好。
FreeRTOS卡死:在Debug发现会一直等待,研究发现是官方的at32_button_press这个按键检测的函数里面的延时是delay_ms,这里我改成FreeRTOS里面的延时。
所有的代码我也不在这里放出来了,全部在Github上有,而且能够看到每次的变化,也知道我添加了哪些文件。
WDT 看门狗分析及应用
一、看门狗
看门狗由一个12位的递减计数器和一个8位的预分频器所组成,它由低速内部LICK提供时钟;因为这个时钟独立于主时钟,所以它可运行于深睡眠和待机模式。它可以被当成看门狗用于在发生错误时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过用户系统数据可以配置看门狗是否自启动。在调试模式下,计数器可以被冻结。
我们关注一下命令寄存器和重装载寄存器。
我们再看一下,喂狗超时时间计算,先看一张表:
安信可蓝牙开发板PB-02-Kit 测评
作者:jinglixixi
更多相关测评: https://www.eeworld.com.cn/a0enfTK
开箱上电
安信可PB-02-Kit蓝牙开发板是基于安信可PB-01模组而开发的,主打目标是智能照明。PB-02-Kit自带板载天线,RGB灯珠和冷暖灯珠,以供开发者调节和测试。
PB-02-Kit支持BLE Mesh组网,支持使用AT指令,支持SDK二次开发,支持天猫精灵语音直连控制,支持安卓/IOS APP控制以及微信小程序控制。
PB-02共有六路 PWM,可自行调节 RGB七彩灯和两路冷暖灯珠调节,并将模组的全部可用 IO 以排针的方式引出,以便于开发者的开发和调试。
此外,它集成丰富的资源,包括 AT 指令、SDK 二次开发,支持蓝牙 mesh 组网,以及安卓/IOS APP控制以及微信小程序控制,还支持天猫精灵语音直连控制;多个开发板互联,可用于 Mesh 组网调试,2.54mm 排针引出全部 GPIO/PWM/SPI/ADC 等接口,可自由搭配外设。
在软件开发方面,它支持以Keil进行开发,并提供UART 接口来烧录固件。
该开发板配备的硬件资源有:
1)标准 micro USB
2)以2.54mm 间距排针来提供 PWM/SPI/GPIO/ADC 接口
3)自带 R/G/B 三合一灯珠和冷/暖灯珠
4)自带复位按键和1个用户按键
开发板的几何尺寸为30mm(W)*45.5mm(H),外观如图1和图2所示。
图1开发板正面
图2开发板背面
开发板各管脚的功能定义为:
序号 |
引脚名称 |
功能说明 |
1 |
ANT |
天线引脚(注:PB-02 默认用的板载天线,无需外接) |
2 |
RST |
复位 |
3 |
P20 |
GPIO20,所有功能均可配置/ AIO /麦克风偏置输出 *注:不支持中断功能 |
4 |
P18 |
GPIO18,所有功能均可配置/ AIO / PGA 差分正输入 *注:不支持中断功能 |
5 |
P23 |
GPIO23,所有功能均可配置 *注:不支持中断功能和ADC 功能。 |
6 |
SW1 |
6 SW1 GPIO24,所有功能均可配置/测试模式启动配置[0]。 |
7 |
SW2 |
GPIO25, 所有功能均可配置/测试模式启动配置[1], 此引脚 高电平上拉,开机启动进入测试模式。 |
8 |
P31 |
GPIO31,所有功能均可配置 *注:不支持中断功能和 ADC 功能 |
9 |
P14 |
GPIO14,所有功能均可配置/ AIO |
10 |
P15 |
GPIO15,所有功能均可配置/ AIO |
11 |
P34 |
GPIO34,所有功能均可配置 *注:不支持中断功能和 ADC 功能 |
12 |
P00 |
GPIO00,所有功能均可配置/ JTAG_TDO *注:不支持 ADC 功能 |
13 |
P01 |
GPIO01,所有功能均可配置/ JTAG_TDI *注:不支持 ADC 功能 |
14 |
P02 |
GPIO02,所有功能均可配置/ JTAG_TMS *注:不支持 ADC 功能 |
15 |
P03 |
GPIO03,所有功能均可配置/ JTAG_TCK *注:不支持 ADC 功能 |
16 |
TM |
烧录模式选择,此引脚高电平上拉,开机启动进入烧录模式 |
17 |
TXD |
串口 URAT_TXD |
18 |
RXD |
串口 URAT_RXD |
19 |
GND |
接地 |
20 |
3V3 |
电源供电,典型值 3.3V |
那么上电后什么现象呢?
结果是没有什么变化,即使是电源指示灯被点亮也没有。
图3上电效果
随后又查看了一下原理图,还别说就是没有电源指示灯!
图4开发板原理图
还能指望啥呢?
看设备管理器吧,还别说有一个虚拟出的串口,见图5所示。
图5虚拟串口
这个串口又会带来啥信息呢?
设置好参数并打开串口,所给出的信息也不过如此,见图6所示。
图6上电效果
AT指令测试
在初始的开发板上是支持AT指令测试的,只用借助串口调试工具即可。
1) AT指令
AT 指令可以细分为三种格式类型:
类型
|
指令格式
|
描述
|
查询指令
|
AT+
|
查询命令中的当前值。
|
设置指令
|
AT+
|
设置用户自定义的参数值。
|
执行指令
|
AT+
|
执行某些参数不可变的功能。
|
当只输入“AT”指令,则返回“OK”,见图1所示。
图1“AT”指令
2) 查询名称
使用“AT+NAME?”指令可进行名称查询,返回的内容为“ai-Thinker”,见图2所示。
图2查询名称
3) 开关回显
使用“ATE0”指令可关闭回显,用“ATE1”指令则打开回显,指令的执行结果如图3和图4所示。
注:打开回显 (参数将会保存到芯片内,下次上电无需再行设置。)
图3关闭回显
图4打开回显
4) 重启模组
使用“AT+RST”指令可重启模组,其返回内容如图5所示。
图5重启模组
5) 设置睡眠模式
睡眠模式共有3种模式,即:
0:进入浅睡眠并且下次上电不会自动进入浅睡眠状态(AT+SLEEP=0)
1:进入浅睡眠并且下次上电会自动进入浅睡眠状态
2:进入深度睡眠模式
在进入深度睡眠模式后会将模块RX设为唤醒引脚,UART发送任意数据即可唤醒模块。
注:进入深度睡眠模式后模组将不能收发数据
使用“AT+SLEEP”指令可设置睡眠模式,其返回内容如图6所示。
图6设置睡眠模式
遗憾的是,对于其它的指令几乎就没有什么相应了。例如对波特率的设置,则会出现报错,什么对波特率是不能设置的。
图7波特率设置
在用1_COMAT_V1008.hexf更新了固件后,所支持的指令明显得到增加,见图8至图10所示。
图8HELP指令
图9 GMR指令
图10查询波特率
串行通讯及使用
串行通讯是一种主要的数据传送方式,也是在没有显示器件的情况下仅有的调试观察手段。
1. 串口通讯的初始化
要使用串口通信必须对串口进行初始化,其初始化的函数为:
int hal_uart_init(uart_Cfg_t cfg)
{
if(m_uartCtx.enable)
return PPlus_ERR_BUSY;
memset(&m_uartCtx, 0, sizeof(m_uartCtx));
if(cfg.hw_fwctrl)
return PPlus_ERR_NOT_SUPPORTED;
m_uartCtx.cfg = cfg;
uart_hw_config();
m_uartCtx.enable = TRUE;
hal_pwrmgr_register(MOD_UART, NULL, uart_hw_config);
return PPlus_SUCCESS;
}
2.字节数据发送
在串口通信中,最主要的函数是字节数据发送,它可以解决常规print函数所不能解决的问题,因为print函数所输出的内容通常是字符型的,而进行外设控制其指令多是二进制的指令,为此只有字节数据发送函数可以解决此类问题。
使用该函数可产生下图所示的输出效果,说明发送字节数据成功。
有了发送字节数据的基础,要想用其控制MP3语音播放模块便也不难了,只需将控制指令存放到数组中,然后按序输出即可。
当然,在输出字符串类的信息时还是使用LOG比较方便。
SparkFun Pro nRF52840 Mini蓝牙开发板测评
作者:御坂10032号
更多相关测评: https://www.eeworld.com.cn/ar5yT8O
开箱及其搭建开发环境
大家好,很荣幸能够获取到这次来之不易的测评机会。由于快递原因我是在21号拿到这个板子的。 昨天研究了一下如何搭建开发环境。今天就整理了一下给大家做一个开箱和搭建环境的教程.
这篇报告包括以下两个部分:
-
开箱
-
搭建开发环境(这款开发板实际上中文资料不是很多。所以在花费了一些时间来整理资料)
正面照
背面照:
这款开发板的内核时基于Arm Cortex-M4. 具有1MB的Flash 和 256K的Ram. 同时支持低功耗蓝牙。以及蓝牙5的Mesh. 同时支持USB模式。 外设提供了对UART 和 I2C以及SPI,ADC. PWM,RTC 和PWM的支持。数据参考
这款开发板还是非常小巧的,上电后需要手动将开关拨动到On。这时芯片才会正常工作,同时这个开发板提供了一个外部供电的小插槽,可以非常方便的使用电池供电,比如一节18650电池。电压范围在2.5到3.6V
环境搭建
本文默认你已经安装好了Arduino IDE
SparkFun Pro nRF52840 Mini蓝牙开发板 ADC
Arduino实现ADC的功能非常简单,所以近几篇类似IIC,USART,SPI等外设的功能。我们都快速实现。并且使用对应协议的传感器来实现Demo功能。
今天要实现的是使用这块开发板上的ADC功能来读取气体质量传感器的电压输出,并且通过串口发送给上位机。
根据原理图得知, 这款开发板上一共有8个Pin可以用于ADC的输入,如下图所示
数据手册上也是清楚的说明了当前的ADC,大意是说,12位的ADC具有8个通道
接下来我们开始编码部分。Sparkfun其实也为我们提供了Demo示例。通过下图我们可以打开官方提供的demo
SparkFun Pro nRF52840 Mini 蓝牙键盘
本章我们将学习如是使用SparkFun Pro nRF52840 Mini 来快速构建一个HID设备蓝牙键盘。
在开始之前,说一句题外话。 不得不说这个nRF52840 的Arduino库实在是太好用了, 如果自己DIY的话,非常推荐购买这个芯片的单片机来DIY具有蓝牙功能的作品。
在上章节我们已经详细的介绍了如何使用SparkFun Pro nRF52840 Mini实现蓝牙数据的发送,那么本节我们看下如何基于上节的代码实现蓝牙键盘的功能
本章提供的代码是一个演示使用nRF52840模块的HID键盘应用程序的示例。HID键盘在各种电子设备中广泛使用,从计算机到智能手机,为用户提供无缝的输入体验。
功能:
-
蓝牙连接: 代码建立了BLE连接,使Bluefruit52模块能够与其他蓝牙设备进行无线通信。
-
HID键盘仿真: 通过HID功能,模块可以仿真标准键盘,从而向连接的设备发送按键信息。
-
LED控制: 代码包括根据连接设备发送的命令来控制LED的功能,展示了双向通信的可能性。
实现:
-
设置:
-
代码初始化Bluefruit模块,并设置必要的BLE服务,包括设备信息服务(DIS)和HID。
-
它配置广告数据包以宣布HID键盘服务,并开始广告以进行设备发现。
-
连接间隔和功率设置经过优化,以实现性能和兼容性。
-
主循环:
-
循环检查来自串行监视器的键盘输入。当输入字符时,它将使用HID功能将其作为按键发送。
-
代码处理按键按下和释放,确保键盘行为正常。
-
回调:
-
定义一个回调函数来回显当前的蓝牙连接状态。
接下来我将介绍如何实现上述涉及的功能
设置:
我们可以保留上节的大部分功能函数,仅仅需要在初始化蓝牙连接之后,初始化HID设备
上图为对比HID的初始化和没有HID的初始化。左侧为带HID设备的初始化,右侧为仅仅只有蓝牙功能的初始化。而实现这么多功能只需要引入bluefruit.h 库, bluefruit.h 内封装了我们所需的所有功能
主循环:
在程序的主循环中,程序会一直从串口检测是否有数据输入,如果有数据输入的话,则把数据的输入作为键盘的输入。并且发送的远程的蓝牙设备同时改变按键的按下状态,使其在下一次循环的时候释放这个按键并且等待下一次按下。
void loop()
{
// Only send KeyRelease if previously pressed to avoid sending
// multiple keyRelease reports (that consume memory and bandwidth)
if ( hasKeyPressed )
{
hasKeyPressed = false;
blehid.keyRelease();
// Delay a bit after a report
delay(5);
}
if (Serial.available())
{
char ch = (char) Serial.read();
// echo
Serial.write(ch);
blehid.keyPress(ch);
hasKeyPressed = true;
// Delay a bit after a report
delay(5);
}
setKeyboardLedCallback function主要是用于蓝牙的状态显示,当蓝牙未连接的时候,LED会一直处于闪烁状态。当蓝牙连接成功之后LED将停止闪烁。
· END ·