STM32学习记录——蓝牙发送数据(手机显示传感器数据)

这篇具有很好参考价值的文章主要介绍了STM32学习记录——蓝牙发送数据(手机显示传感器数据)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

  • 前言
  • 一、学习目的
  • 二、代码记录

前言

        将数据通过蓝牙发送到手机上,是学生学习单片机的必备技能之一,它可以将手机作为简单的上位机,从而使数据直观地展现出来。

       蓝牙的初始化、蓝牙接受数据以及蓝牙简单应用的介绍和代码记录,可以看一看下面的文章,这次就主要记录一下蓝牙发送数据的学习。

HC-05蓝牙模块的使用_hc05蓝牙调试助手_KAIs32的博客-CSDN博客

STM32学习记录——使用蓝牙点亮LED_stm32蓝牙点灯_KAIs32的博客-CSDN博客

Arduino学习记录——蓝牙控制舵机(含LED指示灯)_arduino蓝牙控制舵机_KAIs32的博客-CSDN博客


一、学习目的

stm32 蓝牙,学习,c语言,单片机,嵌入式硬件,stm32

       我主要是想通过蓝牙发送数据,将单片机上烟雾传感器、光敏传感器、火焰传感器等模块检测到的数据实时显示在手机上,达到实时监控的目的。

       至于传感器的初始化,这里就不重复记录了,可以看看下面的文章进行复习。

STM32学习记录——光敏传感器的使用_stm32光敏传感器_KAIs32的博客-CSDN博客

STM32学习记录——烟雾传感器的使用_mq2烟雾传感器stm32代码_KAIs32的博客-CSDN博客

二、代码记录

首先是各个传感器的初始化,我统一写在了同一个.c文件里。

adc.h

#ifndef __ADC_H
#define __ADC_H
#include "stm32f10x.h"

void ADC_Pin_Init(void);    //传感器引脚、ADC初始化
float ADC_Trans(void);      //烟雾传感器获取数据

#endif

adc.c

#include "adc.h"
#include "sys.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_adc.h"
 
void ADC_Pin_Init(void)         //传感器引脚、ADC初始化
{
	GPIO_InitTypeDef GPIO_InitStruct;
	ADC_InitTypeDef ADC_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;     //烟雾传感器
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_1;    //光敏传感器
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIOA, &GPIO_InitStruct); 
	
	GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_0;    //火焰传感器
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;     
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIOB, &GPIO_InitStruct); 
	
	ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStruct.ADC_NbrOfChannel = 1;
	ADC_InitStruct.ADC_ScanConvMode = DISABLE;
	ADC_Init(ADC1,&ADC_InitStruct);
	

	ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);	
	
	ADC_RegularChannelConfig(ADC1,ADC_Channel_8,1,ADC_SampleTime_239Cycles5);	
	
	ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
	
	ADC_Cmd(ADC1,ENABLE);
}

float ADC_Trans (void)          //烟雾传感器获取数据
{
	float adc_value = 0;
	u8 i = 0;
	ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);
	for(i = 0; i < 50; i++)
	{ 
		ADC_SoftwareStartConvCmd(ADC1,ENABLE);	
		adc_value = adc_value + ADC_GetConversionValue(ADC1);
	}
	
	return adc_value / 50;
}

接下来就是蓝牙模块初始化的代码

hc05.h

#ifndef __HC05_H
#define __HC05_H
#include "sys.h"

void My_USART2_Init(void);            //串口初始化函数
//void USART2_IRQHandler(void);       //接受数据函数(这里不用,可以注释掉)
void Bluetooth_SendData(char* data);  //发送数据函数

#endif

hc05.c

代码中有注释,可以看一看

#include "hc05.h"
#include "usart.h"

//u8 res;  			
void My_USART2_Init(void)  
{  
    GPIO_InitTypeDef GPIO_InitStrue;  
    USART_InitTypeDef USART_InitStrue;  
    NVIC_InitTypeDef NVIC_InitStrue;  
      
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); 
      
//初始化RXD、TXD两个引脚
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;  
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_2;
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
    GPIO_Init(GPIOA,&GPIO_InitStrue);
      
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_3;
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
    GPIO_Init(GPIOA,&GPIO_InitStrue); 

//设置串口参数
    USART_InitStrue.USART_BaudRate=9600;  
    USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  
    USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;  
    USART_InitStrue.USART_Parity=USART_Parity_No;  
    USART_InitStrue.USART_StopBits=USART_StopBits_1;  
    USART_InitStrue.USART_WordLength=USART_WordLength_8b;  
    USART_Init(USART2,&USART_InitStrue);
      
    USART_Cmd(USART2,ENABLE);
      
    USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);

//优先级设置
    NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;  
    NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;  
    NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=0;  
    NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  
    NVIC_Init(&NVIC_InitStrue);  
      
}  

//void USART2_IRQHandler(void)  
//{  

//     if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)  
// {  
//     res= USART_ReceiveData(USART2); 	 
     USART_SendData(USART2,res);  
//  }  
//}  

void Bluetooth_SendData(char* data) 
{
    while (*data) 
		{
        USART_SendData(USART2, *data++);
        while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
    }
}

最后是主函数

main.c

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "adc.h"
#include "hc05.h"

#define BUFFER_SIZE 100

char buffer[BUFFER_SIZE];

int main(void)
{
	float ad = 0;
	My_USART2_Init();
	delay_init();
	uart_init(115200);
	ADC_Pin_Init();
	while(1)
	{
		       if( GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0 && 0 == GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))
		{
		   ad = ADC_Trans();
           snprintf(buffer, BUFFER_SIZE, "ad0 Data: %f\r\nfire\r\nbright\r\n", ad);		
		   Bluetooth_SendData(buffer);
		   while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
		   delay_ms(1000);
        }
			else if( GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==1 && 0 == GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))
		{
		   ad = ADC_Trans();
           snprintf(buffer, BUFFER_SIZE, "ad0 Data: %f\r\nfire\r\ndarkness\r\n", ad);		
		   Bluetooth_SendData(buffer);
		   while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
           delay_ms(1000);					
        }
		   else if( GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==1 && 1 == GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))
	    {
		   ad = ADC_Trans();
           snprintf(buffer, BUFFER_SIZE, "ad0 Data: %f\r\nfireless\r\ndarkness\r\n", ad);		
		   Bluetooth_SendData(buffer);
		   while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
		   delay_ms(1000);			
        }
		   else if( GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0 && 1 == GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))
		{
		   ad = ADC_Trans();
           snprintf(buffer, BUFFER_SIZE, "ad0 Data: %f\r\nfireless\r\nbright\r\n", ad);		
		   Bluetooth_SendData(buffer);
		   while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
		   delay_ms(1000);			
        }			
        delay_ms(100);  
	}
}

        主函数比较复杂,实现的功能主要是实时显示烟雾浓度、是否有光和是否有火,可以在这个基础上进行修改和删减。由于是写记录时稍加修改后的代码,可能有一定的小问题,如果遇到问题或者需要源码可以评论交流一下。文章来源地址https://www.toymoban.com/news/detail-722252.html

到了这里,关于STM32学习记录——蓝牙发送数据(手机显示传感器数据)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32学习记录——声音传感器的使用

    文章目录 前言 一、学习目的 二、模块介绍 三、代码记录 今天记录的是声音传感器模块的学习        我的学习目的是学会使用声音传感器模块,并通过检测声音的有无控制LED的亮灭。我使用的是STM32F103C8T6核心板上的自带LED,引脚是PC13。        我用的是上图所示的声音传

    2024年02月16日
    浏览(30)
  • STM32学习记录——烟雾传感器的使用

    文章目录 前言 一、学习目的 二、模块介绍 三、代码记录 总结        这次记录一下烟雾传感器的学习,由于烟雾传感器的资料比较杂,算法比较多,对我来说也比较难,所以我的代码中算法部分是不太具有参考价值,但是也可以做到随烟雾浓度的变化数值呈线性相关,以

    2024年02月09日
    浏览(29)
  • 蓝牙串口调试助手通过PC蓝牙发送数据给ESP32同时在串口上显示

    OK,好久没有更新Blog啦 今天把之前积累的代码放上,给需要学习的程序猿们使用 我还是不太喜欢写文字,倒是比较喜欢客套,哈哈 硬件图: ESP32和USB-micro-B数据线一根 蓝牙串口调试助手通过PC蓝牙发送数据给ESP32同时在串口上显示 具体代码如下:

    2024年02月09日
    浏览(37)
  • STM32外设芯片驱动学习记录 —— (一) BH1750光照传感器驱动开发

    一、芯片介绍 二、Datasheet解读 1.硬件说明 2.寄存器说明 3.通信过程 三、驱动代码编写 1.软件I2C驱动 2. BH1750芯片驱动函数 总结             BH1750是16位数字输出型,环境光强度传感器集成电路,使用I2C接口通信,工作电压:VCC(2.4~3.6V),I2C电平(1.65~VCC),用于各类消费类LCD屏

    2024年02月02日
    浏览(76)
  • 单片机设计:stm32远程水位检测灌溉系统(水泵+电机驱动+OLED显示屏+水位传感器+防水式ds18b20+光敏传感器+按键+WiFi+手机app)

    单片机设计:stm32远程水位检测灌溉系统(水泵+电机驱动+OLED显示屏+水位传感器+防水式ds18b20+光敏传感器+按键+WiFi+手机app) 一、主要功能:    1.水位传感器检测水的高度、光敏传感器检测周围光照强度、ds18b20检测水温 2.0LED、手机app显示当前数据以及阈值 3.手机app远程调节阈值,

    2024年02月05日
    浏览(38)
  • STM32CubeMX 读取DS18B20温度传感器数据串口打印显示

    本文要做的所有工作标题基本都包括了,读取温度传感器的温度数值,再通过串口打印到串口助手; 好多博主大神的教程我按步骤做了之后总是出现程序不报错并且检测不到传感器的情况,后来找到原因并且修改后调试正常。 我用的是普中科技的实验板,主控芯片为STM3210

    2024年02月05日
    浏览(71)
  • STM32学习记录——SIM900A实现中英文短信发送

    目录 调试 32控制 硬件连接 百度网盘源码  发短信失败大概率跟你的模块供电有关系,由于GSM模块发射信号功率较大,电脑的USB供电电流较小,板子供电不足问题需要外接充电宝供电。(充电宝比电脑USB电流大) 首先用串转USB模块调试。 TEST(UCS2)模式下发送中英文短息,短消

    2023年04月12日
    浏览(39)
  • STM32学习笔记———几种简单传感器的数据读取

    传感器正如计算机的眼睛。从广义上讲,传感器就是一种能感知外界信息,并将这些信息按照一定规律转换成可用的电信号或其他形式的输出信号的装置,达到对信息的存储,传输,控制的目的。本文着重分析如何通过单片机分析电信号时序图实现对传感器的控制与传感器采

    2023年04月23日
    浏览(32)
  • STM32WB55_NUCLEO开发(11)----发送数据到手机

    本篇文章将详细介绍如何在上节配置的基础上,实现通过点击STM32WB开发板上的按键发送数据到手机上。 最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。 首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板: 听不到声音的请点击跳转进行观看。

    2024年02月01日
    浏览(40)
  • STM32学习记录0010——TFTLCD液晶显示屏

    《STM32不完全手册》第18章 《ILI9341数据手册》 TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT-LCD与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使

    2023年04月09日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包