完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
参考例程udp_server wifi配置为AP模式
recfrom可以接收到其他连接设备发送的数据,马上sendto 对方也可以收到。 但是没有收到对方数据,主动sento对方,对方无法收到。 请教该如何设置,udp才能主动向外sendto 数据? |
|
相关推荐
1个回答
|
|
要在ESP32-C3上使用AP模式配置UDP并主动向外发送数据,您需要按照以下步骤操作:
1. 初始化WiFi并设置为AP模式: ```c #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_wifi.h" #include "esp_event_loop.h" #include "esp_log.h" #define EXAMPLE_WIFI_SSID "ESP32-C3-AP" #define EXAMPLE_WIFI_PASS "123456789" #define EXAMPLE_MAX_STA_CONN 2 // 最大连接数 static const char *TAG = "example"; static esp_err_t example_event_handler(void *ctx, system_event_t *event) { return ESP_OK; } void app_wifi_init() { ESP_LOGI(TAG, "Initializing WiFi with AP mode..."); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); esp_err_t ret = esp_wifi_init(&cfg); if (ret != ESP_OK) { ESP_LOGI(TAG, "Failed to initialize WiFi!"); return; } esp_event_loop_create_default(); esp_wifi_set_storage(WIFI_STORAGE_RAM); wifi_config_t wifi_config = { .ap = { .ssid = EXAMPLE_WIFI_SSID, .ssid_len = strlen(EXAMPLE_WIFI_SSID), .password = EXAMPLE_WIFI_PASS, .max_connection = EXAMPLE_MAX_STA_CONN, .authmode = WIFI_AUTH_WPA_WPA2_PSK }, }; ret = esp_wifi_set_mode(WIFI_MODE_AP); if (ret != ESP_OK) { ESP_LOGI(TAG, "Failed to set WiFi mode!"); return; } ret = esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config); if (ret != ESP_OK) { ESP_LOGI(TAG, "Failed to set WiFi config!"); return; } ret = esp_wifi_start(); if (ret != ESP_OK) { ESP_LOGI(TAG, "Failed to start WiFi!"); return; } ESP_LOGI(TAG, "WiFi started with AP mode!"); } ``` 2. 创建UDP服务器并绑定到ESP32-C3的IP地址: ```c #include "lwip/sockets.h" #include "lwip/dns.h" #include #define UDP_SERVER_IP "192.168.4.1" // ESP32-C3的IP地址 #define UDP_SERVER_PORT 1234 void udp_server_init() { int sockfd; struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len = sizeof(client_addr); char buffer[128]; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { ESP_LOGE(TAG, "Cannot create socket!"); return; } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(UDP_SERVER_PORT); server_addr.sin_addr.s_addr = inet_addr(UDP_SERVER_IP); if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { ESP_LOGE(TAG, "Bind failed!"); close(sockfd); return; } while (1) { int len = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_addr_len); if (len < 0) { ESP_LOGE(TAG, "Recv failed!"); continue; } buffer[len] = 0; ESP_LOGI(TAG, "Received: %s", buffer); // 处理接收到的数据... // 向客户端发送数据 sendto(sockfd, buffer, len, 0, (struct sockaddr *)&client_addr, client_addr_len); } close(sockfd); } ``` 3. 在主函数中调用初始化函数: ```c void app_main() { app_wifi_init(); udp_server_init(); } ``` 这样,您的ESP32-C3将作为AP,同时运行UDP服务器,接收来自连接设备的数据并主动向外发送数据。请确保您的设备连接到ESP32-C3的AP,并使用正确的IP地址和端口号进行通信。 |
|
|
|
只有小组成员才能发言,加入小组>>
733 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
445浏览 5评论
445浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 13:40 , Processed in 0.657998 second(s), Total 49, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号