esp32开发与应用(再谈wifi的使用)
2026/6/12 3:10:26 网站建设 项目流程

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

和其他所有的mcu相比较,esp32很大一个优势就是它的wifi和bt。bt这部分,也就是蓝牙,主要是消费级。但是wifi,那用的地方就很多,不管是消费级,还是企业级,都有很多可以使用的地方,所以你也就看到,为什么大家都喜欢用esp32做iot设备了。

1、不用准备连线

模块自己就带wifi信号,不需要任何外接连线。

2、只需要一个无线路由器

既然是wifi,那么我们可以测试最简单的station模式。也就是大家都连接到同一个路由器上面,这样得到ip之后,就可以通过pc ping设备的方式,确认是不是esp32真的被ping通。

3、不只是arduino可以开发wifi

前面估计是为了借助arduino推广esp32,降低使用门槛,所以在arduino上面使用esp32还是很方便的,尤其是wifi。那么回到了esp-idf,其实使用纯c开发wifi也很简单,不需要安装第三方库,不需要修改CMakeLists.txt,就可以使用wifi。

4、通过ai搜索代码

这一切都准备好之后,就可以通过关键词提示ai,让ai帮助我们给出一份代码。比如这样说,用esp-idf写一段wifi的demo代码,最好是tcp协议的。那么,很快我们就可以得到这样的代码,

#include <stdio.h> #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_wifi.h" #include "esp_event.h" #include "esp_log.h" #include "nvs_flash.h" #include "esp_netif.h" #include "lwip/sockets.h" #include "lwip/netdb.h" #define WIFI_SSID "NETGEAR" #define WIFI_PASSWORD "12345678" static const char *TAG = "WIFI_DEMO"; static bool wifi_connected = false; static void wifi_event_handler( void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { esp_wifi_connect(); } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { wifi_connected = false; ESP_LOGI(TAG, "wifi disconnected, reconnect"); esp_wifi_connect(); } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); wifi_connected = true; } } static void wifi_init_sta(void) { ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK( esp_event_loop_create_default()); esp_netif_create_default_wifi_sta(); 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)); ESP_ERROR_CHECK( esp_event_handler_register( IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL)); wifi_config_t wifi_config = { .sta = { .ssid = WIFI_SSID, .password = WIFI_PASSWORD, }, }; ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK( esp_wifi_set_config( WIFI_IF_STA, &wifi_config)); ESP_ERROR_CHECK( esp_wifi_start()); ESP_LOGI(TAG, "wifi start"); } static void tcp_server_task(void *arg) { int listen_sock; int client_sock; struct sockaddr_in server_addr; listen_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = INADDR_ANY; bind(listen_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)); listen(listen_sock, 1); ESP_LOGI(TAG, "tcp server listen 8080"); while (1) { struct sockaddr_in client_addr; socklen_t len = sizeof(client_addr); client_sock = accept(listen_sock, (struct sockaddr *)&client_addr, &len); if (client_sock < 0) { continue; } ESP_LOGI(TAG, "client connected"); while (1) { char rx_buf[128]; int ret = recv(client_sock, rx_buf, sizeof(rx_buf) - 1, 0); if (ret <= 0) { break; } rx_buf[ret] = 0; ESP_LOGI(TAG, "recv:%s", rx_buf); send(client_sock, rx_buf, strlen(rx_buf), 0); } close(client_sock); ESP_LOGI(TAG, "client disconnected"); } } void app_main(void) { ESP_ERROR_CHECK( nvs_flash_init()); wifi_init_sta(); while (!wifi_connected) { vTaskDelay(pdMS_TO_TICKS(100)); } xTaskCreate( tcp_server_task, "tcp_server", 4096, NULL, 5, NULL); }

5、编译、链接和测试

得到代码之后,马上编译。如果没有问题的话,就可以烧入、启动看看。这个时候,通过打印确定esp32获取的到p地址之后,就可以看看是不是pc可以ping通esp32设备。如果可以,重新修改wifi密码,看看修改之后打印是什么情况。

这一切都ok之后,再回过头去看一下代码和流程,可以好好学一下怎么用esp32连接wifi了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询