基于arduino的ESP8266 C++库移植成简单的C库,方便使用,目前这个库实现了基本的功能,可以实现波特率修改,smartlink,断线重连等功能,wifi模块主要运行在STA模式。
下面开始简单解析下这个C语言库的使用方法,具体实现方法这里就不多论述了,大家直接看程序就好了:
接口文件:ESP8266.h
[cpp] view plain copy print?
#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
[cpp] view plain copy print?
1. int main(void)
2. {
3. int len=0;
4. UserLEDInit();
5. USART1Conf(9600);
6. "system begin");
7. TIM2_Init();
8.
9. while(1)
10. {
11. "chang baud");
12. delay(500);
13. UartBegin(115200,&USART3Conf,&PutChar);
14. SetBaud(19200);
15. //更改波特率到19200
16. if(0 != SetBaud(19200))//在新波特率下检查是否成功
17. {
18. break;//成功就退出
19. }
20. }
21.
22. while(0 == WifiInit(HOST_NAME,HOST_PORT));
23.
24. while(1)
25. {
26. if(SerialAvailable() > 5)
27. {
28. len = recv(buffer, RECVBUF_SIZE, 100);
29. if (len > 0)
30. {
31. tick_3s = 0;
32. send(buffer, len);
33. }
34. }
35. if(tick_5ms >= 5)
36. {
37. tick_5ms = 0;
38. tick_3s++;
39. tick_500ms++;
40. if(tick_500ms >= 100)
41. {
42. tick_500ms = 0;
43. LEDToggle(LED_PIN);
44. }
45. if(tick_3s >= 600)
46. {
47. tick_3s = 0;
48. //定时检查连接是否正常,如果不正常,wifi复位重新连接
49. if (getSystemStatus() != STATUS_GETLINK)
50. {
51. "TCP unlink");
52. while(!WifiInit(HOST_NAME,HOST_PORT));
53. else
54. {
55. "TCP link tick");
56. }
57. }
58. }
59.
60. }
61. }