你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】WiFi模块(ESP8266)—基于STM32

[复制链接]
STMCU小助手 发布时间:2022-5-14 21:00
前言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
Y30PA0V8QXT2T@T)TU4}`QK.png
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
  1. #include "delay.h"
    * y1 e4 X+ D# r
  2. #include "usart3.h"+ V* F2 L6 g. E) ?# x9 @% {$ q
  3. #include "stdarg.h"                  * N! }0 u& v5 M1 y" u. @" S- I3 u
  4. #include "stdio.h"                  
    , H; j9 X( r6 T4 `0 P* S3 ?
  5. #include "string.h"         
    1 R: U2 X' F" X3 \' k% h- H
  6. #include "timer.h" 1 R% z: o7 H( }. _
  7. $ S* n6 t3 q' i9 s
  8.         u8 res;        
    $ x+ U% m7 C8 J
  9. //串口接收发送缓存区               
    ! M5 |* u: B+ ?$ J$ H
  10. u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];                         $ ~( h5 O$ A& @2 c: N; e. H
  11. u8  USART3_TX_BUF[USART3_MAX_SEND_LEN];                 
    : G- H; \4 r: D  [9 f+ z

  12. 6 h, }$ q. o. x# g: v+ h
  13. ! C$ a3 ^+ H1 B2 {! n0 d" x! D
  14. : s5 t+ e- k" [5 }: x
  15. vu16 USART3_RX_STA=0;           ) {! p  n& l/ a8 H/ B# |: F$ R3 ^) P
  16. : `) b0 c: O- e% a9 q% e/ X  U
  17. //串口3中断
    0 u; |+ r+ m4 [" F
  18. void USART3_IRQHandler(void)
    & F% R) K8 e, @" |6 I5 g
  19. {5 t7 x' M5 `0 K* t& p' V

  20. : e8 n' d9 y( Z; P; A2 h7 Z
  21.         if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)7 Y. D: d3 y/ S& t
  22.         {         , X' Z# R5 \7 o$ j$ l
  23.                 res =USART_ReceiveData(USART3);                 
    $ J& H  H' ]; [
  24.                 if((USART3_RX_STA&(1<<15))==0)
    - A, X. }$ |1 B, u! i) t
  25.                 { , O9 H- o( J4 O
  26.                         if(USART3_RX_STA<USART3_MAX_RECV_LEN)        ( N9 m0 `" u  P. k) y8 }
  27.                         {
    4 F6 ]8 C$ q+ t: [3 D1 A& G
  28.                                 TIM_SetCounter(TIM7,0);                                         7 Z: ^, x0 }1 p* d2 ~' \% M
  29.                                 if(USART3_RX_STA==0)                                 
    & B; e+ T* ]8 U$ Y+ n' g
  30.                                 {
    7 f* @* a( {+ i) ]9 j
  31.                                         TIM_Cmd(TIM7,ENABLE);. F! C% I+ t' N" R2 t
  32.                                 }
    & O/ X6 ]2 _( ]9 Z4 N$ d
  33.                                 USART3_RX_BUF[USART3_RX_STA++]=res;        
    * w; t: ]& Q4 z3 F
  34.                         }else
    * E5 i7 c; [9 u2 z, [' m" D5 i
  35.                         {( n0 z$ c8 s1 V) k3 ]: R; r
  36.                                 USART3_RX_STA|=1<<15;                        
    $ K$ a4 b+ [' m5 Y
  37.                         } ) E. y! b. F/ T& S
  38.                 }
    % T' e% A! S9 y, W  b( w, n2 c6 v8 J5 [
  39.         }                                                                                                                           
    - ~3 k, e! D) k: ?
  40. }   ) H- n  D8 F5 M1 `, p) O) g

  41. $ ?$ n$ @) S) ]! L
  42. //串口3初始化
    6 N) M/ ?5 Z2 b) V# f
  43. void usart3_init(u32 bound)) n$ K* K6 C/ n+ x
  44. {  : [( l  K7 q( |4 x* Z
  45. * z8 `, B; G1 v! u
  46.         NVIC_InitTypeDef NVIC_InitStructure;
    ( W  F& e( S( g) b8 U7 g
  47.         GPIO_InitTypeDef GPIO_InitStructure;$ y1 x! d/ l1 U' P
  48.         USART_InitTypeDef USART_InitStructure;7 m# B& S& I' j: z3 c

  49. 2 B2 {0 Z  f5 z& w  t* k4 {+ Q& D( Y
  50.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);        
      ~# w" G  ^$ D- R1 ~  u
  51.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
    " I/ j. E1 |' @3 C/ Q  `

  52. ' n6 n5 F# t; E: R" K# }
  53.          USART_DeInit(USART3); 5 [1 f) b/ O6 Z5 G$ }5 V
  54.                  //USART3_TX   PB10; {' A" J: D% J4 y6 L2 b
  55.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
      t( q: a: F) e3 {5 N" J7 t. x
  56.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    5 ~3 Z7 V. h8 {& _& `
  57.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    ( z4 E+ q  S: n! M0 l
  58.   GPIO_Init(GPIOB, &GPIO_InitStructure); 9 O! M& t( Z8 W% ~2 Y) ?2 U8 X& j* k
  59. 0 @( G& m/ `, v$ e# q* X
  60.     //USART3_RX          PB11
      f+ Z, A/ F- P$ W1 X0 D1 Z$ E! u
  61.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;  _! [' h: F6 T
  62.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;% J3 k: A4 c- E3 c# y6 d, [
  63.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    1 a3 o# I3 @8 x: G6 s* i
  64.         
    , }: k2 b) |! ?" K2 a& ]# c
  65.         USART_InitStructure.USART_BaudRate = bound;
    3 a: L7 j5 l+ _: Q- w& f
  66.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    ) r; k) ~  l! x5 N; F
  67.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
    ( X* L, d& B/ f7 l! ?( |, S0 v
  68.         USART_InitStructure.USART_Parity = USART_Parity_No;* t7 ]- c4 ~+ A5 C
  69.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;& P6 z% I3 @% x- x+ U7 [. k
  70.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        0 {& K7 Y$ v, \4 Y5 g
  71.   Z; q- ~. T6 i6 _2 R
  72.         USART_Init(USART3, &USART_InitStructure);
    , F% a# C7 a+ Z; J

  73. 7 F  O! U2 E( G/ b1 O

  74. . x# `* d$ m5 ^, q3 i
  75.         USART_Cmd(USART3, ENABLE);              
    5 Q# }8 b! `& f% a
  76.         
    ) {8 r2 M3 ]" {" O" U: R8 @. f
  77. ' ~* }' k! n. R- U, z' c# s5 E% H. e! H
  78.   USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); - m& {, I2 C. u& ~, r: |( N
  79.         - l; y/ ?% u" {/ r' C: V
  80. 1 L+ n( v+ }  {& Q+ R: y" y
  81.         NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;2 Z9 y4 j; u1 O- H  u
  82.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
    / Q5 i1 O( {# H3 o" t
  83.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                2 F2 c' j" B1 o
  84.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        
    ' i& O/ V4 K5 n! `( J8 T
  85.         NVIC_Init(&NVIC_InitStructure);        3 K* c  ~" u8 J3 `6 w
  86.         
      N* [7 U- e8 T7 ~5 {
  87.         
    1 m8 f; O) d0 T9 B
  88.         TIM7_Int_Init(1000-1,7200-1);                ! p# s2 A* s5 ]: r. p8 f
  89.         USART3_RX_STA=0;               
    3 g1 v; N0 Q' m- Y& C( Z# ~
  90.         TIM_Cmd(TIM7,DISABLE);                        
    # c! c, g1 H) ?+ M- V# ]. v% s% o

  91. - c( f7 J1 q0 R* x% M- i% ~& D
  92. }
    9 l# z- V1 V/ t( V& a4 `
  93. //串口3printf函数,保证输入不大于设定长度; h' f+ |, n; d( ?  H) D
  94. void u3_printf(char* fmt,...)  7 J5 u6 D# m. W7 V
  95. {  ! h* G0 x. C, b$ p2 L
  96.         u16 i,j;
    . `1 T" I+ I& P9 c8 K; V
  97.         va_list ap; ! e' z& R: q0 E3 a
  98.         va_start(ap,fmt);% Z: |( W9 l- E# ?" e' j
  99.         vsprintf((char*)USART3_TX_BUF,fmt,ap);
    : b6 D7 S0 f# v3 w  J7 p
  100.         va_end(ap);
    " M# u# Z  \! f& Y( s
  101.         i=strlen((const char*)USART3_TX_BUF);                  |" Q/ ]6 {; b% v& z# j# ~
  102.         for(j=0;j<i;j++)                                                
    9 t2 b' }, j8 M* s% Q# }
  103.         {8 k" B8 {! x7 h: b2 r% P& Z, y
  104.           while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
    / t, t) F7 C0 X
  105.                 USART_SendData(USART3,USART3_TX_BUF[j]); ) C8 L! V/ t6 J: s1 f3 Z  m
  106.         } " y" q$ `) d: y# K$ ]
  107. }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
  1. #include "esp8266.h"
    & N3 X0 B" a% n# z4 C
  2. #include "string.h"+ r6 \" h1 d' u/ g
  3. #include "usart.h"' e4 Y! a) C2 n" S% U' n' c" T
  4. #include "usart3.h"
    1 i; h4 F1 A: M4 G4 X
  5. #include "stm32f10x.h"
    / m- F3 Y  c6 i8 `! X6 J
  6. #include "sys.h"
    4 o" K3 E% E' @, ~, x, U
  7. #include "delay.h"8 b9 D( [) M9 h4 _5 m- h+ d
  8. #include "lcd.h"
    - `+ Y& |8 i# f. B+ P9 u

  9. ! G/ H+ t, p( V- E; N+ p5 R
  10. //ESP8266初始化
    : ~) V+ m' `# F6 {8 G% I
  11. void esp8266_start_trans(void)
    5 K( D5 i8 B# F' u6 Q( d8 v
  12. {, [) b  `7 e% E' l
  13.         
    9 l$ I* s0 q- e; B/ @, r& F) m
  14.         esp8266_send_cmd("AT+CWMODE=2","OK",50);//设置为AP模式
    / q2 C8 a# d! {  u8 S( N  X6 c- n
  15. ; @$ G2 L9 j1 \; k
  16.         esp8266_send_cmd("AT+RST","ready",20);//重启
    1 a0 ~; E. j; }. D$ N
  17.         # r; M, a: b% d- H3 p
  18.         delay_ms(1000);       3 }. C# T/ c' J
  19.         delay_ms(1000);
    * w6 J7 z  P, A, D
  20.         delay_ms(1000);$ s/ N8 i! a/ z! g/ w
  21.         delay_ms(1000);
    & m( n0 ]+ k- z
  22.         7 {8 n5 R% c! ~6 _, K: ~) ^; o
  23.         esp8266_send_cmd("AT+CWSAP="ESP8266","12345678",1,4","OK",200);//设置WiFi名称、密码,模式- P# g4 I- ~# y( a+ E
  24.         esp8266_send_cmd("AT+CIPMUX=1","OK",20);//进入透传模式0 i! g2 W6 Q4 z
  25.         esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",200);//设置端口8080  ?4 Y! z2 t: t( ]$ n/ T
  26.         esp8266_send_cmd("AT+CIPSEND","OK",50);//开始发送数据4 l1 G* B6 a9 [8 I* h% p
  27. }. d  Y3 H1 a5 Y. T3 L  \
  28. 4 _% X3 F4 ?1 R7 H" b* t+ X8 u, z
  29. //退出透传模式
    ( n2 V' I" S) N$ ]
  30. u8 esp8266_quit_trans(void)* d1 ?- h7 K2 ~1 P7 {
  31. {9 ~; S( Z; O; W: S3 `4 h: R
  32.         u8 result=1;
    $ K4 c& Z8 h" D/ ]8 s) |2 F
  33.         u3_printf("+++");+ u6 f$ G' E2 N, C3 F4 o, X
  34.         delay_ms(1000);                                       
      Y9 l6 R4 x# E$ M7 i5 {
  35.         result=esp8266_send_cmd("AT","OK",20);# `: C( d7 R4 A" J, w
  36.         if(result)
    ; @* I8 c8 T8 W$ U7 k; s) I0 B
  37.                 printf("quit_trans failed!");
    : t9 X8 [: a& q6 j3 H
  38.         else0 V$ b# s1 s+ P, ]7 z$ U
  39.                 printf("quit_trans success!");
    * p. R" M2 i6 T4 @- a' f. o, r/ k
  40.         return result;5 Y' z) [' f5 o* J% }
  41. }
    # U' @) I/ u$ B) }+ d- w
  42. " r, @) V9 o# ]0 ?( {6 J
  43. //发送指令,返回0发送成功,1则失败' F$ n1 q5 x) K; x: N$ }
  44. u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
    6 P( P7 I( k# ]! d4 n& z( K
  45. {
    - Q( g6 b6 C6 [& L5 x6 H* r  }2 a
  46.         u8 res=0; 3 g8 Q% M4 s  W; j$ ]( W3 t
  47.         USART3_RX_STA=0;3 C' J0 Y, q6 A1 A5 _) |8 g
  48.         u3_printf("%s\r\n",cmd);        . g7 N8 M$ I2 `& w- Y
  49.         if(ack&&waittime)               
    8 m( V! Y: {+ S( n
  50.         {1 M5 i# `& H' e5 ]! v" A. E) d
  51.                 while(--waittime)        * n1 S1 j5 Q) P& B+ |: m
  52.                 {
    ' ^/ v9 r; v/ p4 R# E
  53.                         delay_ms(10);$ P/ z3 U5 [: M) Y  e: J
  54.                         if(USART3_RX_STA&0X8000)% H" R% t3 f' {9 O( A
  55.                         {
    0 d) m5 _4 ]2 [
  56.                                 if(esp8266_check_cmd(ack)). K3 V% \' \0 c
  57.                                 {8 X+ G) ]6 e5 W
  58.                                         printf("ack:%s\r\n",(u8*)ack);9 K+ [/ K& F* ~' P! q8 b+ s+ r- p; ^
  59.                                 
    . D$ g, Y8 {: \* A4 d
  60.                                         break;
    - {: V" R7 Z. x( r4 K! s
  61.                                 }! a" C1 c/ Y/ a
  62.                                         USART3_RX_STA=0;  ]5 H. {- W' f2 Z
  63.                         } 3 s7 {7 h$ H+ T, `$ k- m
  64.                 }  T7 n# n+ G( k# J7 {! z! |
  65.                 if(waittime==0)res=1;
    ) k/ G& T) ]; N! n
  66.         }
    ' p1 {( J- h$ X
  67.         return res;2 [: s( t( H& m4 r5 A! A. b% o$ o
  68. } ) a$ |6 K7 p8 p% `. |

  69. ; _, x" F3 G  j( F1 v! K# E
  70. % Z8 e$ h& G! \5 ?! m) O( c
  71. //检测是否应答指令7 c! M9 M+ X$ J" k5 ]2 }
  72. u8* esp8266_check_cmd(u8 *str)
    - W, c/ O& c; O% I
  73. {- W! Q9 F( C! P& f( H; {: J
  74.         char *strx=0;6 c/ b/ P! f  G4 v& R' b
  75.         if(USART3_RX_STA&0X8000)               
    # z" ?- n) C/ V
  76.         {
    " t2 q* r7 N0 C: K
  77.                 USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;& P6 j6 |6 G  r8 C# U
  78.                 strx=strstr((const char*)USART3_RX_BUF,(const char*)str);) J4 |8 x# r- H
  79.         } 8 `" @9 E/ Q) j% x& O9 c% K+ }
  80.         return (u8*)strx;/ r5 w& i, `) p8 \1 c2 I6 G. D
  81. }& Z) p( W- b& X
  82. 4 U8 b; ^- J( [4 y) ?( Y
  83. * T% ~* l  T5 A3 X7 Y( q
  84. //向ESP8266发送指令(数据)的函数,暂时用不到,可以自己斟酌加上' |- B- i( K/ ~3 H# X3 ~* I
  85. //u8* esp8266_send_data(u8 *cmd,u16 waittime)7 \- P4 U- ^. \2 |
  86. //{
    , Q& S$ P  P" p; x8 j2 w' t

  87. & [$ d- J: n+ D5 o+ D3 R
  88. //        char temp[5];
    ( _; x) A5 A6 V1 C- @5 W3 h1 ~
  89. //        char *ack=temp;
    ' E! \8 I, v5 o  T
  90. //        USART3_RX_STA=0;
    * X0 Y/ S7 y* t8 K# {
  91. //        u3_printf("%s",cmd);        
    3 j# g2 Y) `: n* e$ ?& ?4 e4 q
  92. //                LCD_ShowString(30,130,200,16,16,cmd);        6 B$ I7 F. Z( }
  93. //        if(waittime)               
    . Z, t5 ^( t2 g5 e" J% n: d+ P" ^
  94. //        {
    : W4 h- U  s0 G0 p0 k" q% f( Z
  95. //                while(--waittime)        
    + H/ X7 z3 t- v: M. ~2 W3 A: |
  96. //                {
    1 }; o9 J0 N. N. O
  97. //                        delay_ms(10);6 z  a( A8 f5 ?9 q
  98. //                        if(USART3_RX_STA&0X8000)# t1 V4 C1 V4 ^# f, q" Q, w: v5 `1 A
  99. //                        {/ e) G6 J/ u  c7 H1 G( z
  100. //                                USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;- I/ ]% {# I7 U+ l( Y5 ]
  101. //                                ack=(char*)USART3_RX_BUF;
    4 d9 Q: e0 _- S9 Z
  102. //                                printf("ack:%s\r\n",(u8*)ack);/ g7 r* Z3 s- N  z" q% _2 I
  103. //                        LCD_ShowString(30,190,200,16,16,(u8*)ack);        
    0 I0 p8 ]1 v1 H& n' m
  104. //                                USART3_RX_STA=0;* Q. L, q2 _/ R% I3 z3 x
  105. //                                break;
    6 |% m0 X; O# r  |' A: E6 p6 ~- a
  106. //                        }   ?# ]: p5 ?7 f( O" n6 X' ?: f
  107. //                }) G% Q9 H- d  M& V- h
  108. //        }) x2 u8 S, A* s
  109. //        return (u8*)ack;
    % y' `, |: p$ h) E
  110. //}
复制代码

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
  1. #include "delay.h"
    6 y! T9 @" s: i6 D. y- e4 ]1 |
  2. #include "sys.h"
    9 b; A  T  y4 q' t( O4 I' N1 \
  3. #include "usart.h"
    " w2 ^% }' s& B4 D
  4. #include "usart3.h"" }4 q1 U7 p1 D2 p* ]
  5. #include "esp8266.h"; o! D: r! T% h) L5 Q( V5 j
  6. #include "string.h"- G* C5 W1 I1 j
  7. #include "timer.h"5 u- \( u+ p8 K1 t+ X
  8. #include "led.h"9 o2 x% k+ l1 ?+ s6 j
  9. 6 B" c+ ~4 Q: t" Y- W3 h

  10. 0 |, f" g3 e* i/ h4 q
  11. int main(void)
    & x* ]( R; ?) j- i( ~6 }2 ^
  12. {        6 B0 K( ~& A+ N8 K
  13.         char a[15];         
    % t* }$ R0 x, S* d: C
  14.         delay_init();                                               
    2 d+ m) @/ z( x
  15.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                         " L, ^( E" P4 J+ R% E) p
  16.         uart_init(115200);                                 
    1 M! x- J# P8 ]3 y7 V# I4 u' p8 M
  17.         usart3_init(115200);         
    1 z9 r1 U$ r% O" }! m! D
  18.         LED_Init();  
    & m1 w% P+ s' x$ D$ p! _  T
  19.         esp8266_start_trans();                //ESP8266初始化                        
    , m( D; p% s. {6 \- P
  20. ( W9 [$ f3 k) C4 g
  21.          while(1)
      V* V. T# ~% B8 ]
  22.         {: E# r- I4 ]8 V* G, K' G
  23.         if(USART3_RX_STA&0x8000)  ~( V, l7 n) U# q
  24.                 {+ o# A) B1 G) @" F
  25.                     sprintf(a,"%s",USART3_RX_BUF);$ P5 R2 q! r$ I

  26. 6 T. k4 E4 h! a2 n+ g/ O! u
  27.                         if(strstr((const char*)a,"on")) //输入on,LED0亮3 f4 C3 D; f/ o, {+ k, z4 |
  28.                                 LED0=0;
    % M+ r; O) J. e3 K: H
  29.                         if(strstr((const char*)a,"off")) //输入off,LED0灭3 n% A; R7 [5 R- h% u- v
  30.                                 LED0=1;        
    5 }: ~+ v- ?5 C8 `3 C8 d
  31.         
    ! _/ f' c/ |  K5 N- F0 J
  32.                         USART3_RX_STA=0;
    . b8 \. ]+ X" O; v( h+ b6 T
  33.                         / }3 ^. r5 N# i( E
  34.                         
    % r3 G6 N5 a4 |5 o4 z
  35.         }0 U' J" L3 o5 B5 F. ?
  36. }( n/ T) g- S; T: G3 T* x
  37. }# 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
20210816224343488.png
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 4DHD_BSDN}JU{67GQ%[TN.png ) 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 2021081622454918.png 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 DQH31)Z_BJ8L5CHHMN9{`_4.png
' 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 _
]]BQH2M~G2_}5M[}20})IKW.png
' 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/ @
赞 收藏 评论0 发布时间:2022-5-14 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版