本帖最后由 aimejia 于 2018-5-31 11:15 编辑 ! w- J* K1 S7 X% }3 S- G 基于STM32的ESP8266使用教程(一)! `. U- @ ~! s. h5 }4 r- Y 基于STM32的ESP8266使用教程(二) 基于STM32的ESP8266使用教程(三) 基于STM32的ESP8266使用教程(四)(短篇)/ J7 T) O0 I1 _% S9 w' E. ] 3 Z* o7 M; }: T4 W! _+ x 上篇完成了对ESP8266的配置,本篇想要实现通过电脑内置WIFI模块与8266通信。首先说一下博友的问题,说是电脑连接到WIFI模块后提示“无法连接到Internet”。于是我画了一张结构图,简略的说下通信的模式。 " s' Y3 E3 g. ]1 M" u; c" _7 o 由上图可知,我们之前通过串口完成了WIFI模块的配置,而屏幕上显示的返回信息如“OK”是8266返回给串口的,它们都是有线的通信。现在,我们想要实现其与电脑内置WIFI模块的通信,这是无线通信,故用虚线表示。 + |/ s6 a' X9 l- G2 U% f' _ [ 这时候可能有博友要问,我们最终想要实现通过单片机连接WIFI模块实现数据的收发,为什么要在电脑上做这么看似无用的测试呢?事实上,通过单片机实现数据收发,需要通过“发数据函数”将“数据”发送后通过“接收函数”得到“返回的数据”。也就是说只要其中任一环节出现错误,就会导致失败。这对于排错是很困难的一件事。但是由于上位机做好了封装,完成了如“发送函数”、“接收函数”的功能,我们只需要保证“数据”是无误的,即可完成收发数据,模块化的完成功能可以加快开发进度。不信的话可看下图: 6 N0 _" W9 E0 C) d; K. i8 f7 ` 这是“AT+RST”指令,可以看到前面的“41 54 2B 52 53 54”对应着6个字符,但是后面还有“0D 0D 0A”,如果通过单片机发送,不加上后面的字符就会导致发送失败。2 C7 Z j% \( Q! H0 ~$ z/ V 好了,那么来到本篇的重点,在电脑连接到WIFI模块后,如何与其进行通信呢?下面介绍另一个软件如下图所示:3 B& |/ ~) r8 x8 d9 e% e 这是网络调试助手,可以理解为电脑内置的WIFI模块收发的数据,而之前的sscom是串口的收发数据。1 j2 p* x( l5 |5 y 其中,我们设置“协议类型”为“TCP Client”,即“TCP客户端”,“服务器IP地址”设置为“192.168.4.1”,这部分是固定的,如果不放心可以使用“AT+CIFSR”查询,“服务器端口”设置为8080,这对应着“AT+CIPSERVER=1,8080”。查询指令界面如下: 5 @+ w, ]$ f1 ~& `+ Y 点击连接后应该如上图所示。此时可见串口部分收到的信息如下:# m& @8 P% g; c; ?, H* M 点击“HEX显示”,即为:0 ]$ X9 u( _# ]" [5 z- Y 8 S; \7 O2 R- _ _" i 事实上这是我们“实际”接收到的字符串,也就是说串口收到的是这11个字符,特别注意下是以“0D 0A”结尾的。7 c. ^6 p2 c8 a- o 在完成握手之后便可以发送数据了,查询手册后可知发送数据的命令为“AT+CIPSEND=0,5”,其中第一个数为多链接中的序号,即“0,CONNECT”中的“0”,而后面的数字为想要发送的字符个数,如下图所示:' i; g& Y, Y0 z7 Q( S. a" c . E9 t$ T. D7 x: \7 Y 需要查看对应的十六进制数,如下图所示: 1 i; h) p) d& D( s- E) N0 o: I' ` 其中“41”到“0D 0D 0A”是我们发送的字符串,而后面的全为8266返回给我们的数据,并等待我们键入5个字符。/ P n" W. A2 T. {1 n! b 接下来我们输入“HELLO”并点击“发送”,结果如下图所示:- A9 R+ |& j3 p% S/ w: p0 m 2 H0 R; j) G, r2 u) T8 z/ S8 g$ d 对应的十六进制数为: 7 f1 K1 x: @2 R3 v, O8 z 至此便完成了从ESP8266向电脑发送数据的功能,事实上网络调试助手端有显示接收到的数据,但是数据有软件添加的冗余部分,没有参考意义,故不展示,从8266接收到的数据才是我们需要的数据(因为单片机与8266直连,收发数据全是通过8266的)。 我们通过网络调试助手,发送“HI”,在SSCOM中可接收到如下信息:' O& J4 ?/ |+ V2 L) j 对应的十六进制数为:% s# c( S5 k5 r 其中“+IPD”是固定部分,“0”是链接序号,“2”为字符数量,冒号后的为内容。% x# i( L2 U& p- n 总结一下:在建立链接后(关于怎么建立链接以后再讲),想要发送数据,便传入“41 54 2B 43 49 50 53 45 4E 44 3D”+“链接序号”+“,”+“字符数量”+“0D 0A”,等待8266准备完成返回字符串(实际上我进行了一段时间等待,并没有进行字符串反馈的判断,这样比较方便,哈哈),继续传入想要发送的字符,注意,此时不需要在后面跟“0D 0A”,发送完成后读取返回数据,读到“SEND OK”对应的ASCII码即发送成功。读取时,将读到的数据保存在字符数组中,按照前述的格式进行解码即可。 ; n' o$ M4 @- L, X - j3 M! Q1 Y7 q' h7 E% v/ t9 P. N 转载自codingindex |
GOOD! |
理解 |
不错,谢谢 |