esp32 socket
时间: 2023-08-04 21:09:02 浏览: 97
ESP32是一款基于WiFi和蓝牙的低功耗系统级芯片,它可以用于构建物联网设备和其他无线通信应用。在ESP32上,你可以使用socket编程来进行网络通信。
使用socket编程可以实现TCP或UDP的网络通信。在ESP32上,你可以使用ESP-IDF(ESP32的官方开发框架)提供的相关API来操作socket。下面是一个简单的示例,演示如何在ESP32上创建一个TCP socket连接:
```c
#include <stdio.h>
#include <string.h>
#include <sys/param.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_wifi.h"
#include "esp_system.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_netif.h"
#include "esp_eth.h"
#include "esp_tls.h"
#include "lwip/sockets.h"
#define TAG "SOCKET_EXAMPLE"
void tcp_client_task(void *pvParameters) {
char addr_str[128];
int addr_family;
int ip_protocol;
while (1) {
struct sockaddr_in dest_addr;
dest_addr.sin_addr.s_addr = inet_addr("192.168.0.100");
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(8080);
addr_family = AF_INET;
ip_protocol = IPPROTO_IP;
inet_ntoa_r(dest_addr.sin_addr, addr_str, sizeof(addr_str) - 1);
int sock = socket(addr_family, SOCK_STREAM, ip_protocol);
if (sock < 0) {
ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
break;
}
ESP_LOGI(TAG, "Socket created");
int err = connect(sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
if (err != 0) {
ESP_LOGE(TAG, "Socket unable to connect: errno %d", errno);
break;
}
ESP_LOGI(TAG, "Successfully connected");
char *msg = "Hello, Server!";
int err_send = send(sock, msg, strlen(msg), 0);
if (err_send < 0) {
ESP_LOGE(TAG, "Error occurred during sending: errno %d", errno);
break;
}
ESP_LOGI(TAG, "Message sent");
char rx_buffer[128];
int len = recv(sock, rx_buffer, sizeof(rx_buffer) - 1, 0);
if (len < 0) {
ESP_LOGE(TAG, "Error occurred during receiving: errno %d", errno);
break;
}
rx_buffer[len] = '\0';
ESP_LOGI(TAG, "Received %d bytes: %s", len, rx_buffer);
close(sock);
ESP_LOGI(TAG, "Socket closed");
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
vTaskDelete(NULL);
}
void app_main() {
ESP_ERROR_CHECK(nvs_flash_init());
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_start());
xTaskCreate(tcp_client_task, "tcp_client", 4096, NULL, 5, NULL);
}
```
以上示例代码创建了一个TCP socket连接,连接到IP地址为192.168.0.100的服务器的端口8080。它首先创建一个socket,然后连接到服务器,发送一条消息并接收服务器的响应。最后关闭socket。
请注意,这只是一个简单的示例,你可以根据自己的需求进行更多的调整和扩展。你还可以使用相应的API来实现UDP socket通信。