ESP8266--SDK开发(TCP服务端)

一、详细步骤

1、导入头文件

#include "espconn.h"//TCP连接需要的头文件
#include "mem.h" //系统操作需要的头文件

2、创建全局TCP连接配置的结构体

struct espconn user_tcp_espconn;	//TCP连接配置的结构体

3、配置ESP8266为AP模式
手机或电脑必须和ESP8266处于同一局域网下才能进行连接通信,所以将ESP8266配置为AP模式,充当路由器;

手机或电脑连接ESP8266发射出来的WiFi

//配置ESP8266为AP模式
//------------------------------------------------------------------------------------------------------
struct softap_config apConfig;
wifi_set_opmode(0x02);    //设置为AP模式,并保存到 flash
apConfig.ssid_len = 8;						//设置ssid长度
os_strcpy(apConfig.ssid, "SunLaiFu");	    //设置wifi名字,注意这个是8266发出来的热点
os_strcpy(apConfig.password, "12345678");	//设置密码
apConfig.authmode = 3;                      //设置加密模式
apConfig.beacon_interval = 100;            //信标间隔时槽100 ~ 60000 ms
apConfig.channel = 1;                      //通道号1 ~ 13
apConfig.max_connection = 4;               //最大连接数
apConfig.ssid_hidden = 0;                  //隐藏SSID
wifi_softap_set_config(&apConfig);		//设置 WiFi soft-AP 接口配置,并保存到 flash
//------------------------------------------------------------------------------------------------------

4、配置TCP服务器

//配置TCP服务器
//------------------------------------------------------------------------------------------------------
user_tcp_espconn.proto.tcp = (esp_tcp *) os_zalloc(sizeof(esp_tcp)); //分配空间
user_tcp_espconn.type = ESPCONN_TCP; //设置类型为TCP协议
user_tcp_espconn.proto.tcp->local_port = Local_port; //本地端口
espconn_regist_connectcb(&user_tcp_espconn, server_listen); //注册 TCP 连接成功建立后的回调函数
espconn_regist_reconcb(&user_tcp_espconn, server_recon); //注册 TCP 连接发生异常断开时的回调函数,可以在回调函数中进行重连
espconn_accept(&user_tcp_espconn); //创建 TCP server,建立侦听
espconn_regist_time(&user_tcp_espconn, 180, 0); //设置超时断开时间 单位:秒,最大值:7200 秒
//------------------------------------------------------------------------------------------------------

5、添加注册监听函数

//监听回调函数
void ICACHE_FLASH_ATTR server_listen(void *arg)  //注册 TCP 连接成功建立后的回调函数
{
	struct espconn *pespconn = arg;
	espconn_regist_recvcb(pespconn, server_recv);  //接收
	espconn_regist_sentcb(pespconn, server_sent);  //发送
	espconn_regist_disconcb(pespconn, server_discon);  //断开
}

5、添加接收、发送、断开、重连回调函数

void ICACHE_FLASH_ATTR server_recv(void *arg, char *pdata, unsigned short len) {
	os_printf("recv data: %s\n", pdata);
	espconn_sent((struct espconn *) arg, "received!", strlen("received!"));

}
void ICACHE_FLASH_ATTR server_sent(void *arg) {
	os_printf("send successful!\n");
}
void ICACHE_FLASH_ATTR server_discon(void *arg) {
	os_printf("disconnected!\n");
}

二、效果展示

编译成功

在这里插入图片描述

烧录成功

在这里插入图片描述

打开串口调试助手,复位上电

在这里插入图片描述

连接ESP8266发射的WiFi

请添加图片描述

创建TCP客户端连接ESP8266的TCP服务器
请添加图片描述
请添加图片描述
发送消息测试
请添加图片描述


三、详细代码

user_main.c

#include "espconn.h"
#include "mem.h"

struct espconn user_tcp_espconn;

void ICACHE_FLASH_ATTR server_recv(void *arg, char *pdata, unsigned short len) {
	os_printf("recv data: %s\n", pdata);
	espconn_sent((struct espconn *) arg, "received!", strlen("received!"));

}
void ICACHE_FLASH_ATTR server_sent(void *arg) {
	os_printf("send successful!\n");
}
void ICACHE_FLASH_ATTR server_discon(void *arg) {
	os_printf("disconnected!\n");
}

void ICACHE_FLASH_ATTR server_listen(void *arg)  //注册 TCP 连接成功建立后的回调函数
{
	struct espconn *pespconn = arg;
	espconn_regist_recvcb(pespconn, server_recv);  //接收
	espconn_regist_sentcb(pespconn, server_sent);  //发送
	espconn_regist_disconcb(pespconn, server_discon);  //断开
}
void ICACHE_FLASH_ATTR server_recon(void *arg, sint8 err) //注册 TCP 连接发生异常断开时的回调函数,可以在回调函数中进行重连
{
	os_printf("connect error: %d\r\n", err); //%d,用来输出十进制整数
}

void Inter213_InitTCP(uint32_t Local_port) {
	user_tcp_espconn.proto.tcp = (esp_tcp *) os_zalloc(sizeof(esp_tcp)); //分配空间
	user_tcp_espconn.type = ESPCONN_TCP; //设置类型为TCP协议
	user_tcp_espconn.proto.tcp->local_port = Local_port; //本地端口

	espconn_regist_connectcb(&user_tcp_espconn, server_listen); //注册 TCP 连接成功建立后的回调函数
	espconn_regist_reconcb(&user_tcp_espconn, server_recon); //注册 TCP 连接发生异常断开时的回调函数,可以在回调函数中进行重连
	espconn_accept(&user_tcp_espconn); //创建 TCP server,建立侦听
	espconn_regist_time(&user_tcp_espconn, 180, 0); //设置超时断开时间 单位:秒,最大值:7200 秒

}

void WIFI_Init() {
	struct softap_config apConfig;
	wifi_set_opmode(0x02);    //设置为AP模式,并保存到 flash
	apConfig.ssid_len = 8;						//设置ssid长度
	os_strcpy(apConfig.ssid, "SunLaiFu");	    //设置wifi名字,注意这个是8266发出来的热点
	os_strcpy(apConfig.password, "12345678");	//设置密码
	apConfig.authmode = 3;                      //设置加密模式
	apConfig.beacon_interval = 100;            //信标间隔时槽100 ~ 60000 ms
	apConfig.channel = 1;                      //通道号1 ~ 13
	apConfig.max_connection = 4;               //最大连接数
	apConfig.ssid_hidden = 0;                  //隐藏SSID

	wifi_softap_set_config(&apConfig);		//设置 WiFi soft-AP 接口配置,并保存到 flash
}

void tcp_service_init()		//初始化
{
	WIFI_Init();
	Inter213_InitTCP(6666);		//本地端口
}

/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{
	uart_init(115200,115200);
	os_delay_us(1000);
	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");

	tcp_service_init();
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贝勒里恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值