单片机毕设选题 stm32温湿度环境检测仪 - 物联网 嵌入式

269 篇文章 42 订阅
269 篇文章 9 订阅


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于stm32的温湿度环境检测仪设计与实现

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

1 简介

基于涂鸦智能与stm32的物联网温湿度计设计

2 主要器件

  • STM32F103C8T6主控芯片
  • CH340N芯片
  • ME6212C33芯片
  • OLED屏
  • ME6212C33稳压芯片
  • SHT30温湿度传感器

3 实现效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4 设计原理

硬件部分

  • 控制芯片采用的是STM32F103C8T6。
  • 采用锂电池进行供电,并可通过typec接口进行充电。
  • 板载了CH340N芯片,可与电脑进行串口通信,方便调试。
  • 采用两片ME6212C33芯片进行稳压,其中一块单独给MCU供电,另一块给其他外设供电。这样有利于-电路稳定,也可通过MCU控制断开其他外设的电源,起到节电的目的。
  • 联网模组采用“WB3S-IPEX WiFi&BLE 双协议模组”,具有wifi和蓝牙功能。
  • 温湿度传感器采用的是常用的SHT30,同时在它周围进行了开槽处理,尽量降低板子温度对SHT30的干扰。不过实际使用中测量到的温度还是会比真实温度高一点。
  • 通过OLED屏进行显示。
  • 板载两个按键和三个LED。

主要原理图
在这里插入图片描述
软件部分
涂鸦 MCU SDK 的移植
在这里插入图片描述

5 部分核心代码

wifi部分

void wifi_uart_service(void)
{
    static unsigned short rx_in = 0;
    unsigned short offset = 0;
    unsigned short rx_value_len = 0;
    
    while((rx_in < sizeof(wifi_data_process_buf)) && with_data_rxbuff() > 0) {
        wifi_data_process_buf[rx_in ++] = take_byte_rxbuff();
    }
    
    if(rx_in < PROTOCOL_HEAD)
        return;
    
    while((rx_in - offset) >= PROTOCOL_HEAD) {
        if(wifi_data_process_buf[offset + HEAD_FIRST] != FRAME_FIRST) {
            offset ++;
            continue;
        }
        
        if(wifi_data_process_buf[offset + HEAD_SECOND] != FRAME_SECOND) {
            offset ++;
            continue;
        }  
        
        if(wifi_data_process_buf[offset + PROTOCOL_VERSION] != MCU_RX_VER) {
            offset += 2;
            continue;
        }      
        
        rx_value_len = wifi_data_process_buf[offset + LENGTH_HIGH] * 0x100;
        rx_value_len += (wifi_data_process_buf[offset + LENGTH_LOW] + PROTOCOL_HEAD);
        if(rx_value_len > sizeof(wifi_data_process_buf) + PROTOCOL_HEAD) {
            offset += 3;
            continue;
        }
        
        if((rx_in - offset) < rx_value_len) {
            break;
        }
        
        //数据接收完成
        if(get_check_sum((unsigned char *)wifi_data_process_buf + offset,rx_value_len - 1) != wifi_data_process_buf[offset + rx_value_len - 1]) {
            //校验出错
            //printf("crc error (crc:0x%X  but data:0x%X)\r\n",get_check_sum((unsigned char *)wifi_data_process_buf + offset,rx_value_len - 1),wifi_data_process_buf[offset + rx_value_len - 1]);
            offset += 3;
            continue;
        }
        
        data_handle(offset);
        offset += rx_value_len;
    }//end while

    rx_in -= offset;
    if(rx_in > 0) {
        my_memcpy((char *)wifi_data_process_buf, (const char *)wifi_data_process_buf + offset, rx_in);
    }
}

/**
 * @brief  协议串口初始化函数
 * @param  Null
 * @return Null
 * @note   在MCU初始化代码中调用该函数
 */
void wifi_protocol_init(void)
{
    rx_buf_in = (unsigned char *)wifi_uart_rx_buf;
    rx_buf_out = (unsigned char *)wifi_uart_rx_buf;
    
    stop_update_flag = DISABLE;
    
#ifndef WIFI_CONTROL_SELF_MODE
    wifi_work_state = WIFI_SATE_UNKNOW;
#endif

主函数

int main(void)
{
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	PowerInit();			//外设供电初始化
	EXTIX_Init();			//外部中断初始化
	if(Check_WKUP()==0)Sys_Enter_Standby();    		//不是开机,进入待机模式		
	LED_Init();		  		//LED初始化
	LED_On();				//LED全亮
	wifi_protocol_init();	//协议串口初始化
	uart1_init(115200);		//串口初始化为115200
	uart2_init(115200);		//串口初始化为115200	
	RTC_Init();				//RTC初始化	
	Adc_Init();				//ADC初始化
	SHT30_IIC_Init();		//温湿度传感器“SHT30”初始化	
	PWM_Init(5000-1, 288-1);//50HZ,即PWM周期为20ms		
	OLED_Init();			//OLED初始化	
	TIM2_Int_Init(1000-1, 7200-1);		//中断时间为0.1s,在中断中更新OLED显示,读取温湿度传感器等数据
	StartUp();				//显示开机界面			
	delay_ms(1000);
	LED_Off();
	while(1){						
		switch (GuiNum){
			case FeaSetN:
				OledGui_FeaSet();		//设置界面
				break;
			case GuiTempHum:
				OledGui_Temp_Hum();		//温湿度界面
				break;
			case GuiTime:
				OledGui_Time();			//时钟界面
				break;
			case GuiWeather:
				OledGui_Weather();		//天气界面
				break;
		}		
	}
}


6 最后

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值