一直想把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);//更改波特率到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连接相关推荐

  1. 基于stm32的ESP8266 WIFI 模块实验

    一.准备 功能:在STM32F103 开发板上使用ESP8266 WIFI 模块. 硬件:ESP8266 WIFI 模块.STM32F103mini(或其他单片机).手机一部 软件:手机端网络调试助手 ...

  2. 基于STM32的ESP8266模块控制多路继电器

    基于STM32的ESP8266模块控制多路继电器 1.视频讲解 基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制 物联网视频教程STM32+ESP8266 2.实物设计 ESP82 ...

  3. 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

    前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...

  4. 基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据

    前言:上一章节我们通过串口调试助手,成功获取到天气数据,这一节我们将通过MCU的串口发送.接收功能,实现MCU获取天气数据. 传送门:基于STM32F103的网络天气时钟(1)---------通过串 ...

  5. 基于STM32的ESP8266使用教程(一)

    关于为什么要写这篇文章,因为之前在做一个项目的时候需要使用WIFI模块.X宝搜WIFI模块的时候推荐ESP8266这个模块,说是价格便宜.使用方便.但是在使用的过程中发现的确使用方便(因为是基于AT指 ...

  6. 基于STM32的ESP8266使用教程(二)

    写在前面:博主懒癌晚期,考研结束之后想着HAPPY一下,结果把这事忘了,开学了又有很多事情要干,直到昨天一博友留言(有邮件提醒),才想起有这么个坑要填,特来填坑.相关软件程序请参考"基于ST ...

  7. 基于天问51-Core自制开发WIFI模块连接MQTT巴法云平台-微信小程序显示温度数据

    目 录 一.摘要 二.项目准备材料 三.硬件总体设计 四.软件代码设计 五.整体测试联调 六.效果展示 一.摘要 本项目基于天问51-Core最小系统开发,自行设计PCB电路,主要包括DHT11.ES ...

  8. 3、★☛基于STM32的手机通过wifi控LED灯√♠★

    3.★★☞基于STM32的手机通过wifi控LED灯

  9. ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340上传程序不显示

    买的ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340在上传店家提供的示例程序可以上传成功,但屏幕不显示,如下图. 方法:选择开发板时,选择"LOLIN(W ...

最新文章

  1. 概念的理解 —— 奇点(singularity point)、第一性原理(first principle)
  2. 【MM配置】 MM组织架构的配置
  3. 6 Springboot 整合Redis
  4. 上线4年从畅销Top 200到Top 20,这款刀塔传奇like卡牌正在美国市场逆流而上
  5. 数据庞大繁杂,如何精简挖掘?
  6. 前端学习(833):操作元素小结
  7. 【maven配置】IDEA自动生成的pom文件报错:URI Is Not Registered
  8. nginx+pm2+nodejs部署
  9. 44特征02——相似对角化与方幂、代数重数与几何重数、可对角化的概念、相似对角化的条件、矩阵方幂的计算
  10. android编写蓝牙工具类,【Android BLE】蓝牙开发「防丢器」的相关知识点(三):手机与设备之间指令传输...
  11. 攻防世界web新手题答案_一个好的web前端开发者,是怎么学习的?
  12. Verilog奇偶校验_zt
  13. 转(static final 和final的区别)
  14. Java初级程序员面试总结(二) --HashMap篇
  15. 垃圾回收算法-标记清扫回收
  16. Faster RCNN原理篇(二)——RoIPooling和RoIAlign的学习和理解
  17. 经验分享 | STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享
  18. 消防应急疏散指示系统如何在工业厂房项目上应用
  19. CSS3 深海游弋的鱼群
  20. 博途PLC 1200/1500PLC 工艺对象PID PID_Compact详细解读

热门文章

  1. 文件上传漏洞靶场upload-labs学习(pass1-pass5)
  2. Python爬取2020年内地电影票房总排行榜
  3. Matlab中安装NURBS工具箱及使用
  4. UC/OS II 任务管理(4)之任务创建
  5. 实验一 查看CPU和内存,用机器指令和汇编指令编程
  6. Java:Java还很重要吗?
  7. STL之set map 和multiset multimap理解
  8. Go+ 发布 weekly release: v0.7.3
  9. 使用 FFmpeg(bilibili视频m4s合成mp4)
  10. 原生js实现数据双向绑定