每日一记—蓝牙模块应用(一)

日期:2018.9.27


最近在研究蓝牙模块,先是手机蓝牙串口通信的软件开发,虽然有很多例子,但是对于小白的我还是弄了挺长时间。今天先介绍一下硬件部分的程序设计和仿真。硬件电路采用的是51单片机和蓝牙模块HC-05的连接。单片机程序如下:

#include <reg52.h>

sbit P1_0 = P1^0;        //Êä³ö¿Ú1
sbit P1_1 = P1^1;        //Êä³ö¿Ú2

#define uchar unsigned char;    //´æ´¢½ÓÊÕµ½µÄÐÅÏ¢
uchar tempbuf;

/*³õʼ»¯´®¿Ú*/
void BlueteethInit()
{
	SCON = 0x50;        //´®¿Úģʽ1£¬ÔÊÐí½ÓÊÕ
	TMOD = 0x20;        //T1¹¤×÷ģʽΪ2£¬×Ô¶¯ÖØ×°
	PCON = 0x00;        //²¨ÌØÂʲ»±¶Ôö
	
	REN = 1;
	
	TH1 = 0xfd;         //ÉèÖò¨ÌØÂÊΪ9600
	TL1 = 0xfd;
	
	RI = 0;
	
	EA = 1;             //¿ª×ÜÖжÏ
	ES = 1;             //¿ª´®¿Ú½ÓÊÕÖжÏ
	
	TR1 = 1;            //¶¨Ê±Æ÷¿ªÆô
}
void main()
{
	BlueteethInit();
	P1_0 = 0;
	P1_1 = 1;
	TI = 0;
	while(1)
	{
		if(tempbuf == 0x31)   //Ê®½øÖÆÎª49£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ1
			P1_0 = 1;
		if(tempbuf == 0x30)   //Ê®½øÖÆÎª48£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ0
			P1_0 = 0;
		if(tempbuf == 'A')   //Ê®½øÖÆÎª49£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ1
			P1_1 = 1;
		if(tempbuf == 'B')   //Ê®½øÖÆÎª48£¬¶ÔÓ¦ASCIIÂë¿ØÖÆ×Ö·ûΪ0
			P1_1 = 0;
	}
}
void Serial(void) interrupt 4
{
	RI = 0; //¶Á±êÖ¾ÇåÁã
	ES = 0; //¹Ø±Õ´®¿ÚÖжÏ
	tempbuf = SBUF;
	ES = 1;
	SBUF = tempbuf;  //½«ÄÚÈÝ·µ»Øµ½ÊÖ»ú¶Ë£¬¿ÉÔÚÊÖ»ú²é¿´·¢Ë͵ÄÄÚÈÝ
	while(!TI)
		TI = 0;  //д±êÖ¾ÇåÁã
}

由于我是用KEIL编写的,导致复制到这里注释全部乱码,需要注意的就是while循环里的判断,0x31是ASCII数值,对应的十进制字符就是1,0x30对应的是0。然后生成我们需要使用的HEX文件。


protus仿真:

搭建仿真电路

用到的器件如下:

AT89C51、Resistor(Generic)、CRYSTAL、Capacitors(Generic)、LED-、button、compim

需要注意的是X1晶振的数值和U1单片机的数值设置到11.0592MHz,

P1端口的设置

最后在设置中的“program file”中选择刚才生成的HEX,就可以进行仿真了,仿真效果如下,

接下来就是如何测试串口通信效果了。

用Virtual Serial Port Driver 软件实现虚拟串口的连接

虚拟出了com1和com2的连接,从设备管理器中看会更清晰

最后我们把仿真电路中的P1设置为com1,然后打开串口调试助手AccessPort,设置相同的波特率,然后打开串口com2,写入字符1或0,或者A或B,可以实现仿真。

当我输入0后可以将D1的蓝色关闭,同时我再次输入B后可以打开D2为蓝色,

这样我们就实现了硬件电路的仿真工作,将单片机的P1串口替换为蓝牙模块后,通过手机发送相应的字符to那个样会实现点亮和关闭D1和D2的控制。

蓝牙模块的典型功耗水平因具体应用场景和模块设计而异,但低功耗蓝牙(BLE)模块在物联网市场中以其极低的功耗著称。例如,在个常规配置条件下,采用Nordic nRF54L15芯片的蓝牙模块的平均功耗可以低至9.8μA[^2]。 ### 广播模式下的功耗 在广播模式下,蓝牙模块会周期性地发送广播包以供其他设备发现。这种模式通常用于信标或需要被发现的应用场景。根据不同的广播间隔设置,功耗会有显著变化。例如,当广播间隔为1秒时,模块的平均功耗可以保持在个非常低的水平。 ### 连接模式下的功耗 旦建立连接,蓝牙模块将进入数据传输阶段。在此期间,功耗取决于多个因素,包括连接间隔、数据量以及发射功率等参数。较短的连接间隔会导致更高的功耗,因为模块需要更频繁地唤醒并进行通信。然而,即使在这种模式下,BLE模块依然能够维持较低的功耗水平,非常适合于电池供电设备[^1]。 ### 睡眠模式下的功耗 除了主动工作状态外,蓝牙模块还具有多种睡眠模式来进步降低整体能耗。这些模式允许模块在不执行任何任务时进入深度休眠状态,从而极大地延长了电池寿命。某些情况下,模块在睡眠模式下的电流消耗可能低于1μA[^1]。 ```python # 示例代码:计算使用特定配置的BLE模块的理论使用寿命 def calculate_battery_life(battery_capacity_mAh, usage_rate, average_current_uA): # 计算电池的有效容量(mAh) effective_capacity = battery_capacity_mAh * usage_rate # 转换为安时(Ah) effective_capacity_Ah = effective_capacity / 1000 # 计算每日消耗的电量(Ah/day) daily_consumption_Ah = average_current_uA * 24 * 3600 / 1e6 # 计算总天数 total_days = effective_capacity_Ah / daily_consumption_Ah return int(total_days) # 假设CR2032纽扣电池容量为220mAh,实际利用率是80%,平均电流消耗为9.8μA battery_life_days = calculate_battery_life(220, 0.8, 9.8) print(f"基于给定条件,预计电池寿命约为 {battery_life_days} 天") ``` 通过上述分析可以看出,蓝牙模块尤其是BLE模块的设计目标是在保证性能的同时实现尽可能低的功耗,这使得它们成为众多便携式和个人电子产品的理想选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值