ESP8266 AP_TCP_Server

目录

前言

在user_init当中执行完初始化后,将ESP8266_AP模式,之后1s钟重复定时

在定时回调函数当中,查询AP模式下ESP8266的IP地址,ESP8266成功获取到IP地址后,关闭定时器,初始化网络连接(TCP通信)

在初始化网络连接中(TCP通信)

成功接收网络数据的回调函数

 成功发送网络数据的回调函数

TCP连接断开成功的回调函数

TCP连接异常断开时的回调函数


前言

8266在ap模式下创建tcp server

在user_init当中执行完初始化后,将ESP8266_AP模式,之后1s钟重复定时

void ICACHE_FLASH_ATTR user_init(void)
{
	uart_init(115200,115200);	// 初始化串口波特率
	os_delay_us(10000);			// 等待串口稳定
	os_printf("\r\n=================================================\r\n");
	os_printf("\t Project:\t%s\r\n", ProjectName);
	os_printf("\t SDK version:\t%s", system_get_sdk_version());
	os_printf("\r\n=================================================\r\n");

	// OLED显示初始化
	//--------------------------------------------------------
	OLED_Init();							// OLED初始化
	OLED_ShowString(0,0,"ESP8266 = AP");	// ESP8266模式
	OLED_ShowString(0,2,"IP:");				// ESP8266_IP地址
	OLED_ShowString(0,4,"Remote  = STA");	// 远端主机模式
	OLED_ShowString(0,6,"IP:");				// 远端主机IP地址
	//--------------------------------------------------------

	LED_Init_JX();		// LED初始化


	ESP8266_AP_Init_JX();			// 初始化ESP8266_AP模式

	OS_Timer_1_Init_JX(1000,1);		// 1秒定时(重复)
}

在定时回调函数当中,查询AP模式下ESP8266的IP地址,ESP8266成功获取到IP地址后,关闭定时器,初始化网络连接(TCP通信)

// 软件定时的回调函数
//=============================================================================================================
void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
	struct ip_info ST_ESP8266_IP;	// IP信息结构体
	u8 ESP8266_IP[4];		// 点分十进制形式保存IP


	wifi_get_
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
The ESP32 IDF (Integrated Development Framework) allows developers to create a TCP server on an ESP32 device. Here are the basic steps to create a TCP server: 1. Include the required libraries and initialize the network stack. ```c #include <stdio.h> #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_system.h" #include "esp_wifi.h" #include "esp_event.h" #include "esp_log.h" #include "tcpip_adapter.h" /* Initialize Wi-Fi */ static esp_err_t event_handler(void *ctx, system_event_t *event) { switch(event->event_id) { case SYSTEM_EVENT_STA_START: esp_wifi_connect(); break; case SYSTEM_EVENT_STA_DISCONNECTED: esp_wifi_connect(); break; default: break; } return ESP_OK; } void wifi_init_sta(void) { tcpip_adapter_init(); ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL)); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); wifi_config_t wifi_config = { .sta = { .ssid = "your-ssid", .password = "your-password", }, }; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); ESP_ERROR_CHECK(esp_wifi_start()); } ``` 2. Create a socket and bind it to a local IP address and port number. ```c /* Create a TCP server socket */ int server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (server_socket == -1) { ESP_LOGE(TAG, "Failed to create socket: errno %d", errno); return; } /* Bind the socket to a port */ struct sockaddr_in server_address; server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(80); int err = bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)); if (err != 0) { ESP_LOGE(TAG, "Socket binding failed: errno %d", errno); close(server_socket); return; } ``` 3. Listen for incoming connections. ```c /* Listen for incoming connections */ err = listen(server_socket, 1); if (err != 0) { ESP_LOGE(TAG, "Error occurred while listening for incoming connections: errno %d", errno); close(server_socket); return; } ``` 4. Accept incoming connections and handle client requests. ```c /* Accept incoming connections and handle client requests */ while (1) { struct sockaddr_in client_address; socklen_t client_address_len = sizeof(client_address); int client_socket = accept(server_socket, (struct sockaddr *)&client_address, &client_address_len); if (client_socket == -1) { ESP_LOGE(TAG, "Error occurred while accepting incoming connection: errno %d", errno); continue; } char request_buffer[1024] = {0}; read(client_socket, request_buffer, sizeof(request_buffer)-1); ESP_LOGI(TAG, "Received request: %s", request_buffer); char response_buffer[1024] = {0}; sprintf(response_buffer, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<html><body><h1>Hello, World!</h1></body></html>\r\n"); write(client_socket, response_buffer, strlen(response_buffer)); shutdown(client_socket, 0); close(client_socket); } ``` In this example, we create a simple HTTP server that responds with "Hello, World!" to any incoming request. You can modify the response to suit your needs. Note that this is a very basic example and you'll need to add error handling, thread safety, and other features to make it production-ready.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paradise_Violet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值