WIFI模块AP和STA模式分别是啥意思
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WIFI模块AP和STA模式分别是啥意思相关的知识,希望对你有一定的参考价值。
WIFI模块中,AP和STA模式中分别意思是:
1、AP:也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。
2、STA站点就是每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。
扩展资料:
在无线网络中,AP就相当于有线网络的集线器,能够把各个无线客户端连接起来,无线客户端所使用的网卡是无线网卡,传输介质是空气(电磁波)。
在逻辑上,AP是一个无线单元的中心点,该单元内的所有无线信号都要通过它才能进行交换。AP是无线局域网基本模式中必不可少的设备,虽然只使用无线网卡而不使用AP也能组成一个点对点模式的无线局域网,但这样的无线局域网多少有些特殊,只适用于临时性的无线连接。
使用AP后不仅可以得到永久性的无线连接服务,而且能集中管理用户并大大提高无线网的安全性。通俗地讲,无线AP是无线网和有线网之间沟通的桥梁。
由于无线AP的覆盖范围是一个向外扩散的圆形区域,因此,应当尽量把无线AP放置在无线网络的中心位置,而且各无线客户端与无线AP的直线距离最好不要超过30m,以避免因通信信号衰减过多而导致通信失败。
WLAN主要由站(Station,STA)、接入点(Access Point,AP)、无线介质( Wireless Medium,WM)和分布式系统(Distribution System,DS)组成。
STA在WLAN中一般为客户端,可以是装有无线网卡的计算机,也可以是有WiFi模块的智能手机。STA可以是移动的,也可以是固定的,是无线局域网的最基本组成单元。
参考资料:
百度百科 - AP
百度百科 - STA
Sta模式: Station, 类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。
满意请采纳 谢谢 参考技术B
AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接
Sta模式: Station, 类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。
对比图如下:
资料拓展:
WI-FI,是一种可以将个人电脑、手持设备等终端以无线方式互相连接的技术,由澳洲政府的研究机构CSIRO在20世纪90年代发明的,发明人是John O'Sullivan,被媒体称为”Wi-Fi之父“。
WI-FI是一个无线网路通信技术的品牌,由Wi-Fi联盟所持有,组成部分包括基本服务单元、分配系统、接入点、扩展服务单元和关口等。目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性。Wi-Fi的样式有很多类型,有无线的卡,还有连接电脑的等等。
参考技术C AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接Sta模式: Station, 类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。
54 ESP32Wifi模块之开启AP+STA共存及IP_NAPT模式
54.1 引言
探索完4G模块的应用、蓝牙模块的应用,最近开始了WiFi模块的使用。WiFi模块我们选择了广泛应用的esp32WiFi模组,所以就重新踏入了WiFi探索之旅。
然后项目上要用到WiFi的AP+STA模式,并且要开启NAT模式,就是WiFi模块能连接路由器,然后手机能连接WiFi模块,然后手机通过WiFi模块连接到路由器,能通过WiFi模块上网。
54.2 AP+STA+IP_NAPT代码
话不多说,先上app_main.c代码。这个代码也是网上搜集到的,自己理解后翻炒了一遍吧。。
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_wpa2.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "driver/gpio.h"
#include "lwip/opt.h"
#if IP_NAPT
#include "lwip/lwip_napt.h"
#endif
#include "lwip/err.h"
#include "lwip/sys.h"
#define MY_DNS_IP_ADDR 0x08080808 // 8.8.8.8
//模块AP自己的SSID和PWD
#define HT_ESP32_AP_SSID CONFIG_ESP_AP_SSID
#define HT_ESP32_AP_PASS CONFIG_ESP_AP_PASSWORD
//连接路由的SSID和PWD
#define HT_ESP32_STA_SSID "hello"
#define HT_ESP32_STA_PASS "world"
#define HT_ESP32_MAXIMUM_RETRY (10)
/* FreeRTOS event group to signal when we are connected*/
static EventGroupHandle_t s_wifi_event_group;
/* The event group allows multiple bits for each event, but we only care about one event
* - are we connected to the AP with an IP? */
const int WIFI_CONNECTED_BIT = BIT0;
static const char *TAG = "wifi apsta";
static int s_retry_num = 0;
static esp_err_t event_handler(void *ctx, system_event_t *event)
switch(event->event_id)
case SYSTEM_EVENT_STA_START:
esp_wifi_connect();
break;
case SYSTEM_EVENT_STA_GOT_IP:
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->event_info.got_ip.ip_info.ip));
s_retry_num = 0;
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
if (s_retry_num < HT_ESP32_MAXIMUM_RETRY)
esp_wifi_connect();
xEventGroupClearBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
s_retry_num++;
ESP_LOGI(TAG,"retry to connect to the AP");
ESP_LOGI(TAG,"connect to the AP failed:%d", event->event_info.disconnected.reason);
break;
case SYSTEM_EVENT_AP_STACONNECTED:
ESP_LOGI(TAG,"station connected");
break;
case SYSTEM_EVENT_AP_STADISCONNECTED:
ESP_LOGI(TAG,"station disconnected");
break;
default:
break;
return ESP_OK;
void wifi_init_sta()
ip_addr_t dnsserver;
//tcpip_adapter_dns_info_t dnsinfo;
s_wifi_event_group = xEventGroupCreate();
tcpip_adapter_init();
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL) );
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
/* ESP STATION CONFIG */
wifi_config_t sta_config =
.sta =
.ssid = HT_ESP32_STA_SSID,
.password = HT_ESP32_STA_PASS,
/* 设置密码意味着工作站将连接到所有安全模式,包括WEP/WPA.
* However these modes are deprecated and not advisable to be used. Incase your Access point
* doesn't support WPA2, these mode can be enabled by commenting below line */
.threshold.authmode = WIFI_AUTH_WPA2_PSK,
.bssid_set = false,
.pmf_cfg =
.capable = true,
.required = false
,
,
;
/* ESP AP CONFIG */
wifi_config_t ap_config =
.ap =
.ssid = HT_ESP32_AP_SSID,
.channel = 0,
.authmode = WIFI_AUTH_WPA2_PSK,
.password = HT_ESP32_AP_PASS,
.ssid_hidden = 0,
.max_connection = 4,
.beacon_interval = 100
;
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &sta_config) );
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &ap_config) );
// Enable DNS (offer) for dhcp server
dhcps_offer_t dhcps_dns_value = OFFER_DNS;
dhcps_set_option_info(6, &dhcps_dns_value, sizeof(dhcps_dns_value));
// Set custom dns server address for dhcp server
dnsserver.u_addr.ip4.addr = htonl(MY_DNS_IP_ADDR);
dnsserver.type = IPADDR_TYPE_V4;
dhcps_dns_setserver(&dnsserver);
//tcpip_adapter_get_dns_info(TCPIP_ADAPTER_IF_AP, TCPIP_ADAPTER_DNS_MAIN, &dnsinfo);
// ESP_LOGI(TAG, "DNS IP:" IPSTR, IP2STR(&dnsinfo.ip.u_addr.ip4));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG, "wifi_init_apsta finished.");
ESP_LOGI(TAG, "connect to ap SSID: %s ", sta_config.sta.ssid);
static void htHrint_task(void *pvParameters)
while(1)
ESP_LOGI(TAG, "hello world\\r\\n");
vTaskDelay(1000 / portTICK_PERIOD_MS); /* 延时1000ms*/
void app_main()
// Initialize NVS
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
ESP_ERROR_CHECK(ret);
// Setup WIFI
wifi_init_sta();
//这里就是打开nat转换的代码,但是除了代码这里要有,还需要配置
#if IP_NAPT
u32_t napt_netif_ip = 0xC0A80401; // Set to ip address of softAP netif (Default is 192.168.4.1)
ip_napt_enable(htonl(napt_netif_ip), 1);
ESP_LOGI(TAG, "------------------------>NAT is enabled");
#endif
xTaskCreate(htHrint_task, "HTTask", 4096, NULL, 5, NULL);
54.3 IP_NAPT模式配置
上述代码中,已经有开启IP_NAPT模式的重要几行代码,但需要关注的是,IP_NAPT这个宏是在哪里开启的,这是本blog的价值所在。
对于新手(像我一样新的应该是不知道),这个可以通过idf.py menuconfig 图形界面进行配置,这个配置在下面这个链接是有相关说明的。
Project Configuration - ESP32 - — ESP-IDF 编程指南 latest 文档
由上述图片可知,需要配置两个宏才能打开nat的转换功能。
配置步骤:
1.使用命令打开配置页面,并进入component config
idf.py menuconfig
2.在component config找到LWIP,然后进入
3. 进入后选中下图的这两个
4.保存,编译,并重新下载程序即可
over!
ESP32将继续探究中.........
以上是关于WIFI模块AP和STA模式分别是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
54 ESP32Wifi模块之开启AP+STA共存及IP_NAPT模式