ESP8266开发笔记(三)AP模式下进行TCP Sever连接

一年前本想就ESP8266自己做一套简单的智能家居产品,后面就面临实习和毕业工作就放下了,去做了ZigBee,最近因为一些原因离职了,就想着完成自己大学的这个梦想,在实际开发中,发现网上的ESP8266SDK有太多坑了,这里就做个记录吧,也帮助有一样梦想的博友,我会从一年的进度开始写,烧录程序和安信可IDE的安装就不重复说了,网上有很多最新,实在搞不定在问我吧。

编程软件: 安信可IDEV1.5.2
ESP8266SDK版本: ESP8266_NONOS_SDK-3.0
为了方便测试,我就先把8266的两个串口波特率都设置为9600,直接use_init 函数里面设置

uart_init(9600,9600); // 串口0,串口1

标题我们说了TCP连接是要在AP模式下的,所以我们先把ESP8266设置为AP模式

void Wifi_AP_Init(void)
{
struct softap_config apConfig;   //WiFi参数结构体
apConfig.ssid_len = os_strlen("longfeng_keji");  //设置wifi命长度
 //设置ssid名字
 os_strcpy(apConfig.ssid,"longfeng_keji");
 //设置wifi密码
 //os_strcpy(apConfig.password,"12345678"); 
 //设置加密方式
 apConfig.authmode = AUTH_OPEN;
 //设置信标间隔时长,100ms-60000ms
 apConfig.beacon_interval = 100;
 //通道号,1-13
 apConfig.channel = 11;
 //最大连接数
 apConfig.max_connection = 4;
 //隐藏ssid,false
 apConfig.ssid_hidden = 0;
 //设置wifi soft_ap接口配置,并保存到flash
 wifi_softap_set_config(&apConfig);
 wifi_set_opmode(0x02);
 }

我这里AP热点设置为开放,并没有设置密码,如果要设置密码,把上面的的那条密码注释去掉,修改自己想要的密码,注意: 密码至少要8位,不然运行会出现错误,同时还要把设置加密修改加密,要那种加密可以看这里
typedef enum _auth_mode {
AUTH_OPEN = 0,
AUTH_WEP,
AUTH_WPA_PSK,
AUTH_WPA2_PSK,
AUTH_WPA_WPA2_PSK
} AUTH_MODE;

现在我们已经写好设置AP模式这部分代码了,接下来我们就进行TCP Sever这部分代码的编写了。
首先我们先定义一个TCP结构体

struct espconn User_Tcp_Espconn;

接下来就只要配置结构体里面的内容,根据自己想要的进行设置

void Inter_Init_Tcp(uint32_t Local_port)
{
os_printf("开始连接");
 User_Tcp_Espconn.proto.tcp = (esp_tcp *) os_malloc(sizeof(esp_tcp)); //分配空间
 User_Tcp_Espconn.type = ESPCONN_TCP;  //设置类型为TCP
 User_Tcp_Espconn.state = ESPCONN_NONE; //初始状态
 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 秒
 }

还有,因为我们是作为服务端的,所有ESP8266默认的服务端ip为

192.168.4.1

如果需要修改这个ip,听说是可以修改的,不过因为我没有用到,就没去研究了,如果谁知道怎么修改的话,可以在评论说告诉我下。

假设现在已经连接成功了,那我们就在上面写的连接成功的回调函数里注册其他函数

void ICACHE_FLASH_ATTR
Server_Listen(void *arg)
{
struct espconn *pespconn = arg;
 os_printf("连接成功");
 espconn_regist_recvcb(pespconn,Server_Recv);      //接收
 espconn_regist_sentcb(pespconn,Server_Sent);      //发送
 espconn_regist_disconcb(pespconn,Server_Discon);  //断开连接
 }

接收回调函数

void ICACHE_FLASH_ATTR
Server_Recv(void *arg, char *pdata, unsigned short len)

发送成功回调函数

void ICACHE_FLASH_ATTR
Server_Sent(void *arg)

连接断开回调函数

void ICACHE_FLASH_ATTR
Server_Discon(void *arg)

好了,基本架构我们都写完了,接下来就只需把

Wifi_AP_Init()
Inter_Init_Tcp()

这两个函数放到user_main.c文件中的user_init的这个函数里,烧录固件就可以实现AP模式TCP连接了。

当然最后我们这两个函数肯定不是放在这里,放这里不符合我们要实现智能家居的想法,后面我会随着进度继续写下去的,这篇就到这里就结束了,如果有哪里写错了,欢迎指正。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值