前言; |' h% g8 ]+ `/ \1 P
今天这一讲注意涉及到WiFi模块ESP8266的使用,主要是用WiFi来控制LED0亮灭,包括会详细介绍一下该模块的使用,废话不多说,正题进入···
2 D! @7 u; ?! B f+ T& J. z
7 a# P5 P# r( n. G一、ESP8266介绍* x: t: P i* W. _3 [8 j
互联网+时代,无线传输、无线通信尤为重要,那么在WiFi通信方面就数ESP8266用的最为广泛了,因为ESP8266是一个具备高性能的模块,在不了解其原理的情况下,只要有一定的串口知识理解,那么就可以轻松上手该模块,进而实现手机WiFi操作。简单来说,就是利用编程来实现WiFi模块的透明传输。
% m% S" m0 c1 x5 Y* }( ?2 \& n5 h0 A0 n7 Z0 f5 K: E
' d# H/ V6 ]5 C
4 C1 L- u$ \) e0 f 这里我们看到该模块有8个接口,但是实际上我们只需要用到五个接口就可以操作这个WiFi模块了,主要是3.3V、GND、RXD、TXD、EN这五个接口可以看上图,RXD接单片机上的TXD接口(这里我用的是串口3,所以接PB10),TXD接单片机上的RXD接口(即PB11),EN接3.3V即可。
$ U6 d8 [. G# S, k& S+ E$ `5 @4 K% f& Q" k5 d3 u' J1 C
那么他有哪些指令呢?
6 |8 b! W0 {4 j4 f& M1 c u4 G$ @$ [/ \2 v
这里你会发现它有三种模式即STA、AP、混合,那么我们该如何使用呢,这里简单说明一下
' T& X+ v4 q- i" t: x
) ^2 O2 f2 N& {; c6 f- jSTA模式就是类似一个接收模式,就是开启该模式后,你只能通过串口给他发送信息,ESP8266只负责接收,而不会产生一个热点,(手机或其他设备是找不到热点的)然后这模式我一般会直接用来调试各种AT指令,通过串口调试助手进行数据传输
1 |$ P8 i C4 d
a; |& u" r9 H, KAP模式就简单了,就是它发出去一个热点,供手机或其他设备连接,如果要实现手机连热点来控制单片机,那么该模式就要开启了。- M( \+ o$ ]: g0 F4 f, ]* j! P
& s9 F0 w; p; Y* ~2 D5 @
混合模式就是两者同时实现。5 J+ C" n/ \8 I: Q: Q- @
% u# x( \" Z) R% w接下来关于传输的方式,一般都是采用透传比较好,如果不采用透传模式,那么每发送一次数据都要发送一次AT+CIPSEND=<param>的指令就显得尤为麻烦,因此模式一般设置为透传模式,退出透传模式就给指令“+++”即可,后面代码里也有具体涉及到透传模式的退出操作,后面代码再一一介绍。
/ B0 C. Y' J1 B" f: u& p2 Z
! p& ^; z+ ]) B8 \& I) Z二、如何实现WiFi传输?代码详解附上
- ^' H2 _' ?4 b A7 _2 \$ N3 m( ?* e串口3初始化函数:
5 q' ?9 n0 I* C/ ] m: E8 h" k- #include "delay.h"- e. c/ i9 Q8 v" C. X8 S8 `0 k
- #include "usart3.h"
6 [3 y! |( D( V' D( `; B4 @1 o+ I- ] - #include "stdarg.h"
- M$ j/ X( f6 V' ? - #include "stdio.h"
- ~+ h+ T q3 x, B( |5 s+ V - #include "string.h" 4 C: x; Q5 P7 b; ^2 m- f# Z ~7 t; C
- #include "timer.h" ! k6 |) @4 |8 J' X
- & d2 P. N7 g4 n! F
- u8 res;
P; C e# Z3 ?% | - //串口接收发送缓存区 " t+ c5 M4 R" R$ f
- u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];
? X/ X3 c# S& ^& R) P - u8 USART3_TX_BUF[USART3_MAX_SEND_LEN]; ' s; t Q8 f ?* R3 S% X
- 7 s) I) S- Y. ?) z a. l* {
6 a. ]3 B$ |! A7 k2 N$ b) T
; n1 [1 c* Q8 W3 S- vu16 USART3_RX_STA=0;
! z) q( _+ @0 }2 W% b2 ]( h - * w1 p$ q; G" T0 z5 b8 C
- //串口3中断9 u& b( ~" E. @' p$ I9 }& ]- R/ j `
- void USART3_IRQHandler(void)
& k4 C8 C/ K% o3 a, c; T( b5 ~ ] - {
# l% V0 h* p# V+ W/ A+ \
6 m9 r. m3 R' P6 H) x- if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
! x# A: m9 d3 s8 Q: {6 o- s - { ; M/ h5 ~; }- ~$ E! C
- res =USART_ReceiveData(USART3);
. S& I F) M. ]4 F0 i+ c" k - if((USART3_RX_STA&(1<<15))==0)
* `# p- K5 V( v1 n1 f- s - {
( V! _3 o1 e% _# N/ E0 N - if(USART3_RX_STA<USART3_MAX_RECV_LEN)
9 M3 I) _9 @9 b& y( K' g1 } - {
: z" @2 v4 w* ], @1 T7 w6 z" G - TIM_SetCounter(TIM7,0);
6 G8 i! }" q, V) k% c2 u1 @* K9 _ - if(USART3_RX_STA==0) ( W+ U( {- h- C2 v* a
- {
6 m! H* [( d4 _1 [ - TIM_Cmd(TIM7,ENABLE);: |1 g' ]2 v# [, g- y E
- }# r+ n8 d& [* ~/ |6 m5 d, R) A, }/ N$ o
- USART3_RX_BUF[USART3_RX_STA++]=res;
$ P8 s2 f3 D; F) Z - }else 3 n; l; W8 l8 X: `
- {* ~4 U* E0 S f
- USART3_RX_STA|=1<<15; 9 d% U, f, x( X0 p9 k. C
- } * ?" z" U ~1 ^; H- T1 U F
- }
9 n. y1 ^9 S" E1 |% F! f - } , r5 d' N! h p4 v! Z- V) Y- k% Q
- } o/ u0 k3 n3 G3 N
- ! f( O9 T2 R/ w3 s) R3 O
- //串口3初始化 7 |1 s6 d4 w$ B* g& J; G+ n1 ?
- void usart3_init(u32 bound) y' a/ p! t4 Z% H6 P
- { 8 L5 @4 m5 N5 ^
' ?; w$ i1 C: e* I Y9 g- NVIC_InitTypeDef NVIC_InitStructure;8 `% [8 s) ` ^" n2 _, T
- GPIO_InitTypeDef GPIO_InitStructure;/ t5 ]0 @/ r) @: y9 j6 ^2 W
- USART_InitTypeDef USART_InitStructure;" n9 P1 n* `. v8 U2 `: b: P' s
/ Q( s* {3 x# P% R! G6 v8 f- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 9 m" B: ~ R+ s+ F5 }
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); - @# F- Q5 b9 `: [
- 7 X/ n) A# W0 O8 Z3 D) a
- USART_DeInit(USART3);
5 [: Y" q5 w: t6 [ c( x - //USART3_TX PB10
& G' o, T- |6 J1 A7 A - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
4 z& h; z2 u; t" Z% L% z2 V% ] - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
3 L& d" q4 J1 {* t' E4 A& Q9 g - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
$ B& s& h: S! z: ]4 z - GPIO_Init(GPIOB, &GPIO_InitStructure); Y1 o5 d9 @& ?; \* x
- . X0 `' R |% d0 ^: F0 H
- //USART3_RX PB11
5 p# @& d, ?+ @& P - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;" q: g- }: i, U: D5 l
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
5 |3 Q9 b' a, ?- k. m - GPIO_Init(GPIOB, &GPIO_InitStructure);
! t, o2 S) P0 J - 0 u( `9 J& z9 ?! q
- USART_InitStructure.USART_BaudRate = bound;6 C: K3 l. Z% h. P9 N! f
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
4 R* [( l) W2 C+ T - USART_InitStructure.USART_StopBits = USART_StopBits_1;
8 U* y6 Z) F$ c: A8 A4 o: a - USART_InitStructure.USART_Parity = USART_Parity_No;- j; M, } l9 x1 b
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;: d# q- Y! L5 c8 _' N' z8 t
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 3 R/ T) g7 @8 _% m7 h p( r* o
$ i; w5 G6 f3 K2 T, \+ H- USART_Init(USART3, &USART_InitStructure);
3 u, C' j# d! S- q
$ n' I% n( k' T, g- u
$ u1 ~% ?7 M! \0 _1 d" V0 @- USART_Cmd(USART3, ENABLE);
) t7 S1 Q5 ~3 a3 a& P - ' z& ^5 o; Q2 G' K2 D2 s
- C: @, u O2 B7 U
- USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); - |: ~& A2 [$ z
-
3 X7 S9 Y( Y* Y
6 K1 _$ y/ H3 w; X4 H- NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
( P7 e9 J0 w' s2 ]. S- K5 s - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;) A1 Z8 @3 V8 R9 `) }
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; 6 i9 h8 ^4 E6 L
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
4 d; |+ A' N( r( S; f/ T+ o - NVIC_Init(&NVIC_InitStructure);
8 X; b( h4 B; V6 \) z$ N8 c - 2 y5 r5 D& h# g, p) Y4 o; {
- : A1 _/ c r1 h7 Y, p& [* a H
- TIM7_Int_Init(1000-1,7200-1);
f* B! j4 p) c2 w* j* U. c - USART3_RX_STA=0; 3 Q; M9 Q$ R1 P! P' e* k/ \
- TIM_Cmd(TIM7,DISABLE);
4 Q ?. k! f+ e4 u( f9 l5 V - ' h9 k( w4 ~, y: x; k2 J9 _ m
- }; Q# R9 ?0 f/ V" W ^) P5 ^
- //串口3printf函数,保证输入不大于设定长度: m8 Y- s/ ]- X
- void u3_printf(char* fmt,...) % m, P4 i0 s! f' ]; c. n" j7 H
- { $ V/ s- ]5 t6 m1 I% ~
- u16 i,j;
$ v! E v5 B: O- a1 ~% w+ m - va_list ap;
" X8 X) y7 X2 `* }0 k+ E: y4 a* e - va_start(ap,fmt);" L# Y- ~! q3 y8 r& E
- vsprintf((char*)USART3_TX_BUF,fmt,ap);( F6 f- s2 D. s" O
- va_end(ap);
7 E6 V, C8 y2 V! D& ^& ^2 _$ T p H - i=strlen((const char*)USART3_TX_BUF); 5 t- I5 C9 Q# s8 S
- for(j=0;j<i;j++) % e9 G. l* b* O0 M
- {% j g1 n* o2 b# W2 X- S# T
- while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
" L; p# b, J' f$ d - USART_SendData(USART3,USART3_TX_BUF[j]);
8 u" J' U1 C* E! j4 @2 G" u) p" M - } 0 K0 |( k/ m @% |' w( A6 c
- }
- B! \8 `9 |( \. E- X+ v
复制代码 6 R2 y. w3 ]; S# f& w" s! w
ESP8266初始化函数:# [& \! S. Z. r9 \4 V7 N
1 }; [$ @' i5 q' ^
- #include "esp8266.h"
3 R5 M( s9 o# Z4 G+ L- ] - #include "string.h"
2 w1 C/ A& \; ~" E8 @4 K7 U9 M - #include "usart.h"
( Y. t# \' h+ ]) G S) { - #include "usart3.h"3 V" q% w; ^* t( T
- #include "stm32f10x.h"
' l% z0 J" \; A8 Z& D - #include "sys.h"
: [) |" \' Y4 G; ]! {+ Z Y - #include "delay.h"/ N0 t+ u7 A; N7 R% |# f
- #include "lcd.h"
% Q1 R- v: a+ S) S: R - ! w" @5 j4 U4 n: N Q6 y( \9 m* z
- //ESP8266初始化
$ P) F2 h: d2 Q+ l' _2 `$ F - void esp8266_start_trans(void)
9 [2 O; m. M% e+ j+ h; K/ r - {
4 N* B0 N" K. C9 j6 n: b. h) G( u -
& d8 R2 i( O) e3 P: n, V h - esp8266_send_cmd("AT+CWMODE=2","OK",50);//设置为AP模式; R$ `4 m7 e6 Q- \
- . L, q1 A. ^! n* M- @7 I; K
- esp8266_send_cmd("AT+RST","ready",20);//重启
# L# y, Q$ _5 V4 ^ x1 B" w( W2 ^ - + S# t/ `* n4 |3 N, \* h
- delay_ms(1000);
* ~9 z, k! Y- l* A" K6 H- i$ z- P - delay_ms(1000);
4 Z7 Q( o8 t; | - delay_ms(1000);
Q. O: e* k H) ^) j/ m - delay_ms(1000);9 j- ~- X7 ^0 u$ X/ S
-
, w& n) V) U7 ~2 ` - esp8266_send_cmd("AT+CWSAP="ESP8266","12345678",1,4","OK",200);//设置WiFi名称、密码,模式
3 v( Y( b; k% k! E/ U, ?5 ~ - esp8266_send_cmd("AT+CIPMUX=1","OK",20);//进入透传模式
3 \; c6 }1 t* w0 L: M7 l$ y - esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",200);//设置端口8080
3 U2 l: \( s% o$ J" g- n - esp8266_send_cmd("AT+CIPSEND","OK",50);//开始发送数据
. t& ?; s+ H9 C8 X* H - }
' H S0 l `+ L; K
3 V N2 i; a V! F( R: m# B- //退出透传模式6 o* S3 w' P" M* x5 S; j) ^
- u8 esp8266_quit_trans(void)
2 Y6 B6 O9 K; ]& z& H - {
7 x1 A$ z$ l5 \2 u8 \ - u8 result=1;
( Q7 t2 G5 S/ y7 x. N; g - u3_printf("+++");7 n; |; w. i& J$ b6 F
- delay_ms(1000); 0 X2 a3 m" [" Z
- result=esp8266_send_cmd("AT","OK",20);
4 z5 O( p6 N) f! r: S- P - if(result)
1 h# |' O# ^# _3 _ - printf("quit_trans failed!");
$ L* n$ m; J& \3 b, z - else& F, L, s5 S0 V. w: q z; Z' K
- printf("quit_trans success!");
( N/ y+ ]" ` M; r" O# d& l+ T* I" y - return result;$ i9 e+ y3 J% k- `# M
- }: v0 w8 v' `" c2 \. X; _0 a" I* l
- $ [! s) H4 a& Q! N3 L
- //发送指令,返回0发送成功,1则失败
+ N( j9 Z0 G* \. T3 ~% V1 a - u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
; S" p7 S2 y" w; c - {0 X: t, y7 ` u2 y3 ]
- u8 res=0;
$ q/ Y0 ~6 B) q! M3 m% { - USART3_RX_STA=0;6 d) g, Z4 ^5 R* y* g; o" q' L
- u3_printf("%s\r\n",cmd);
! C3 w: M% E3 b- q0 t$ n, T3 S- R - if(ack&&waittime) ( l6 \' N$ g9 Y! B
- {
3 V4 d: G6 X$ \0 P* H - while(--waittime) / N+ [* t H1 e* `. f
- {
; [1 t) E6 s8 Y% F8 d5 s9 i/ o - delay_ms(10); B# g1 R( W K9 |8 K
- if(USART3_RX_STA&0X8000)
$ c/ M- [- i- V9 ]: Q! j+ n' [/ V - {
4 j, j M3 i% A% u/ n) y - if(esp8266_check_cmd(ack))
5 ?1 o) p1 z; O# I! n; [ - {
6 P8 i! R2 }* g- U8 t8 s - printf("ack:%s\r\n",(u8*)ack);4 Q- ^" t; R8 \4 O& J, f
- - a* \( C5 `5 W( C
- break;2 A1 G+ z+ D- S. [) g: d- i# Y
- }
$ h8 M; H. C' K9 w& ]0 @1 ] - USART3_RX_STA=0;
5 `3 U: R/ s2 H. n9 v - } ( e$ }1 {) y6 Y7 L- G( z8 g5 X
- }
) q( S. D' Z* z+ a) @; u' R - if(waittime==0)res=1;
, o3 d$ f! S/ u - }
0 d: b/ b, E1 F9 o; v7 d: d* L - return res;
u. p. N1 w0 n9 }$ U, | - }
9 p) x2 C+ [; ~' j. f - 3 ]4 u3 R- `! |+ V! l6 A* ~! t
- % u# t) r; a5 j) [4 a
- //检测是否应答指令4 H0 o' _( s+ ^* {1 ?* h
- u8* esp8266_check_cmd(u8 *str)/ b6 w9 h9 T( x3 k7 U- x$ s7 R
- { O: E: W# x5 y* S
- char *strx=0;
3 H5 E9 F" \4 L/ B - if(USART3_RX_STA&0X8000) 5 ?% v* q6 S1 m7 I7 d
- {
1 i/ ]1 s' m1 F. P. j1 G# ?" z% T - USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;/ z0 m" R, w) E3 ]2 u @
- strx=strstr((const char*)USART3_RX_BUF,(const char*)str);6 p/ ]0 T+ u. K. d1 V9 C2 k
- }
/ x; N; s' y& \" M+ t& W* i - return (u8*)strx;- j; d- Z5 F) B8 o/ Q; v% g
- }
! h; ^3 Q. B* {( ?/ P8 W
* t* E" a, O( f' ^; ]
- U6 M, Z5 ^9 M W- //向ESP8266发送指令(数据)的函数,暂时用不到,可以自己斟酌加上& d& @$ f9 f% r" W1 p
- //u8* esp8266_send_data(u8 *cmd,u16 waittime)3 l8 Q0 c& e% j% ?' h
- //{% r/ C0 o( }: c# O9 c4 e. B
/ n. Q. u, w# ]- // char temp[5];
; U, z" t1 r3 O1 }; W3 H - // char *ack=temp;
" U/ v; u) P5 k6 Q2 ]" u - // USART3_RX_STA=0;
7 L1 b2 N( l1 g; a- b3 s6 D- c* g - // u3_printf("%s",cmd);
! B6 x# a' Q" A4 x - // LCD_ShowString(30,130,200,16,16,cmd); 0 E$ O, i2 x( l8 L
- // if(waittime)
2 ^7 O& j4 e9 t6 x - // {* A! W( u/ f% x$ n. y
- // while(--waittime)
# f( g2 X1 W3 q) M1 c" g - // {
# c" w9 K* t" o - // delay_ms(10);' |9 ^( k9 h$ y+ g% s, ?3 h
- // if(USART3_RX_STA&0X8000)+ Y) r- k, r9 T
- // {& J+ V; [. `* l6 s6 a8 ^
- // USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;" W. i: A5 j0 e7 r( h U6 b
- // ack=(char*)USART3_RX_BUF;
5 U% d$ u; C6 ~5 F) r3 G) w' F2 j - // printf("ack:%s\r\n",(u8*)ack);( X) C7 t- V$ E5 M; I- o
- // LCD_ShowString(30,190,200,16,16,(u8*)ack);
, I/ I2 z1 q# b2 ^) Q9 l! @) r - // USART3_RX_STA=0;( L+ }8 W# I" d/ y6 L, \' r# l
- // break;
! |7 r/ G3 }7 ]* y - // }
5 i; M: _5 _$ F4 L7 J - // }
* c, H; \8 O3 B/ ], T! x - // }: ^5 l" S3 v9 Y5 I) |5 v$ ]/ s" |
- // return (u8*)ack;
$ e* m; ~* r8 d2 z& D' c8 {% E - //}
复制代码 : G# }, e( [4 C! Q/ G( I+ H, d
主函数:
* J& X1 Z$ c/ L v) _( b* |! W
3 i2 m- Z- }. y- #include "delay.h"# ]# B) e/ c; `) o* \
- #include "sys.h"
6 {! b, n5 v: \4 \. ^ - #include "usart.h"
0 n( N, o9 T0 `% U - #include "usart3.h" ~$ |! Y: ~1 W0 i* {4 B: z
- #include "esp8266.h"- _& w9 B6 i$ G- Y
- #include "string.h"$ V0 L, o# W) B
- #include "timer.h"1 C7 D/ A: x5 G" b- N* O
- #include "led.h"$ d: k+ l) l% W9 j% s
0 g' Q- [+ j' m8 u2 x
a) h; O7 @ A+ u' ^( z: G- int main(void)
& Q G2 T) F3 I D( a6 x4 r - {
2 N0 ]# R4 H6 n' Q$ v! {! F - char a[15]; * w/ d ^# J; o
- delay_init();
4 k# {" X5 b( b2 p3 y2 ~7 e - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
' i$ z4 ]. ^- p' }5 F! R5 h4 Q - uart_init(115200); 9 @0 E, v' m/ u8 ] v. H
- usart3_init(115200); 6 S4 Y+ _" ^! Z# l0 F9 ?
- LED_Init(); S/ I4 f) Z7 s: J5 R' _$ W5 `4 f/ B
- esp8266_start_trans(); //ESP8266初始化
1 t& D+ V1 _( Y2 J1 o ^: q6 F - 3 Z M$ k$ x& T5 p! P! q# d
- while(1)
. g2 y* E' ?$ P% r2 R - {8 B8 j3 Z3 v# R; ?# i5 k) M8 m
- if(USART3_RX_STA&0x8000)
( H; }0 c% w. k- R+ E0 a2 t: d - {3 H1 T6 ^# r1 ?1 L
- sprintf(a,"%s",USART3_RX_BUF);
2 ]# \* Y; A9 k! m% e- F3 l - * Y! r6 ]' I- ?6 _8 N$ B- F6 E0 `
- if(strstr((const char*)a,"on")) //输入on,LED0亮2 L$ Z% B$ p! F# L7 E7 ~3 o! u
- LED0=0;
1 g6 Y) S# n) t5 Y" ] - if(strstr((const char*)a,"off")) //输入off,LED0灭- P& M% S m; j0 @( i' h4 x
- LED0=1;
) ^+ V I3 C; n7 x - k- c4 m0 k, l9 x5 {& R3 \
- USART3_RX_STA=0;
0 W$ k& w( s' `& V9 `/ ~ -
, F$ N8 ~ U: r# S3 g - 7 ^ U' K! P- @' e, b
- }
' W( |& i; ]& E# D& n - }
: n- G9 E! t# x. P6 E0 i. U - }0 y P% _" Z3 D9 o) y5 [
复制代码
' Z. ^; v# @: w; e2 @三、结果实现流程与展示
0 }# u# J+ i4 w3 j下面如何用手机实现控制呢?
) k9 | G: |$ X) I' |" X+ l) A* A
3 l; e% o2 \$ x0 n; X1、首先在手机端下载一个TCP,在各大浏览器搜索就有了6 G' k4 ?9 `; I s. T3 [/ W7 S, t. a: T
! C: u' m5 W3 W" o% L/ V$ Y
: d: C0 J8 p% @+ T" u& u/ w) C+ `1 m
2、打开WiFi,搜索你设置的热点并连接0 P( R1 V0 g' a! f
3 M& F4 y8 {$ o2 R: [0 T/ Q
@ Z- l3 p2 s {: _% u
9 B3 n! P7 }$ q) s5 S/ I$ i7 l3、查看该WiFi的地址
, D; q' C" S7 n+ v! u
/ G1 S: f. f* f* H+ b" Q
% Q' g. ^# m! }) [9 z
! C* r' o8 F7 Q% i5 |
这里可能会有一定的误差错误,可能会是192.168.4.1,好像要正确的我是去串口调试助手查了一下,跟这里又不太一样,具体原因我也不太了解,如果手机上显示的IP地址不对,那就只能利用调试助手进行一下AT指令查询,这样比较准确,就把串口更改一下就行了(记得代码串口也要更改,自己尝试上手比较有收获)。
) v3 s! j" G1 Y/ K! s0 e/ o/ r4 k# R8 ?7 ]9 J
4、打开TCP,输入地址和端口,连接上热点,然后就可以进行各种命令了
, V. }: n7 B# r t! H3 L
2 k* C- N( K$ M1 N5 D+ ~! V, r. [结果:
8 Q# |% d3 M+ z4 w# z2 l- j' C7 y9 V3 N+ u3 Z* w
输入on+ {6 i, j% S# @5 H5 D/ w- U! i8 a
5 Y+ z }" F( D- h2 R
) m6 c5 A: Q6 H# W& f# m3 h
/ c( I3 i2 d3 o
输入off % x3 M2 S1 A7 n3 D% }4 n# n0 u2 W
: t( z0 C% F$ ^. ?5 q; c9 Q) Q6 H
4 \6 [4 r) p O+ M% B7 {( A3 O! m, m" n( E s
四、总结$ U- o0 [# y$ \8 z+ I
哈哈,学到这里就会发现你已经轻松掌握了如何使用ESP8266WiFi串口模块了,那么接下来就是对所学知识的巩固与实践操作,再然后就是利用该模块进阶完成各种设计
& }2 [5 ~8 [" W* B- l0 R4 H+ }' H( p6 K) \1 ]
- s; u+ r% S2 H' w
|