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

stm32f103c8t6控制ESP8266与手机APP通信

[复制链接]
STMCU小助手 发布时间:2022-10-16 19:49
之前已经发表过利用stm32控制蓝牙模块与手机APP通信的文章,那么现在我就来说说用WIFI模块来控制与手机APP的通信: Y9 w9 \9 E' L  \! u2 }+ |+ K- \" U
首先需要的器件如下:
; X. F* S" ?. b, S. Jstm32f103c8t6
! W9 S# \% a9 [$ x  H  SESP8266-01S(默认波特率115200)
& G; \. h2 `4 q$ N+ q除此之外还需要手机下载一个通讯软件,我用的是安卓手机应用宝上面的TCP连接这个APP
7 j: H. r) W) @+ P3 u# Z2 |5 y# T# ZWIFI模块的连接如下所示:
3 G& M/ T7 u/ D0 I9 r' L. z  }) J  ~! `' H% F7 d* L! \
20210104171226590.png 9 s  P: d: C0 b/ k" e

* j2 M; C6 c7 w( a/ ^# J* y代码很简单,我主要附上主函数代码:
  1. /*5 z' q0 Q* q% P+ X
  2. ESP8266 AP+Station服务器模式测试( U2 v* m7 n6 a5 E. w8 o# m6 x/ E5 V

  3. 0 u9 q' w% F( E8 N
  4. UART2 PA2 PA3  与网络模块ESP进行通信
    8 x, b" u) G# I  A1 c6 Q. Y
  5. " a; e+ M/ x$ l) `7 u3 ?
  6. UART1 PA9 PA10 进行数据跟踪7 b1 }. B" C" j4 `
  7. *// f: y  z9 e8 _0 r- d
  8. # l" x1 F) U$ V1 K( Q8 o
  9. #include  "delay.h"- E' T3 X- r0 y: c
  10. #include  "led.h"
    7 v  L8 U3 `4 ^2 @. B' a' y
  11. #include  "usart.h"
    1 e: j& x( z, ?( V6 A7 a+ ]
  12. #include  "string.h"3 P) N! g! t/ F( P* H
  13. #include  "stdio.h"
    # r9 k4 S: g* P
  14. extern  u8 RX_buffer[tbuf];6 a9 y$ a" k+ g0 q3 t3 J8 P1 P
  15. extern u8 RX_num;                                 //接收计数变量5 r/ T$ ]3 Z! q/ X1 u: n" X2 b
  16. 7 ^- l+ _* P5 p9 i7 s5 p. @$ _
  17. u8  esp_at[]="AT\r\n";                  // 握手连接指令,返回"OK"% S8 \1 z, E7 C9 v( U, Z
  18. u8  esp_cifsr[]="AT+CIFSR\r\n";         // 本机IP地址查询指令
    7 ]) V/ l$ r) b& s+ V
  19. u8  esp_cipsend[]="AT+CIPSEND=6\r\n";   // 设置发送数据长度
    / r) s; f5 g* N$ F" i# |
  20. u8  esp_test[]="sunny\r\n";                           //  数据内容
    ! N8 i. |3 j' {4 r& e
  21. u8  esp_rst[]="AT+RST\r\n";                                         // 软件复位& z: T* |* \4 C$ G$ s" _1 N9 L
  22. * [0 N, O/ S6 A8 ^
  23. u8  esp_cwmode[]="AT+CWMODE=3\r\n";     // 设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change"" [' V, ?) B! a. p: k+ ^3 H$ p
  24. u8  esp_cwsap[]="AT+CWSAP="ESP8266_TEST","1234567890",1,3\r\n";//设置WIFI的名称及密码0 @  F  ~# j7 F: s. i# g# I
  25. u8  esp_cipmux[]="AT+CIPMUX=1\r\n";                           //打开多连接        : y- N6 K+ b: p/ ]1 H0 e3 I) _* ]- a
  26. u8  esp_cipserver[]="AT+CIPSERVER=1,8080\r\n";  //建立TCP服务器,开放端口8080
    5 V1 m- K4 W9 G
  27. % o) M& _' s0 B; P9 j3 Z" [$ k
  28. //指定字符串与缓存数组数据进行数据比较
    0 {# u5 Y0 N: F$ t
  29. //*p 要比较的指定字符串指针数据" x) c3 L+ L" R: u
  30. //返回:1 数据一致  0 数据不一致
    6 [5 U' b3 w7 c9 ~6 G6 f4 x8 p* k3 G
  31. u8 Data_compare(u8 *p)
    $ R' U+ a' s) E
  32. {
      o) A6 F: `$ E# T8 ^* O
  33.         if(strstr(RX_buffer,p)!=NULL)
    ) M. K/ |. o! o! b) K) B
  34.             return 1;/ T3 c0 U. E& m! F. _3 n. C# D
  35.         else
    1 f2 D+ L7 n4 M5 y4 {+ q6 M
  36.                 return 0;! ?8 v" j4 v' Q; y0 O1 n2 [, d
  37. }
    1 S- G% C6 |3 F) e2 C, C! K

  38. ; H$ |9 t+ }8 D2 \
  39. int main(void)
    ; L4 ~0 U, C5 O) ~* P
  40.    {       
    " a' V! Y2 A/ @+ @, D$ V* _0 M
  41.            delay_init();                     //延时函数初始化" o+ A, F" z7 h9 M' b& X! W
  42.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    ; \- b9 ~! }% i) i+ |/ V' w' ^
  43.         uart_init(115200);         //串口初始化为9600  
    + I) j9 @1 ^5 `7 a# K0 J+ X7 L0 K6 E
  44.         LED_Init();                          //初始化与LED连接的硬件接口
    ( C2 }1 L- s- u, i
  45.         memset(RX_buffer, 0, tbuf);//清缓存数据4 v  z& |" V- R$ _
  46.         RX_num=0;                                   //接收计数变量清0
    " C- Q; {* |6 {+ g" v

  47. 8 X7 i* Q  S1 O7 C
  48.         //配置wifi工作模式为ap+sta模式  r  o. c4 L. M4 C& }7 D* L
  49.     while(1)# k) B9 X5 O8 t. ?
  50.         {
    - i( O0 o. S+ ^
  51.          Uart2SendStr(esp_cwmode);           // 设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change"
    , [, M! Y! G# j9 K
  52.          if(Data_compare("OK")||Data_compare("no change"))break;
    : l+ v: W6 c8 ?2 A" L
  53.          else  Uart1SendStr("ERROR1,some problems with ESP8266 \r\n");( v- ~% f& j. ?9 p2 n$ w8 r
  54.          delay_ms(600);9 P& k9 z5 o/ O" x, }5 v8 A9 c, y
  55.         }/ h3 ]  R3 W! R6 V3 Q; F  Y
  56.          Uart1SendStr("OK,set mode as AP+Station with ESP8266! \r\n");         
    - a% m9 ]! b, s
  57.          memset(RX_buffer, 0, tbuf);//清缓存数据        # D8 s9 {& v, F' ~4 C- ]5 e! y. |/ x
  58.          RX_num=0;                                   //接收计数变量清0
    8 {" ?6 y" }, @9 b& N
  59.        
    & Y. T! X9 O* K( j" z7 d1 E5 b
  60.         while(1). {. ^0 p! E& }+ W8 T# e% q8 ?! Q
  61.         {# C+ E6 r: R, d; ?1 R( ^: N- H; y
  62.          Uart2SendStr(esp_cwsap);           //设置WIFI的名称及密码
      t7 C3 m% r$ S! b: y
  63.          if(Data_compare("OK"))break;4 k$ _/ O' w* V/ Y, B
  64.          else  Uart1SendStr("ERROR2,some problems with ESP8266 \r\n");+ \; |# M- Z: C/ m
  65.          delay_ms(600);
    " `- h: {7 N/ n" ~" I; w
  66.         }
    - r; ]' J8 Q2 L; \4 Z
  67.          Uart1SendStr("OK,set cwsap success! \r\n"); ; Z7 u( E  p* Z8 q0 E, B
  68.          memset(RX_buffer, 0, tbuf);//清缓存数据        $ ~7 R0 K+ j8 y, ]; M
  69.          RX_num=0;                                        //接收计数变量清03 k& U+ L" i+ A' H, N  b. C! a+ }
  70.         " e2 [* G* |' G3 J% K
  71.     while(1)
    , _+ {2 C1 d: q
  72.         {
    2 ]- s0 ?, _+ S
  73.          Uart2SendStr(esp_cipmux);           //设置多连接 (多路连接模式)
    ' `. z/ g5 V8 Z+ x; G
  74.          if(Data_compare("OK"))break;
    & w8 q0 F" N: Y% x  c! M
  75.          else  Uart1SendStr("ERROR3,some problems with ESP8266 \r\n");1 h* ?2 W$ k+ m) b3 b
  76.          delay_ms(600);, V- M8 w9 j* S7 ?, W
  77.         }
    + D. ~) f  A/ c( f; W, X% B
  78.         Uart1SendStr("OK,set cipmux success! \r\n");" V) ]$ p5 A3 [5 N
  79.         memset(RX_buffer, 0, tbuf);//清缓存数据
    7 f/ d  O7 ]3 y
  80.         RX_num=0;                                   //接收计数变量清0
    ( s7 g( p- K; t/ @+ O; q$ E

  81. . E; ^9 U, r& _* i0 |0 d  Y
  82.     while(1)
    " K5 [/ E' d$ x5 @" y/ t" z/ W2 C7 h& h
  83.         {9 w/ T! J6 S3 M7 j
  84.          Uart2SendStr(esp_cipserver);           //设置wifi模块为TCP服务器模式,并配置端口为8080* I$ {) m, s  ~* R% A' J, I
  85.          if(Data_compare("OK"))break;
    6 F7 A$ l" _/ \- D9 Q* a: _- g7 b5 z
  86.          else  Uart1SendStr("ERROR4,some problems with ESP8266 \r\n");$ K# ^5 N8 S1 {& r  x6 t9 z- P( p; d' w
  87.          delay_ms(600);( O% E' p6 ]* {$ Q7 Q7 b* Y1 K
  88.         }2 I0 a  M6 L2 T: r  Z& d
  89.         Uart1SendStr("OK,set server success! \r\n");! c' I3 C1 k/ n) q3 v
  90.         memset(RX_buffer, 0, tbuf);//清缓存数据
    ! n0 C& L3 n& J
  91.         RX_num=0;                                   //接收计数变量清0" \. N3 ^2 N  U, {+ a
  92. + |8 }4 v$ L" \( M# z# j1 ^; x
  93.         while(1)
    . U5 D$ W1 ~! q$ x, z: S+ N5 u' E
  94.         {       
    $ i8 f+ N- Z, `( k4 f1 V6 K0 Y4 T% z
  95.                 if(Data_compare("LEDK"))               //点亮板上了的led! [/ L; A# \' @" @
  96.                 {                ( Y: s" P  t8 o; B
  97.             led(1);        $ f+ z! w1 Y* h) ~# T4 G
  98.                         memset(RX_buffer, 0, tbuf);//清缓存数据+ G$ l* ~8 V! D( l7 Q8 T
  99.                         RX_num=0;                                   //接收计数变量
      [+ J7 V) v5 H, q) s
  100.                         Uart1SendStr("led is open!\r\n");                                                        # s$ R3 H) S. S  k! L' X* }; q$ b
  101.                 }+ x1 U6 y/ T& f0 I
  102.             else if(Data_compare("LEDG"))                    //关闭板上了的led
    , v! l7 o" m0 i7 J
  103.                 {
    ( Z' Y- l4 p& M3 j5 k2 D: }4 q
  104.             led(0);               
    $ X5 @6 W8 X1 g! E; {) T) [
  105.                         memset(RX_buffer, 0, tbuf);//清缓存数据
    7 }4 H% q7 Z  o3 L8 L3 |; ]
  106.                         RX_num=0;                                   //接收计数变量清0
    * @, i, a4 X7 O
  107.                         Uart1SendStr("led is close!\r\n");                                                                       
    ' ^9 K. b( J* q) O/ F
  108.                 }          i# ^& d' w! K1 ^& r
  109.         }
    8 h( q% Q6 B# A0 H
  110.    }
    - v* n% _* ?# l' O3 `4 M
复制代码
: U+ f/ W1 K% Z5 m
这里主要用到有如下几个AT指令:
8 `  o8 C9 I  }. T6 h, V* MAT+CWMODE=3(设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change")- a) u5 b" R, D' p: G( Q$ r
AT+CWSAP=“ESP8266_TEST”,“1234567890”,1,3(设置WIFI的名称及密码,这个名称和密码你可以随便取你自己喜欢的就行,后面两个是通道号和密码模式,默认1,3就好)
8 l0 {1 p' v' v6 \/ Q5 k9 WAT+CIPMUX=1(打开多连接 )
5 U1 c% T6 q. v8 k4 Z1 Y) g9 y! d- LAT+CIPSERVER=1,8080(建立TCP服务器,开放端口8080), \9 r; N8 C( s0 _
这些AT指令我是在程序中执行的,不过你也可以利用USB转TTL模块直接与WIFI模块连接进行配置,这里说明一下,配置AP+Station模式以及配置WIFI名称和密码只要配置一次就行,即使之后断电再上电也不用重复配置,每次上电后只要输入AT+CIPMUX=1和AT+CIPSERVER=1,8080即可。为了让刚接触WIFI模块的人能直接使用这个模块,我在程序中把AP+Station模式以及WIFI名称和密码都写进去,这样无论你的模块之前是被配置成什么样,现在经过这四个配置后就可以在你的电脑上面热点发现有这个WIFI的出现,如下图:
+ _5 E2 Z0 ~4 p7 w' @5 n; Q
3 P+ u" Q5 ?& H7 @
20210104184904327.png
. k; y" o* w- h" Z% Z4 N
; T3 b# g- F: N5 J9 `
到这里,我们的WIFI已经设置成功了。8 k# ~" U% O0 v8 Y3 O% `
还有就是每次发送AT指令给WIFI模块,WIFI模块收到你发送的特定指令后基本都会发送一串数据返回(当作是数据应答,为了就是让你知道你这个AT指令是否配置成功,具体的AT指令集我将在文章末尾附上链接,在我看来下面的AT指令集很全面)
( ?7 |, I* M! d: ?" X2 L3 Z接下来,我就简单的说下手机上面的APP"TCP连接"如何使用:8 o- |- Y, y; L4 v
打开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上面的红灯。手机界面如下:+ k3 X5 |, k: A
# |* Z# I5 s( v% j4 P
20210104191712257.png

# y6 {& k- r9 ~* n$ V7 \1 Y3 E

) z( M, v$ z& |是不是看起来跟蓝牙串口的界面很像,这也是另一种通讯的方法,在我之前的文章中也有一篇是专门讲蓝牙通讯的,感兴趣的可以去看看。好了,要说的话就这么多了,下面就附上相关程序以及AT指令集的链接。( z$ O! G. S/ g9 K
————————————————9 H, W. k+ a0 J/ N# N2 [  S+ |
版权声明:i土豆, V# j8 F+ @( H/ }

+ x) e% ~  o0 h5 w: z0 E
, t/ F& Q: C' ^: {( k* k3 S4 f( j& S( l; T8 N' o
收藏 评论0 发布时间:2022-10-16 19:49

举报

0个回答

所属标签

相似分享

官网相关资源

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