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

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

[复制链接]
aimejia 发布时间:2018-5-31 11:00
本帖最后由 aimejia 于 2018-5-31 11:15 编辑
- N1 }) t, r' [+ y2 ^8 _
+ O2 o$ F8 P! f' F基于STM32的ESP8266使用教程(一)$ P8 x/ \  o/ W: o  _, a. x; L$ W7 L
基于STM32的ESP8266使用教程(二)
' S7 j2 n/ R9 X0 ?) |+ |, `基于STM32的ESP8266使用教程(三)6 f2 P# f! e; A* v- c
基于STM32的ESP8266使用教程(四)(短篇)
5 Q9 j/ Y1 t; i+ Z" y/ B7 |9 x3 l: w+ d, [4 k
上篇完成了对ESP8266的配置,本篇想要实现通过电脑内置WIFI模块与8266通信。首先说一下博友的问题,说是电脑连接到WIFI模块后提示“无法连接到Internet”。于是我画了一张结构图,简略的说下通信的模式。* L8 I$ i$ ?6 g6 ]- @

0 m& F4 `! {/ [0 N
1.png

5 M/ L$ j# [. l2 @0 s# a/ z由上图可知,我们之前通过串口完成了WIFI模块的配置,而屏幕上显示的返回信息如“OK”是8266返回给串口的,它们都是有线的通信。现在,我们想要实现其与电脑内置WIFI模块的通信,这是无线通信,故用虚线表示。: _- a0 J9 j" l* h% W5 g1 E6 M* C6 o

& D8 h7 j4 G, t8 o: a这时候可能有博友要问,我们最终想要实现通过单片机连接WIFI模块实现数据的收发,为什么要在电脑上做这么看似无用的测试呢?事实上,通过单片机实现数据收发,需要通过“发数据函数”将“数据”发送后通过“接收函数”得到“返回的数据”。也就是说只要其中任一环节出现错误,就会导致失败。这对于排错是很困难的一件事。但是由于上位机做好了封装,完成了如“发送函数”、“接收函数”的功能,我们只需要保证“数据”是无误的,即可完成收发数据,模块化的完成功能可以加快开发进度。不信的话可看下图:
: X5 D+ [) V# T, d5 |2 V
$ B% U! a: q8 I4 a$ p
2.png
; c5 g4 R4 c  @$ c  o
这是“AT+RST”指令,可以看到前面的“41 54 2B 52  53 54”对应着6个字符,但是后面还有“0D 0D 0A”,如果通过单片机发送,不加上后面的字符就会导致发送失败。
8 C; J! |' G( |7 x
' V  o" r) Z$ ]3 ^好了,那么来到本篇的重点,在电脑连接到WIFI模块后,如何与其进行通信呢?下面介绍另一个软件如下图所示:. o9 X& u8 P8 t) k/ F) d
- _7 H4 d0 I  _
3.png

) V' G: P9 \# s这是网络调试助手,可以理解为电脑内置的WIFI模块收发的数据,而之前的sscom是串口的收发数据。
/ ~& I4 Z  M+ `2 @( Z3 B; B" n
+ g! ]! X1 x% y# k4 `; ~# g! |其中,我们设置“协议类型”为“TCP Client”,即“TCP客户端”,“服务器IP地址”设置为“192.168.4.1”,这部分是固定的,如果不放心可以使用“AT+CIFSR”查询,“服务器端口”设置为8080,这对应着“AT+CIPSERVER=1,8080”。查询指令界面如下:% O' T' W' q4 n* ~3 t
' a2 T1 q3 s$ L7 p& T3 H; M
4.png

5 `6 ?2 O& U' H+ I, b, ~9 }点击连接后应该如上图所示。此时可见串口部分收到的信息如下:
' k$ d; V- }9 p) t8 ?% q8 p/ H9 |
5.png $ S/ U6 T; e1 \: R" y2 Q9 Y4 z. ^

5 j, \7 N5 y2 c( N& n) I* j4 c点击“HEX显示”,即为:! D5 K6 T7 I' J3 a( i- A
- s: u, {, n1 P# n0 ^" e/ ~' m
6.png % e+ d6 C3 V% P+ l- h3 n% r& [
$ F* Q% s8 p: ~" D
事实上这是我们“实际”接收到的字符串,也就是说串口收到的是这11个字符,特别注意下是以“0D 0A”结尾的。
( |, M- `) ?! t7 ^; B( _
$ W" c$ d0 s8 N' K$ z在完成握手之后便可以发送数据了,查询手册后可知发送数据的命令为“AT+CIPSEND=0,5”,其中第一个数为多链接中的序号,即“0,CONNECT”中的“0”,而后面的数字为想要发送的字符个数,如下图所示:
- }' f4 O4 t1 U% u3 H! |3 Z, x: {6 X8 t! W; K  E" O
7.png
) V3 b1 u4 A6 p' a+ I* F$ P4 ]) E" y  G# Z
需要查看对应的十六进制数,如下图所示:1 _: o& M6 v0 z5 v, N8 ~% a" k" R
! ^: r: `4 G+ l  x. N5 k& e/ i2 K
8.png
7 n6 Q& M6 T5 J# {( C# s
& Y% I9 `7 ]; `# [3 |其中“41”到“0D 0D 0A”是我们发送的字符串,而后面的全为8266返回给我们的数据,并等待我们键入5个字符。( C8 J- F9 X4 h6 p+ x6 o. J" c' c

5 f5 @( l/ r2 u3 D; f" {' L+ y接下来我们输入“HELLO”并点击“发送”,结果如下图所示:6 w$ G" _1 s! }1 v5 T( g# M2 [7 \4 L! ]
6 n* E0 E: t& s# K& z
9.png
; E" g/ Q9 m4 C9 Q) J' J; d8 D( `6 h& |/ `
对应的十六进制数为:
7 P- E4 b% `0 ^! G" N
# x$ F6 v; K+ G, ]2 e 10.png 6 ^# J& J2 s1 N2 s; M

% g0 u& T& L" Q$ T4 _至此便完成了从ESP8266向电脑发送数据的功能,事实上网络调试助手端有显示接收到的数据,但是数据有软件添加的冗余部分,没有参考意义,故不展示,从8266接收到的数据才是我们需要的数据(因为单片机与8266直连,收发数据全是通过8266的)。
4 ]/ h  S" r: q; f) k7 ^: y1 Y: I1 h  L& Y; ~
我们通过网络调试助手,发送“HI”,在SSCOM中可接收到如下信息:
4 C0 m0 u& V' Y, U/ z" I* D) x! Y
/ n0 v# ?- T% V& n" t 11.png
9 G  Q. [# E, ^2 X& G8 Z0 G2 z6 u" L& i/ `5 }
对应的十六进制数为:" F. E# [- i5 i

( K) |' x/ |( ~; t: ]$ p2 d6 p 12.png 6 s. t) m" R! b

/ W  ^5 I" T9 g, ?0 {9 x其中“+IPD”是固定部分,“0”是链接序号,“2”为字符数量,冒号后的为内容。
( u, q8 C6 f) T6 E9 N9 y- U1 U% k7 h/ n4 E5 Y3 Q8 E2 C
总结一下:在建立链接后(关于怎么建立链接以后再讲),想要发送数据,便传入“41 54 2B 43 49 50 53 45 4E 44 3D”+“链接序号”+“,”+“字符数量”+“0D 0A”,等待8266准备完成返回字符串(实际上我进行了一段时间等待,并没有进行字符串反馈的判断,这样比较方便,哈哈),继续传入想要发送的字符,注意,此时不需要在后面跟“0D 0A”,发送完成后读取返回数据,读到“SEND OK”对应的ASCII码即发送成功。读取时,将读到的数据保存在字符数组中,按照前述的格式进行解码即可。
& J+ s' b5 L+ s# U4 Q( n0 F
* K: u1 Z* w* _- v6 |1 B7 q- z  Q  w3 E, x% ]1 E% F* D

# j, @' {# Y2 F! _转载自codingindex
" w; ~" s3 t  @, Y+ j, l* h" F2 O' Z+ C
收藏 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版