[ESP32][esp-idf] AP+STA实现无线桥接 中转wifi信号

发布者:Xiangtan最新更新时间:2022-08-16 来源: csdn关键字:ESP32  STA  无线桥接 手机看文章 扫描二维码
随时随地手机看文章

引言:无线中继的主要作用是扩展WiFi信号,扩展WiFi后,令原本覆盖不到WiFi的地方也可以有WiFi,免去布线的烦恼。两个无线路由器桥接到一起,可以实现WiFi信号全覆盖。

在这里插入图片描述

实现的功能:WiFi模块能连接路由器,然后手机能连接WiFi模块,然后手机通过WiFi模块连接到路由器,能通过WiFi模块上网。


配置宏


# Set up wifi hotspot and share network

CONFIG_LWIP_IP_FORWARD=y

CONFIG_LWIP_IPV4_NAPT=y


demo.c代码如下:


#include

#include


#include "esp_event.h"

#include "esp_log.h"

#include "esp_system.h"


#include "nvs_flash.h"

#include "esp_wifi.h"

#include "esp_netif.h"

#include "lwip/inet.h"

#include "lwip/lwip_napt.h"


// 热点名称 密码  可连接数量

#define AP_WIFI_SSID "lisun"

#define AP_WIFI_PASS "xjq12345"

#define AP_MAX_STA_CONN 4


// 路由器wifi名称 密码

#define STA_WIFI_SSID "xjq"

#define STA_WIFI_PASS "xjq12345"


static const char *TAG = "LiSun";


static esp_netif_t* _esp_netif_sta = NULL;

static esp_netif_t* _esp_netif_ap = NULL;


static void wifi_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) {

if (event_id == WIFI_EVENT_AP_STACONNECTED) {

wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *)event_data;

ESP_LOGI(TAG, "station " MACSTR " join, AID=%d",

MAC2STR(event->mac), event->aid);

} else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {

wifi_event_ap_stadisconnected_t *event = (wifi_event_ap_stadisconnected_t *)event_data;

ESP_LOGI(TAG, "station " MACSTR " leave, AID=%d",

MAC2STR(event->mac), event->aid);

}

}


static void sta_start_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) {

esp_wifi_connect();

}


static void got_ip_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) {

//No need to log, wifi driver logs automatically

esp_netif_dns_info_t dns;

if (esp_netif_get_dns_info(_esp_netif_sta, ESP_NETIF_DNS_MAIN, &dns) == ESP_OK) {

dhcps_dns_setserver((const ip_addr_t *)&dns.ip);

ESP_LOGI(TAG, "set dns to:" IPSTR, IP2STR(&dns.ip.u_addr.ip4));

}

}


static void wifi_init_softap(void)

{

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();

ESP_ERROR_CHECK(esp_wifi_init(&cfg));


ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));


wifi_config_t wifi_config = {

.ap = {

.ssid = AP_WIFI_SSID,

.ssid_len = strlen(AP_WIFI_SSID),

.password = AP_WIFI_PASS,

.max_connection = AP_MAX_STA_CONN,

.authmode = WIFI_AUTH_WPA_WPA2_PSK

},

};

if (strlen(AP_WIFI_PASS) == 0)

wifi_config.ap.authmode = WIFI_AUTH_OPEN;


ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));

ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config));


wifi_config_t cfg1 = {

.sta = {

.ssid = STA_WIFI_SSID,

.password = STA_WIFI_PASS,

.threshold = {.rssi=0, .authmode = WIFI_AUTH_WPA2_PSK},

.pmf_cfg = {

.capable = true,

.required = false

},

},

};

ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &cfg1));

ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_START, sta_start_handler, NULL));

ESP_ERROR_CHECK(esp_wifi_start());


esp_netif_ip_info_t ip_info;

esp_netif_get_ip_info(esp_netif_get_handle_from_ifkey("WIFI_AP_DEF"), &ip_info);


char ip_addr[16];

inet_ntoa_r(ip_info.ip.addr, ip_addr, 16);

ESP_LOGI(TAG, "Set up softAP with IP: %s", ip_addr);


ESP_LOGI(TAG, "wifi_init_softap finished. SSID:'%s' password:'%s'", AP_WIFI_SSID, AP_WIFI_PASS);

}



void app_main(void)

{

// Initialize networking stack

ESP_ERROR_CHECK(esp_netif_init());


// Create default event loop needed by the  main app

ESP_ERROR_CHECK(esp_event_loop_create_default());


// Initialize NVS needed by Wi-Fi

ESP_ERROR_CHECK(nvs_flash_init());


// Initialize Wi-Fi including netif with default config

_esp_netif_ap = esp_netif_create_default_wifi_ap();

_esp_netif_sta = esp_netif_create_default_wifi_sta();


// Initialise ESP32 in SoftAP mode

wifi_init_softap();


ip_addr_t dnsserver;

// 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 默认跟随路由器 【推荐换成国内DNS】

dnsserver.u_addr.ip4.addr = htonl(0xC0A80301);

dnsserver.type = IPADDR_TYPE_V4;

dhcps_dns_setserver(&dnsserver);


#if IP_NAPT

// !!! 必须启动sta后再设置,不然ap无网络 !!! Set to ip address of softAP netif (Default is 192.168.4.1)

u32_t napt_netif_ip = 0xC0A80401;

ip_napt_enable(htonl(napt_netif_ip), 1);

#endif


}

关键字:ESP32  STA  无线桥接 引用地址:[ESP32][esp-idf] AP+STA实现无线桥接 中转wifi信号

上一篇:[ESP32][esp-idf] https和mqtt同时签名冲突解决
下一篇:[ESP32][esp-idf][LVGL7.9] 使用oled iic编译失败

推荐阅读最新更新时间:2024-11-20 10:53

DS3065WP非易失(NV)PowerCap SRAM模块
MXIM推出DS3065WP,一个1米x 8 非易失 (NV)与一个嵌入式实时时钟(RTC)和电池包在一个PowerCap   SRAM 模块。扩展的内存密度Maxim的流行的NV SRAM模块线提供,DS3065WP可以让系统设计者从低存储密度PCB布局迁移无重大变化。该设备非常适合用于数据采集系统,点销售终端,而且需要不断更新和存储时间标记的数据的其他应用程序。   应用程序需要不断更新和存储时间标记的数据,电池供电的SRAM允许无限读写周期,这是不是在NV存储器其他形式,如闪存或EEPROM可用。该电池支持的SRAM数据存储的生命是一个的电池和与SRAM,RTC电池目前的需求大小的功能,电池切换电路。采购建立一个独立
[模拟电子]
Synaptics 发布面向汽车市场的最新ClearView 显示驱动器
2016年10月13日,日本,东京&美国,圣何塞 全球领先的人机界面解决方案开发商Synaptics(NASDAQ股票代码:SYNA)今日发布了其面向汽车市场的全新R6A354 显示驱动器(DDIC) 解决方案。 Synaptics 的ClearView R6A354是行业内首个采用图像增强技术的汽车显示驱动器(DDIC),包括色彩增强技术(CE),局域自动对比度优化(LACO),阳光下可读性提升(SRE),六轴颜色控制和独立白点调节等,广泛的技术应用使 OEM厂商和他们的一级供应商可以进行屏幕定制化,从而增强产品差异化特征。 ClearView R6A354解决方案支持从高清(HD, 1280 x 720)到宽屏超级扩展图形阵列(
[汽车电子]
罗杰斯推出Kappa(TM)438层压板
近日,罗杰斯公司(NYSE:ROG)推出Kappa™438层压板。这是一款玻璃布增强的热固性层压板,专为正寻找更好性能和更高可靠性的FR-4替代材料的无线设计工程师而设计。众所周知,无线数据需求指数级的增长,带来了更高水平的移动网络容量和性能的需求。一直以来,FR-4是许多性能要求不高的射频应用的首要选择。但随着无线传输的基础架构发生变化,对性能要求也不断增长,特别是在小基站和电信级Wi-Fi /许可辅助接入(LAA)应用中,传统FR-4的射频性能和一致性已经难以满足设计要求。 现在,无线电路设计工程师可以通过Kappa 438层压板获得真正的突破,因为它们打破了传统FR-4性能的限制,属于中间级电路材料,极具性价比和稳定性。
[其他]
Apple Pay重磅功能曝光:国内有望率先支持公交卡
4月13日消息,Apple Pay支付在国内上线一年多,不过可见国内用Apple Pay支付的不算多,大多数用户喜欢用微信支付、 支付宝 的支付方式。现在最新消息,苹果将有可能像日本那样用Apple Pay支持公交卡。   据外媒消息了解,在iOS 10.3.1中发现“关于Apple Pay与隐私”的协议中,提到了关于Apple Pay与交通卡的绑定政策,如果您将已启用Apple Pay的交通卡添加到Wallet,那么交通卡信息将与iCloud账户关联。同时,卡片被设置为快捷交通卡,则无需Touch ID或密码解锁即可正常刷卡,也就是说只要经过正确设置,用Apple Pay刷卡和手持公交卡刷卡几乎没有差别。   之前消息了解,
[手机便携]
用户在Apple Store使用Apple Pay的每笔交易都会捐款1美元
据 MacRumors 报道,从现在起到 4 月 22 日地球日,苹果公司计划为在 Apple Store 零售店、通过 Apple Store 应用或在 Apple.com 网站进行的每一笔 Apple Pay 交易向世界野生动物基金会捐赠 1 美元。   苹果在今天发给 Apple Pay 用户的电子邮件中宣布了这项促销活动,这也是苹果往年做过的促销活动,不过受益的慈善机构不同。   “60 年来,世界野生动物基金会一直致力于保护自然,减少对地球上生命多样性的最紧迫威胁。世界野生动物基金会将尖端的保护科学与该领域合作伙伴的集体力量联系起来,努力开发和提供创新的解决方案,保护社区、野生动物和它们生活的地方。”   苹果公司还
[手机便携]
用户在<font color='red'>Ap</font>ple Store使用<font color='red'>Ap</font>ple Pay的每笔交易都会捐款1美元
TigerGraph AI/ML技术助力改善急性淋巴细胞白血病疗效
图分析平台提供商TigerGraph宣布,全球技术和自然科学领域的领先大学丹麦工业大学正在将TigerGraph的高级图分析与机器学习和人工智能(AI)技术结合,以改善急性淋巴细胞白血病的治疗效果。 作为丹麦和瑞典的重大合作项目,丹麦工业大学的研究人员旨在为患有儿童癌症的每个人绘制遗传物质结构图。同时,该项目还是欧盟资助的iCOPE(区域间儿童肿瘤精密医学探索)更大合作项目的部分,研究过程从患者血液测试开始,通过全基因组测序(WGS)与RNA-seq表达数据配对,用于发现与增强子突变相关或可能由其引起的异常表达模式。iCOPE的长期目标是改善癌症儿童的诊断、治疗、治愈率以及整体生活质量。 研究过程生成大量数据,而使用
[医疗电子]
TigerGr<font color='red'>ap</font>h AI/ML技术助力改善急性淋巴细胞白血病疗效
NVIDIA Instant NeRF 赢得 SIGGRAPH 最佳论文,在成千上万的下载中激发创意热潮
NVIDIA Instant NeRF 赢得 SIGGRAPH 最佳论文,在成千上万的下载中激发创意热潮 世界各地的开发者和创作者下载了来自 NVIDIA Research 的最新代码,以使用 2D 图像创建令人惊叹的 3D 场景。 3D 内容创作者纷纷开始使用逆向渲染工具NVIDIA Instant NeRF ,它能够将静态图像变成逼真的 3D 场景。 自今年早些时候首次发布以来,全球已有数万名开发者下载了 Instant NeRF 的源代码,使用它渲染出美轮美奂的场景,并在社交媒体上分享精彩的作品。 Instant NeRF 的学术研究于 8 月 8 日至 11 日在温哥华和线上举行的 SIGGRAPH
[嵌入式]
NVIDIA Instant NeRF 赢得 SIGGR<font color='red'>AP</font>H 最佳论文,在成千上万的下载中激发创意热潮
AP384XC系列PWM控制器的设计考虑
Ⅰ.主要特点简介 384X系列电流型PWM控制器已广泛应用于开关电源设计中。许多半导体厂商都生产此标准电源管理控制芯片。表一列出了BCD和三个主要竞争对手产品的关键参数对比。   与竞争对手的产品相比,BCD的AP384XC具有如下特点: 1.低启动电流 2.低工作电流 3.内部过温保护功能 这些特点不仅能够提供更加可靠的过温保护,而且能降低开关电源在空载待机时的功耗。 同时,由于启动电流小,AP384XC的启动电路参数应当和竞争对手产品稍有不同。在某些应用中,一个简单的直接替代可能会产生问题,尤其是在短路工作模式中。 在其它部分的性能参数上,例如内部运放,参考电压,PWM部分,驱动能力,欠压保护以及启动关断时
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved