前言0 E( y8 V# B/ G( Y5 [3 W! @, X
今天这一讲注意涉及到WiFi模块ESP8266的使用,主要是用WiFi来控制LED0亮灭,包括会详细介绍一下该模块的使用,废话不多说,正题进入···" q P& q: {3 g' V/ U4 i
4 x+ G8 m8 L; Y% H0 v9 Y2 n- }3 P一、ESP8266介绍
$ e2 I* o9 w3 v7 [互联网+时代,无线传输、无线通信尤为重要,那么在WiFi通信方面就数ESP8266用的最为广泛了,因为ESP8266是一个具备高性能的模块,在不了解其原理的情况下,只要有一定的串口知识理解,那么就可以轻松上手该模块,进而实现手机WiFi操作。简单来说,就是利用编程来实现WiFi模块的透明传输。
* q6 V/ g1 @0 T; E! `
$ `2 H5 `: p) ?4 F4 P9 x- ~
1 H$ q6 N' q& a0 b
" l) G8 b( o0 p! x0 t9 S( M2 R0 ?! s 这里我们看到该模块有8个接口,但是实际上我们只需要用到五个接口就可以操作这个WiFi模块了,主要是3.3V、GND、RXD、TXD、EN这五个接口可以看上图,RXD接单片机上的TXD接口(这里我用的是串口3,所以接PB10),TXD接单片机上的RXD接口(即PB11),EN接3.3V即可。
. p3 l' M0 N/ h. |5 N ? u$ V) s- C
* F# a! u# g7 K# h! L那么他有哪些指令呢?
# h9 _$ n0 n8 ?- }$ ~' ^# ]4 }* o) ]8 M/ u4 R: O y. S& Z
这里你会发现它有三种模式即STA、AP、混合,那么我们该如何使用呢,这里简单说明一下
2 D3 @* m. a* U& c$ v
. m0 d5 B; Q; o. |: q8 _% k" G3 wSTA模式就是类似一个接收模式,就是开启该模式后,你只能通过串口给他发送信息,ESP8266只负责接收,而不会产生一个热点,(手机或其他设备是找不到热点的)然后这模式我一般会直接用来调试各种AT指令,通过串口调试助手进行数据传输* b9 _* {2 ], V: H5 d; ~" I- g. R
" B9 d1 O- M# e: IAP模式就简单了,就是它发出去一个热点,供手机或其他设备连接,如果要实现手机连热点来控制单片机,那么该模式就要开启了。9 U3 F" y/ m% T% E9 C4 ~
; _$ F2 h0 y; G r% v# X7 J1 U
混合模式就是两者同时实现。+ a4 {& U8 R% V- ^8 x- }; P6 z
6 u- a: `' J0 G3 D9 s3 G) e接下来关于传输的方式,一般都是采用透传比较好,如果不采用透传模式,那么每发送一次数据都要发送一次AT+CIPSEND=<param>的指令就显得尤为麻烦,因此模式一般设置为透传模式,退出透传模式就给指令“+++”即可,后面代码里也有具体涉及到透传模式的退出操作,后面代码再一一介绍。% s9 t, @' n. E. _$ g' ^' `
2 G7 @% R( M7 x; n
二、如何实现WiFi传输?代码详解附上
! e% p% [6 f( R: [串口3初始化函数:
$ O) t# y, ]6 L# w0 T, Z0 l- #include "delay.h"% A. B8 |, ]1 S" `
- #include "usart3.h"7 s- Q+ _; @0 D: R- `
- #include "stdarg.h" 2 a1 f$ _/ i) K. ^3 ]/ t2 [
- #include "stdio.h" " ~; Y6 f# k! G* G4 T# J
- #include "string.h"
! D6 |( f% e: {' ]# H - #include "timer.h"
1 N5 \+ h1 \2 k$ Z R - , R1 h9 L- b; x6 w
- u8 res; & V( |2 R2 o5 e, U
- //串口接收发送缓存区 ) |% k8 s1 r ~& Y- B/ ?) B. a
- u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; 6 ^: O6 e; R8 i6 [ A( }
- u8 USART3_TX_BUF[USART3_MAX_SEND_LEN]; 9 u, z4 O6 U$ R8 N: S; D' T6 h
. }9 {2 ]7 ]4 k0 Y; G, o- , P( N; [ o& @0 ]; E
% N; ^/ J d4 n W# D6 T- vu16 USART3_RX_STA=0; 5 w' n. j- P( G$ R0 _8 l( y
# s- r* U- S6 ^. Z& x# O9 Q; P- //串口3中断; h B$ \3 {2 T- D, o# i) U! z0 Z8 I
- void USART3_IRQHandler(void)
1 ?0 g5 ~( k% t+ C* I$ G - {6 o* H( U2 r2 }: I) C. ~
- 7 ^6 |) \% K; Z* g4 [
- if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)& w, f9 I/ }/ [( [5 p! h
- { 3 ^+ l7 j3 W" ^
- res =USART_ReceiveData(USART3); : ?" k1 A; X) J( X: Z. G3 a5 z
- if((USART3_RX_STA&(1<<15))==0). f' O3 A. r2 }% J k* O
- {
1 F" j* @ W' B6 K' |1 `0 Y# a - if(USART3_RX_STA<USART3_MAX_RECV_LEN)
& o0 p6 n8 g2 f7 `4 s2 C - {6 N3 a7 P0 `; W1 M
- TIM_SetCounter(TIM7,0);
2 H. ^8 s; \% E8 f/ w - if(USART3_RX_STA==0) 8 i4 E0 f5 O7 Q1 s! G% e& y' Z
- {
' D: F* P! K5 I. J2 v) s9 d4 z6 p - TIM_Cmd(TIM7,ENABLE);
2 @9 _, i4 Z& [3 H Q+ R: n# v - }
, T; L9 A- e6 ~8 ?; L - USART3_RX_BUF[USART3_RX_STA++]=res;
- E( n* n0 Y8 e4 m/ n& r% r - }else
2 u$ S1 y% S& T+ d4 p9 D - {
+ h. f5 w/ M" E6 m# \3 T0 Z, u - USART3_RX_STA|=1<<15; % t) e( |( c3 Q1 F1 b
- } / s! G1 f- Q+ k S& y: m7 {
- }
) ?) b+ L0 @# ?" Q. w - }
& W0 g( a& y/ @ w1 E - }
. F# `$ l! N8 O' f
: D: k* x3 _6 E% g- //串口3初始化
" H* X" F) N/ ^5 p) j - void usart3_init(u32 bound)
! Q6 t: F+ \, Z - {
: s5 A3 C o: v3 B# H$ _% o
- a* q; |' ]* B1 p# x( a/ Z- NVIC_InitTypeDef NVIC_InitStructure;4 t. Z0 f7 Z6 `5 c$ e7 S( O6 ]
- GPIO_InitTypeDef GPIO_InitStructure;* g) `* {5 y8 b, ]+ d( H0 q- D
- USART_InitTypeDef USART_InitStructure;
* |: w$ j8 E, t; t: a5 |3 i
) N% L! e" ]8 e/ e1 m0 E3 z; M- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
! ^. X d6 g9 H. [9 d' C - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
+ d2 Q$ o% e; L
* O- c" l" [& u! S' A" L' q" l7 S1 y- USART_DeInit(USART3);
: }3 H3 `2 ]& j) \6 C- ` s, e - //USART3_TX PB10
9 s4 i$ W# r4 C7 V5 E# }3 Z - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
" f" ~5 i* b. {3 b z0 H - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
. u5 R5 z+ K! F; ^0 O - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
1 R3 I& c3 o* [# Y- [ - GPIO_Init(GPIOB, &GPIO_InitStructure); 2 X e. m) p `3 U) V8 n
- 7 c( }8 i1 g: ?
- //USART3_RX PB11
7 \/ ]; S& ~% Z' R, S( u - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
; F- h3 s6 ?/ {( f- I1 ~; r - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
( r- N( }0 {9 \; A: L" D - GPIO_Init(GPIOB, &GPIO_InitStructure);
% z& P( J. Y, Y2 M -
/ G& ^* X4 c+ e) t& B/ T - USART_InitStructure.USART_BaudRate = bound;5 q$ T I+ P" W: q4 A
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;9 T$ i/ I8 ]2 P
- USART_InitStructure.USART_StopBits = USART_StopBits_1;! q/ f/ H7 c) D( W0 Q$ b- p
- USART_InitStructure.USART_Parity = USART_Parity_No;( N7 d( R6 ~ t2 }
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;4 M1 ^% N6 i q7 A6 j
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; $ H1 ?4 W# Z0 P" D- Z. v
- ) i) u6 R* }2 R+ g7 `/ b
- USART_Init(USART3, &USART_InitStructure);0 Q9 j6 H8 }9 m2 K
9 z, I# ?2 x1 J8 x7 S
5 B. @' a9 @. f3 b: Z& ?: J- USART_Cmd(USART3, ENABLE);
2 M+ _5 D7 ^: d& ~ - 3 R, s T0 G) j8 z, ~5 p8 x
6 l/ c9 C- A$ ]5 s5 C( i- USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
* `2 `! l" ^# S2 Q) J -
- T# M& e4 q0 a; i3 V4 B' I - 0 @4 w# |: Q! @
- NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
. k8 D8 z0 M- w" b3 \) Z - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;6 @1 ]' @; {$ M, m
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; 4 F8 |$ t. a& s0 B5 F/ H/ F3 q
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
( x7 D2 M7 }7 b# m- K - NVIC_Init(&NVIC_InitStructure); 2 \; T5 y2 y5 E; f0 u/ Q: O
-
+ ^5 y5 @. D' H9 J6 C -
" a, n8 H! `, ^" J4 {# G) Y4 t q - TIM7_Int_Init(1000-1,7200-1);
9 _( z1 D/ B, X) {5 H" P8 i - USART3_RX_STA=0; , h, T( J, N* s* t
- TIM_Cmd(TIM7,DISABLE);
4 O8 s( x( H) N
6 F& L2 d0 [& g' |- }
) M C7 g' u& f4 L+ s& ~. f5 G) O) K - //串口3printf函数,保证输入不大于设定长度. v, ?" \/ D% E* |9 B
- void u3_printf(char* fmt,...) , d& }4 w* d! k$ U' {5 V
- { ) c+ s: K( p2 s: s) L' |
- u16 i,j;
) R+ M3 C" ~' u4 B, X" E - va_list ap;
9 X* }) [2 [! D - va_start(ap,fmt);
d, ?' F/ l0 c- R - vsprintf((char*)USART3_TX_BUF,fmt,ap);4 ]8 I% ^7 ^ ^' |0 j1 i5 U8 c
- va_end(ap);3 j* d; Y: A: Q
- i=strlen((const char*)USART3_TX_BUF); : @6 ~( _$ k" Y/ U
- for(j=0;j<i;j++)
6 ?2 }# E5 _* h8 \& q% E, [ - {0 `3 Q4 b6 M y4 U2 I% B( l; H! ^ q( `
- while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); 9 B* T7 l" O" V- F/ W: ?
- USART_SendData(USART3,USART3_TX_BUF[j]);
' D; e0 B" a4 T( q, t - }
$ @( ^: A/ K: Q3 e$ c5 | - }2 F1 h( D% |7 U+ ?; T
复制代码 6 Z- Z7 b5 o& |; f
ESP8266初始化函数:
( r! s3 {2 L( S" O/ l' Y& `: ~# B5 |* Y+ S1 Z5 Y- b% ?
- #include "esp8266.h"& U8 E: O5 b! @0 Z* Y$ n
- #include "string.h"8 {& M- f8 W& n" e# G( `8 ]9 y# O
- #include "usart.h"
& m( u8 z" V( }9 Z - #include "usart3.h"
/ d& O: l6 M: u4 Q N( j - #include "stm32f10x.h". F: j" H7 Y: g% V
- #include "sys.h" 2 M2 a" Z5 E, p4 h( {$ i% D& q
- #include "delay.h" ~/ {! ?7 g! m0 k, }$ r
- #include "lcd.h"
$ s8 w& O, }/ q* Z- c& A4 l
+ V$ s4 B; Y: V0 _+ ^/ \- //ESP8266初始化1 H" }5 J+ n+ d; l5 s
- void esp8266_start_trans(void)
- e8 k) d. X$ E5 G ~6 `7 H - {
! G6 }0 e, j% H8 a( |- v' e - ( o* i$ [& G" G
- esp8266_send_cmd("AT+CWMODE=2","OK",50);//设置为AP模式
) \* z0 ~' t7 E- p+ ~ - $ E& S8 g4 I. J( G
- esp8266_send_cmd("AT+RST","ready",20);//重启
5 h2 X' p8 l" x" F4 r -
5 U/ Z* l2 ?1 V - delay_ms(1000); 9 _3 @, H/ I3 ?
- delay_ms(1000);& ^, }$ e0 y2 N( X
- delay_ms(1000);' U, h! i8 M- x4 R3 N' S" o
- delay_ms(1000);
( u* U: V2 k) C1 p# H% f4 I -
7 `* f; Q* s; Y! R2 W/ v - esp8266_send_cmd("AT+CWSAP="ESP8266","12345678",1,4","OK",200);//设置WiFi名称、密码,模式
j- m5 [0 [: T+ ^9 ]1 @* Y3 u - esp8266_send_cmd("AT+CIPMUX=1","OK",20);//进入透传模式; [# V2 R& w% l, r
- esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",200);//设置端口8080
* {, H5 i( o3 i# {+ I. A - esp8266_send_cmd("AT+CIPSEND","OK",50);//开始发送数据
1 @% I1 n4 R$ D# \: r7 d - }
' \; r# p" N; q0 S3 R; n - * ] y: a: {+ E6 }) O4 E% O
- //退出透传模式
' s! t6 E3 V8 o4 S" ~0 R0 S - u8 esp8266_quit_trans(void)
0 S6 w+ t! s3 d# }8 e) _7 _& m - {
M% E9 b# \. m; m2 Q7 W6 u - u8 result=1;" I) X" C4 Y9 M! l; J, }( } V
- u3_printf("+++");$ B8 }% }0 c$ r
- delay_ms(1000);
1 \1 J P! P+ y6 t - result=esp8266_send_cmd("AT","OK",20);
% k4 v9 Q# K" |$ H- s( z$ i# I - if(result)
: D) s7 i' {3 @ - printf("quit_trans failed!");
$ n" M: N- W7 ]. p D* e+ C - else
% x3 U3 D+ S0 H/ X! @ - printf("quit_trans success!");
- P4 u, ^6 ]( _- v+ S. J6 M1 O: { - return result;$ j- m# D5 Y- N
- }& h4 J' q3 I. O& ]
: k |3 w3 i& @3 x( ^2 a- //发送指令,返回0发送成功,1则失败
+ A. ^9 r( k& ]8 x8 w0 X, p. q - u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
5 n0 m8 }% b, @( g+ @/ V - {6 r# u. ?8 ^5 f* M+ w
- u8 res=0;
* T1 f) H, ?. p( |! L2 K: ?+ U - USART3_RX_STA=0;3 q3 I2 v2 k, X. A$ i4 j4 J
- u3_printf("%s\r\n",cmd);
* E9 Q$ b- w$ m# |: ~ - if(ack&&waittime)
+ Q' A3 G* p+ i1 n8 p - {9 a, R9 t4 f7 r# n3 j2 _; D/ z
- while(--waittime)
; H* T P1 C) ]' n2 H% ` - {
, Q, |: ~7 |: e: J7 w1 t0 }4 E' l - delay_ms(10);' \2 {% z$ F3 }) {; Y
- if(USART3_RX_STA&0X8000)0 T0 ^% ^" y _
- {% `4 U# O- C) L% w
- if(esp8266_check_cmd(ack))( {/ c j' ~/ F9 D# F
- {& @4 }! i* c7 R* _
- printf("ack:%s\r\n",(u8*)ack);$ h* t- s/ P* o3 w
- 4 D' u6 V& Y: ?) P [7 F
- break;- }' f7 Q( y2 j! D
- }3 n, b, w: z5 c1 q
- USART3_RX_STA=0;
; N8 X, h9 q# B, m - } 7 L+ U; Q4 p( y# ` B
- }
* \( I* X2 Z8 T& h! j - if(waittime==0)res=1; 6 a/ l! @) Q q3 u
- }
) J5 @" X! D3 ~/ [; k* e2 Z( ? - return res;" r3 q r7 x" d2 {
- }
; a$ j0 [! j3 ~+ [( l. k, } - * e# Z4 Y9 v3 m k& U; e
! J2 O6 a% ?" w9 ]* {% |. V- //检测是否应答指令
# B0 t* n3 C$ D+ x6 k/ U) h - u8* esp8266_check_cmd(u8 *str): O" q+ S1 v$ O; H9 ^
- {
4 }! P# C+ }: W' Y; q- b# l - char *strx=0;
( E0 s3 b4 l$ i- J1 F - if(USART3_RX_STA&0X8000) 5 G: N( \2 |3 r9 c
- {
4 r* Y4 Z' H) |9 B. q- `3 Z } - USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0; M$ ]+ Y4 V/ y5 A$ H- T/ E3 _
- strx=strstr((const char*)USART3_RX_BUF,(const char*)str);- h+ W% D) u7 @/ ?! N3 P% v e
- }
! a0 N( a7 _& T* K - return (u8*)strx;
) A1 y) o2 p& i/ y1 @* l/ H1 N8 ~ - }
" j5 i3 Z& c% r8 u" V
' H, `- N2 G$ B6 Q* I! O- # d8 _+ n1 N$ v: u3 q3 l( Y* d" v3 {
- //向ESP8266发送指令(数据)的函数,暂时用不到,可以自己斟酌加上
, o) W0 E' L+ X3 D' I( i) `# n - //u8* esp8266_send_data(u8 *cmd,u16 waittime)
" v; I7 |# b$ V+ H% u8 O$ ] - //{
# J- r: G8 y' L* V
) g- |# Q( k: |2 i j- // char temp[5];; L$ W6 Y+ f9 w
- // char *ack=temp;
\5 A1 j) q) |7 u" l& y - // USART3_RX_STA=0;$ d0 P$ K6 S4 m; ` H! c3 z
- // u3_printf("%s",cmd); & Y! |6 B4 a: M _. F W y
- // LCD_ShowString(30,130,200,16,16,cmd);
: a& T v c) F7 L" Q! Q - // if(waittime)
% X8 r9 A$ a8 G$ X6 Y$ E - // {6 i4 H4 j# i1 ?, ]) Q
- // while(--waittime) 9 q+ T* r. P; v6 c7 x
- // {( M" Q! a# p0 X* w
- // delay_ms(10);* B1 l! x; X* X. ?1 L& [3 H' O6 A
- // if(USART3_RX_STA&0X8000)
" O! ?) F5 B3 y9 m# a3 f8 X - // {( M. t5 p! r# O+ J9 L* a
- // USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;
; n# x2 X" P) t* |/ s2 k - // ack=(char*)USART3_RX_BUF;
7 n, v! t8 @8 f0 ~( ~" n5 m- M, e - // printf("ack:%s\r\n",(u8*)ack);! `8 l/ \; t- H7 W( V' r6 E
- // LCD_ShowString(30,190,200,16,16,(u8*)ack);
! o2 [8 B* p8 f4 h$ ~: w - // USART3_RX_STA=0;/ N" R/ {+ q: ^1 h! ~) y7 `) r/ `
- // break;2 t7 E" z0 s7 ?. c) q6 ^) _( D# J
- // } 7 z) b3 {. ^* [! U5 E7 e% X0 V3 N
- // }
% D0 A2 A8 c7 e$ v - // }
" {; p1 B, q, g - // return (u8*)ack;
7 Y* w/ D* Y) e$ S - //}
复制代码 % i: Z' d4 ~- l! e+ b9 c
主函数:
. [! U. V/ l3 W# I1 i" Y0 L
" ?$ x& |! n# Q' m* m- h$ P- #include "delay.h"
( d) X7 v% W+ q9 l. K- L" N& g - #include "sys.h"2 n. x7 ]$ p0 N# n- l" V
- #include "usart.h"
, q5 v9 e: p- S - #include "usart3.h"
4 T! w9 W( K. V. g; @5 c - #include "esp8266.h"
, w& ]/ i9 l3 R k: _/ C+ I$ J - #include "string.h"
( F6 t3 o' K9 i - #include "timer.h") i" ~" T: w6 h
- #include "led.h"
, n: a* w N6 u3 t% r
3 _) d6 C, }* z( z4 u- 7 w& |2 Q: b Z. V; K$ o3 g8 ?
- int main(void)7 c+ V) {6 s9 E; A/ A" S2 V" B: ]
- {
4 _6 R' Q3 \. Z - char a[15]; % @& r% z1 W6 m2 p% L9 [
- delay_init();
0 u: k9 z- U" a P* z' c. G - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/ p1 B. z3 \" p) H - uart_init(115200);
) F# ?5 d) l( }2 O$ f - usart3_init(115200); # {! V( }: U0 e0 P
- LED_Init();
, }5 i) Q c( Z: ^1 ] ?, G' ] - esp8266_start_trans(); //ESP8266初始化 - R( p- s2 O4 l9 i2 w4 ~
( _& b y& I! d! K) t; P3 v l- while(1)
3 Y/ p) T- k! [5 j9 s1 U0 q - {% S) }9 F/ e! n6 D3 ^
- if(USART3_RX_STA&0x8000)+ c: e. S9 O+ a
- {
# `5 F' c. ~- `% X: c - sprintf(a,"%s",USART3_RX_BUF);
2 y3 ?& |1 H8 M3 w" M
9 h# h* m: a" V' e7 l4 H0 a! ^& O- if(strstr((const char*)a,"on")) //输入on,LED0亮/ {9 n( o; W' d, D+ K# E
- LED0=0;
0 m( @( f( w) X$ A - if(strstr((const char*)a,"off")) //输入off,LED0灭1 m* e2 y) t" o
- LED0=1; 4 N/ l! ?% |" |9 _- R; `# q; d
-
+ w: A% q% c# e3 ` - USART3_RX_STA=0;
7 G/ H4 a$ v7 E. h7 ^$ v - D$ p+ G+ I5 |; s4 v- L
-
. w" o, z. X) [) n6 V% ^( t - }! G6 t0 V- K* |' v% E* e& o6 x3 j' w
- }
m5 I3 ?' a/ x: y: h - }
& m- d( ]/ M3 o! R" P6 X3 H
复制代码
2 \1 y8 {8 g) Z" `5 {三、结果实现流程与展示4 P# x. F7 w e; A
下面如何用手机实现控制呢?' R/ B! F% `8 g& M8 f/ O
% h3 n5 T2 t% ^8 f* ~4 W
1、首先在手机端下载一个TCP,在各大浏览器搜索就有了
6 |0 a* V. Q7 V4 Q6 {+ A: }) C4 ]0 y- o
. `' S, j& k! Z7 d9 v& x1 [% i1 {5 T7 R
3 H) |$ I$ l) ~ R2、打开WiFi,搜索你设置的热点并连接
0 _( q- ~5 `6 n/ B7 I/ ~0 s
+ R. Z# R1 }7 x& Y% u7 H2 K4 M% Y0 `
1 {: T5 E/ Z- Q( K9 W5 z
. G3 U4 W- |5 T* l3、查看该WiFi的地址9 ~3 j5 i" H/ J& t j0 [: Q6 |
* G; x4 c% u8 W) ~# m
+ g* G- }+ {8 j! e+ V. N
, u, B H3 R4 K) `" J0 y3 A这里可能会有一定的误差错误,可能会是192.168.4.1,好像要正确的我是去串口调试助手查了一下,跟这里又不太一样,具体原因我也不太了解,如果手机上显示的IP地址不对,那就只能利用调试助手进行一下AT指令查询,这样比较准确,就把串口更改一下就行了(记得代码串口也要更改,自己尝试上手比较有收获)。
! p1 }' Q6 Z) q. {) Z* P
1 L, c+ r1 f3 M: x6 j4、打开TCP,输入地址和端口,连接上热点,然后就可以进行各种命令了/ I% w# r2 V% H Y
5 D' W+ o& W6 p* V2 s+ m' H
结果:5 ]" n- N& @9 Y4 C5 k( q
! Z9 L$ @" y& F; e: V0 v9 ^2 \输入on
: b7 a0 Y5 ~9 k0 ]# g- Y
0 C" p5 G% R8 f Q% v
+ v; K6 y U+ }3 _' ~+ ]; U ]! f- x/ ]/ V# a* V" x' d
输入off
. Z& a0 U1 ], h# F) [. P9 S
% n' ~7 B9 U8 W# O, g }. |
9 }3 w& i( Y! H3 i9 S" L$ d0 ?+ ~0 X) M# w
四、总结" }+ @& ?8 x3 t6 M; L& D& D
哈哈,学到这里就会发现你已经轻松掌握了如何使用ESP8266WiFi串口模块了,那么接下来就是对所学知识的巩固与实践操作,再然后就是利用该模块进阶完成各种设计. U8 Y( h7 y& S1 V! v7 \
" }' r6 z3 o" @7 @
; K) \ M8 i+ v) V9 b/ R
|