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

stm32f103c8t6控制ESP8266与手机APP通信

[复制链接]
STMCU小助手 发布时间:2022-10-16 19:49
之前已经发表过利用stm32控制蓝牙模块与手机APP通信的文章,那么现在我就来说说用WIFI模块来控制与手机APP的通信
# _1 d' u9 T  H0 b首先需要的器件如下:
7 P4 q7 @5 V- C6 ustm32f103c8t6
6 U! s: W7 z  i+ G- J$ y5 |ESP8266-01S(默认波特率115200)
5 p# h" {- ]- M# G除此之外还需要手机下载一个通讯软件,我用的是安卓手机应用宝上面的TCP连接这个APP
9 F0 r9 N" ]: u) z2 c6 tWIFI模块的连接如下所示:
3 d' z; ?) U6 Y0 @- R5 z5 Z6 q9 |; f& E- t
20210104171226590.png
# f' B, L) Y# m/ w3 P
2 D3 D  M" J4 z- Z3 |; K
代码很简单,我主要附上主函数代码:
  1. /*
    * P) J- @# x6 x5 Y. H
  2. ESP8266 AP+Station服务器模式测试
    ) B4 O8 j0 H! A' O4 V+ G& L  F# _! ~
  3. + R) q, l) Q0 ~2 P7 K; |% A
  4. UART2 PA2 PA3  与网络模块ESP进行通信3 z, v3 t4 q; h2 w
  5. " S1 c- ~" x6 J
  6. UART1 PA9 PA10 进行数据跟踪
    ( U& b7 V7 Q6 q1 T5 @! x
  7. */
    1 N# v  M1 h& j" d. `8 e
  8. 6 I( d# G: R* @! v1 s
  9. #include  "delay.h"- ?! Z) h6 q) P( a; ]
  10. #include  "led.h"8 f' F& W7 d4 o9 s+ l7 x
  11. #include  "usart.h": D. }- i2 J7 P; V% v
  12. #include  "string.h"+ p" o6 f: ?1 G8 w; t( b6 ?& W: s
  13. #include  "stdio.h"$ n4 X+ e; M' q+ S% q- Y, A# Z% l
  14. extern  u8 RX_buffer[tbuf];
    # a# l: o) F- j8 ]* Y2 Q4 d
  15. extern u8 RX_num;                                 //接收计数变量
    " N& J) [  F! e% G. l8 G4 k, P
  16. / b) }7 _3 J! W2 U  M/ z( N* `
  17. u8  esp_at[]="AT\r\n";                  // 握手连接指令,返回"OK"
    1 l, [) E1 R  n  r
  18. u8  esp_cifsr[]="AT+CIFSR\r\n";         // 本机IP地址查询指令3 ^! U2 a. K! f. s
  19. u8  esp_cipsend[]="AT+CIPSEND=6\r\n";   // 设置发送数据长度+ J) `" s% v9 {% M; P9 T
  20. u8  esp_test[]="sunny\r\n";                           //  数据内容
    + M' w2 T0 M! \' b4 k$ s
  21. u8  esp_rst[]="AT+RST\r\n";                                         // 软件复位. {; Q, w( o8 [' F

  22. ) {/ b. Q0 a/ y9 n6 l$ f
  23. u8  esp_cwmode[]="AT+CWMODE=3\r\n";     // 设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change"
    5 p' Z2 c8 M3 {) m
  24. u8  esp_cwsap[]="AT+CWSAP="ESP8266_TEST","1234567890",1,3\r\n";//设置WIFI的名称及密码# ~( P* a$ [, w. k; ^8 m
  25. u8  esp_cipmux[]="AT+CIPMUX=1\r\n";                           //打开多连接        # R2 l) }1 ^4 P. ~. L' r+ M# O3 ~" G+ E
  26. u8  esp_cipserver[]="AT+CIPSERVER=1,8080\r\n";  //建立TCP服务器,开放端口8080
    - U* O7 I. W% x: W4 n
  27. # ~) w1 ~& V1 T- x* f1 H, s3 q
  28. //指定字符串与缓存数组数据进行数据比较
    9 }# Z. G, L( @+ }
  29. //*p 要比较的指定字符串指针数据, I2 b; h/ F, L) N
  30. //返回:1 数据一致  0 数据不一致
    . j+ S0 x4 R9 h/ r9 ?
  31. u8 Data_compare(u8 *p)& ~  @1 M. B3 E
  32. {
    . T) n5 ?/ u$ k* X+ Z
  33.         if(strstr(RX_buffer,p)!=NULL)# B6 G. v" A/ x5 N& t
  34.             return 1;
      d3 j2 A. t$ q2 ]3 r/ i
  35.         else
    ( G. ^8 [% J9 G9 T6 L
  36.                 return 0;
    * j1 f0 W5 ^3 |& Q6 W
  37. }+ g$ ^  N' {( p5 E. s* u

  38. & V3 C: I& l0 }
  39. int main(void)8 p( g( Q" U2 _  ?  A4 y6 S' G
  40.    {        + J8 [0 M" z6 x+ G( ~6 Y
  41.            delay_init();                     //延时函数初始化
    ) z0 S6 G( \$ J: [" w  e$ q. g
  42.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                //设置NVIC中断分组2:2位抢占优先级,2位响应优先级, U6 _( x* {) |4 U  |/ I) [
  43.         uart_init(115200);         //串口初始化为9600  
    ! [2 t" n9 W+ _& M- Z0 J2 B; V
  44.         LED_Init();                          //初始化与LED连接的硬件接口% F0 v5 \( s& Y' v! W8 g" @/ I$ {
  45.         memset(RX_buffer, 0, tbuf);//清缓存数据
    4 B" U& k; F! g% D
  46.         RX_num=0;                                   //接收计数变量清0) D+ _) L- k) ?2 @: i, m
  47. : ~, o& o8 q& b9 U
  48.         //配置wifi工作模式为ap+sta模式) a9 `5 m! O+ y8 ^6 z
  49.     while(1)" J* C) X9 V  m1 y. w
  50.         {
    3 V  b1 [9 W( T( h, {$ Y* j* H
  51.          Uart2SendStr(esp_cwmode);           // 设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change"$ `& `6 X: m0 P3 q# k: d
  52.          if(Data_compare("OK")||Data_compare("no change"))break;
    ) n7 {* J2 L7 q( Q9 ~* U$ G
  53.          else  Uart1SendStr("ERROR1,some problems with ESP8266 \r\n");
    1 u4 R, m, n9 N
  54.          delay_ms(600);- Y* r: K! o& W0 ~% {7 ]" Q* c# B9 N
  55.         }) ~1 ]" \" }8 w* E
  56.          Uart1SendStr("OK,set mode as AP+Station with ESP8266! \r\n");         % `; ~5 F0 `. ^1 `9 F) S6 K; n, ?
  57.          memset(RX_buffer, 0, tbuf);//清缓存数据       
    % o0 O% q- x$ U4 E! E6 o3 m
  58.          RX_num=0;                                   //接收计数变量清0
    ! |8 T+ f; H7 E- }! z
  59.         # O* O& x3 |3 C2 z1 v
  60.         while(1)
    ! J3 y% z. [/ @4 N
  61.         {0 H% ^' ?: p5 D' p
  62.          Uart2SendStr(esp_cwsap);           //设置WIFI的名称及密码
    " X/ L  D  h0 V
  63.          if(Data_compare("OK"))break;
    . A; q" c, ^5 k% o
  64.          else  Uart1SendStr("ERROR2,some problems with ESP8266 \r\n");& Q# L7 D9 Y, J% y  f  d
  65.          delay_ms(600);+ y# D' T9 Q3 Z7 q7 k: J
  66.         }
    8 y8 i: b: k3 K
  67.          Uart1SendStr("OK,set cwsap success! \r\n");
    : ]6 x1 J8 d" s; r1 D0 ^
  68.          memset(RX_buffer, 0, tbuf);//清缓存数据        + l8 J! g7 l( L. a( _) ?' z
  69.          RX_num=0;                                        //接收计数变量清0
    : _0 n# ^; n/ f# W/ _
  70.        
    0 u+ j; z- R' _& p6 D1 O
  71.     while(1)) O/ b6 E# I  l9 k# F
  72.         {
    3 H  {0 `( i9 v# r" ]5 z! P
  73.          Uart2SendStr(esp_cipmux);           //设置多连接 (多路连接模式)! P2 m8 R. J0 M2 }  I4 \" Z$ O& I
  74.          if(Data_compare("OK"))break;
    , o- o* O6 J/ y% n* f
  75.          else  Uart1SendStr("ERROR3,some problems with ESP8266 \r\n");
    : p- v! n+ U, h* P7 n' N
  76.          delay_ms(600);; O4 z1 H* J5 a0 h# H) Q" Q/ T
  77.         }
    1 W/ I# ^) }( A2 I$ Y0 V
  78.         Uart1SendStr("OK,set cipmux success! \r\n");& Z' y* R3 e9 S, G  a
  79.         memset(RX_buffer, 0, tbuf);//清缓存数据
    9 Y9 D7 A( L) B+ A
  80.         RX_num=0;                                   //接收计数变量清0- D& c/ H0 A& |) c% \% H" p

  81.   x; \7 p  v) N* o: `" V
  82.     while(1)) n0 d3 t  D& |6 a
  83.         {
    ' c$ U+ S  K; C1 i' L
  84.          Uart2SendStr(esp_cipserver);           //设置wifi模块为TCP服务器模式,并配置端口为8080
    7 ?+ j+ o. e' l* [8 x9 Y  a
  85.          if(Data_compare("OK"))break;6 e6 ]8 A1 D2 o8 u7 }
  86.          else  Uart1SendStr("ERROR4,some problems with ESP8266 \r\n");
    5 g( h1 w! `1 K2 t) l8 ~
  87.          delay_ms(600);
    % _8 [& S: D% r* d; ~1 y2 w9 k# N
  88.         }0 }7 d+ @& I) g& E
  89.         Uart1SendStr("OK,set server success! \r\n");
    " Q4 a$ ?0 q$ K" u' [' A9 |5 P1 D
  90.         memset(RX_buffer, 0, tbuf);//清缓存数据
    ) g+ G6 _. q" G; \
  91.         RX_num=0;                                   //接收计数变量清0. W, O4 @, m' z& E, [/ o. A: A
  92. 6 q5 [8 o, h+ b! z' X
  93.         while(1)
    * T( V6 Y1 Q' X% @) m+ O
  94.         {        & u' U5 X7 n7 R$ Z; l
  95.                 if(Data_compare("LEDK"))               //点亮板上了的led: \! ^$ I8 ]% C) L" s
  96.                 {                + c7 P% K# S# b& S
  97.             led(1);       
    $ T7 e) A9 p  b3 N
  98.                         memset(RX_buffer, 0, tbuf);//清缓存数据4 F* ^% Y7 v8 M# l2 _6 X
  99.                         RX_num=0;                                   //接收计数变量
    - z! e+ i# \( \2 o
  100.                         Uart1SendStr("led is open!\r\n");                                                       
    ! x7 w8 P1 ~, c! S& K) x9 Z
  101.                 }
    5 _( }+ D# S# c$ u
  102.             else if(Data_compare("LEDG"))                    //关闭板上了的led
    ( j4 O& E8 \( B4 _) Z4 T
  103.                 {
    # X) C( t# |! a* U
  104.             led(0);               
    * ]0 }! t! x" s, \7 h
  105.                         memset(RX_buffer, 0, tbuf);//清缓存数据5 v  D* ?9 {& G( R. R. P6 t
  106.                         RX_num=0;                                   //接收计数变量清07 X( j4 V1 F$ [" u
  107.                         Uart1SendStr("led is close!\r\n");                                                                        $ K# g) J) O: v
  108.                 }       
    3 i! [2 M% ?9 l* w
  109.         }
    9 e% A7 y4 t6 p7 ]' P# z
  110.    }
    ! I) o) a# h6 A* K4 N: u
复制代码

8 F- b8 V2 g) P2 L7 A# {这里主要用到有如下几个AT指令:8 j; K' C0 ]9 w2 k2 g& H# ]; ?$ h/ x% |
AT+CWMODE=3(设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change")9 ]2 ^/ ?3 L4 [  D6 |. D
AT+CWSAP=“ESP8266_TEST”,“1234567890”,1,3(设置WIFI的名称及密码,这个名称和密码你可以随便取你自己喜欢的就行,后面两个是通道号和密码模式,默认1,3就好)+ o( U& `, {  l' ]
AT+CIPMUX=1(打开多连接 )
: i4 G' _& A6 q4 q5 x; Q9 R% }AT+CIPSERVER=1,8080(建立TCP服务器,开放端口8080)4 ^1 ?2 @: s3 a- y8 T
这些AT指令我是在程序中执行的,不过你也可以利用USB转TTL模块直接与WIFI模块连接进行配置,这里说明一下,配置AP+Station模式以及配置WIFI名称和密码只要配置一次就行,即使之后断电再上电也不用重复配置,每次上电后只要输入AT+CIPMUX=1和AT+CIPSERVER=1,8080即可。为了让刚接触WIFI模块的人能直接使用这个模块,我在程序中把AP+Station模式以及WIFI名称和密码都写进去,这样无论你的模块之前是被配置成什么样,现在经过这四个配置后就可以在你的电脑上面热点发现有这个WIFI的出现,如下图:
( e+ x( T: b& M0 Y8 s

* J8 X7 j- `8 A# L8 z
20210104184904327.png
) k# m: ^; |. o# b

) h! O) p% }7 i9 g
到这里,我们的WIFI已经设置成功了。# A3 Y7 D/ l$ l0 K
还有就是每次发送AT指令给WIFI模块,WIFI模块收到你发送的特定指令后基本都会发送一串数据返回(当作是数据应答,为了就是让你知道你这个AT指令是否配置成功,具体的AT指令集我将在文章末尾附上链接,在我看来下面的AT指令集很全面)& M4 r$ x5 C3 u' U2 U
接下来,我就简单的说下手机上面的APP"TCP连接"如何使用:
6 q. c1 b4 t2 X& {打开APP之后,点击右上角的连接,此时他会叫你选择一个远程主机进行连接(你如果刚刚下载的话,下面是没有任何一个连接的),而在你点击右上角连接后,会看到右上角有一个省略号,点进去后,他会叫你输入地址以及端口号,这个地址固定是:192.168.4.1,如果不放心可以使用“AT+CIFSR”查询(用USB转TTL模块直接与WIFI模块连接,然后在PC端上面的串口调试助手可以看到你发送AT+CIFSR后,在上面会显示WIFI模块返回的数据,返回的数据中就包括了这个地址),端口:8080,这对应着“AT+CIPSERVER=1,8080”。然后点击APP上面的连接,这样就将手机APP与WIFI模块的通讯完成了(也就是手机连接上了WIFI模块创建出来的WIFI,不过这个WIFI是不能上网的,只能拿来通讯用),就可以实现通过手机APP控制WIFI模块,进而控制STM32控制板了,上面的程序中,我是写接收到LEDK(也就是LED开的缩写)就亮起stm32f103c8t6上面的红灯PA1,接收到LEDG(也就是LED关的缩写)就熄灭stm32f103c8t6上面的红灯。手机界面如下:
4 L: s) n+ |8 y. E; b, M/ C. C# K/ D8 Z5 v, f$ p9 j/ A) t7 I! k
20210104191712257.png

( N, Q5 F- P2 w8 P: W$ o( z

5 r4 f. i+ j: y是不是看起来跟蓝牙串口的界面很像,这也是另一种通讯的方法,在我之前的文章中也有一篇是专门讲蓝牙通讯的,感兴趣的可以去看看。好了,要说的话就这么多了,下面就附上相关程序以及AT指令集的链接。
- P3 G9 D4 L; p' ^/ d————————————————
' i: V' j5 A& ]' e0 [) S% j版权声明:i土豆
- G" ~) E# O$ C! _" `) E/ ^4 d4 D* m

( \! D- n2 U: c% l9 v1 A. g! ?$ O5 b  z: Y! A0 X4 G$ {1 K
收藏 评论0 发布时间:2022-10-16 19:49

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版