基于蓝牙的防丢器

功能介绍:
1、蓝牙断开后会发出声光报警
2、蓝牙连接时,可使用APP发送控制命令
3、蓝牙断开发出声光报警,及时连上后停止报警
4、若不及时连上将拨打用户的手机号码提醒,同时发短信给手机,短信内容为定位信息

硬件准备:
1、stm32f103c8t6最小系统板
2、蓝牙4.0模块
3、无源蜂鸣器,用于播放MIDI音乐
4、SIM868模块,用于发短信、打电话、定位
5、升压模块,由于SIM868模块需要5V-18V 供电,供电电压 5V 时, 电流要保证 1.5A 或以上。
6、LED灯,使用的是板上PC13引脚处的小灯。
7、ST-LINK下载器,用于下载程序。
硬件接线:
蓝牙模块:TX—PB11 RX—PB10 VCC–5V GND–GND STATE–PA4
有源蜂鸣器:IO–PA5
无源蜂鸣器:IO–PA6
SIM868模块:VCC–5~18V RX–PA2 TX–PA3 GND–GND
演示图片:
1、实物
在这里插入图片描述
2、串口输出信息
由于在室内,所以定位不准。
在这里插入图片描述
3、手机端会接到电话和短信
在这里插入图片描述
4、手机APP
使用的是HC蓝牙助手APP下载链接
通过发送字符0声光报警,发送字符1关闭声光,发送字符2开灯。
在这里插入图片描述

代码实现:
main.c文件

/*
蓝牙模块4.0测试代码
蓝牙模块与串口3相接
即:TX---PB11  RX---PB10 VCC--5V GND--GND  STATE--PA4
有源蜂鸣器接线:IO--PA5
无源蜂鸣器接线:IO--PA6
SIM868模块接线:
VCC--5~18V,5V时,电流要保证1.5A以上
RX--PA2
TX--PA3
GND--GND
VDD--3.3V/5V.
VDD是用来做电平匹配的,当外部系统为 5V 时,VDD接5V。当外部系统是3.3V时,VDD接3.3V

蓝牙断开连接时,STATE引脚输出低电平,即蓝牙模块上的红灯处于闪烁状态
蓝牙连接时,STATE引脚输出高电平,红灯处于常亮状态
通过PA4的外部中断即可判断蓝牙是否断开

要修改的地方
main.c文件中:callPhone,拨打的号码改为你自己的号码
sim868.c文件中:短信接收号码和短信中心号码
*/
#include <stm32f10x.h>
#include <stdbool.h>
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "exti.h"
#include "beep.h"
#include "buzzer.h"
#include "timer.h"
#include "sim868.h"

int g_isBreak = true; //是断开状态
int g_handle = 0;  //断开后如何处理,1:声光报警,2:打电话,3:发定位信息
char PUB_BUF[100] = {
    
    0};    //存储定位信息
char time[20],longitude[20],latitude[20];//存储:定位时间、经纬度
char *callPhone = "ATD10086;\r\n";  //拨打电话,修改这里可以修改拨打的电话号

int main(void)
{
    
    
	//设置NVIC优先级分组
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	SysTick_Init(72);  //初始化延时函数
	//初始化硬件
	led0_init();  //PC13
	BEEP_Init(); //有源蜂鸣器初始化PA5
	BUZZER_Init();//无源蜂鸣器初始化PA6
	BUZZER_BEEP1();//无源蜂鸣器响一声
	
	EXTIX_PA4_Init();  //外部中断初始化
	USART1_Init(9600);	//设置波特率为9600--调试用的
	USART2_Init(9600);	//设置波特率为9600--SIM868使用
	USART3_Init(9600);	//设置波特率为9600--蓝牙使用
	Timer2_Init_Config();  //定时1S,用于sim868定时发送AT指令
	printf("蓝牙模块开始配置\r\n");
	ble_config_set();  //蓝牙模块的配置
	printf("蓝牙模块配置完毕\r\n");
	printf("SIM868模块开始配置\r\n");
	Wait_CREG();    //查询等待模块注册成功
	Set_Text_Mode();//设置短信为TEXT模式
	GPS_Init();      //初始化GPS功能
	GET_GPS(PUB_BUF,time, longitude,latitude); 	//获取定位信息,放入PUB_BUF数组中
	//Send_GPS_Msg(PUB_BUF);  //发送定位消息
	printf("SIM868模块配置完毕\r\n");

	while(1)
	{
    
    
		if(g_isBreak==false) //连接状态
		{
    
    
			printf("蓝牙已连接\r\n");
			g_handle = 1;  //下次断开时可以声光报警
			//LED0 = 1;
		}
		
		else                 //断开状态
		{
    
    
			printf("蓝牙未连接\r\n"); 
			if(g_handle == 3)
			{
    
    
				g_handle = 4;
				printf("正在发送定位信息...\r\n");
				
				GET_GPS(PUB_BUF,time, longitude,latitude); //获取定位信息,放入PUB_BUF数组中
				printf("PUB_BUF = %s\r\n",PUB_BUF); //定位消息
				Send_GPS_Msg(PUB_BUF);  //发送定位消息
				//Send_GPS_Msg("Something has been lost");  //发送自定义消息,不能中文
			}	
			else if(g_handle==2)
			{
    
    
				g_handle = 3;
				printf("正在拨打电话....\r\n");
				UART2_SendString(callPhone);     //拨打指定电话
			}
			else if(g_handle==1)  //蓝牙未连接时g_handle == 1;
			{
    
    
				g_handle = 2;    //当连上蓝牙后再断开才会再次报警
				printf("正在声光报警....\r\n");
				MIDI_PLAY(); //播放MIDI音乐并且闪烁LED灯
			}
		}
		 delay_ms(1000);
	}
}

猜你喜欢

转载自blog.csdn.net/NICHUN12345/article/details/123780790