写一个esp32-c3用AT指令,首先通过AT指令配网连到wifi,然后再tcp到服务器的示例,要求尽可能详细

下面是一个关于如何使用 ESP32-C3 通过 AT 指令配网连接 Wi-Fi,并通过 TCP 连接到服务器的详细示例。我们将从基础开始,逐步介绍每个步骤。

硬件准备

  1. ESP32-C3 开发板(如 ESP32-C3 DevKit)
  2. USB 数据线,用于与计算机连接

软件准备

  • 串口终端工具(如 PuTTY、Tera Term 或 Arduino Serial Monitor)

连接 ESP32-C3

  1. 使用 USB 数据线将 ESP32-C3 开发板连接到计算机。
  2. 确保安装了相应的驱动程序,以便计算机可以识别开发板。

AT 指令集

确保您的 ESP32-C3 上已经烧录了支持 AT 指令的固件。可以从 Espressif 的官方网站下载相关固件。

示例步骤

1. 打开串口终端
  • 设置串口参数:波特率(Baud Rate)一般设置为 115200,数据位 8,停止位 1,无奇偶校验。
2. 检查 AT 指令

在终端输入以下命令以确认设备正常工作:

AT

如果返回 OK,表示设备正常。

3. 设置工作模式

在连接 Wi-Fi 之前,需要设置 ESP32-C3 的工作模式为 Station 模式:

AT+CWMODE=1

如果返回 OK,则设置成功。

4. 连接 Wi-Fi

使用以下命令连接到 Wi-Fi 网络:

AT+CWJAP="your_SSID","your_PASSWORD"

your_SSID 替换为您的 Wi-Fi 名称,your_PASSWORD 替换为您的 Wi-Fi 密码。连接成功后,设备将返回如下信息:

OK
5. 获取 IP 地址

连接成功后,您可以检查设备的 IP 地址:

AT+CIFSR

如果成功,将显示分配给 ESP32-C3 的 IP 地址。

6. TCP 连接

在连接到 Wi-Fi 后,可以通过 TCP 连接到服务器。使用以下命令:

AT+CIPSTART="TCP","your_server_ip",your_server_port

your_server_ip 替换为服务器的 IP 地址,将 your_server_port 替换为您要连接的端口号。可以打开网址http://tcp.doit.am/,用这上面的纯透传工具。如果连接成功,返回的信息应为:

CONNECT
7. 发送数据

一旦连接成功,可以发送数据到服务器。使用以下命令格式:

AT+CIPSEND

发送命令后,您将看到提示符 >。此时可以输入要发送的数据,输入完成后按 Ctrl + Z 结束发送。例如:

Hello, Server!

返回的信息应该是:

SEND OK
8. 关闭连接

完成数据发送后,您可以关闭 TCP 连接:

AT+CIPCLOSE

返回 CLOSED 表示连接已成功关闭。

9. 断开 Wi-Fi 连接

如果您需要断开 Wi-Fi 连接,可以使用:

AT+CWQAP

返回 OK 表示成功断开。

完整 AT 指令序列示例

下面是整个流程的 AT 指令序列汇总:

AT                     // 检查设备
AT+CWMODE=1           // 设置工作模式为 Station
AT+CWJAP="your_SSID","your_PASSWORD" // 连接 Wi-Fi
AT+CIFSR              // 获取 IP 地址
AT+CIPSTART="TCP","your_server_ip",your_server_port // TCP 连接
AT+CIPSEND            // 发送数据
Hello, Server!        // 要发送的数据
Ctrl + Z              // 结束发送
AT+CIPCLOSE           // 关闭 TCP 连接
AT+CWQAP              // 断开 Wi-Fi 连接

注意事项

  1. AT 指令支持:确保 ESP32-C3 的固件支持所使用的 AT 指令集。
  2. 网络稳定性:在 Wi-Fi 连接过程中,如果信号不佳,可能会导致连接失败。
  3. 错误处理:如果在某个步骤返回 ERROR,请检查输入的 SSID、密码、IP 地址和端口号是否正确。

通过以上步骤,您可以成功使用 ESP32-C3 通过 AT 指令连接到 Wi-Fi,并与服务器进行 TCP 通信。如有疑问,请随时提问!

在这里插入图片描述
模组规格

您可以在ESP32-C3上使用以下代码来设置TCP客户端连接WiFi超时重连: ```c #include "esp_wifi.h" #include "esp_log.h" #include "lwip/err.h" #include "lwip/sys.h" #include "lwip/netdb.h" #include "lwip/dns.h" #include "lwip/sockets.h" #define WIFI_TIMEOUT_MS 10000 // 设置连接WiFi的超时时间为10s #define HOST_IP_ADDR "192.168.1.100" // 设置TCP服务器IP地址 #define HOST_PORT 8080 // 设置TCP服务器端口号 void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { if (event_id == WIFI_EVENT_STA_START) { esp_wifi_connect(); // WiFi STA模式启动时连接WiFi } else if (event_id == WIFI_EVENT_STA_DISCONNECTED) { esp_wifi_connect(); // WiFi STA模式连接断开时重新连接WiFi } } void wifi_init_sta() { wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); esp_wifi_init(&cfg); esp_wifi_set_mode(WIFI_MODE_STA); wifi_config_t wifi_config = { .sta = { .ssid = "your_wifi_ssid", .password = "your_wifi_password", }, }; esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config); esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL); esp_wifi_start(); TickType_t start_tick = xTaskGetTickCount(); // 记录连接WiFi的开始时间 while (1) { wifi_ap_record_t ap_info; if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) { // 获取连接到的WiFi的信息 printf("Connected to %s\n", ap_info.ssid); break; // 连接成功,退出循环 } TickType_t now_tick = xTaskGetTickCount(); if ((now_tick - start_tick) * portTICK_PERIOD_MS > WIFI_TIMEOUT_MS) { // 超时未连接成功,则重新连接WiFi printf("WiFi connection timeout, retrying...\n"); esp_wifi_disconnect(); esp_wifi_connect(); start_tick = now_tick; } vTaskDelay(pdMS_TO_TICKS(1000)); // 等待1s后再次尝试连接WiFi } } void tcp_client_task(void *pvParameters) { int ret; int sock = -1; struct sockaddr_in dest_addr; while (1) { sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { ESP_LOGE("TCP CLIENT", "Failed to create socket"); continue; } dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(HOST_PORT); dest_addr.sin_addr.s_addr = inet_addr(HOST_IP_ADDR); ret = connect(sock, (struct sockaddr*)&dest_addr, sizeof(dest_addr)); if (ret != 0) { ESP_LOGE("TCP CLIENT", "Failed to connect to server"); close(sock); continue; } ESP_LOGI("TCP CLIENT", "Connected to server"); while (1) { // TODO: 在此处添加TCP客户端的业务逻辑 vTaskDelay(pdMS_TO_TICKS(1000)); } close(sock); } } void app_main() { 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); tcpip_adapter_init(); wifi_init_sta(); xTaskCreate(tcp_client_task, "tcp_client_task", 4096, NULL, 5, NULL); } ``` 在该代码中,我们使用了TCP客户端的示例代码,并在其中加入了WiFi连接超时重连的逻辑。在程序初始化时,我们启动了WiFi STA模式并设置连接的WiFi SSID和密码。在连接WiFi时,我们通过`esp_wifi_sta_get_ap_info()`函数获取连接到的WiFi信息,如果10s内未连接成功,则会重新连接WiFi。在TCP连接失败时,我们会关闭套接字并重新尝试连接。当TCP连接成功时,我们可以在`tcp_client_task()`函数中添加TCP客户端的业务逻辑。 注意:在使用该代码时,需要将`your_wifi_ssid`和`your_wifi_password`替换为实际的WiFi SSID和密码,并将`HOST_IP_ADDR`和`HOST_PORT`替换为实际的TCP服务器IP地址和端口号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值