前言0 P5 n: Z% [2 I a; y
今天这一讲注意涉及到WiFi模块ESP8266的使用,主要是用WiFi来控制LED0亮灭,包括会详细介绍一下该模块的使用,废话不多说,正题进入···0 B* l3 Q- O! [& T. b- o
9 D6 R3 s; c [' g
一、ESP8266介绍5 ^) a6 w+ s% }5 {' p* |
互联网+时代,无线传输、无线通信尤为重要,那么在WiFi通信方面就数ESP8266用的最为广泛了,因为ESP8266是一个具备高性能的模块,在不了解其原理的情况下,只要有一定的串口知识理解,那么就可以轻松上手该模块,进而实现手机WiFi操作。简单来说,就是利用编程来实现WiFi模块的透明传输。1 ~/ f; f+ J8 u ^
* W+ K6 S" g& D
4 b: {, p5 L! x8 m7 U' k2 s
# t; ]/ _2 |' o 这里我们看到该模块有8个接口,但是实际上我们只需要用到五个接口就可以操作这个WiFi模块了,主要是3.3V、GND、RXD、TXD、EN这五个接口可以看上图,RXD接单片机上的TXD接口(这里我用的是串口3,所以接PB10),TXD接单片机上的RXD接口(即PB11),EN接3.3V即可。3 I5 I" P( |+ G
# s1 l4 w4 o( f7 n) {3 E) \$ I
那么他有哪些指令呢?
) Y* V5 M# y* ^& f% x0 }6 s( `+ s# n& P
这里你会发现它有三种模式即STA、AP、混合,那么我们该如何使用呢,这里简单说明一下
$ i& f9 ]6 M I- _0 e
' w* ^+ `' ~! USTA模式就是类似一个接收模式,就是开启该模式后,你只能通过串口给他发送信息,ESP8266只负责接收,而不会产生一个热点,(手机或其他设备是找不到热点的)然后这模式我一般会直接用来调试各种AT指令,通过串口调试助手进行数据传输' v0 _' E* F( g4 e$ P; p8 g
2 I$ ]3 h. g1 i! X3 L; pAP模式就简单了,就是它发出去一个热点,供手机或其他设备连接,如果要实现手机连热点来控制单片机,那么该模式就要开启了。6 I- y# s$ {( w3 w- F* P
0 n4 t) e {2 @+ v) G% Z混合模式就是两者同时实现。
" z( I0 j* e J: J; x' u8 f. Q! p/ F4 ^$ C9 I; V
接下来关于传输的方式,一般都是采用透传比较好,如果不采用透传模式,那么每发送一次数据都要发送一次AT+CIPSEND=<param>的指令就显得尤为麻烦,因此模式一般设置为透传模式,退出透传模式就给指令“+++”即可,后面代码里也有具体涉及到透传模式的退出操作,后面代码再一一介绍。
$ w) d* n$ |8 t! i6 R6 q5 w! H: x( `6 y P: O+ b
二、如何实现WiFi传输?代码详解附上) f( _, e5 T0 Q1 Q6 k( t
串口3初始化函数:
( K1 h( G8 u" P2 ?4 D- #include "delay.h"
* y1 e4 X+ D# r - #include "usart3.h"+ V* F2 L6 g. E) ?# x9 @% {$ q
- #include "stdarg.h" * N! }0 u& v5 M1 y" u. @" S- I3 u
- #include "stdio.h"
, H; j9 X( r6 T4 `0 P* S3 ? - #include "string.h"
1 R: U2 X' F" X3 \' k% h- H - #include "timer.h" 1 R% z: o7 H( }. _
- $ S* n6 t3 q' i9 s
- u8 res;
$ x+ U% m7 C8 J - //串口接收发送缓存区
! M5 |* u: B+ ?$ J$ H - u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; $ ~( h5 O$ A& @2 c: N; e. H
- u8 USART3_TX_BUF[USART3_MAX_SEND_LEN];
: G- H; \4 r: D [9 f+ z
6 h, }$ q. o. x# g: v+ h- ! C$ a3 ^+ H1 B2 {! n0 d" x! D
- : s5 t+ e- k" [5 }: x
- vu16 USART3_RX_STA=0; ) {! p n& l/ a8 H/ B# |: F$ R3 ^) P
- : `) b0 c: O- e% a9 q% e/ X U
- //串口3中断
0 u; |+ r+ m4 [" F - void USART3_IRQHandler(void)
& F% R) K8 e, @" |6 I5 g - {5 t7 x' M5 `0 K* t& p' V
: e8 n' d9 y( Z; P; A2 h7 Z- if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)7 Y. D: d3 y/ S& t
- { , X' Z# R5 \7 o$ j$ l
- res =USART_ReceiveData(USART3);
$ J& H H' ]; [ - if((USART3_RX_STA&(1<<15))==0)
- A, X. }$ |1 B, u! i) t - { , O9 H- o( J4 O
- if(USART3_RX_STA<USART3_MAX_RECV_LEN) ( N9 m0 `" u P. k) y8 }
- {
4 F6 ]8 C$ q+ t: [3 D1 A& G - TIM_SetCounter(TIM7,0); 7 Z: ^, x0 }1 p* d2 ~' \% M
- if(USART3_RX_STA==0)
& B; e+ T* ]8 U$ Y+ n' g - {
7 f* @* a( {+ i) ]9 j - TIM_Cmd(TIM7,ENABLE);. F! C% I+ t' N" R2 t
- }
& O/ X6 ]2 _( ]9 Z4 N$ d - USART3_RX_BUF[USART3_RX_STA++]=res;
* w; t: ]& Q4 z3 F - }else
* E5 i7 c; [9 u2 z, [' m" D5 i - {( n0 z$ c8 s1 V) k3 ]: R; r
- USART3_RX_STA|=1<<15;
$ K$ a4 b+ [' m5 Y - } ) E. y! b. F/ T& S
- }
% T' e% A! S9 y, W b( w, n2 c6 v8 J5 [ - }
- ~3 k, e! D) k: ? - } ) H- n D8 F5 M1 `, p) O) g
$ ?$ n$ @) S) ]! L- //串口3初始化
6 N) M/ ?5 Z2 b) V# f - void usart3_init(u32 bound)) n$ K* K6 C/ n+ x
- { : [( l K7 q( |4 x* Z
- * z8 `, B; G1 v! u
- NVIC_InitTypeDef NVIC_InitStructure;
( W F& e( S( g) b8 U7 g - GPIO_InitTypeDef GPIO_InitStructure;$ y1 x! d/ l1 U' P
- USART_InitTypeDef USART_InitStructure;7 m# B& S& I' j: z3 c
2 B2 {0 Z f5 z& w t* k4 {+ Q& D( Y- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
~# w" G ^$ D- R1 ~ u - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
" I/ j. E1 |' @3 C/ Q `
' n6 n5 F# t; E: R" K# }- USART_DeInit(USART3); 5 [1 f) b/ O6 Z5 G$ }5 V
- //USART3_TX PB10; {' A" J: D% J4 y6 L2 b
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
t( q: a: F) e3 {5 N" J7 t. x - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5 ~3 Z7 V. h8 {& _& ` - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
( z4 E+ q S: n! M0 l - GPIO_Init(GPIOB, &GPIO_InitStructure); 9 O! M& t( Z8 W% ~2 Y) ?2 U8 X& j* k
- 0 @( G& m/ `, v$ e# q* X
- //USART3_RX PB11
f+ Z, A/ F- P$ W1 X0 D1 Z$ E! u - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; _! [' h: F6 T
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;% J3 k: A4 c- E3 c# y6 d, [
- GPIO_Init(GPIOB, &GPIO_InitStructure);
1 a3 o# I3 @8 x: G6 s* i -
, }: k2 b) |! ?" K2 a& ]# c - USART_InitStructure.USART_BaudRate = bound;
3 a: L7 j5 l+ _: Q- w& f - USART_InitStructure.USART_WordLength = USART_WordLength_8b;
) r; k) ~ l! x5 N; F - USART_InitStructure.USART_StopBits = USART_StopBits_1;
( X* L, d& B/ f7 l! ?( |, S0 v - USART_InitStructure.USART_Parity = USART_Parity_No;* t7 ]- c4 ~+ A5 C
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;& P6 z% I3 @% x- x+ U7 [. k
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 0 {& K7 Y$ v, \4 Y5 g
- Z; q- ~. T6 i6 _2 R
- USART_Init(USART3, &USART_InitStructure);
, F% a# C7 a+ Z; J
7 F O! U2 E( G/ b1 O
. x# `* d$ m5 ^, q3 i- USART_Cmd(USART3, ENABLE);
5 Q# }8 b! `& f% a -
) {8 r2 M3 ]" {" O" U: R8 @. f - ' ~* }' k! n. R- U, z' c# s5 E% H. e! H
- USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); - m& {, I2 C. u& ~, r: |( N
- - l; y/ ?% u" {/ r' C: V
- 1 L+ n( v+ } {& Q+ R: y" y
- NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;2 Z9 y4 j; u1 O- H u
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
/ Q5 i1 O( {# H3 o" t - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; 2 F2 c' j" B1 o
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
' i& O/ V4 K5 n! `( J8 T - NVIC_Init(&NVIC_InitStructure); 3 K* c ~" u8 J3 `6 w
-
N* [7 U- e8 T7 ~5 { -
1 m8 f; O) d0 T9 B - TIM7_Int_Init(1000-1,7200-1); ! p# s2 A* s5 ]: r. p8 f
- USART3_RX_STA=0;
3 g1 v; N0 Q' m- Y& C( Z# ~ - TIM_Cmd(TIM7,DISABLE);
# c! c, g1 H) ?+ M- V# ]. v% s% o
- c( f7 J1 q0 R* x% M- i% ~& D- }
9 l# z- V1 V/ t( V& a4 ` - //串口3printf函数,保证输入不大于设定长度; h' f+ |, n; d( ? H) D
- void u3_printf(char* fmt,...) 7 J5 u6 D# m. W7 V
- { ! h* G0 x. C, b$ p2 L
- u16 i,j;
. `1 T" I+ I& P9 c8 K; V - va_list ap; ! e' z& R: q0 E3 a
- va_start(ap,fmt);% Z: |( W9 l- E# ?" e' j
- vsprintf((char*)USART3_TX_BUF,fmt,ap);
: b6 D7 S0 f# v3 w J7 p - va_end(ap);
" M# u# Z \! f& Y( s - i=strlen((const char*)USART3_TX_BUF); |" Q/ ]6 {; b% v& z# j# ~
- for(j=0;j<i;j++)
9 t2 b' }, j8 M* s% Q# } - {8 k" B8 {! x7 h: b2 r% P& Z, y
- while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
/ t, t) F7 C0 X - USART_SendData(USART3,USART3_TX_BUF[j]); ) C8 L! V/ t6 J: s1 f3 Z m
- } " y" q$ `) d: y# K$ ]
- }5 ~4 l U% M+ s# t1 H9 U5 p
复制代码 $ i! h, B- f" `& j4 F2 J7 x
ESP8266初始化函数:. c, t' X c# q9 ?% f, o) C8 i
8 j0 h# H' N( _' P& p
- #include "esp8266.h"
& N3 X0 B" a% n# z4 C - #include "string.h"+ r6 \" h1 d' u/ g
- #include "usart.h"' e4 Y! a) C2 n" S% U' n' c" T
- #include "usart3.h"
1 i; h4 F1 A: M4 G4 X - #include "stm32f10x.h"
/ m- F3 Y c6 i8 `! X6 J - #include "sys.h"
4 o" K3 E% E' @, ~, x, U - #include "delay.h"8 b9 D( [) M9 h4 _5 m- h+ d
- #include "lcd.h"
- `+ Y& |8 i# f. B+ P9 u
! G/ H+ t, p( V- E; N+ p5 R- //ESP8266初始化
: ~) V+ m' `# F6 {8 G% I - void esp8266_start_trans(void)
5 K( D5 i8 B# F' u6 Q( d8 v - {, [) b `7 e% E' l
-
9 l$ I* s0 q- e; B/ @, r& F) m - esp8266_send_cmd("AT+CWMODE=2","OK",50);//设置为AP模式
/ q2 C8 a# d! { u8 S( N X6 c- n - ; @$ G2 L9 j1 \; k
- esp8266_send_cmd("AT+RST","ready",20);//重启
1 a0 ~; E. j; }. D$ N - # r; M, a: b% d- H3 p
- delay_ms(1000); 3 }. C# T/ c' J
- delay_ms(1000);
* w6 J7 z P, A, D - delay_ms(1000);$ s/ N8 i! a/ z! g/ w
- delay_ms(1000);
& m( n0 ]+ k- z - 7 {8 n5 R% c! ~6 _, K: ~) ^; o
- esp8266_send_cmd("AT+CWSAP="ESP8266","12345678",1,4","OK",200);//设置WiFi名称、密码,模式- P# g4 I- ~# y( a+ E
- esp8266_send_cmd("AT+CIPMUX=1","OK",20);//进入透传模式0 i! g2 W6 Q4 z
- esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",200);//设置端口8080 ?4 Y! z2 t: t( ]$ n/ T
- esp8266_send_cmd("AT+CIPSEND","OK",50);//开始发送数据4 l1 G* B6 a9 [8 I* h% p
- }. d Y3 H1 a5 Y. T3 L \
- 4 _% X3 F4 ?1 R7 H" b* t+ X8 u, z
- //退出透传模式
( n2 V' I" S) N$ ] - u8 esp8266_quit_trans(void)* d1 ?- h7 K2 ~1 P7 {
- {9 ~; S( Z; O; W: S3 `4 h: R
- u8 result=1;
$ K4 c& Z8 h" D/ ]8 s) |2 F - u3_printf("+++");+ u6 f$ G' E2 N, C3 F4 o, X
- delay_ms(1000);
Y9 l6 R4 x# E$ M7 i5 { - result=esp8266_send_cmd("AT","OK",20);# `: C( d7 R4 A" J, w
- if(result)
; @* I8 c8 T8 W$ U7 k; s) I0 B - printf("quit_trans failed!");
: t9 X8 [: a& q6 j3 H - else0 V$ b# s1 s+ P, ]7 z$ U
- printf("quit_trans success!");
* p. R" M2 i6 T4 @- a' f. o, r/ k - return result;5 Y' z) [' f5 o* J% }
- }
# U' @) I/ u$ B) }+ d- w - " r, @) V9 o# ]0 ?( {6 J
- //发送指令,返回0发送成功,1则失败' F$ n1 q5 x) K; x: N$ }
- u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
6 P( P7 I( k# ]! d4 n& z( K - {
- Q( g6 b6 C6 [& L5 x6 H* r }2 a - u8 res=0; 3 g8 Q% M4 s W; j$ ]( W3 t
- USART3_RX_STA=0;3 C' J0 Y, q6 A1 A5 _) |8 g
- u3_printf("%s\r\n",cmd); . g7 N8 M$ I2 `& w- Y
- if(ack&&waittime)
8 m( V! Y: {+ S( n - {1 M5 i# `& H' e5 ]! v" A. E) d
- while(--waittime) * n1 S1 j5 Q) P& B+ |: m
- {
' ^/ v9 r; v/ p4 R# E - delay_ms(10);$ P/ z3 U5 [: M) Y e: J
- if(USART3_RX_STA&0X8000)% H" R% t3 f' {9 O( A
- {
0 d) m5 _4 ]2 [ - if(esp8266_check_cmd(ack)). K3 V% \' \0 c
- {8 X+ G) ]6 e5 W
- printf("ack:%s\r\n",(u8*)ack);9 K+ [/ K& F* ~' P! q8 b+ s+ r- p; ^
-
. D$ g, Y8 {: \* A4 d - break;
- {: V" R7 Z. x( r4 K! s - }! a" C1 c/ Y/ a
- USART3_RX_STA=0; ]5 H. {- W' f2 Z
- } 3 s7 {7 h$ H+ T, `$ k- m
- } T7 n# n+ G( k# J7 {! z! |
- if(waittime==0)res=1;
) k/ G& T) ]; N! n - }
' p1 {( J- h$ X - return res;2 [: s( t( H& m4 r5 A! A. b% o$ o
- } ) a$ |6 K7 p8 p% `. |
; _, x" F3 G j( F1 v! K# E- % Z8 e$ h& G! \5 ?! m) O( c
- //检测是否应答指令7 c! M9 M+ X$ J" k5 ]2 }
- u8* esp8266_check_cmd(u8 *str)
- W, c/ O& c; O% I - {- W! Q9 F( C! P& f( H; {: J
- char *strx=0;6 c/ b/ P! f G4 v& R' b
- if(USART3_RX_STA&0X8000)
# z" ?- n) C/ V - {
" t2 q* r7 N0 C: K - USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;& P6 j6 |6 G r8 C# U
- strx=strstr((const char*)USART3_RX_BUF,(const char*)str);) J4 |8 x# r- H
- } 8 `" @9 E/ Q) j% x& O9 c% K+ }
- return (u8*)strx;/ r5 w& i, `) p8 \1 c2 I6 G. D
- }& Z) p( W- b& X
- 4 U8 b; ^- J( [4 y) ?( Y
- * T% ~* l T5 A3 X7 Y( q
- //向ESP8266发送指令(数据)的函数,暂时用不到,可以自己斟酌加上' |- B- i( K/ ~3 H# X3 ~* I
- //u8* esp8266_send_data(u8 *cmd,u16 waittime)7 \- P4 U- ^. \2 |
- //{
, Q& S$ P P" p; x8 j2 w' t
& [$ d- J: n+ D5 o+ D3 R- // char temp[5];
( _; x) A5 A6 V1 C- @5 W3 h1 ~ - // char *ack=temp;
' E! \8 I, v5 o T - // USART3_RX_STA=0;
* X0 Y/ S7 y* t8 K# { - // u3_printf("%s",cmd);
3 j# g2 Y) `: n* e$ ?& ?4 e4 q - // LCD_ShowString(30,130,200,16,16,cmd); 6 B$ I7 F. Z( }
- // if(waittime)
. Z, t5 ^( t2 g5 e" J% n: d+ P" ^ - // {
: W4 h- U s0 G0 p0 k" q% f( Z - // while(--waittime)
+ H/ X7 z3 t- v: M. ~2 W3 A: | - // {
1 }; o9 J0 N. N. O - // delay_ms(10);6 z a( A8 f5 ?9 q
- // if(USART3_RX_STA&0X8000)# t1 V4 C1 V4 ^# f, q" Q, w: v5 `1 A
- // {/ e) G6 J/ u c7 H1 G( z
- // USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;- I/ ]% {# I7 U+ l( Y5 ]
- // ack=(char*)USART3_RX_BUF;
4 d9 Q: e0 _- S9 Z - // printf("ack:%s\r\n",(u8*)ack);/ g7 r* Z3 s- N z" q% _2 I
- // LCD_ShowString(30,190,200,16,16,(u8*)ack);
0 I0 p8 ]1 v1 H& n' m - // USART3_RX_STA=0;* Q. L, q2 _/ R% I3 z3 x
- // break;
6 |% m0 X; O# r |' A: E6 p6 ~- a - // } ?# ]: p5 ?7 f( O" n6 X' ?: f
- // }) G% Q9 H- d M& V- h
- // }) x2 u8 S, A* s
- // return (u8*)ack;
% y' `, |: p$ h) E - //}
复制代码
1 X/ C8 {' J7 s6 z B4 U3 `" O主函数:, p2 T- S" x, }/ a. U( o
: c+ d7 |5 n2 v$ V! U! z% v- #include "delay.h"
6 y! T9 @" s: i6 D. y- e4 ]1 | - #include "sys.h"
9 b; A T y4 q' t( O4 I' N1 \ - #include "usart.h"
" w2 ^% }' s& B4 D - #include "usart3.h"" }4 q1 U7 p1 D2 p* ]
- #include "esp8266.h"; o! D: r! T% h) L5 Q( V5 j
- #include "string.h"- G* C5 W1 I1 j
- #include "timer.h"5 u- \( u+ p8 K1 t+ X
- #include "led.h"9 o2 x% k+ l1 ?+ s6 j
- 6 B" c+ ~4 Q: t" Y- W3 h
0 |, f" g3 e* i/ h4 q- int main(void)
& x* ]( R; ?) j- i( ~6 }2 ^ - { 6 B0 K( ~& A+ N8 K
- char a[15];
% t* }$ R0 x, S* d: C - delay_init();
2 d+ m) @/ z( x - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); " L, ^( E" P4 J+ R% E) p
- uart_init(115200);
1 M! x- J# P8 ]3 y7 V# I4 u' p8 M - usart3_init(115200);
1 z9 r1 U$ r% O" }! m! D - LED_Init();
& m1 w% P+ s' x$ D$ p! _ T - esp8266_start_trans(); //ESP8266初始化
, m( D; p% s. {6 \- P - ( W9 [$ f3 k) C4 g
- while(1)
V* V. T# ~% B8 ] - {: E# r- I4 ]8 V* G, K' G
- if(USART3_RX_STA&0x8000) ~( V, l7 n) U# q
- {+ o# A) B1 G) @" F
- sprintf(a,"%s",USART3_RX_BUF);$ P5 R2 q! r$ I
6 T. k4 E4 h! a2 n+ g/ O! u- if(strstr((const char*)a,"on")) //输入on,LED0亮3 f4 C3 D; f/ o, {+ k, z4 |
- LED0=0;
% M+ r; O) J. e3 K: H - if(strstr((const char*)a,"off")) //输入off,LED0灭3 n% A; R7 [5 R- h% u- v
- LED0=1;
5 }: ~+ v- ?5 C8 `3 C8 d -
! _/ f' c/ | K5 N- F0 J - USART3_RX_STA=0;
. b8 \. ]+ X" O; v( h+ b6 T - / }3 ^. r5 N# i( E
-
% r3 G6 N5 a4 |5 o4 z - }0 U' J" L3 o5 B5 F. ?
- }( n/ T) g- S; T: G3 T* x
- }# V' d( H' t# s. S+ r9 @- p
复制代码 5 t$ d ]+ Q% S4 r
三、结果实现流程与展示
2 M6 l& u5 A& j' s# U& C/ Z下面如何用手机实现控制呢?, W0 S3 i$ F0 D2 X& K3 q3 |
7 s) s" O K; d0 R
1、首先在手机端下载一个TCP,在各大浏览器搜索就有了
4 \9 h! Z0 I. n" |: ] t3 G9 w V. a- d0 I
4 g* s; Q. E6 a
# }7 @9 d+ E: B5 v2、打开WiFi,搜索你设置的热点并连接, @) g# J9 v% \+ f! o" }
6 |& B% S" X1 t& l- `7 s
) P+ K w2 g, ~ Z$ Y
C$ [9 N+ i' o8 j0 `4 S' J3、查看该WiFi的地址
/ r3 H+ ]( Y d1 ^7 R C
; ^/ ]& n/ K( n+ A7 w
5 G$ ]8 N) u" n9 N# S$ t1 r, K
& V* n1 E2 \' X- K" K8 s这里可能会有一定的误差错误,可能会是192.168.4.1,好像要正确的我是去串口调试助手查了一下,跟这里又不太一样,具体原因我也不太了解,如果手机上显示的IP地址不对,那就只能利用调试助手进行一下AT指令查询,这样比较准确,就把串口更改一下就行了(记得代码串口也要更改,自己尝试上手比较有收获)。6 {) ]2 |# P! m! T s7 C2 J
9 e0 h |7 i4 @9 I* E4、打开TCP,输入地址和端口,连接上热点,然后就可以进行各种命令了
+ d \+ a; M+ W: I7 h5 K0 N- d3 t; s* Y7 N" m/ K3 \* {/ f
结果:
, Y4 R1 t/ t) A& ~8 E- V# s G/ H2 f1 [( n9 q( Z% }! v1 G/ l
输入on! p- p; |8 B y" K& v; K( G
' ~( ^2 _0 ~8 M1 N9 i
' R) n$ t& [' n$ P5 z' m3 a
u1 F: Z& c) E/ E 输入off
O, E* R1 d0 V' F$ S! I! [" k* M* Q: `% E; w& W, { e4 _
' l" l- E9 q0 ~% R2 r7 ?: @
$ C F9 v u2 @. n四、总结) G2 k m3 _; b3 O
哈哈,学到这里就会发现你已经轻松掌握了如何使用ESP8266WiFi串口模块了,那么接下来就是对所学知识的巩固与实践操作,再然后就是利用该模块进阶完成各种设计
. |% E) ?( M9 V: o7 |
( a- O/ s. u( l/ p; _5 A
2 M1 _- Y" E% G7 S/ @ |