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

基于STM32的ESP8266使用教程(二)

[复制链接]
aimejia 发布时间:2018-5-31 11:00
本帖最后由 aimejia 于 2018-5-31 11:15 编辑 ! w- J* K1 S7 X% }3 S- G

/ e, `  I& f) R' x- o9 G, Q基于STM32的ESP8266使用教程(一)! `. U- @  ~! s. h5 }4 r- Y
基于STM32的ESP8266使用教程(二)
! K, k. a- K0 r! Y2 ^3 X5 w( X基于STM32的ESP8266使用教程(三)
3 u1 x: i/ @) ^" v' ?4 Z% h基于STM32的ESP8266使用教程(四)(短篇)/ J7 T) O0 I1 _% S9 w' E. ]
3 Z* o7 M; }: T4 W! _+ x
上篇完成了对ESP8266的配置,本篇想要实现通过电脑内置WIFI模块与8266通信。首先说一下博友的问题,说是电脑连接到WIFI模块后提示“无法连接到Internet”。于是我画了一张结构图,简略的说下通信的模式。
3 G: l! f& Z% v; {" s' Y3 E3 g. ]1 M" u; c" _7 o
1.png

8 H5 ]% ~' b; E. s2 g( B+ y" T: c5 }1 l由上图可知,我们之前通过串口完成了WIFI模块的配置,而屏幕上显示的返回信息如“OK”是8266返回给串口的,它们都是有线的通信。现在,我们想要实现其与电脑内置WIFI模块的通信,这是无线通信,故用虚线表示。
; C) u' E. W5 G- R" x+ |/ s6 a' X9 l- G2 U% f' _  [
这时候可能有博友要问,我们最终想要实现通过单片机连接WIFI模块实现数据的收发,为什么要在电脑上做这么看似无用的测试呢?事实上,通过单片机实现数据收发,需要通过“发数据函数”将“数据”发送后通过“接收函数”得到“返回的数据”。也就是说只要其中任一环节出现错误,就会导致失败。这对于排错是很困难的一件事。但是由于上位机做好了封装,完成了如“发送函数”、“接收函数”的功能,我们只需要保证“数据”是无误的,即可完成收发数据,模块化的完成功能可以加快开发进度。不信的话可看下图:
1 n9 {' @8 \( a6 U9 F6 N0 _" W9 E0 C) d; K. i8 f7 `
2.png
/ N. Y) O8 A9 @9 k% v
这是“AT+RST”指令,可以看到前面的“41 54 2B 52  53 54”对应着6个字符,但是后面还有“0D 0D 0A”,如果通过单片机发送,不加上后面的字符就会导致发送失败。2 C7 Z  j% \( Q! H0 ~$ z/ V

* Q+ o" }, Q  t9 O- y5 s( v好了,那么来到本篇的重点,在电脑连接到WIFI模块后,如何与其进行通信呢?下面介绍另一个软件如下图所示:3 B& |/ ~) r8 x8 d9 e% e

  b4 s8 M- d' V9 ]; b7 m/ k
3.png

; l1 q- T5 D0 Z. Z这是网络调试助手,可以理解为电脑内置的WIFI模块收发的数据,而之前的sscom是串口的收发数据。1 j2 p* x( l5 |5 y

4 X4 ^( V5 p0 R2 c7 d其中,我们设置“协议类型”为“TCP Client”,即“TCP客户端”,“服务器IP地址”设置为“192.168.4.1”,这部分是固定的,如果不放心可以使用“AT+CIFSR”查询,“服务器端口”设置为8080,这对应着“AT+CIPSERVER=1,8080”。查询指令界面如下:
5 h/ A3 e+ n) Q$ H4 d/ S7 @5 @+ w, ]$ f1 ~& `+ Y
4.png

  U2 X) J. f$ c( V+ F0 V点击连接后应该如上图所示。此时可见串口部分收到的信息如下:# m& @8 P% g; c; ?, H* M

* U1 `0 x+ \2 G5 x/ |0 k1 {( k 5.png 7 X6 h7 o3 g) t

* y% Z1 _3 p! i- X- L" L: W& ~点击“HEX显示”,即为:0 ]$ X9 u( _# ]" [5 z- Y
8 S; \7 O2 R- _  _" i
6.png ! r* h! ~) _7 ~8 w9 }- n

4 v1 G5 h5 }0 x8 R事实上这是我们“实际”接收到的字符串,也就是说串口收到的是这11个字符,特别注意下是以“0D 0A”结尾的。7 c. ^6 p2 c8 a- o

: H% j( U% X3 Y) z4 Y/ U* N/ C在完成握手之后便可以发送数据了,查询手册后可知发送数据的命令为“AT+CIPSEND=0,5”,其中第一个数为多链接中的序号,即“0,CONNECT”中的“0”,而后面的数字为想要发送的字符个数,如下图所示:' i; g& Y, Y0 z7 Q( S. a" c

$ N: Q" M3 \8 Q2 U' g8 P  v 7.png - x9 ^" v- ^! X. m! T3 q
. E9 t$ T. D7 x: \7 Y
需要查看对应的十六进制数,如下图所示:
5 u& P  b( ?3 I. _: N9 [- O( z  ]& ?6 Y1 i; h) p) d& D( s- E) N0 o: I' `
8.png
/ q; j! @, E! Q) j+ [1 q
3 A* R" R0 t: w# B, ?# o  K9 j其中“41”到“0D 0D 0A”是我们发送的字符串,而后面的全为8266返回给我们的数据,并等待我们键入5个字符。/ P  n" W. A2 T. {1 n! b

% r) E- t! j2 N, G, E' {接下来我们输入“HELLO”并点击“发送”,结果如下图所示:- A9 R+ |& j3 p% S/ w: p0 m
2 H0 R; j) G, r2 u) T8 z/ S8 g$ d
9.png
6 y; t& U! C; W0 \0 |( ~6 _
+ \1 C2 y# ]" m& @+ S对应的十六进制数为:
, r- {# J  z6 B5 O; u- O& `$ n
! L7 {3 p. M! t8 F 10.png
4 N3 A/ o& B7 Y" B1 L/ }- M& b7 f1 K1 x: @2 R3 v, O8 z
至此便完成了从ESP8266向电脑发送数据的功能,事实上网络调试助手端有显示接收到的数据,但是数据有软件添加的冗余部分,没有参考意义,故不展示,从8266接收到的数据才是我们需要的数据(因为单片机与8266直连,收发数据全是通过8266的)。
1 r7 I2 t& t$ z) e3 `* v
% S0 P+ E  m6 g+ j5 g! [5 ^' v0 F- S我们通过网络调试助手,发送“HI”,在SSCOM中可接收到如下信息:' O& J4 ?/ |+ V2 L) j

+ x& }" F9 W9 z; P; D 11.png
7 R1 l$ @3 q  O. t3 ]+ z
) V# S: Y! t+ v对应的十六进制数为:% s# c( S5 k5 r

! F5 o0 e' }. a$ z5 V1 Z 12.png
) X8 s! S3 U% y4 V4 ^
0 Z' R" A6 P& c5 e; A5 n其中“+IPD”是固定部分,“0”是链接序号,“2”为字符数量,冒号后的为内容。% x# i( L2 U& p- n

' V8 \5 _. @6 u* }% A- S: ^* n总结一下:在建立链接后(关于怎么建立链接以后再讲),想要发送数据,便传入“41 54 2B 43 49 50 53 45 4E 44 3D”+“链接序号”+“,”+“字符数量”+“0D 0A”,等待8266准备完成返回字符串(实际上我进行了一段时间等待,并没有进行字符串反馈的判断,这样比较方便,哈哈),继续传入想要发送的字符,注意,此时不需要在后面跟“0D 0A”,发送完成后读取返回数据,读到“SEND OK”对应的ASCII码即发送成功。读取时,将读到的数据保存在字符数组中,按照前述的格式进行解码即可。
! X8 t% G; @) ]( y) Y7 M3 {; n' o$ M4 @- L, X

4 Y6 i4 U$ g4 D8 F( e+ q. y8 q+ N- j3 M! Q1 Y7 q' h7 E% v/ t9 P. N
转载自codingindex
2 Z5 K) G+ S" d2 T+ w. V( C/ I# P
6 c4 y# G. ?# V: Z5 _9 k3 ~( `
收藏 1 评论3 发布时间:2018-5-31 11:00

举报

3个回答
wolfgang 回答时间:2018-5-31 12:33:36
GOOD!
ST1997 回答时间:2019-3-21 08:59:30
理解
lisd70 回答时间:2019-3-23 15:32:49
不错,谢谢

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版