Wi-Fi softap

Posted htt789

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wi-Fi softap相关的知识,希望对你有一定的参考价值。

个人热点功能

功能:提供无线网络接入,允许其他设备接入访问网络。
1.共享蜂窝网络:终端作为无线AP,其他便携设备通过802.11协议与其互联,通过tethering技术实现网络internet共享功能。(DNS、DHCP、Firewall)
2.共享上级wlan

个人热点启动/关闭

settings和systemUI调用ConnectivityManager.startTethering(TETHERING_WIFI)启动
ConnectivityManager.stopTethering(TETHERING_WIFI)关闭
由于开启softAp功耗相对较大,10分钟没设备连接,定时器触发关闭softAp

个人热点配置

WifiManager.setWifiApConfiguration(WifiConfiguration wifiConfig)获取配置接口 WifiManager.getWifiApConfiguration()

信道选择策略:
2.4G:1\\6\\11随机选择
5G:排除DFS和indoor信道后,优先149,如果没有149则随机选择
举例:setting获取热点5G可用信道;framework下发国家码,获取支持的5G信道;driver返回支持的所有信道(不包含DFS);

黑名单

个人热点当前连接设备列表,通过广播通知连接设备有变化
在配置黑名单之后要断开设备

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台

      Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指定的热点或路由器,并加入后者所建立的 Wi-Fi 网络。

     对于具备丰富人机界面包括屏幕/键盘的设备,例如电脑或手机,可以直接输入 SSID/PSW 进行连接。

    对于不具备丰富人机交互界面的物联网 Wi-Fi 设备,例如智能灯、扫地机器人等,则可以借助手机等智能设备,以某种配网方式将 SSID/PSW 传递该设备。

  SoftAP模式配网

  原理介绍请参考腾讯云物联网开发文档​​SoftAP配网开发​​  

  腾讯云平台接入参考:​​ESP8266接入腾讯云​​  

  ESP8266_UDP通信配置​​UDP传输示例​

 腾讯云物联网平台网页端配置

  1.登录腾讯云平台,进入交互开发,选择配网引导。

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_初始化


  2.选择配网方式为AirKiss协议配网。点保存后即可生成二维码。

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_一键配网_02

  3.使用微信扫一扫二维码,或者通过微信小程序腾讯连连扫一扫二维码,进行配网。

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_ESP8266_03

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_初始化_04

 4.开始配网,配置热点信息。

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_一键配网_05

  5.开始配网,等待配网完成。

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_SoftAP_06

  6. 配网调试信息.

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_一键配网_07

​  7. 查看设备是否上线

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_一键配网_08

  程序设计

  2.SoftAP配网函数

/*SoftAP配网*/
u8 ESP8266_SoftAP_MOde(void)

u8 token[]="\\"cmdType\\":2,\\"productId\\":\\"LA57WTHWi2\\",\\"deviceName\\":\\"Smart_123\\",\\"protoVersion\\":\\"2.0\\"\\r\\n";//连接状态信息
char *p=NULL;
char data[256];
char buff[100];
u8 i=0;
u32 time1=0,time2=0;
usart3_cnt=0;
usart3_flag=0;
while(1)

if(usart3_flag)

usart3_rx_buff[usart3_cnt]=\\0;
printf("rx=%s",usart3_rx_buff);
//+IPD,97,192.168.4.2,52021:"cmdType":1,"ssid":"wbyq_wifi","password":"12345678","token":"df4a4c90abee98c9a443ae8ffd8cc16b"
p=strstr((char *)usart3_rx_buff,"+IPD");
if(p)

strcpy(data,p);//将接收到的数据拷贝一份保存
p+=strlen("+IPD");
p+=1;
while(*p!=, && *p!=\\0)p++;
p++;//跳过字符,,获取到IP地址起始位置
i=0;
//IP地址解析
while(*p!=, && *p!=\\0)

buff[i++]=*p++;

buff[i]=\\0;
strcpy((char *)esp8266_info.esp8266_ip,buff);
//端口号解析
p++;
i=0;
while(*p!=: && *p!=\\0)

buff[i++]=*p++;

buff[i]=\\0;
esp8266_info.esp8266_prot=atoi(buff);//字符串转整数
//printf("ip=%s:%d\\r\\n",esp8266_info.esp8266_ip,esp8266_info.esp8266_prot);
printf("ret:%d\\r\\n",Esp8266_UDP_SendData((u8*)esp8266_info.esp8266_ip,esp8266_info.esp8266_prot,token));//上报连接状态

ESP8266_GetData(data,(char *)esp8266_info.esp8266_name,"ssid");//WIFI名
ESP8266_GetData(data,(char *)esp8266_info.esp8266_key,"password");//密码
ESP8266_GetData(data,(char *)esp8266_info.token,"token");//token数据,需要返回给平台
// printf("wifi_name:%s\\r\\n",esp8266_info.esp8266_name);
// printf("wifi_key:%s\\r\\n",esp8266_info.esp8266_key);
// printf("wifi_token:%s\\r\\n",esp8266_info.token);
LED1=1;
return 0;

Delay_Ms(1);
time1++;
time2++;
if(time2>=100)

time2=0;
LED1=!LED1;

if(time1>=1000*300)

LED1=1;
break;//超时退出


return 1;

  3.微信小程序配网数据订阅与发布

//微信小程序配网数据订阅与发布
#define SET_WEIXIN_TOPIC "$thing/down/service/LA54WTHWL3/Smart_123"//订阅
#define POST_WEIXIN_TOPIC "$thing/up/service/LA54WTHWL36/Smart_123"//发布

STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台_ESP8266_09

int main()

int i=0,key;
u8 stat=0;
u32 time=0;
u16 cnt=0;
float temp;
Beep_Init();//蜂鸣器初始化
Led_Init();//LED初始化
Key_Init();//按键初始化
Usartx_Init(USART1,115200,72);
Usartx_Init(USART3,115200,36);
TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms
TIMx_Init(TIM4,72,20000);//通过定时器2辅助串口接收数据,20ms
DS18B20_Init();
// RTC_Init();//RTC初始化
printf("初始化完成\\r\\n");
while(1)

stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
if(stat==0 || stat==0x80)break;
printf("stat=%d\\r\\n",stat);

printf("服务器连接成功\\r\\n");
while(1)

MQTT_Init();
if(MQTT_Connect(ClientID,Username,Password)==0)break;
Delay_Ms(500);
printf("正在连接....\\r\\n");

printf("连接成功\\r\\n");
if(stat==0x80)//进入配网模式需要给微信小程序返回token值

//订阅微信topic
if(MQTT_SubscribeTopic(SET_WEIXIN_TOPIC,0,1))printf("订阅失败\\r\\n");
//返回平台数据,告知微信连连连接服务器成功
snprintf(mqtt_message,sizeof(mqtt_message),"\\"method\\":\\"app_bind_token\\",\\"clientToken\\":\\"client-1234\\",\\"params\\": \\"token\\":\\"%s\\"",esp8266_info.token);
MQTT_PublishData(POST_WEIXIN_TOPIC,mqtt_message,0);
//Smart_home"method":"app_bind_token_reply","clientToken":"client-1234","code":0,"status":"success" 配网成功后微信小程序返回数据

//订阅物联网平台数据
stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
if(stat)printf("订阅失败\\r\\n");
while(1)

if(usart3_flag)

for(i=0;i<usart3_cnt;i++)

printf("%c",usart3_rx_buff[i]);

printf("\\r\\n");
usart3_cnt=0;
usart3_flag=0;

Delay_Ms(1);
time++;
cnt++;
if(time>=5000)

time=0;
MQTT_SentHeart();//发送心跳包

if(cnt>=2000)

cnt=0;
temp=DS18B20_GetTemp()*0.0625;
sprintf(mqtt_message,"\\"method\\":\\"report\\",\\"clientToken\\":\\"123\\",\\"params\\":\\"LED1\\":1,\\"temp\\":%.2f,\\"L\\":356",temp);//温度
MQTT_PublishData(POST_TOPIC,mqtt_message,0);



以上是关于Wi-Fi softap的主要内容,如果未能解决你的问题,请参考以下文章

ESP32学习笔记(36)——BluFi(蓝牙配网)接口使用

ESP-C3入门13. SoftAP模式

ESP-C3入门13. SoftAP模式

[ESP] ESP-IDF WiFi配网(SoftAP+HTTPD)代码备注

Android Softap Mac地址随机化

Android Softap Mac地址随机化