wifi密码锁-ESP8266简单应用

【ESP8266个人学习笔记】一、互联网与物联网基础知识 一、互联网基础知识 在网络系统中,为了保证通信设备之间能正确地进行通信,必须使用一种双方都能够理解的语言,这种语言被称为“协议”。TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式。TCP/IP是一组协议的代名词。 TCP/IP协议被划分为4层,分别是: 分层名称 包含协议 应用层 HTTP, FTP, mDNS, WebSocket, OSC … 传输层 TCP, UDP 网络层 IP 链路层(也称网络接口层) Ethernet, Wi 阅读详情

概述

利用ESP8266模块连接到远程服务器,服务器可以远程更新密码、请求密码。

ESP8266

这个模块是一个wifi模块,它可以作为AP、STA也可以两者共存,可以通过他进行wifi通讯,使用很方便。
淘宝有这种模块,十几块钱,很便宜。
引脚图
这里写图片描述
其中CH_PD是个使能脚,使用时要把他接高电平。VCC接5V,3.3V都是可以的。
他内部有一个32位的MCU,可以直接在他上面开发,我没研究过,所以没用。他可以通过穿过AT指令来快速开发。

对于他的编程,主要是通过串口对他发送相应的AT指令,然后接收他返回值,判断指令是否响应成功。
其中关键就是指令设置的程序了。

//ESP8266发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果
//      其他,期待应答结果的位置(str的位置)
u8* esp8266_check_cmd(u8 *str)
{

    char *strx=0;
    if(USART3_RX_STA&0X8000)        //接收到一次数据了
    { 
        USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
        strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
    } 
    return (u8*)strx;
}
//向ESP8266发送命令
//cmd:发送的命令字符串
//ack:期待的应答结果,如果为空,则表示不需要等待应答
//waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果)
//       1,发送失败
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
    u8 res=0; 
    USART3_RX_STA=0;
    u3_printf("%s\r\n",cmd);    //发送命令
    if(ack&&waittime)       //需要等待应答
    {
        while(--waittime)   //等待倒计时
        {
            delay_ms(10);
            if(USART3_RX_STA&0X8000)//接收到期待的应答结果
            {
                if(esp8266_check_cmd(ack))
                {
                    break;//得到有效数据 
                }
                    USART3_RX_STA=0;
            } 
        }
        if(waittime==0)res=1; 
    }
    return res;
} 

其中由于8266的指令返回值可能会发送多个,所以串口接收的时候,判断一下这是两个回复还是一个回复。这里用一个定时器,当接收间隔大于10ms就认为不是同一个回复了。

void USART3_IRQHandler(void)
{
    u8 res;     
    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
    {    
        res =USART_ReceiveData(USART3);     
        if(USART3_RX_STA<USART3_MAX_RECV_LEN)       //还可以接收数据
        {
            TIM_SetCounter(TIM4,0);//计数器清空                       
            if(USART3_RX_STA==0)TIM4_Set(1);        //使能定时器4的中断 
            USART3_RX_BUF[USART3_RX_STA++]=res;     //记录接收到的值    
        }else 
        {
            USART3_RX_STA|=1<<15;                   //强制标记接收完成
        } 
    }                                            
}

//定时器4中断服务程序            
void TIM4_IRQHandler(void)
{   
    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)//是更新中断
    {                  
        USART3_RX_STA|=1<<15;   //标记接收完成
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );  //清除TIMx更新中断标志    
        TIM4_Set(0);            //关闭TIM4  
    }       
}
//设置TIM4的开关
//sta:0,关闭;1,开启;
void TIM4_Set(u8 sta)
{
    if(sta)
    {      
        TIM_SetCounter(TIM4,0);//计数器清空
        TIM_Cmd(TIM4, ENABLE);  //使能TIMx    
    }else TIM_Cmd(TIM4, DISABLE);//关闭定时器4      
}

然后就可以用它进行开发了,这是主函数,里面有8266基本用法,主要就是和目标服务器连接,然后和服务器通讯,并且轮询键盘。

u8 join_flag=0;
u8 change_flag=0;
extern u8 data[10];

u8 password[]={"1"};

void LOCK_Init(void)           //C12作为驱动门锁信号端口
{ 
 GPIO_InitTypeDef  GPIO_InitStructure; 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;              
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
 GPIO_Init(GPIOC, &GPIO_InitStructure);                  
 GPIO_SetBits(GPIOC,GPIO_Pin_10);
}

 int main(void)
 { 
    char *p_password;
    u16 rlen=0;
    u8 i=0;  
    u8 *p;
    u8 send_buf[20];
    delay_init();            //延时函数初始化
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级     
    uart_init(115200);      //串口初始化为9600    
    USART3_Init(115200);  //初始化串口2波特率为115200
    mem_init();             //初始化内存池    
    LOCK_Init();
    EXTIX_Init();
    LED_Init();
    CP2532_Init();
    while(CP2532_Check());
    printf("\r\nsetting esp8266....\r\n");
    while(esp8266_send_cmd("AT","OK",20));//检查WIFI模块是否在线
    printf("\r\nwifi存在\r\n");
    delay_ms(800);
    change: 
    while(esp8266_send_cmd("ATE0","OK",20));//关闭回显
    esp8266_send_cmd("AT+CWMODE=1","OK",50);
    esp8266_send_cmd("AT+RST","OK",20);
    delay_ms(1000);         //延时3S等待重启成功
    delay_ms(1000);
    delay_ms(1000);
    delay_ms(1000);
    printf("\r\nreset success\r\n");
    join:
    p=mymalloc(32);
    sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);//设置无线参数:ssid,密码
    while(esp8266_send_cmd(p,"WIFI GOT IP",300)) ; //连接目标路由器,并且获得IP         
    printf("\r\nwifi connect\r\n");
    esp8266_send_cmd("AT+CIPMUX=0","OK",20);   //0:单连接,1:多连接
    sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"SERVER_IP\",SERVER_PORT");    //配置目标TCP服务器 server_ip  服务器IP,server_port 服务器端口
    while(esp8266_send_cmd(p,"CONNECT",200));                                       
    printf("\r\nserver connect\r\n");
    myfree(p);
    LED1=0;
    join_flag=1;
    while(1)
        { 
            if(change_flag)
            {
                change_flag=0;
                goto change;
            }
            if(USART3_RX_STA&0X8000)        //接收到一次数据了
                { 
                    rlen=USART3_RX_STA&0X7FFF;  //得到本次接收到的数据长度
                    USART3_RX_BUF[rlen]=0;      //添加结束符 
                    printf("%s",USART3_RX_BUF); //发送到串口 

                    if((u32)(strstr ( (const char*)USART3_RX_BUF, "####3100000001" ))!=0 )
                    {
                        p_password=strstr ( (const char*)USART3_RX_BUF, "####3100000001" );
                        for(i=0;i<6;i++)
                    {
                        (password[i]) = *(p_password+14+i);
                    }
                        STMFLASH_Write(FLASH_SAVE_ADDR,(u16 *)password,6);
                        printf("\r\n%s\r\n",password);
                    }
                    if((u32)(strstr ( (const char*)USART3_RX_BUF, "####1100000001" ))!=0 )
                    {
                        STMFLASH_Read(FLASH_SAVE_ADDR,(u16 *)data,6);
                        sprintf((char *)send_buf,"####2100000001%s/r/n",(char *)data);
                        esp8266_send_cmd((u8 *)"AT+CIPSEND=20",(u8 *)"OK",200);  //发送指定长度的数据
                        delay_ms(200);
                        esp8266_send_data((u8 *)send_buf,(u8 *)"OK",100);
                    }
                    if((u32)(strstr ( (const char*)USART3_RX_BUF, "CLOSED" ))!=0 )
                    { 
                        join_flag=0;
                        LED1=1;
                        USART3_RX_STA=0;
                        goto join;
                    }
                    USART3_RX_STA=0;
                }
}
        }

工程文件已上传
https://download.youkuaiyun.com/download/qingelife/10130811

NodeMCU ESP8266+Arduino:将宿舍老式门锁改造为简易密码锁 基本信息 实验环境 Arduino IDE Win 10电脑 宿舍门锁:老式旋转开关门锁 实验材料 NodeMCU:以ESP8266为核心模块,CH9102X驱动版本(CP2102驱动升级版) 4x4矩阵薄膜键盘 MG996R 金属标准舵机 180度(3.0-7.2V) 其它:microusb数据线、面包板、杜邦线若干 NodeMCU,是一个开源的物联网平台。 它使用Lua脚本语言编程。该平台基于eLua 开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 阅读详情

相关推荐

51单片机ESP8266WIFI远程门禁密码锁可修改密码APP开锁查看密码

实践制作DIY- GC003-WIFI远程门禁密码 一、功能说明: 基于51单片机设计-WIFI远程门禁密码锁 二、功能介绍:1.基于STC89C52RC,有一个LCD1602显示器显示信息,6位数密码,4X4键盘输入密码,修改密码,删除输入。有一个继电器开锁后通电表明开锁。 2.使用ESP8266-WIFI模块和安卓手机APP进行数据交互。 3.APP可以显示密码、远程开锁。 三、详情介绍: 视频讲解:哔哩哔哩搜索UP主“爱搞单片机”在其空间搜索关键词“STM32汽车儿童安全系统”观看..

LS840233684的博客 3050

ESP8266_设置AP模式,WiFi名称密码

1、AP(Access Point)访问接入点 ESP8266设置成AP模式,就等于了创建一个WiFi环境的无线局域网,知道这个WiFi名字和密码的终端设备就可以连接此WiFi; 可以想象,网络拓扑是星型,ESP8266在中间,四周连接不同的设备; 2、配置AP #define ESP8266_AP_SSID "LOVEYOU" #define ESP8266_AP_PASS "Be Happy" //初始化AP模式,设置WiFi名和密码 void ICACHE_FLASH_ATTR A

人非生而知之者 7653

基于51单片机远程门禁密码锁ESP8266WIFI可修改密码APP开锁查看密码

基于51单片机远程门禁密码锁ESP8266WIFI可修改密码APP开锁查看密码 硬件组成:STC89C52单片机最小系统+LCD1602显示+4X4键盘+ESP8266 wifi模块+继电器模拟开锁 1.基于STC89C52RC,有一个LCD1602显示器显示信息,6位数密码,4X4键盘输入密码,修改密码,删除输入。有一个继电器开锁后通电表明开锁。 2.使用ESP8266-WIFI模块和安卓手机APP进行数据交互。 3.APP可以显示密码、远程开锁。

2301_81207259的博客 677

ESP8266入门教程04:连接WIFI热点

ESP8266连接WIFI热点,连接成功后打印IP地址

程序员小志 4325

esp8266web配网+手动配置静态IP信息示例

esp8266web配网+手动配置静态IP信息示例 先上图: 程序源码: #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #ifndef STASSID #define STASSID "ESP8266wifiAp" #define STAPSK "12345678" #endif cons

perseverance51博客 2207

【STM32物联网】基于STM32+ESP8266+手机APP设计的智能密码锁

系统由多个关键模块组成,包括 STM32 主控芯片、RC522 射频 卡模块、指纹采集模块、矩阵按键、LCD 显示屏、WiFi 模块和继电器等。这些模块发挥 着重要的功能作用,共同构建了系统的核心功能和特点。STM32 主控芯片作为系统的核 心控制单元,负责管理各模块之间的通信和数据处理,刷卡解锁模块与指纹解锁模块各 自适用于不同类型的解锁操作。矩阵按键模块负责输入密码,而系统则支持密码解锁功 能。LCD 显示模块能够实时展示各种信息,包括密码的输入和显示、密码锁的解锁状态 等,而 WiFi 模块则实现了与

嵌入式阿齐Archie 2万+

ESP8266实现联网配置

使用ESP8266WebServer实现网页配置设备。

lovehuanhuan1314的专栏 2788

基于STM32设计的动态密码锁(带手机APP)

本项目设计一款基于STM32F103ZET6主控芯片的动态密码锁,采用4x4触摸矩阵键盘输入密码,0.96寸OLED显示屏显示时钟信息与开锁状态,并通过ESP8266-WIFI模块与手机APP连接,实现多种解锁方式。 动态密码锁的核心技术在于动态密码的生成与校验。通过算法结合当前时间,生成一个随机密码,并在手机APP和密码锁本地同时进行计算,确保密码的一致性和时效性。用户可以通过矩阵键盘输入随机密码进行开锁,也可以通过手机APP连接控制开锁,提高了使用的便捷性和灵活性。

6477

基于51单片机WIFI遥控防盗电子密码锁APP控制方案原理图设计

系统的功能分析 (末尾附文件) 本系统具体框图: 原理图 5V电源电路设计 本系统选择5V直流电源作为系统总电源,为整个系统供电,电路简单、稳定。DC为电源的DC插座,可以直接接USB电源线,一端插在DC插座上,另外一端可以插在5V电源上,如电脑USB、充电宝、手机充电器等等。LED为红色LED灯,作为系统是否有点的指示灯,电阻为1K电阻,起到限流作用,保护LED灯,以防电流过大烧坏LED灯。SW为自锁开关,开关按下后,红灯亮,此时系统电源5V直流输出。开关再次按下后,红灯灭,此时系统电源无5V电源输出

m0_47699870的博客 3720

STM32+华为云IOT设计的动态密码锁

设计了一款物联网智能电子密码锁,以STM32单片机为主控制器,由触摸矩阵键盘、ESP8266、步进电机等模块组成,具有远程控制、随机密码生成等功能。

8531

Uncertainty-Aware Mean Teacher(UA-MT)

本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。

Alexa_的博客 1870

基于wifi的智能指纹密码锁设计

6.1 工作总结本课题设计了一种基于WiFi的智能指纹密码锁,可以由手机APP和指纹识别实现对单片机的继电器,继而实现对电磁锁的控制。本系统采用STC12C5A60S2单片机为主控芯片,使用AD 9 软件绘制原理图并完成PCB的封装和绘制;使用Java语言编写Android手机APP,APP具有连接单片机与发送数据的功能;连接与通信模块ESP8266串口转wifi模块,在单片机内完成对接收数据的解析;并由单片机控制继电器,继电器控制电磁锁的开关。

weixin_112233的博客 2166

无刷直流电机矢量控制(四):基于滑模观测器的无传感器控制

无刷直流电机矢量控制,采用转速、电流双环控制,电流环dq解耦,d轴采用id=0控制,q轴采用转速外环。采用滑模观测器(SMO),根据电压电流信息进行电机位置角度动态估算,模型可直接运行,转速和角度跟踪精度较高。 本文整理了该方法的基本原理,介绍了在MATLAB/Simulink中的建模和仿真过程,最后附上完整的模型文件。 一、基本原理 滑模观测器(下文简称SMO)是基于滑模变结构控制方法的一种状态观测器。其针对无刷直流电机转子位置估算的实现过程如下。 假设采用矢量控...

Forster-C的博客 6866

基于51单片机WIFI遥控防盗电子密码锁APP控制设计

本文介绍了一款基于STC89C52单片机和ESP8266 WiFi模块的智能防盗电子密码锁系统。系统通过手机APP实现远程控制,具备密码验证、错误报警、远程修改密码等功能。核心电路包括单片机控制、WiFi通信、继电器执行和蜂鸣器报警模块。软件设计采用模块化编程,完成命令解析、密码校验、开锁控制和报警处理。系统安全性高,支持三位密码验证和错误锁定机制,同时具有远程操作便捷性。该设计为智能家居安全提供了一种低成本、高可靠性的解决方案,适用于家庭、仓库等多种场景,并具有良好的扩展性。

嵌入式基地 948

固态变压器SST 1.1 课程整体框架与学习路径

本课程围绕固态变压器(SST)全生命周期工程化流程设计,构建"规范要求-理论基础-设计方法-仿真验证-工程落地"的闭环学习体系,完整覆盖GB/T 40429-2021标准要求。课程分为基础认知、核心设计、合规验证、工程落地和前沿拓展五大模块,采用理论讲解与工程实践深度融合的教学路径,通过规范条款拆解、仿真预验证、硬件实现、试验检测等环节,培养学员从设计到落地的完整能力。课程强调标准合规性,每个设计环节均有明确规范约束,并提供标准化工程模板,确保学习成果可直接应用于实际项目开发。

技术工作者 992

Habitat-v0.1.7安装全网最详细教程(解决habitat-sim下载时网络问题)

Habitat-v0.1.7安装全网最详细教程(解决habitat-sim下载时网络问题)

shannanshouyin的博客 1327

基于51单片机遥控防盗电子密码锁WIFI无线控制proteus仿真原理图PCB

1.通过WIFI打开密码锁,WiFi模块采用的是ESP8266。2.开锁后可通过WIFI设置新密码,本系统设置了四个功能按键。4.采用DC002作为电源接口可直接输入5V给整个系统供电。0.本系统采用STC89C52作为单片机。*Sxxx# 设置新密码,xxx为密码。*Kxxx# 开锁,xxx为密码。3.密码连续输入错误三次即报警。仿真的初始密码为000。

2924

C#精准获取Windows已安装应用清单的完整方案

Windows已安装应用识别是IT资产管理、安全合规与自动化运维的基础能力。其核心原理在于突破文件系统表象,以注册表为可信数据源,分层解析HKLM/HKCU、64位/32位视图及MSI Products路径中的元数据。技术价值体现在可验证(如过滤SystemComponent=1)、可关联(通过ProductCode绑定补丁与许可证)、可操作(启动路径二次验证+卸载命令沙箱执行)。典型应用场景包括终端合规审计、软件资产清查、静默卸载脚本开发及多版本应用聚合分析。本文聚焦C#原生实现,覆盖注册表四路采集、La

weixin_33552698的博客 635

51单片机WIFI APP远程门禁密码锁可修改密码开锁查看密码ESP8266

51单片机WIFI APP远程门禁密码锁可修改密码开锁查看密码ESP8266

卧龙文化工作室的博客 424

【深度解析】信息素养提升实践活动(附:历年获奖作品分析)

全国师生信息素养提升实践活动是由教育部教育技术与资源发展中心(中央电化教育馆)主办,面向全国师生的一项信息化交流展示活动。

m0_74417957的博客 9652

【乐企文件生成工程】乐企文件生成支持所有特定要素类型发票

【代码】【乐企文件】乐企文件生成最新更新!!!

九七的博客 850
上一篇: 神经网络移植到STM32F4上的应用 可以训练识别手势
下一篇: WHT20无线温湿度传感器 STM8S单片机
不会飞的瘦子
博客等级 码龄15年 75粉丝 6原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会飞的瘦子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值