|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一直想把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
[cpp] view plain copy
[li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li]#define RECV_BUF_SIZE 96//定义接收的缓存,尽可能的大,防止溢出 |
| [/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li]#define STATUS_GETIP 2 //获取到IP |
| [/li][li]#define STATUS_GETLINK 3 //建立连接 |
| [/li][li]#define STATUS_LOSTLINK 4 //失去连接 |
| [/li][li]#define STATUS_LOSTIP 5 //未获取到IP |
| [/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li]uint8_t *buffer, uint32_t len); |
| [/li][li]recv(uint8_t *buffer, uint32_t buffer_size, uint32_t timeout); |
| [/li][li][/li][li][/li][li][/li]
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
[cpp] view plain copy
[li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li] UartBegin(115200,&USART3Conf,&utChar); | [/li][li][/li][li] UartBegin(19200,&USART3Conf,&utChar); | [/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li] (0 == WifiInit(HOST_NAME,HOST_PORT)); |
| [/li][li][/li][li][/li][li][/li][li] (SerialAvailable() > 5) |
| [/li][li][/li][li] len = recv(buffer, RECVBUF_SIZE, 100); | [/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li][li] //定时检查连接是否正常,如果不正常,wifi复位重新连接 |
| [/li][li] (getSystemStatus() != STATUS_GETLINK) |
| [/li][li][/li][li][/li][li] (!WifiInit(HOST_NAME,HOST_PORT)); |
| [/li][li][/li][li][/li][li] DBG("TCP link tick" |
| [/li][li][/li][li][/li][li][/li][li][/li][li][/li][li][/li]
|
|