STM32连接WIFI-ESP8266实战—AP模式运用
文章目录
前言
学习物联网这一块大家首先想到的是ESP8266,这个模块可以连网就是连接你家中的路由器,也可以作为一个热点来让你的手机连接它,是不是很奇妙。虽然这个东西程序和相关的产品已经很成熟,但是还是有一些入门的小伙伴不知道咋学。如何用一个ESP8266加上STM32单片机做一个小产品呢?这个学习的路线是怎样的呢还有如何入门呢?
一、工作模式
ESP8266是一款超低功耗的UART-WiFi 透传模块,ESP8266有三种工作模式,分别为:AP,STA,AP混合STA。
STA 模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
AP 模式:ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
STA+AP 模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。
二、应用领域
- 串口CH340 转Wi-Fi
- 工业透传DTU
- Wi-Fi 远程监控/控制
- 玩具领域
- 色LED 控制
- 消防、安防智能一体化管理
- 智能卡终端,无线POS 机,Wi-Fi 摄像头,手持设备等
三、ESP8266 使用 AP 模式使用
1.查看 ESP8266 当前模式,并将 ESP8266 配置成 AP 模式
配置AP模式
代码如下:
void ESP8266_textconnect(void)
{
printf ( "\r\n正在配置ESP8266请耐心等待...\r\n" );
ESP8266_CH_PD_Pin_SetH;
ESP8266_AT_Test();
ESP8266_Net_Mode_Choose(AP);
while (!ESP8266_CIPAP(User_ESP8266_TCPServer_IP ));
while (!ESP8266_BuildAP(User_ESP8266_BulitApSsid, User_ESP8266_BulitApPwd, User_ESP8266_BulitApEcn));
ESP8266_Enable_MultipleId ( ENABLE );
while(!ESP8266_StartOrShutServer(ENABLE, User_ESP8266_TCPServer_PORT, User_ESP8266_TCPServer_OverTime ));
ESP8266_Inquire_ApIp ( str, 20 );
printf ( "\r\n配置ESP8266 OK!\r\n" );
printf ( "\r\n本模块WIFI为 %s,密码开放 \r\n AP IP 为: %s,开启的端口为:%s \r\n手机网络助手连接该 IP 和端口,最多可连接5个客户端\r\n",
User_ESP8266_BulitApSsid, str, User_ESP8266_TCPServer_PORT );
ESP8266_Fram_Record_Struct .InfBit .FramLength = 0;
ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 0;
}
2.查看当前 AP 的参数
代码如下:
#define User_ESP8266_BulitApSsid "ESP8266" //要建立的热点的名称
#define User_ESP8266_BulitApEcn OOPEN //要建立的热点的加密方式
#define User_ESP8266_BulitApPwd "prechin" //要建立的热点的密钥
#define User_ESP8266_TCPServer_IP "192.168.31.192" //服务器开启的IP地址
#define User_ESP8266_TCPServer_PORT "8080" //服务器开启的端口
#define User_ESP8266_TCPServer_OverTime "1800" //服务器超时时间(单位:秒)
现在我修改完,电脑就会搜索到 WiFi 如下图所示:
3.连接 AP
就像我们平常那样连接 WiFi 就可以了
4.建立 TCP 多连接测试,并且收发数据
手机下载网络调试精灵,输入正确IP端口号,发起连接请求。
使用串口调试助手查看数据。
四、核心源码
1、STM32下位机
实现LED灯控制,以及温湿度数据传输
void ESP8266_STA_TCPClient_Test(void)
{
if(ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag )
{
USART_ITConfig ( USART2, USART_IT_RXNE, DISABLE ); //禁用串口接收中断
ESP8266_Fram_Record_Struct .Data_RX_BUF [ ESP8266_Fram_Record_Struct .InfBit .FramLength ] = '\0';
printf ( "\r\n%s\r\n", ESP8266_Fram_Record_Struct .Data_RX_BUF );//
if ( ( pCh = strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "+IPD,0,6:LED_" ) ) != 0 )
{
cCh = * ( pCh + 13 );
switch ( cCh )
{
case '1': //LED1控制
cCh = * ( pCh + 14 );
switch ( cCh )
{
case '0': //关闭LED1
led2=1;
PGout(13) = 1;
break;
case '1': //打开LED1
led2=0;
PGout(13) = 0;
break;
default :
break;
}
break;
case '2': //LED2控制
cCh = * ( pCh + 14 );
switch ( cCh )
{
case '0':
led3=1;
PGout(14) = 1;
break;
case '1':
led3=0;
PGout(14) = 0;
break;
default :
break;
}
break;
default :
break;
}
}
DHT11_Read_Data(&temp,&humi);
temp_buf[0]=temp/10+0x30;
temp_buf[1]=temp%10+0x30;
temp_buf[2]='\0';
humi_buf[0]=humi/10+0x30;
humi_buf[1]=humi%10+0x30;
humi_buf[2]='\0';
if ( ( pCh = strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "+IPD,0,4:Temp" ) ) != 0 )
{
sprintf ( str, "%s,%s",temp_buf, humi_buf);
ucId = * ( pCh + strlen ( "+IPD," ) ) - '0';
ESP8266_SendString ( DISABLE, str, strlen ( str ), ( ENUM_ID_NO_TypeDef ) ucId );
printf("\r\n温湿度=%s\r\n",str);
}
ESP8266_Fram_Record_Struct .InfBit .FramLength = 0;
ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 0;
USART_ITConfig ( USART2, USART_IT_RXNE, ENABLE ); //使能串口接收中断
}
}
2、Qt上位机
void Widget::newConnect()
{
if(!isConnected)
{
tcpClient->abort(); //取消已有的链接
tcpClient->connectToHost(ui->lineEdit->text(), ui->lineEdit_2->text().toInt()); //连接到主机,手动输入主机地址 固定端口号8080
isConnected = true;
ui->pushButton->setText("断开");
qDebug()<<"连接成功";
}
else
{
tcpClient->disconnectFromHost();
tcpClient->waitForDisconnected(1000);
if (tcpClient->state() == QAbstractSocket::UnconnectedState || tcpClient->waitForDisconnected(1000))
{
ui->pushButton->setText("连接");
isConnected = false;
qDebug()<<"断开连接成功";
}
}
}
int i = 0;
void Widget::led1sendMessage()
{
//具体要做的事情
if(i%2 == 0)
{
ui->pushButton_2->setText("关闭");
tcpClient->write("LED_11");
}
else
{
ui->pushButton_2->setText("开启");
tcpClient->write("LED_10");
}
i++;
}
总结
以上就是今天要讲ESP8266的内容,ESP8266在STM32平台上的一些基础应用。
基于STM32室内温湿度监控系统