ESP8266_UDP_Server-AP配网OK-20221201.rar
大小:6.65MB
价格:26积分
下载量:0
评分:
5.0
上传者:tkzsld
更新日期:2025-09-22

物联网ESP8266 WIFI SoftAP模式一键配网,开源源码,测试OK可以直接使用

资源内容介绍

1、创作起因:网上找了很久,都没有关于ESP8266 WIFI通过softap方式配网开源例程,基本都是smartconfig airkiss方式一键配网,这种方式受手机、路由器等兼容性影响,配网成功率低,用户体验差。问 ESP8266乐鑫厂家,得到回复是esp-01s这个模块内存太小,建议更换带蓝牙的模块,这样这边设计工作量比较大,什么都需要更改。但我不死心,不放弃自己根据softAP配网协议,编写的此代码,调试测试终于成功,配网成功率100%。2、源码采用性价比最高的esp-01s WIFI模块,当然配置高的模块同样兼容;3、本源码全部开源,部分用到官网库函数,现决定将此源码分享给大家,希望能帮助到需要的朋友。4、目前这个源码已经批量在产品中运用由于配网失败导致退货的问题一直是Wifi设备的一个痛点,所以各大厂家一直在研究Wifi配网技术。目前配网技术有以下几种一键配网(Smartconfig)设备热点配网(Soft AP)强烈推荐蓝牙配网(Bleconfig)零配(Zeroconfig)手机热点配网(Phone as AP)
/* * SSLv3/TLSv1 shared functions * * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This file is part of mbed TLS (https://tls.mbed.org) *//* * The SSL 3.0 specification was drafted by Netscape in 1996, * and became an IETF standard in 1999. * * http://wp.netscape.com/eng/ssl3/ * http://www.ietf.org/rfc/rfc2246.txt * http://www.ietf.org/rfc/rfc4346.txt */#if !defined(MBEDTLS_CONFIG_FILE)#include "mbedtls/config.h"#else#include MBEDTLS_CONFIG_FILE#endif#if defined(MBEDTLS_SSL_TLS_C)#include "mbedtls/debug.h"#include "mbedtls/ssl.h"#include "mbedtls/ssl_internal.h"#include <string>#if defined(MBEDTLS_X509_CRT_PARSE_C) && \ defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE)#include "mbedtls/oid.h"#endif#if defined(MBEDTLS_PLATFORM_C)#include "mbedtls/platform.h"#else#include <stdlib>#define mbedtls_calloc calloc#define mbedtls_free free#endifstatic void mbedtls_zeroize( void *v, size_t n ) { volatile unsigned char *p = v; while( n-- ) *p++ = 0;}static inline size_t ssl_ep_len( const mbedtls_ssl_context *ssl ){#if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) return( 2 );#else ((void) ssl);#endif return( 0 );}/* * Start a timer. * Passing millisecs = 0 cancels a running timer. */static void ssl_set_timer( mbedtls_ssl_context *ssl, uint32_t millisecs ){ if( ssl->f_set_timer == NULL ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "set_timer to %d ms", (int) millisecs ) ); ssl->f_set_timer( ssl->p_timer, millisecs / 4, millisecs );}/* * Return -1 is timer is expired, 0 if it isn't. */static int ssl_check_timer( mbedtls_ssl_context *ssl ){ if( ssl->f_get_timer == NULL ) return( 0 ); if( ssl->f_get_timer( ssl->p_timer ) == 2 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "timer expired" ) ); return( -1 ); } return( 0 );}#if defined(MBEDTLS_SSL_PROTO_DTLS)/* * Double the retransmit timeout value, within the allowed range, * returning -1 if the maximum value has already been reached. */static int ssl_double_retransmit_timeout( mbedtls_ssl_context *ssl ){ uint32_t new_timeout; if( ssl->handshake->retransmit_timeout >= ssl->conf->hs_timeout_max ) return( -1 ); new_timeout = 2 * ssl->handshake->retransmit_timeout; if( new_timeout < ssl>handshake->retransmit_timeout || new_timeout > ssl->conf->hs_timeout_max ) { new_timeout = ssl->conf->hs_timeout_max; } ssl->handshake->retransmit_timeout = new_timeout; MBEDTLS_SSL_DEBUG_MSG( 3, ( "update timeout value to %d millisecs", ssl->handshake->retransmit_timeout ) ); return( 0 );}static void ssl_reset_retransmit_timeout( mbedtls_ssl_context *ssl ){ ssl->handshake->retransmit_timeout = ssl->conf->hs_timeout_min; MBEDTLS_SSL_DEBUG_MSG( 3, ( "update timeout value to %d millisecs", ssl->handshake->retransmit_timeout ) );}#endif #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)/* * Convert max_fragment_length codes to length. * RFC 6066 says: * enum{ * 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) * } MaxFragmentLength; * and we add 0 -> extension unused */static unsigned int mfl_code_to_length[MBEDTLS_SSL_MAX_FRAG_LEN_INVALID] ={ MBEDTLS_SSL_MAX_CONTENT_LEN, 512, 1024, 2048, 4096, };#endif #if defined(MBEDTLS_SSL_CLI_C)static int ssl_session_copy( mbedtls_ssl_session *dst, const mbedtls_ssl_session *src ){ mbedtls_ssl_session_free( dst ); memcpy( dst, src, sizeof( mbedtls_ssl_session ) );#if defined(MBEDTLS_X509_CRT_PARSE_C) if( src->peer_cert != NULL ) { int ret; dst->peer_cert = mbedtls_calloc( 1, sizeof(mbedtls_x509_crt) ); if( dst->peer_cert == NULL ) return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); mbedtls_x509_crt_init( dst->peer_cert ); if( ( ret = mbedtls_x509_crt_parse_der( dst->peer_cert, src->peer_cert->raw.p, src->peer_cert->raw.len ) ) != 0 ) { mbedtls_free( dst->peer_cert ); dst->peer_cert = NULL; return( ret ); } }#endif #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) if( src->ticket != NULL ) { dst->ticket = mbedtls_calloc( 1, src->ticket_len ); if( dst->ticket == NULL ) return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); memcpy( dst->ticket, src->ticket, src->ticket_len ); }#endif return( 0 );}#endif #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL)int (*mbedtls_ssl_hw_record_init)( mbedtls_ssl_context *ssl, const unsigned char *key_enc, const unsigned char *key_dec, size_t keylen, const unsigned char *iv_enc, const unsigned char *iv_dec, size_t ivlen, const unsigned char *mac_enc, const unsigned char *mac_dec, size_t maclen ) = NULL;int (*mbedtls_ssl_hw_record_activate)( mbedtls_ssl_context *ssl, int direction) = NULL;int (*mbedtls_ssl_hw_record_reset)( mbedtls_ssl_context *ssl ) = NULL;int (*mbedtls_ssl_hw_record_write)( mbedtls_ssl_context *ssl ) = NULL;int (*mbedtls_ssl_hw_record_read)( mbedtls_ssl_context *ssl ) = NULL;int (*mbedtls_ssl_hw_record_finish)( mbedtls_ssl_context *ssl ) = NULL;#endif /* * Key material generation */#if defined(MBEDTLS_SSL_PROTO_SSL3)static int ssl3_prf( const unsigned char *secret, size_t slen, const char *label, const unsigned char *random, size_t rlen, unsigned char *dstbuf, size_t dlen ){ size_t i; mbedtls_md5_context md5; mbedtls_sha1_context sha1; unsigned char padding[16]; unsigned char sha1sum[20]; ((void)label); mbedtls_md5_init( &md5 ); mbedtls_sha1_init( &sha1 ); /* * SSLv3: * block = * MD5( secret + SHA1( 'A' + secret + random ) ) + * MD5( secret + SHA1( 'BB' + secret + random ) ) + * MD5( secret + SHA1( 'CCC' + secret + random ) ) + * ... */ for( i = 0; i &lt; dlen / 16; i++ ) { memset( padding, (unsigned char) ('A' + i), 1 + i ); mbedtls_sha1_starts( &sha1 ); mbedtls_sha1_update( &sha1, padding, 1 + i ); mbedtls_sha1_update( &sha1, secret, slen ); mbedtls_sha1_update( &sha1, random, rlen ); mbedtls_sha1_finish( &sha1, sha1sum ); mbedtls_md5_starts( &md5 ); mbedtls_md5_update( &md5, secret, slen ); mbedtls_md5_update( &md5, sha1sum, 20 ); mbedtls_md5_

用户评论 (0)

发表评论

captcha