基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接

    一直想把wifi模块和stm32连接起来,但是网上找了很久,并没有C语言相关的库,只有基于arduino的ESP8266 C++库,这个库是没办法直接给stm32使用的,所以自己动手丰衣足食,自己手动将基于arduino的ESP8266 C++库移植成简单的C库,方便使用,目前这个库实现了基本的功能,可以实现波特率修改,smartlink,断线重连等功能,wifi模块主要运行在STA模式。

因为原来是C++ 的库,这里我也对C++的字符串部分和串口读取部分做了修改,具体请见我的另一篇博客:

http://blog.csdn.net/liucheng5037/article/details/50504199

还有就是arduino的库的修改,之前的arduino 的 ESP8266 C++库是没有smartlink功能的:

http://blog.csdn.net/liucheng5037/article/details/50464172

本博客使用的工程及库文件下载,可直接编译使用

http://download.csdn.net/detail/liucheng5037/9401000

下面开始简单解析下这个C语言库的使用方法,具体实现方法这里就不多论述了,大家直接看程序就好了:

接口文件:ESP8266.h


#ifndef __ESP8266_H__
#define __ESP8266_H__
 
 
typedef unsigned char uint8_t;
typedef signed char int8_t;
typedef unsigned int uint32_t;
typedef signed int int32_t;
 
extern volatile unsigned long sys_tick;
 
#define RECV_BUF_SIZE  96//定义接收的缓存,尽可能的大,防止溢出
#define TIME_OUT 100
 
#define AI_LINK 0
#define ESP_TOUCH 1
#define AIR_LINK 2
 
#define STATUS_GETIP 2 //获取到IP
#define STATUS_GETLINK 3 //建立连接
#define STATUS_LOSTLINK 4 //失去连接
#define STATUS_LOSTIP 5 //未获取到IP
 
//function
void AutoLink(void);
int WifiInit(const char *addr, uint32_t port);
void timer1msINT(void);
unsigned long millis(void);
void delay(unsigned int ms);
int SetBaud(uint32_t baud);
int restart(void);
int setOprToStationSoftAP(void);
int smartLink(uint8_t  type,char *link_msg);
int stopSmartLink(void);
int getSystemStatus(void);
int disableMUX(void);
int createTCP(const char *addr, uint32_t port);
int send(const uint8_t *buffer, uint32_t len);
int recv(uint8_t *buffer, uint32_t buffer_size, uint32_t timeout);
void rx_empty(void);
 
#endif

先简单介绍几个函数:
void timer1msINT(void);

1ms定时器自加函数,提供库里面各个对时间有要求的函数提供基准,该函数必须有1ms定时器中断调用。

unsigned long millis(void);

返回系统当前时间,从复位开始按ms计时的时间。

int SetBaud(uint32_t baud);

波特率设置,这个很重要,一般出厂的波特率是115200,这里我们要设置成为我们需要的波特率。

int restart(void);

模块重启指令,同时也有AT测试指令在里面。

int WifiInit(const char *addr, uint32_t port);

wifi初始化系列指令,默认已STA方式初始化,在设置完波特率后需要调用此函数,内部一直循环执行,直到连接成功为止。

void AutoLink(void);

自动连接,包含smartlink连接,当自动连接不上时自动切换到smartlink连接,可以微信或ESP-TOUCH的方式连接。

下面看个demo介绍如何使用这个库:

main.c


int main(void)
{
    int len=0;
    UserLEDInit();
    USART1Conf(9600);
    DBG("system begin");
    TIM2_Init();
 
    while(1)
    {
        DBG("chang baud");
        delay(500);
        UartBegin(115200,&USART3Conf,&PutChar);
        SetBaud(19200);
        UartBegin(19200,&USART3Conf,&PutChar);//更改波特率到19200
        if(0 != SetBaud(19200))//在新波特率下检查是否成功
        {
            break;//成功就退出
        }    
    }
 
    while(0 == WifiInit(HOST_NAME,HOST_PORT));
    
    while(1)
    {    
        if(SerialAvailable() > 5)
        {
            len = recv(buffer, RECVBUF_SIZE, 100);
            if (len > 0)
            {
                tick_3s = 0;
                send(buffer, len);
            } 
        }
        if(tick_5ms >= 5)
        {
            tick_5ms = 0;
            tick_3s++;
            tick_500ms++;
            if(tick_500ms >= 100)
            {
                tick_500ms = 0;
                LEDToggle(LED_PIN);
            }
            if(tick_3s >= 600)
            {
                tick_3s = 0;
                //定时检查连接是否正常,如果不正常,wifi复位重新连接
                if (getSystemStatus() != STATUS_GETLINK)
                {
                    DBG("TCP unlink");
                    while(!WifiInit(HOST_NAME,HOST_PORT));
                }else
                {
                    DBG("TCP link tick");
                }            
            }            
        }
 
    }
}

--------------------- 
作者:追梦的魂影 
来源:CSDN 
原文:https://blog.csdn.net/liucheng5037/article/details/50504806 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值