当前位置:首页 >> 内饰

实践丨手把手教你用STM32设计WiFi音位播报日程表

来源:内饰   2023年04月19日 12:15

这两项具体内容,以及加入一个可以撤下已录入具体内容的按住。自然语言框分别为三均,一均脱氧核糖核酸到自然语言具体内容(两到八个用字符号左右的弧度即可。)脱氧核糖核酸到开始星期的自然语言框,脱氧核糖核酸到终结星期的自然语言框。

2.3 基本功能论述

(1)STM32采行号外粒子迷你板。号外粒子的2.8寸tft触摸光

(2)pcf8563t当不作同步点火,并把月份和星期揭示在光幕上

(3)DHT11温湿度传感支架监测周围环境电子邮件,并把电子邮件揭示在液晶光幕上

(4)可用esp8266不作WiFi模块与手一号机app开展无线电通信;

(5)w25Q64 烧录通用,暂存通用,暂存这两项留意电子邮件

意味着思路: 将W25Q64内置FATFS副本该系统,易于电子邮件暂存脱氧核糖核酸到,算数这两项电子邮件,通用电子邮件。

(6)syn6288句法芯片裂解的句法电子邮件,通过麦克风解说员意味着留意基本功能

(7)合作开发手一号机APP脱氧核糖核酸到留意这两项,单片一号机接接获手一号机上收发的这两项具体内容。

单片一号机将接接获的具体内容驱动器在w25Q64内,同时可以在光幕上自行决定前面将具体内容揭示出来。具体内容之外具体这两项的书写具体内容以及这两项开始、终结的星期;这两项电子邮件采行副本表达方式驱动器,不够改、算数都针对副本开展操不作。

3. 软件调试功效

软件敞开便先以脱氧核糖核酸到装置侧的IP接收者和侧口,连通事与愿违便就可以开展基本功能操不作。

软件上有这两项表查看关键字(也就是合而为一关键字)、日志关键字、新增这两项留意关键字。

软件分别为Windows操作该系统完整版和Android手一号机完整版,下面预览的截图以Windows操作该系统完整版为例。

软件采行QT外观设计,Qt Creator是功能强大的 Qt IDE, Qt Creator 是 Qt 被 摩托罗拉 母日本公司后发售的一款一新轻量级录入合作开发周围环境(IDE)。此 IDE 能够功能强大调试,大力支持的该系统之外 Linux(32 位及 64 位)、Mac OS X 以及 Windows。

Qt Creator官网串流接收者:串流 Qt |软件该系统该系统|实时软件该系统该系统|断续支架

QT所有完整版串流接收者:Index of /archive/qt

QT周围环境搭建,入门合作开发报章杂志: SDn.net/xiaolong1126626497/category_11400392.html

(1)这两项表查看关键字(也就是合而为一关键字),查看这两项留意政治事件,双击新版本这两项按住,可以从装置侧利用最一新电子邮件过来。

(2)日志关键字用来查看软件与装置间交互的处理事件过程,可以调试探究收发的电子邮件否也就是说。

(3)新增这两项留意关键字

在这个关键字上可以填满留意的政治事件具体内容,脱氧核糖核酸到留意的应在星期、终结星期,提在此之前留意的时,脱氧核糖核酸到已完成后,双击新增留意政治事件按住,就可以将电子邮件收发给装置侧,并且在合而为一关键字去掉电子邮件揭示。

(4)Miranda手一号机调试功效

4. 无线电网关

装置侧与软件上位一号机中间电子邮件交互的的协议:

(1)软件上位一号机对STM32收发:#update 让STM32收发也就是说驱动器的所有这两项电子邮件过来STM32向上位一号机抵回的软件该系统:$update,应在星期,终结星期,政治事件具体内容,提在此之前留意星期(0~59分钟)$update,2022/02/22 13:15,2022/02/23 12:17,喝茶,5(2)给STM32收发一条这两项电子邮件过去XML:$add,应在星期,终结星期,政治事件具体内容,提在此之前留意星期(0~59分钟)$add,2022/02/22 13:15,2022/02/23 12:17,喝茶,5(3)给STM32收发测量星期 *20220222131338(4)撤下STM32上驱动器的这两项电子邮件$del,应在星期,终结星期,政治事件具体内容,提在此之前留意星期(0~59分钟)$del,2022/02/22 13:15,2022/02/23 12:17,喝茶,5脱氧核糖核酸5. 试验中流程论述

装置侧采行ESP8266与上位一号机开展无线电通信,ESP8266上电初始化为AP+TCP维修服务支架方式,设为互换侧口号。

采行的电脑或者手一号机调试APP试验中在此之在此之前,先以抓取ESP8266创建人的WIFI热点连通上,然后敞开软件,在软件从前脱氧核糖核酸到ESP8266维修服务支架的IP接收者和侧口号双击连通,连通事与愿违便就可以与装置侧开展交互。

如果没有装置侧,也可以采行网络调试助手与上位一号机在此之在此之前交互,试验中基本功能。

6. 软件均

6.1 软件实物

板子的串口也就是说指引:

(1)上电指引

(2) 新版本政治事件指引

(3)SD坎上转化成的副本

6.2 内置软件群组

(1) ESP8266 WIFIPB10-------->ESP8266-RXPB11-------->ESP8266-TX3.3v-------->VCCGND--------->GND(2) SYN6628PA2(TX)--------SYN6628-RXPA3(RX)--------SYN6628-TX3.3v--------->VCCGND------------>GND(3) DHT11 温湿度传感支架PA5 --------->DHT11-OUT3.3v--------->VCCGND------------>GND仅剩的用的软件是合作开发板本身除此以外----号外粒子STM32F1战舰V3合作开发板,软件连通去向看原理图接口。脱氧核糖核酸

6.3 通用创建人

6.4 SD坎上暂存的通用副本

7. 装置侧架构编码及意味着思路

如果无需整个工程单独可用,可以去这从前利用:

7.1 通用脱氧核糖核酸到

目在此之前装置侧LCD光通用摆放到SD坎上,通过fatfs副本该系统脱氧核糖核酸到字模开展揭示,这样要用的低成本: 装上通用易于,单独把SD坎拔出来放到的电脑上副本通用即可。

架构编码如下:

void NT35310_DisplayGBKData(u32 x,u32 y,u32 size,u8 *p,u16 c1,u16 c2){ FIL fp; UINT br; u8 L,H; u32 Addr; u16 font_size=size/8*size; //TrueType闲置的点阵码寄存器体积 u8 *buff=NULL; H=*p; L=*(p+1); if(L<0x7f)L=L-0x40; else L=L-0x41; H=H-0x81; Addr=(190*H+L)*font_size; //中文在通用从前的偏差量 buff=malloc(font_size); //可用的堆空间 if(buff==NULL)return; switch(size) { case 16: if(f_open(Bellfp,"0:SYSTEM/FONT/GBK16-H.DZK",FA_READ)!=FR_OK) { printf("f_open error."); } f_lseek(Bellfp,Addr); f_read(Bellfp,buff,font_size,Bellbr); f_close(Bellfp); break; case 24: f_open(Bellfp,"0:SYSTEM/FONT/GBK24-H.DZK",FA_READ); f_lseek(Bellfp,Addr); f_read(Bellfp,buff,font_size,Bellbr); f_close(Bellfp); break; case 32: break; } //揭示中文 NT35310_DisplayData(x,y,size,size,buff,c1,c2); //释放空间 free(buff);}void NT35310_DisplayData(u32 x,u32 y,u32 w,u32 h,u8 *p,u16 c1,u16 c2){ u16 i,j,x0=x; u8 data; u16 colortemp=POINT_COLOR; for(i=0;i7.2 解ESP8266电子邮件

合而为一表达式从前通过轮询方式监测,ESP8266否接获上位一号机的军令,接获便开展解处理事件

架构编码如下:

//ESP8266 WIFI 抵回的电子邮件if(USART3_RX_FLAG){ USART3_RX_BUFFER[USART3_RX_CNT]=''; printf("%s",USART3_RX_BUFFER); //解WIFI抵回的电子邮件 //如果是测量RTC星期 +IPD,0,15:*20220304220552 if(strstr((char*)USART3_RX_BUFFER,":*")) { printf("测量星期."); rtc_time_update((char*)USART3_RX_BUFFER); } //如果是乞求新版本留意 else if(strstr((char*)USART3_RX_BUFFER,"#update")) { printf("乞求新版本政治事件."); update_enev(); } //如果是新增留意 //+IPD,0,49:$add,2022/03/04 21:56,2022/03/04 21:56, else if(strstr((char*)USART3_RX_BUFFER,"$add")) { printf("新增留意政治事件."); add_enev((char*)USART3_RX_BUFFER); } //如果是撤下某个留意 //+IPD,0,49:$del,2022/03/04 21:56,2022/03/04 21:56,水水水水,0 else if(strstr((char*)USART3_RX_BUFFER,"$del")) { printf("撤下某个留意."); del_enev((char*)USART3_RX_BUFFER); } USART3_RX_CNT=0; USART3_RX_FLAG=0;}脱氧核糖核酸

7.3 向SD坎暂存政治事件电子邮件

政治事件留意都是摆放到SD坎上,以副本的表达方式暂存,上面封装的几个表达式从前,合而为一要是就是算数副本。

架构编码:

/*表达式基本功能:从buf从前面得到第cnt个斜线所在的前面抵 回 数值:0~254,均是由斜线所在前面的偏差.255,均是由不存在第cnt个斜线*/u8 GetCommaOffset(char *buf,u8 cnt){ char *p=buf; while(cnt) { if(*buf==',')cnt----; buf++; } return buf-p; //计算偏差量}/*写副本*/void FATFS_Write(const TCHAR *FileName,const char *WriteBuff){ FIL fp; FRESULT res; UINT cnt; //暂存重写事与愿违的量 /*1. 创建人副本*/ res=f_open(Bellfp,FileName, FA_WRITE | FA_CREATE_ALWAYS); if(res!=0) { printf("%s副本创建人收场!",FileName); return; } /*2. 重写电子邮件*/ res=f_write(Bellfp,WriteBuff,strlen(WriteBuff),Bellcnt); if(res!=0) { printf("%s副本重写收场!",FileName); return; } /*3. 重新启动副本*/ f_close(Bellfp); printf("%s副本创建人事与愿违,事与愿违重写:%d",FileName,cnt);}//分离出自行决定斜线前面的电子邮件void GetCommaOffsetBuff(char *buf_in,char *buf_out,u8 cnt){ while (cnt) { if (*buf_in == ',')cnt----; if (*buf_in == '')break; buf_in++; } while (*buf_in != ',' BellBell *buf_in != '') { *buf_out=*buf_in; buf_in++; buf_out++; } *buf_out = '';}//符号串换成//sub1换成在此之前 sub2换成后符号void StringSubstitution(char *p,char sub1,char sub2){ while (*p!='') { if (*p == sub1) { *p = sub2; } p++; }}//新增留意 //+IPD,0,49:$add,2022/03/04 21:56,2022/03/04 21:56,void add_enev(char *p){ char buf_out[20]; u8 offset = 0; char *p2; offset = GetCommaOffset(p, 3); p2 = p + offset; printf("%d,%s", offset, p2); //分离出留意的应在星期 例如:2022/03/04 21:56 GetCommaOffsetBuff(p,buf_out,3); printf("buf_out1=%s",buf_out); StringSubstitution(buf_out,'/','-'); StringSubstitution(buf_out, ' ','-'); StringSubstitution(buf_out, ':','-'); printf("buf_out2=%s", buf_out); strcat(buf_out,".ev"); printf("buf_out3=%s", buf_out); FATFS_Write(buf_out, p2); //新版本政治事件沙罗 update_event_list();}//撤下某个留意 //+IPD,0,49:$del,2022/03/04 21:56,2022/03/04 21:56,水水水水,0void del_enev(char *p){ char buf_out[20]; char dir_file_path[50]; //分离出留意的应在星期 例如:2022/03/04 21:56 GetCommaOffsetBuff(p, buf_out, 3); printf("buf_out1=%s", buf_out); StringSubstitution(buf_out, '/', '-'); StringSubstitution(buf_out, ' ', '-'); StringSubstitution(buf_out, ':', '-'); printf("buf_out2=%s", buf_out); strcat(buf_out, ".ev"); printf("buf_out3=%s", buf_out); //堆砌索引中文名称 sprintf(dir_file_path,"0:/%s",buf_out); //撤下副本 if(f_unlink(dir_file_path)==FR_OK) { printf("%s撤下事与愿违.",dir_file_path); } else { printf("%s撤下收场.",dir_file_path); } //新版本政治事件沙罗 update_event_list();}//向APP接口新版本留意//+IPD,0,7:#update/*STM32向上位一号机抵回的软件该系统:$update,应在星期,终结星期,政治事件具体内容,提在此之前留意星期(0~59分钟)$update,2022/02/22 13:15,2022/02/23 12:17,喝茶,5*/u8 update_enev(void){// u8 buff[]="$update,2022/02/22 13:15,2022/02/23 12:17,喝茶,5";// ESP8266_ServerSendData(0,buff,strlen((char*)buff)); char *path="0:/"; //索引前面 DIR dir; FIL file; //副本codice_ FRESULT res; FILINFO fno; //暂存脱氧核糖核酸到的副本电子邮件 char *abs_path=NULL; char cmd[]="$update,"; //乞求的军令头 char out_buff[100]; UINT cnt; strcpy(out_buff,cmd); /*1. 敞开索引*/ res=f_opendir(Belldir,path); if(res!=FR_OK)return res; /*2. 尿素脱氧核糖核酸到索引*/ while(1) { res=f_readdir(Belldir,Bellfno); if(fno.fname[0] == 0 || res!=0)break; //printf("副本中文名称: %s,副本体积: %ld 寄存器",fno.fname,fno.fsize); /*漂白索引*/ if(strstr(fno.fname,".ev")) { //审核暂存副本中文名称的弧度 abs_path=malloc(strlen(path)+strlen(fno.fname)+1); if(abs_path==NULL)break; strcpy(abs_path,path); strcat(abs_path,"/"); strcat(abs_path,fno.fname); //脱氧核糖核酸到副本电子邮件 f_open(Bellfile,abs_path,FA_READ); f_read(Bellfile,out_buff+strlen(cmd),100,Bellcnt); free(abs_path); printf("abs_path=%s,脱氧核糖核酸到:%d",abs_path,cnt); out_buff[cnt+strlen(cmd)]=''; //收发给上位一号机 ESP8266_ServerSendData(0,(u8*)out_buff,strlen((char*)out_buff)); printf("收发:%s",out_buff); delay_ms(100); } } /*3. 重新启动索引*/ f_closedir(Belldir); return 0;}//分离出电子邮件,暂存到有序政治事件结构体从前//参数: i 电子邮件库数值 buf_out 盛电子邮件具体内容void ExtractData(int i,char *buf_out){ //std_to_sec(u16 syear, u8 smon, u8 sday, u8 hour, u8 min) char buf_num[50]; //XML化处理事件 StringSubstitution(buf_out, '/', ','); StringSubstitution(buf_out, ' ', ','); StringSubstitution(buf_out, ':', ','); printf("buf_out=%s",buf_out); //2022-03-05-10-11-2022-03-05-10-11-打酱油-5 //1. 分离出应在星期 GetCommaOffsetBuff(buf_out,buf_num,0); event_buff[i].s_year = atoi(buf_num); printf("应在-年: %d,%s", event_buff[i].s_year, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 1); event_buff[i].s_month = atoi(buf_num); printf("应在-月: %d,%s", event_buff[i].s_month, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 2); event_buff[i].s_date = atoi(buf_num); printf("应在-日: %d,%s", event_buff[i].s_date, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 3); event_buff[i].s_hour = atoi(buf_num); printf("应在-时: %d,%s", event_buff[i].s_hour, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 4); event_buff[i].s_min = atoi(buf_num); printf("应在-分: %d,%s", event_buff[i].s_min, buf_num); //2. 分离出终结星期 GetCommaOffsetBuff(buf_out, buf_num, 5); event_buff[i].e_year = atoi(buf_num); printf("终结-年: %d,%s", event_buff[i].e_year, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 6); event_buff[i].e_month = atoi(buf_num); printf("终结-月: %d,%s", event_buff[i].e_month, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 7); event_buff[i].e_date = atoi(buf_num); printf("终结-日: %d,%s", event_buff[i].e_date, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 8); event_buff[i].e_hour = atoi(buf_num); printf("终结-时: %d,%s", event_buff[i].e_hour, buf_num); GetCommaOffsetBuff(buf_out, buf_num, 9); event_buff[i].e_min = atoi(buf_num); printf("终结-分: %d,%s", event_buff[i].e_min, buf_num); //3. 分离出政治事件具体内容 GetCommaOffsetBuff(buf_out, buf_num,10); strcpy((char*)event_buff[i].event_buff, buf_num); printf("政治事件具体内容:%s", event_buff[i].event_buff); //4. 提在此之前留意星期 GetCommaOffsetBuff(buf_out, buf_num, 11); event_buff[i].time_min_advance = atoi(buf_num); printf("提在此之前留意星期:%d分钟", event_buff[i].time_min_advance); //5. 设为徽章位 event_buff[i].flag = 1;}//最多15个政治事件留意struct Event event_buff[15];//新版本政治事件沙罗u8 update_event_list(void){ char *path="0:/"; //索引前面 DIR dir; FIL file; //副本codice_ FRESULT res; FILINFO fno; //暂存脱氧核糖核酸到的副本电子邮件 char *abs_path=NULL; char out_buff[100]; UINT cnt; int index=0; //codice_电子邮件库 //先以将codice_全部光绪年间0 memset(event_buff,0,sizeof(event_buff)); /*1. 敞开索引*/ res=f_opendir(Belldir,path); if(res!=FR_OK)return res; /*2. 尿素脱氧核糖核酸到索引*/ while(1) { res=f_readdir(Belldir,Bellfno); if(fno.fname[0] == 0 || res!=0)break; //printf("副本中文名称: %s,副本体积: %ld 寄存器",fno.fname,fno.fsize); /*漂白索引*/ if(strstr(fno.fname,".ev")) { //审核暂存副本中文名称的弧度 abs_path=malloc(strlen(path)+strlen(fno.fname)+1); if(abs_path==NULL)break; strcpy(abs_path,path); strcat(abs_path,"/"); strcat(abs_path,fno.fname); //脱氧核糖核酸到副本电子邮件 f_open(Bellfile,abs_path,FA_READ); f_read(Bellfile,out_buff,100,Bellcnt); free(abs_path); out_buff[cnt]=''; //去掉终结符 printf("abs_path=%s,脱氧核糖核酸到:%d,%s",abs_path,cnt,out_buff); //解电子邮件暂存到codice_从前 //2022/03/05 10:11,2022/03/05 10:11,打酱油,5 ExtractData(index++,out_buff); if(index>=15)break; //较大暂存15个政治事件 } } /*3. 重新启动索引*/ f_closedir(Belldir); return 0;}脱氧核糖核酸

7.4 星期新版本

RTC星期新版本,通过上位一号机收发星期开展新版本。

架构编码:

void rtc_time_update(char *buff){ char *time; /*辨别否接获服务器来信的电子邮件 */ char *p=strstr((char*)buff,"+IPD"); if(p!=NULL) //也就是说软件该系统: +IPD,0,7:LED1_ON +IPD,0表示第0个服务器 7:LED1_ON表示电子邮件弧度与电子邮件 { /*解上位一号机来信的电子邮件*/ p=strstr((char*)buff,":"); if(p!=NULL) { p+=1; //向后偏差1个寄存器 if(*p=='*') //设为RTC星期 { p+=1; //向后偏差,指向正确的星期 time=p; calendar.w_year=(time[0]-48)*1000+(time[1]-48)*100+(time[2]-48)*10+(time[3]-48)*1; calendar.w_month=(time[4]-48)*10+(time[5]-48)*1; calendar.w_date=(time[6]-48)*10+(time[7]-48)*1; calendar.hour=(time[8]-48)*10+(time[9]-48)*1; calendar.min=(time[10]-48)*10+(time[11]-48)*1; calendar.sec=(time[12]-48)*10+(time[13]-48)*1; RTC_Set(calendar.w_year, calendar.w_month, calendar.w_date, calendar.hour, calendar.min, calendar.sec); printf("星期设为事与愿违:%s",buff); } } }}脱氧核糖核酸

7.5 LCD光几个合而为一要关键字

合而为一尿素从前通过轮询按键,监测否无需切换揭示关键字。

目在此之前外观设计有3个合而为一关键字+N个政治事件揭示关键字。

(1)关键字1: 模拟器带电粒子同步关键字

(2)关键字2:日历揭示关键字

(3)关键字3-N : 文档政治事件揭示关键字

7.6 RTC同步

RTC启动时了秒停滞,在秒停滞从前绘制模拟器同步关键字,新版本也就是说的该系统星期。

7.7 政治事件星期辨别关键字

合而为一表达式从前可用定时支架1,以10秒的频谱,辨别文档政治事件星期否开到,否无需句法解说员。

/*表达式基本功能: 定时支架1的新版本停滞维修服务表达式*/#include "app.h"#include "rtc.h"#include "syn6628.h"u32 time_ev_cnt=0;void TIM1_UP_IRQHandler(void){ int i=0; u32 t1=0; u32 t2=0; u32 t3=0; char dir_file_path[50]; if(TIM1->SRBell1<<0) { TIM1->SRBell=~(1<<0); } time_ev_cnt++; //10秒星期 if(time_ev_cnt>=2) { time_ev_cnt=0; printf("10秒星期开到."); for(i=0;i<15;i++) { if(event_buff[i].flag==0)break; //也就是说星期 t1=std_to_sec(calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min); //留意开始星期 t2=std_to_sec(event_buff[i].s_year,event_buff[i].s_month,event_buff[i].s_date,event_buff[i].s_hour,event_buff[i].s_min); //留意终结星期 t3=std_to_sec(event_buff[i].e_year,event_buff[i].e_month,event_buff[i].e_date,event_buff[i].s_hour,event_buff[i].e_min); //加上提在此之前留意的分钟 t2+=event_buff[i].time_min_advance*60; //辨别有没有星期满足需求,满足就句法指引 if(t1>=t2 BellBell t1<=t3) { //星期达到,句法解说员 SYN6288_Speech("您正确性开始的这两项,值得注意"); //如果无需播放具体的具体内容,单独播放结构体从前的成员即可 } //如果星期超过,就可以撤下政治事件 if(t1>=t3) { //撤下SD坎上的这个副本 //堆砌路径 sprintf(dir_file_path,"0:/%d-%d-%d-%d-%d.ev",event_buff[i].s_year,event_buff[i].s_month,event_buff[i].s_date,event_buff[i].s_hour,event_buff[i].s_min); if(f_unlink(dir_file_path)==FR_OK) { printf("%s撤下事与愿违.",dir_file_path); //新版本政治事件沙罗 update_event_list(); } else { printf("%s撤下收场.",dir_file_path); } } } }}脱氧核糖核酸

双击下方,第一星期探究首款名曰新鲜技术~

首款名曰新浪_大电子邮件新浪_AI新浪_名曰计算新浪_合作开发者中心-首款名曰

西安妇科医院哪个好
杭州妇科医院哪个好
手指关节僵硬怎么办
治感冒喉咙痛的药有什么
天津看男科去哪个医院好
友情链接