【毕业设计】单片机温湿度环境检测仪 - stm32 物联网 嵌入式

187 篇文章 119 订阅
151 篇文章 42 订阅


0 前言

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

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

🚩 基于PID控制的智能平衡车设计与实现

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

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

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md


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 最后

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
声明:该设计资料来源于立创社区,仅供网友学习参考,不可用于商业用途。 基于STM32 的 USB温湿度计概述: 该USB温湿度计基于STM32F070F6P6 设计完成。STM32F070F6P6 是ST公司新出品不久的一款 ARM Cortex-M0芯片,内置 32 Kbytes Flash,6K SRAM,12Bit ADC,运行主频48MHZ,支持USB 2.0 SLAVE通信接口,更重要的是它是TSSOP20封装的! 曾经在立创商城上,有个SHT30温湿度计的方案验证板,但该设计有个麻烦的地方,那就是需要另外接串口装置才能观察到MCU测量得到的SHT30温湿度数据。为此本人,决定用带这款支持USB通讯功能的STM32F0x0超值系列ARM芯片--- STM32F070F6P6,结合温湿度传感器AM2320,制作一款USB温湿度计。 它使用很简单:直接插入PC机的USB端口,然后打开串口助手之类的软件,即可观察到现场的温湿度数据。通过这个制作,大家可以学习一下AM2320的I2C和单总线的驱动方法,还有如何使用ST的Cube MX软件来实现一个USB转串口(USB TO CDC)的通信设备。 系统构架图: 系统解说:本系统有二大部分组成,分别是:支持USB通信的ARM Cortex-M0主控芯片 STM32F070F6P6和AM2320数字式温湿度传感器。 视频演示: 作品亮点 ① 无需额外仪器装置,直插到PC后运行串口助手软件即可观察到实时的温湿度数据。 ② 采用引脚紧凑、低成本、同时支持USB通信的Cortex-M0 AMR STM32F070作为主控。 ③ 使用出厂时己校准数字信号输出的AM2320作为传感器单元。插件,极易好焊接! ④ 温度分辨率是: ±0.1度,精度±0.5度;湿度分辨率: ±0.1%RH,精度:±3%RH ⑤ 提供2种演示范例,支持单总线和标准I2C 两种通信方式来驱动AM2320传感器。 ⑥ 板上STM32F070的全部I/O都被引出,可当作一个低廉的最小系统板、开发板使用。 ⑦ 本方案验证板采用USB BUS总线供电,无需额外再提供电源。 原理图分为多个部分,逐个详见分析讲解,详见“相关文件”进行下载 USB温湿度计实物展示: 软件部分的描述 限于篇幅,这里不太方便展示全部代码,比如USB通信实现和单总线、I2C总线驱动温湿度传感器AM2320等等。需要指出的是,USB通信部分,本人直接采用了ST官方出品的STM32CubeMX软件,该软件是一个基于GUI界面配置软件,通过鼠标操作芯片的配置和功能,最终该软件即可自动产生初始化代码和一个应用程序框架范例。本电子制作就是使用这个默认生成的USB转串口(USB CDC协议)应用程序,然后添加相关的温湿度采集驱动完成的。 调试过程和应用实例 按前面提供的BOM清单,正常焊接完毕后,接着把HEX烧录到ARM STM32F070F6P6芯片,即可完成准备工作。随后,将USB电缆把该PCBA电路模块和电脑链接起来(如果Windows 系统提示需要安装驱动程序,那按默认位置按照即可)。最后,打开串口助手之类的软件,即可观察到现场的温度和湿度数据。 总结 STM32F070F6P6 是一个内置USB功能、性价比很高的芯片,结合AM2320实现了比之前SHT30方案验证板更好的应用体验。该PCB板设计时,把STM32F070F6P6的全部I/O都引出了,因此,该板可当作一个低廉的最小系统板、开发板使用。如果想学习ARM Cortex-M0 芯片的应用,特别是USB总线通信的实现过程,那本文介绍的这个电子制作作品和PCB空板,是一个不错的入门选择! 基于STM32F070和AM2320的USB温湿度计实验板购买链接:https://www.szlcsc.com/product/details_97773.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值