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

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

[复制链接]
aimejia 发布时间:2018-5-31 11:00
本帖最后由 aimejia 于 2018-5-31 11:15 编辑 % F+ C6 N5 M% W( R6 {- Q8 e) p
  Y. ^$ |" j. Z* N
基于STM32的ESP8266使用教程(一)  \9 y0 _  X6 V% I; f/ u8 z. O
基于STM32的ESP8266使用教程(二)
  n* V* \0 `; F, e% l, }) n3 h基于STM32的ESP8266使用教程(三)
# l4 z# p" j% h, a基于STM32的ESP8266使用教程(四)(短篇)0 l) R; h1 b9 b) Z+ s1 o: C1 Z/ P/ E" q
: v- w1 N4 R. S, q  x* G6 a4 \
上篇完成了对ESP8266的配置,本篇想要实现通过电脑内置WIFI模块与8266通信。首先说一下博友的问题,说是电脑连接到WIFI模块后提示“无法连接到Internet”。于是我画了一张结构图,简略的说下通信的模式。  ~9 O$ ], H/ Q" Y

, a+ L8 j8 j2 ]2 @) s
1.png

' y: b6 e* k- \; {) X由上图可知,我们之前通过串口完成了WIFI模块的配置,而屏幕上显示的返回信息如“OK”是8266返回给串口的,它们都是有线的通信。现在,我们想要实现其与电脑内置WIFI模块的通信,这是无线通信,故用虚线表示。
& T) C9 w& z. L3 @8 u, ?8 H; l# J5 n4 }4 @9 B
这时候可能有博友要问,我们最终想要实现通过单片机连接WIFI模块实现数据的收发,为什么要在电脑上做这么看似无用的测试呢?事实上,通过单片机实现数据收发,需要通过“发数据函数”将“数据”发送后通过“接收函数”得到“返回的数据”。也就是说只要其中任一环节出现错误,就会导致失败。这对于排错是很困难的一件事。但是由于上位机做好了封装,完成了如“发送函数”、“接收函数”的功能,我们只需要保证“数据”是无误的,即可完成收发数据,模块化的完成功能可以加快开发进度。不信的话可看下图:
3 R: ~) P/ L+ A1 o
, ?) s" e: F0 [/ k* ?3 i( u% @9 M
2.png

) _" D- g7 P+ [8 Q2 Y0 v/ A这是“AT+RST”指令,可以看到前面的“41 54 2B 52  53 54”对应着6个字符,但是后面还有“0D 0D 0A”,如果通过单片机发送,不加上后面的字符就会导致发送失败。
1 Y$ A) m+ O$ U2 o" ^" F, ^1 z* p2 @; S2 n
好了,那么来到本篇的重点,在电脑连接到WIFI模块后,如何与其进行通信呢?下面介绍另一个软件如下图所示:1 E8 J6 u3 t% Z7 b- c5 i8 }

8 x. O/ {- Y+ L+ O$ X! _  E  \* x
3.png
- N" p/ Z( d: g; l' P
这是网络调试助手,可以理解为电脑内置的WIFI模块收发的数据,而之前的sscom是串口的收发数据。/ H, M* o0 Y" U- s$ ^3 {& E$ l/ V

9 K* e5 p0 S. a2 ]- E' X9 K  k其中,我们设置“协议类型”为“TCP Client”,即“TCP客户端”,“服务器IP地址”设置为“192.168.4.1”,这部分是固定的,如果不放心可以使用“AT+CIFSR”查询,“服务器端口”设置为8080,这对应着“AT+CIPSERVER=1,8080”。查询指令界面如下:8 Q: U1 O: g" z5 {" d

' n" J+ ^. o: O) V0 N' b. l7 m
4.png
! c' }$ l/ Y" ]6 o  [
点击连接后应该如上图所示。此时可见串口部分收到的信息如下:+ e5 L) o5 @, H! W; G
3 B9 X& N: P: j: M: e$ [& S# M
5.png $ j) D3 F4 |% l# J- e
- |+ ^% h0 M5 X8 j  q
点击“HEX显示”,即为:
! R* I  X# R0 X" h' L' Q
+ N. ]2 Q% T" h! h8 u 6.png 5 `. ]/ D# N5 z6 ]! y# A* v( \" m
3 ^6 ~' B9 ]: I! W1 q2 k) V* ~0 f
事实上这是我们“实际”接收到的字符串,也就是说串口收到的是这11个字符,特别注意下是以“0D 0A”结尾的。# Y: F% [* w; ?# O4 Z) w
! U7 ]0 U0 i. Z
在完成握手之后便可以发送数据了,查询手册后可知发送数据的命令为“AT+CIPSEND=0,5”,其中第一个数为多链接中的序号,即“0,CONNECT”中的“0”,而后面的数字为想要发送的字符个数,如下图所示:
% ^. q% G+ ^7 u. K0 S
! J7 K( l) G' V% N8 S8 W5 ~+ n 7.png & f. o! k) y' w2 I$ m9 _& I2 ~. l

3 Z' t& K3 e5 {" M需要查看对应的十六进制数,如下图所示:
% P7 t2 E8 I" p& U& w2 ~+ E7 @: R2 B0 s* N3 \3 M
8.png
; X, Y7 x9 L- y! K1 v' u5 ]7 c4 x
& @% S7 I$ c# h8 ~! j其中“41”到“0D 0D 0A”是我们发送的字符串,而后面的全为8266返回给我们的数据,并等待我们键入5个字符。) F. Z" S/ ~" s6 u% V, T- g+ b

0 d3 Y! O- b! P. V: v接下来我们输入“HELLO”并点击“发送”,结果如下图所示:
% N! V' ^  x7 I% O' f5 I% o7 e% A, _8 E7 L
9.png 0 ]  T3 T3 P7 X4 V! X

! _( m/ q9 I$ ^. @! v对应的十六进制数为:
. s  B  U% x* {  u; P
+ j  O6 }/ m+ Z( [& O% p 10.png
+ [7 c. e& @  d( ^6 C7 k9 x" `2 w7 \  r4 h1 n" a
至此便完成了从ESP8266向电脑发送数据的功能,事实上网络调试助手端有显示接收到的数据,但是数据有软件添加的冗余部分,没有参考意义,故不展示,从8266接收到的数据才是我们需要的数据(因为单片机与8266直连,收发数据全是通过8266的)。1 r* q3 p  e. C" ^% {6 s" F1 z2 w

2 O: z4 ~8 F6 S+ Z4 [2 \0 R) M1 B我们通过网络调试助手,发送“HI”,在SSCOM中可接收到如下信息:9 L, v! c9 _" U7 X. _& I

4 m4 `5 Y# i' y 11.png $ C& t9 b6 b6 y) G
2 i, h+ |/ Q; C9 f! c& O) I  ]
对应的十六进制数为:
+ _, ^4 W3 w6 G, ~* b# c% a7 e4 `3 j! [# o# {9 {' l
12.png
; t$ A% R# z: q2 M$ [2 s& Y# h: _' C7 D7 V$ ]0 M6 {
其中“+IPD”是固定部分,“0”是链接序号,“2”为字符数量,冒号后的为内容。1 b6 D- C, P* G. \

! `1 v9 t- `8 C* B0 ~总结一下:在建立链接后(关于怎么建立链接以后再讲),想要发送数据,便传入“41 54 2B 43 49 50 53 45 4E 44 3D”+“链接序号”+“,”+“字符数量”+“0D 0A”,等待8266准备完成返回字符串(实际上我进行了一段时间等待,并没有进行字符串反馈的判断,这样比较方便,哈哈),继续传入想要发送的字符,注意,此时不需要在后面跟“0D 0A”,发送完成后读取返回数据,读到“SEND OK”对应的ASCII码即发送成功。读取时,将读到的数据保存在字符数组中,按照前述的格式进行解码即可。; V9 X7 i: {& |/ V% P9 k
- [$ g3 s  g  X4 }" v
4 T; z: U8 o. ?- v$ O( a

( H6 J2 h$ G# Q0 W: z% U转载自codingindex
0 @, ^0 V1 ?3 p" S, U, s$ ~, x5 U2 d) w7 V2 M
赞 收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版