首页 > 其他分享 >基于stm32的WIFI语音气象站

基于stm32的WIFI语音气象站

时间:2024-06-15 13:31:47浏览次数:78  
标签:WIFI 42 气象站 stm32 LCD PlayMP3 240 Data 320

需求与功能分析

      天气是我们生活环境中的影响因素之一, 观察和了解天气的情况最终是为了支持生活、 经营等决策, 因此, 随着城市的发展, 用户也希望了解影响自身生活环境的其他因素,空气质量的指标应运而生。 另一方面, 身处信息爆炸的时代, 用户越来越希望能直接获得有价值的判断, 对于天气服务的需求也根据日常出行、 户外活动、 旅游、 出差等场景上到获取相关生活建议。 同时, 对于自身所处环境中天气的关心也逐渐延伸到渴望了解天气相关内容资讯、了解其他人所在地的天气状况, 也为天气服务应用提供了创新点。随着国民对健康意识的提升、 对天气和空气质量的愈发重视, 天气服务应用类可以更多地融合进智能硬件产品服务中, 尤其是当前人工智能产品愈发成熟, 天气服务应用可搭载的硬件载体也更为丰富, 从智能手机、 平板到智能手表、 机器人、 智能音箱等等产品。另一方面, 天气服务应用的用户使用场景也日益丰富, 从家居生活到商务工作到通勤休闲等。 因此, 基于用户需求, 天气服务厂商可以继续整合多种服务模式, 例如内容服务、 社交服务等, 同时拓展硬件产业链, 通过整合资源和推出硬件产品, 天气服务厂商将进一步完善生态布局。

系统整体功能

       WIFI 语音气象站由 ARM 内核 MCU(Cortex-M 系列)、 TFTLCD 屏、 WIFI无线通信及语音播放模块等主要几部分构成。 该平台 MCU 控制板, 既可以单独拿下来做开发板使用, 也可以安装到项目中做控制板使用, 提高其使用率, 同时该套件支持二次开发, 用户可以自己编写相关代码, 驱动 WIFI 模组, 连接气象服务器, 获取当地天气, 同时还可以通过温湿度传感器采集到当前室内的温湿度值, 并在 LCD 屏上进行显示, 通过还可以进行语音播报。

系统硬件功能

       系统硬件部分需要完成对LCD屏,WiFi无线通信,语音播放模块的控制,并能够通过相关的软硬件通信技术实现对web端数据的接收,并实现湿度,温度和天气的实时显示和语音播报。

系统软件功能

       系统软件部分需要完成系统管理、光敏传感器和湿度传感器的功能设计,LCD屏界面显示、WiFi通信服务、语音播报等诸多功能。

系统架构设计

       系统软件部分分为LCD屏显示程序设计,光敏传感器和湿度传感器程序设计,按键及蜂鸣器程序设计,WiFi实时通信程序设计等。

系统技术解决方案 

       通过keil进行软件功能程序设计,以控制系统功能的实现。以STM32为主芯片,将主板连接LCD屏幕,DHT11温度湿度传感器,ESP8266串口,WiFi模块,MY1680语音播报模块,以达到功能的实现。通过将各个模块与STM32F103ZET6相接,以达到主芯片控制各个模块独立芯片的目的。对stm32进行程序编写,以实现stm32芯片控制LCD屏幕的显示。

      DHT11温度湿度传感器将数据传输到主芯片进而在LCD屏幕上显示。ESP8266与主芯片连接以实现串口通信,WIFI模块与心知天气相连接,将数据传输到芯片进而在LCD屏幕上显示,再通过MY1680语音播报模块实现语音播报,以达到WIFI智能语音气象站基本功能的实现。

软件解决方案

Keil 

      Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。

FLYMCU

     FlyMcu 模拟仿真软件是一款用于 STM32 芯片 ISP 串口烧录程序的专用工具,免费,且较为非常容易下手,好用便捷。

ATKXCOM

     XCOM串口通信是是一种可以将接收来自CPU并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU。

取模

      图片取模软件Image2lcd,Image2Lcd可以将一个图片转换为lcd可以使用的格式文件,包括bin、c文件、bmp和wbmp格式,对于需要显示图片的嵌入式系统非常有用。

      字模取模软件PCtolLCD,PCtoLCD2002是专业的取字模软件,采用C语言和汇编语言两种格式,支持逐行、逐列、行列、列行四种取模方式,还可以选择字体、大小、文字的长宽,自动生成你想要字符的编码。

系统总结

       支持温湿度实时显示,系统背景显示,开机语音设置,显示近三天天气,音乐播放

        软件开发方面:Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。FlyMcu 模拟仿真软件是一款用于 STM32 芯片 ISP 串口烧录程序的专用工具,免费,且较为非常容易下手,好用便捷。XCOM串口通信是是一种可以将接收来自CPU并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU。图片取模软件Image2lcd,Image2Lcd可以将一个图片转换为lcd可以使用的格式文件,包括bin、c文件、bmp和wbmp格式,对于需要显示图片的嵌入式系统非常有用。字模取模软件PCtolLCD,PCtoLCD2002是专业的取字模软件,采用C语言和汇编语言两种格式,支持逐行、逐列、行列、列行四种取模方式,还可以选择字体、大小、文字的长宽,自动生成你想要字符的编码。

       硬件开发方面:STM32系列32位微控制器基于Arm® Cortex®-M处理器,旨在为MCU用户提供新的开发自由度。它包括一系列产品,集高性能、实时功能、数字信号处理、低功耗/低电压操作、连接性等特性于一身,同时还保持了集成度高和易于开发的特点。主控芯片型号:STM32F103ZET。显示设备Oled:本身自发光,不需要背光灯。屏幕分辨率:240*320,屏幕上像素点的个数。屏幕尺寸:2.8寸。驱动芯片型号:ILI9314。颜色格式是:RGB65,电子的三原色:红绿蓝。传感器:温湿度传感器DHT11,光照、烟雾传感器的作用:就是一种检测装置,能够去测量我们需要的信息,DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度5~95%RH, 温度-20~+60℃。ESP8266是一款串口WiFi模块,内部集成MCU能实现单片机之间串口同信;这款模块简单易学,体积小,便于嵌入式开发。ESP8266是ai-thinker公司推出的一款无线WIFI模块,专为移动设备,可穿戴电子产品和物联应用设计,可以通过AT指令配置,和单片机上的串口进行通信,利用WIFI进行数据传输。MY1680U-12P 是深圳市迈优科技有限公司自主研发的一款小巧的集成MP3模块。采用MY1680U-16S MP3主控芯片,支持MP3、WAV格式双解码,模拟U盘下载。模块内置FLASH存储芯片,1-16M容量可选;也可外接U盘或USB数据线连接电脑更换FLASH的音频文件。该模块内置3W功放,可以直接驱动3W的喇叭,使用更方便。

#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "bsp_lcd.h"
#include "usart1.h"
#include "stdio.h"
#include "1.h"
#include "dht11.h"
#include "adc.h"
#include "esp8266.h"
#include "cJSON.h"
#include "my1680.h"

//厂家测试接口
void JTAG_SW_Config(void)
{
	//关闭JTAG接口,开启SW接口--PA15、PB3、PB4可用
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
}


int main(void)
{
	JTAG_SW_Config();
	Systick_Init(72000);
	LED_Config();//初始化LED
	BEEP_Config();
	key_Config();
	TFTLCD_Init();
	Usart_Config(); 
	ADC_Config();
	WIFI_Iinit();
	MY1680_Init();
	PlayMP3_42(03,003);
	PlayMP3_42(01,003);
  Connect_Server(MY_IP,MY_PORT);
  LCD_ShowPicture(0,0,240,320,(u8*)gImage_1);
	GPIO_ResetBits(GPIOE,GPIO_Pin_2);
	beep_OFF;//设置蜂鸣器的起始状态,不响
  uint8_t KEY_Value=0;
	int flag=0;
	while(1)
  {  	
		 
		DHT11_TyDef DHT11_Data;
		if(Dht11_ReadData(&DHT11_Data))
		{
			LCD_ShowStringAndHz(0,0,240,320,16,(u8*)"当前室内温度:",0);
	    LCD_ShowStringAndHz(0,20,240,320,16,(u8*)"当前室内湿度:",0);
			LCD_ShowStringAndHz(0,300,240,320,16,(u8*)"名字",0);
			LCD_ShowxNum(120,0,DHT11_Data.Tem,2,16,0);
			LCD_ShowxNum(120,20,DHT11_Data.Hum,2,16,0);
			Delay_ms(100);
		}
		  Get_LightValue();
			Delay_ms(100);
		  Get_SmokeValue();
			Delay_ms(100);
		 
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)
	{
   if(USART_ReceiveData(USART1)==1)
		 beep_ON;
   if(USART_ReceiveData(USART1)==0)
		 beep_OFF;
 }	 
    KEY_Value=KEY_GetValue();
		if(KEY_Value==1)
		{
			LCD_ShowPicture(0,0,240,320,(u8*)gImage_1);
			LCD_ShowStringAndHz(0,80,240,320,16,(u8*)"天气预报",0);
			LCD_ShowStringAndHz(0,100,240,320,16,(u8*)"日期:",0);
			LCD_ShowStringAndHz(0,120,240,320,16,(u8*)"地点:",0);
			LCD_ShowStringAndHz(0,140,240,320,16,(u8*)"白天天气:",0);
			LCD_ShowString(0,160,240,320,16,(u8*)"codeday:");
			LCD_ShowStringAndHz(0,180,240,320,16,(u8*)"晚上天气:",0);
			LCD_ShowString(0,200,240,320,16,(u8*)"codenight:");
			LCD_ShowStringAndHz(0,220,240,320,16,(u8*)"最高温度:",0);
			LCD_ShowStringAndHz(0,240,240,320,16,(u8*)"最低温度:",0);
			LCD_ShowStringAndHz(0,260,240,320,16,(u8*)"湿度:",0);
      LCD_ShowString(100,100,240,320,16,(u8*)Weather_Data[0].data);
			LCD_ShowString(100,120,240,320,16,(u8*)Weather_Data[0].name);
			LCD_ShowString(100,140,240,320,16,(u8*)Weather_Data[0].weatherday);
			LCD_ShowString(100,160,240,320,16,(u8*)Weather_Data[0].codeday);
			LCD_ShowString(100,180,240,320,16,(u8*)Weather_Data[0].weathernight);
			LCD_ShowString(100,200,240,320,16,(u8*)Weather_Data[0].codenight);
			LCD_ShowString(100,220,240,320,16,(u8*)Weather_Data[0].temhigh);
			LCD_ShowString(100,240,240,320,16,(u8*)Weather_Data[0].temlow);
			LCD_ShowString(100,260,240,320,16,(u8*)Weather_Data[0].humidity);
			PlayMP3_42(04,004);
			PlayMP3_42(06,000);
      PlayMP3_42(02,003);
      PlayMP3_42(02,atoi(Weather_Data[0].codeday));
      PlayMP3_42(02,002);
      PlayMP3_42(02,atoi(Weather_Data[0].codenight));
      int i=0;
      PlayMP3_42(04,002);
      i=atoi(Weather_Data[0].temhigh);
	    PlayMP3_T(i);
      PlayMP3_42(01,001);
	    PlayMP3_42(04,003);
      i=atoi(Weather_Data[0].temlow);
	    PlayMP3_T(i);
      PlayMP3_42(01,001);
			PlayMP3_42(04,007);
		}
		if(KEY_Value==2)
		{
			PlayMP3_42(04,005);
			PlayMP3_42(06,000);
      PlayMP3_42(02,003);
      PlayMP3_42(02,atoi(Weather_Data[1].codeday));
      PlayMP3_42(02,002);
      PlayMP3_42(02,atoi(Weather_Data[1].codenight));
      int i=0;
      PlayMP3_42(04,002);
      i=atoi(Weather_Data[1].temhigh);
	    PlayMP3_T(i);
      PlayMP3_42(01,001);
	    PlayMP3_42(04,003);
      i=atoi(Weather_Data[1].temlow);
	    PlayMP3_T(i);
      PlayMP3_42(01,001);
			PlayMP3_42(04,007);
		}
    if(KEY_Value==3)
		{
			PlayMP3_42(04,006);
			PlayMP3_42(06,000);
      PlayMP3_42(02,003);
      PlayMP3_42(02,atoi(Weather_Data[2].codeday));
      PlayMP3_42(02,002);
      PlayMP3_42(02,atoi(Weather_Data[2].codenight));
      int i=0;
      PlayMP3_42(04,002);
      i=atoi(Weather_Data[2].temhigh);
	    PlayMP3_T(i);
      PlayMP3_42(01,001);
	    PlayMP3_42(04,003);
      i=atoi(Weather_Data[2].temlow);
	    PlayMP3_T(i);
      PlayMP3_42(01,001);
			PlayMP3_42(04,007);
		}
		if(KEY_Value==4)
		{
			LCD_ShowPicture(0,0,240,320,(u8*)gImage_1);
			PlayMP3_42(03,002);
		}

标签:WIFI,42,气象站,stm32,LCD,PlayMP3,240,Data,320
From: https://blog.csdn.net/MGTKK/article/details/139628764

相关文章

  • 基于STM32射频RFID停车智能收费控制系统设计
    **单片机设计介绍,基于STM32射频RFID停车智能收费控制系统设计文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于STM32射频RFID停车智能收费控制系统设计概要如下:一、系统概述本系统采用STM32微控制器为核心,结合......
  • 基于STM32太阳能锂电池智能充电自动计时器设计
    **单片机设计介绍,基于STM32太阳能锂电池智能充电自动计时器设计文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于STM32太阳能锂电池智能充电自动计时器设计概要如下:一、设计背景与目标随着可再生能源的广泛应用......
  • 【单片机毕业设计选题24007】-基于STM32和阿里云的家庭健康数据监测系统
    系统功能:本课题设计是基于STM32单片机作为控制主体,通过HX711称重模块,HC-SR04超声波测距模块,红外测温,心率传感器等模块通过I2C或SPI接口与STM32进行通信,并读取传感器输出的身高,体重,心率,体温,血氧,心率,体脂率数据等数据,体脂率采用公式计算,可自行设置阈值超出阈值蜂鸣器发出警告。......
  • STM32学习记录(二)————基本GPIO控制
    文章目录前言1.GPIO基础知识2.IO八种工作模式3固件库实现LED点灯前言一个学习STM32的小白有问题评论区或私信指出~1.GPIO基础知识GPIO(General-Purposeinput/output,通用输入/输出接口)用于感知外部信号(输入模式)和控制外部设备(输出模式)简单模块:LED,按键,蜂......
  • 034【GD32F470】MQ-3酒精检测传感器STM32移植教程
    2.31MQ-3酒精检测传感器MQ-3气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(Sn0)。当传感器所处环境中存在酒精蒸气时,传感器的电导率随空气中酒精蒸气浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。2.31.1......
  • MDK5.14仿真STM32F407时无法查看外设寄存器的问题
    这几天用keilmdk5.14新建工程进行仿真时,进入Debug环境发现SystemViewer菜单显示空白,Peripherals菜单没有外设寄存器。如图1和图2所示。网上查了一下资料发现大多都是解释的STM32F103系列在MDK内的修改方式,但是我用的是STM32F407ZET6,就依葫芦画瓢,照着出一个修改的说明。  ......
  • 关于RTthread使用PWM的总结经验(基于STM32F4系列)
    目录硬件资源介绍:前期准备:代码编写:总结:硬件资源介绍:笔者使用的是STM32F407VET6是魔女开发板,因为RT不支持CMSIS-DAP烧录,所以我又准备了一个ST-link,一个红色的LED。我所使用的是TIM2-CH3通道,在我这个板子上对应的是PA2口。原理图如下所示。可以看到PA2上对应的有TIM2_......
  • 使用adb通过wifi连接手机
    1,手机打开开发者模式,打开无线调试2,命令行使用adb命令配对:adbpair192.168.0.102:40731输入验证码:4228593,连接设备:adbconnect192.168.0.102:369954,查看连接状态:adbdevices......
  • 基于STM32单片机的无线智能窗户报警系统的设计与实现
    目录前言 一、设计任务 二、系统硬件设计1.元器件选用2.Android功能界面展示三、系统程序流程设计前言为解决传统智能家居在使用过程中缺少的人机交互功能、数据不可见、缺少控制、无法智能化处理事件等问题。因此,本文设计了以STM32单片机为核心的无线智能窗户报警......
  • 基于STM32环境空气质量检测系统
    基于STM32单片机环境空气质量检测系统功能说明:TFTLCD显示+按键+LVGL(UI用户图形交互界面)环境温湿度检测环境空气质量检测(甲醛、二氧化碳等)报警功能(蜂鸣器报警、图形界面弹窗报警)时间显示机智云平台连接可充电(type-C)低功耗硬件原理图设计:最小系统设计:由于要使用到L......