STM32封装ESP8266一键配置函数:实现实现AP模式和STA模式切换、服务器与客户端创建

论坛 期权论坛     
选择匿名的用户   2021-5-21 15:29   42   0
<h2><span style="color:#3399ea;">工程源码下载:</span> <a href="https://download.csdn.net/download/xiaolong1126626497/15805037">https://download.csdn.net/download/xiaolong1126626497/15805037</a></h2>
<h2><span style="color:#f33b45;">一、硬件环境介绍</span></h2>
<p><span style="color:#3399ea;"><strong>1.  ESP8266 :</strong></span>采用安信可的模组,型号是ESP12F</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-d339b1b658a19e26cc249f6c22a86fd0.png"></p>
<p><span style="color:#3399ea;"><strong>2.  STM32     :</strong></span>  采用STM32F103C8T6</p>
<p><span style="color:#3399ea;"><strong>3.  编程软件  : </strong></span> 采用Keil5</p>
<p><span style="color:#f33b45;"><strong>ESP8266编程调试过程中用到的相关软件下载地址:</strong></span></p>
<p>物联网网调试终端:<a href="https://download.csdn.net/download/xiaolong1126626497/12624530">https://download.csdn.net/download/xiaolong1126626497/12624530</a></p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-97495fefa0eb51d939db5583b74435ea.png"></p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-fca23c507e3213b879c311b059c2b470.png"></p>
<p>TCP调试助手:<a href="https://download.csdn.net/download/xiaolong1126626497/12624461">https://download.csdn.net/download/xiaolong1126626497/12624461</a></p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8c6541efb443c48990a31461e96454be.png"></p>
<p>串口调试助手:<a href="https://download.csdn.net/download/xiaolong1126626497/12624450">https://download.csdn.net/download/xiaolong1126626497/12624450</a></p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4f8ed68f934e48a80afb6bfeac318ff0.png"></p>
<h3><span style="color:#f33b45;">二、ESP8266通信的调试与运行效果</span></h3>
<p>下面几张图是将ESP8266配置成AP&#43;TCP服务器模式,电脑连接ESP8266的热点之后,实现数据通信。通信的效果是,在电脑点击物联网控制系统软件,实现控制开发板上的LED灯和蜂鸣器,开发板上将检测的光敏数据、温度数据、RC522刷卡数据传输到电脑的软件上进行显示。----局域网通信</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-a5403ec4c5f0a77663c6499301670d5a.jpg"></p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-375fef11046d632e212366fb5655454b.jpg"></p>
<p> <img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-54942c847a006e2566e45c2db8caa178.png"></p>
<h2><span style="color:#f33b45;">三、硬件接线与代码技术部分介绍</span></h2>
<p><span style="color:#3399ea;"><strong>硬件连接:</strong></span> 下面会贴出核心代码,在当前开发板上,ESP8266接在STM32F103C8T6的串口3上。</p>
<p><span style="color:#3399ea;"><strong>代码分为以下几个部分: </strong></span></p>
<p>(1) STM32程序里的串口接收采用定时器&#43;接收中断的形式接收数据,使用这种方式可以接收不定长度数据,方便接下来与ESP8266进行通信。</p>
<p>(2). ESP8266驱动代码:代码实现了STA&#43;TCP客户端的一键配置函数,AP&#43;TCP服务器的一键配置函数,要配置ESP8266只需要调用对应的函数传入参数即可。</p>
<h2><span style="color:#f33b45;">四、核心代码部分</span></h2>
<h3><span style="color:#3399ea;">4.1 ESP8266.c代码</span></h3>
<pre class="blockcode"><code class="language-cpp">#include &#34;esp8266.h&#34;
u8 ESP8266_IP_ADDR[16]; //255.255.255.255
u8 ESP8266_MAC_ADDR[18]; //硬件地址
/*
函数功能: ESP8266命令发送函数
函数返回值:0表示成功  1表示失败
*/
u8 ESP8266_SendCmd(char *cmd)
{
    u8 i,j;
    for(i&#61;0;i&lt;10;i&#43;&#43;) //检测的次数--发送指令的次数
    {
        USARTx_StringSend(USART3,cmd);
        for(j&#61;0;j&lt;100;j&#43;&#43;) //等待的时间
        {
            delay_ms(50);
            if(USART3_RX_FLAG)
            {
                USART3_RX_BUFFER[USART3_RX_CNT]&#61;&#39;\0&#39;;
                USART3_RX_FLAG&#61;0;
                USART3_RX_CNT&#61;0;
                if(strstr((char*)USART3_RX_BUFFER,&#34;OK&#34;))
                {
                    return 0;
                }
            }
        }
    }
    return 1;
}

/*
函数功能: ESP8266硬件初始化检测函数
函数返回值:0表示成功  1表示失败
*/
u8 ESP8266_Init(void)
{
    //退出透传模式
    USARTx_StringSend(USART3,&#34;&#43;&#43;&#43;&#34;);
    delay_ms(50);
    return ESP8266_SendCmd(&#34;AT\r\n&#34;);
}

/*
函数功能: 一键配置WIFI为AP&#43;TCP服务器模式
函数参数:
char *ssid  创建的热点名称
char *pass  创建的热点密码 (最少8位)
u16 port    创建的服务器端口号
函数返回值: 0表示成功 其他值表示对应错误值
*/
u8 ESP8266_AP_TCP_Server_Mode(char *ssid,char *pass,u16 port)
{
    char *p;
    u8 i;
    char ESP8266_SendCMD[100]; //组合发送过程中的命令
    /*1. 测试硬件*/
    if(ESP8266_SendCmd(&#34;AT\r\n&#34;))return 1;
    /*2. 关闭回显*/
    if(ESP8266_Se
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP