可以连接wifi的密码锁,wifi密码锁怎么连接

首页 > 实用技巧 > 作者:YD1662024-02-22 08:15:40

5.2 程序下载配置

可以连接wifi的密码锁,wifi密码锁怎么连接(13)

5.3 设备初始化打印的信息

可以连接wifi的密码锁,wifi密码锁怎么连接(14)

6 部分核心代码

#include "stm32f10x.h" #include "led.h" #include "delay.h" #include "key.h" #include "usart.h" #include #include "timer.h" #include "esp8266.h" #include "RFID_RC522.h" #include "motor.h" #include "oled.h" #include "rtc.h" #include #include char mqtt_message[200];//上报数据缓存区 char SendBuff[10]; //存放矩阵键盘的值 char MatrixKey_var[20]; int MatrixKey_index=0; //当前显示的页面 u8 page_show_flag=0; //1时钟页面 /* 函数功能: 绘制时钟表盘框架 */ void DrawTimeFrame(void) { u8 i; OLED_Circle(32,32,31);//画外圆 OLED_Circle(32,32,1); //画中心圆 //画刻度 for(i=0;i<60;i ) { if(i%5==0)OLED_DrawAngleLine(32,32,6*i,31,3,1); } OLED_RefreshGRAM(); //刷新数据到OLED屏幕 } /* 函数功能: 更新时间框架显示,在RTC中断里调用 */ char TimeBuff[20]; void Update_FrameShow(void) { //如果正在显示其他提示文字,就不显示时钟 if(page_show_flag==1) { return; } /*1. 绘制秒针、分针、时针*/ OLED_DrawAngleLine2(32,32,rtc_clock.sec*6-6-90,27,0);//清除之前的秒针 OLED_DrawAngleLine2(32,32,rtc_clock.sec*6-90,27,1); //画秒针 OLED_DrawAngleLine2(32,32,rtc_clock.min*6-6-90,24,0); OLED_DrawAngleLine2(32,32,rtc_clock.min*6-90,24,1); OLED_DrawAngleLine2(32,32,rtc_clock.hour*30-6-90,21,0); OLED_DrawAngleLine2(32,32,rtc_clock.hour*30-90,21,1); //绘制电子钟时间 sprintf(TimeBuff,"%d",rtc_clock.year); OLED_ShowString(65,16*0,16,TimeBuff); //年份字符串 OLED_ShowChineseFont(66 32,16*0,16,4); //显示年 sprintf(TimeBuff,"%d/%d",rtc_clock.mon,rtc_clock.day); OLED_ShowString(75,16*1,16,TimeBuff); //月 if(rtc_clock.sec==0)OLED_ShowString(65,16*2,16," "); //清除多余的数据 sprintf(TimeBuff,"%d:%d:%d",rtc_clock.hour,rtc_clock.min,rtc_clock.sec); OLED_ShowString(65,16*2,16,TimeBuff); //秒 //显示星期 OLED_ShowChineseFont(70,16*3,16,5); //星 OLED_ShowChineseFont(70 16,16*3,16,6); //期 OLED_ShowChineseFont(70 32,16*3,16,rtc_clock.week 7); //具体的值 } static unsigned long next=1;//静态全局变量,作为种子 void my_srand(unsigned long seed)//通过传不同的参数更改种子值,一般传time(NULL) { next=seed; } int my_rand(void)//将srand更改过的种子值通过公式计算出结果作为随机值 { next = next * 1103515245 12345; return((unsigned)(next/65536) % 32768); } //根据时间基准获取6位数随机开锁密码 char pwdcont[] = "0123456789"; void GeneratePassword(char *Password,int pwd_size) { int i; int random; unsigned int sec=TimeToSec(rtc_clock.year,rtc_clock.mon,rtc_clock.day,rtc_clock.hour,rtc_clock.min); //printf("sec=%d\r\n", sec); //获取时间种子 my_srand(sec); for (i = 0; i < pwd_size; i ) { random = my_rand() % (strlen(pwdcont)); *(Password i) = pwdcont[random]; } *(Password i) = '\0'; } int main() { u8 esp8266_state=0; u8 key; u8 i; u32 time_cnt=0; u8 MatrixKey=0; //矩阵键盘值 u32 page_display=0; //页面显示时间刷新 char Password[10]; LED_Init(); KEY_Init(); USART1_Init(115200); RC522_Init(); //RC522 Moto_Init(); //步进电机初始化 BEEP_Init(); USART3_Init(115200);//串口-WIFI TIMER3_Init(72,20000); //超时时间20ms Touch_Configuration(); //触摸按键配置 //OLED初始化 OLED_Init(0xc8,0xa1); //OLED显示屏初始化--正常显示; USART1_Printf("正在初始化WIFI请稍等.\r\n"); //清屏 OLED_Clear(0); OLED_RefreshGRAM(); //刷新数据到OLED屏幕 OLED_ShowString(0,0,16,"init esp8266."); for(i=0;i<5;i ) { if(ESP8266_Init()==0) { esp8266_state=1; OLED_Clear(0); OLED_RefreshGRAM(); //刷新数据到OLED屏幕 OLED_ShowString(0,0,16,"esp8266 init ok."); break; } else { esp8266_state=0; OLED_Clear(0); OLED_RefreshGRAM(); //刷新数据到OLED屏幕 OLED_ShowString(0,0,16,"esp8266 init error."); USART1_Printf("ESP8266硬件检测错误.\n"); } } if(esp8266_state) { printf("ESP8266 WIFI 配置状态:%d\r\n",ESP8266_AP_TCP_Server_Mode("esp8266_xl","12345678",8089)); } USART1_Printf("正在初始化RTC实时时钟请稍等.\r\n"); RTC_Init();//RTC初始化,一定要初始化成功 OLED_Clear(0x00); //清屏 OLED_RefreshGRAM(); //刷新数据到OLED屏幕 DrawTimeFrame(); //画时钟框架 while(1) { //按键可以测试开锁和关锁 key=KEY_Scan(); if(key==1) { LED1=0; //亮灯--表示开锁 time_cnt=0; Motorcw_ring(1,300); //电机正转1圈 page_show_flag=1; page_display=0; //清屏 OLED_Clear(0); OLED_ShowString(0,0,16,"open lock."); } else if(key==2) { LED1=1; //灭灯--表示关锁 time_cnt=0; Motorccw_ring(1,300); //电机反转1圈 page_show_flag=1; page_display=0; //清屏 OLED_Clear(0); OLED_ShowString(0,0,16,"close lock."); } DelayMs(10); page_display ; time_cnt ; if(time_cnt>=50) { //获取开锁密码 GeneratePassword(Password,6); // printf("Password = %s\r\n", Password); time_cnt=0; LED2=!LED2; } //判断显示时间是否到达,到达之后恢复正常时钟显示页面 if(page_show_flag==1 && page_display>200) { page_show_flag=0; OLED_Clear(0x00); //清屏 OLED_RefreshGRAM(); //刷新数据到OLED屏幕 DrawTimeFrame(); //画时钟框架 } //APP开锁方式: 接收WIFI返回的数据 if(USART3_RX_FLAG) { USART3_RX_BUFFER[USART3_RX_CNT]='\0'; printf("UART3收到数据.....\r\n"); //向串口打印APP返回的数据 for(i=0;i<USART3_RX_CNT;i ) { USART1_Printf("%c",USART3_RX_BUFFER[i]); } //如果是下发了属性,判断是开锁还是关锁 if(USART3_RX_CNT>5) { //使用字符串查找函数 //开锁 if(strstr((char*)&USART3_RX_BUFFER[5],"open_lock")) { LED1=0; //亮灯--表示开锁 //开锁 //执行开锁代码--电机正转 Motorcw_ring(1,300); //电机正转1圈 //清屏 OLED_Clear(0); OLED_ShowString(0,0,16,"open lock."); page_show_flag=1; page_display=0; } } char *time; /*判断是否收到客户端发来的数据 */ char *p=strstr((char*)USART3_RX_BUFFER," IPD"); if(p!=NULL) //正常数据格式: IPD,0,7:LED1_ON IPD,0表示第0个客户端 7:LED1_ON表示数据长度与数据 { /*解析上位机发来的数据*/ p=strstr((char*)USART3_RX_BUFFER,":"); if(p!=NULL) { p =1; //向后偏移1个字节 if(*p=='*') //设置RTC时间 { p =1; //向后偏移,指向正确的时间 time=p; int tm_sec; //秒 int tm_min; //分 int tm_hour; //时 int tm_mday; //日 int tm_mon; //月 int tm_year; //年 tm_year=(time[0]-48)*1000 (time[1]-48)*100 (time[2]-48)*10 (time[3]-48)*1; tm_mon=(time[4]-48)*10 (time[5]-48)*1; tm_mday=(time[6]-48)*10 (time[7]-48)*1; tm_hour=(time[8]-48)*10 (time[9]-48)*1; tm_min=(time[10]-48)*10 (time[11]-48)*1; tm_sec=(time[12]-48)*10 (time[13]-48)*1; RTC_SetTime(tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec); printf("RTC时间设置成功:%d-%d-%d %d:%d:%d\r\n",tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec); OLED_Clear(0x00); //清屏 OLED_RefreshGRAM(); //刷新数据到OLED屏幕 DrawTimeFrame(); //画时钟框架 } } } USART3_RX_CNT=0; USART3_RX_FLAG=0; } //输入密码开锁 MatrixKey=Touch_KeyScan(); if(MatrixKey!=0) { //最大密码数限制在10以内。超出自动清理 if(MatrixKey_index>10)MatrixKey_index=0; //printf("MatrixKey=%d\r\n",MatrixKey); //将按键值存放到数组里.只要数字键 switch(MatrixKey) { case 1: MatrixKey_var[MatrixKey_index ]=1 48;USART1_Printf("输入:1\r\n");break; case 2: MatrixKey_var[MatrixKey_index ]=2 48;USART1_Printf("输入:2\r\n");break; case 3: MatrixKey_var[MatrixKey_index ]=3 48;USART1_Printf("输入:3\r\n");break; case 5: MatrixKey_var[MatrixKey_index ]=4 48;USART1_Printf("输入:4\r\n");break; case 6: MatrixKey_var[MatrixKey_index ]=5 48;USART1_Printf("输入:5\r\n");break; case 7: MatrixKey_var[MatrixKey_index ]=6 48;USART1_Printf("输入:6\r\n");break; case 9: MatrixKey_var[MatrixKey_index ]=7 48;USART1_Printf("输入:7\r\n");break; case 10: MatrixKey_var[MatrixKey_index ]=8 48;USART1_Printf("输入:8\r\n");break; case 11: MatrixKey_var[MatrixKey_index ]=9 48;USART1_Printf("输入:9\r\n");break; case 14: MatrixKey_var[MatrixKey_index ]=0 48;USART1_Printf("输入:0\r\n");break; } USART1_Printf("正在输入中:%s\r\n",MatrixKey_var); //按下#号键表示确认输入 if(MatrixKey==15) { MatrixKey_var[MatrixKey_index ]='\0'; MatrixKey_index=0; USART1_Printf("输入的密码:%s\r\n",MatrixKey_var); //开锁密码 if(strcmp(MatrixKey_var,Password)==0) { USART1_Printf("密码正确,开锁成功.\r\n"); LED1=0; //亮灯--表示开锁 //执行开锁代码--电机正转 Motorcw_ring(1,300); //电机正转1圈 //清屏 OLED_Clear(0); OLED_ShowString(0,0,16,"open lock."); page_show_flag=1; page_display=0; } else { USART1_Printf("密码错误,开锁失败.\r\n"); //清屏 OLED_Clear(0); OLED_ShowString(0,0,16,"password error."); page_show_flag=1; page_display=0; } } //按下C号键表示清除之前的输入 else if(MatrixKey==12) { MatrixKey_index=0; USART1_Printf("清除之前输入的密码,等待重新输入.\r\n"); } } } }

部分代码可进群免费领取。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:

可以连接wifi的密码锁,wifi密码锁怎么连接(15)

上一页1234末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.