基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接
来源:互联网 发布:centos 安装本地rpm包 编辑:程序博客网 时间:2024/04/30 04:17
一直想把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//functionvoid 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);//更改波特率到19200if(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");}}}}}
- 基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接
- STM32 wifi(ESP8266)模块实验
- wifi模块 之 SmartLink
- wifi模块 之 SmartLink
- wifi模块的smartlink智能联网功能的实现原理是什么??
- 【库和教程】ESP8266 WIFI模块实现远程wifi控制
- ESP8266 WIFI模块实现远程wifi控制
- 51单片机连接ESP8266串口WiFi模块
- 【arduino】通过Esp8266-01模块实现的WiFi通信(2)与电脑的连接和烧写
- 基于WIFI模块(ESP8266)与非同一个局域网内服务器建立连接
- 基于WIFI模块(ESP8266)与非同一个局域网内服务器建立连接
- 【有用】 基于WIFI模块(ESP8266)与非同一个局域网内服务器建立连接
- WIFI模块ESP8266使用总结和示例
- ESP8266 WiFi 模块连接乐为物联云实现PM2.5测试系统
- 基于WiFi ESP8266 TCP UDP网络和SHT20的温湿度变送器方案设计
- ESP8266 wifi模块使用
- ESP8266 WIFI 模块使用说明
- ESP8266串口WiFi模块
- python + opencv 中 kp(关键点) 的形式及提取坐标方法
- 数组、函数、变量/作用域/存储区/生命周期/程序优化、exit标准函数、递归函数
- 欢迎使用CSDN-markdown编辑器
- 调用活动,通过intent隐式调用
- Kaggle 机器学习竞赛冠军及优胜者的源代码汇总
- 基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接
- web前端的坑
- Java集合类详解
- OpenCV2:Mat属性type,depth,step
- 前端接入HTTP协议浅析
- verilog语法注意部分(转)
- java获取指定日期所在周的第一天和最后一天
- 移动+透明渐变叠加动画Demo
- memcpy && strncpy的区别,memcpy && strcpy的区别