|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-6-30 10:31 编辑
( `* V, U2 m& x
# u' o( x' Z- p" {; s随着物联网的发展,各式各样的装置都必须具备连网的能力,单芯片也不例外,为此我们以雅特力的AT32F407/AT32F437系列,演示了一系列的范例,以期用户能基于这些范例,使用雅特力的开发板发展出自己所需要的功能。$ k6 H1 ?. P. \5 {/ q* e0 r9 t
" i/ n/ R5 ~+ L* f) C2 T. ]pdf文件可以下载附件阅读
5 r0 J* S* `7 y
* R& H% d) H; J0 G i9 X$ d) N6 L" X& R( v( J% z- J5 P
支持型号:5 w6 y/ ]6 R0 J8 _3 t, g! S# i6 m
AT32F407xx0 X% ], w) l2 b) G5 P- |& H
AT32F437xx( f# v. N$ C7 X2 L! T* Q; E; Q( f
& W, D( g* e, q# C
! h5 q5 f5 u. s+ Y, r1 概述
+ T5 F1 h' N; K, U1 `6 gMQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级协议,该协议构建于TCP/IP协议之上,MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。. j' g8 o. c v
本使用指南会介绍BSP里,MQTT客户端具体的使用方法。9 e, ?' G0 H, h+ L
1.1 硬件资源% x/ e( S3 g) @* Z& m
1. DM9162 以太网模块
3 @- ~2 T8 C9 ~8 N' K5 T& T2. AT-START-F407 V1.1 实验版, c7 l/ R; b0 c* R! t
3. 以太网线5 D6 |9 i3 F1 g4 r
4. 串口打印工具4 K1 Q% I' m/ k0 w/ q. @
1.2 软件资源
* Y. D' o k$ }, Hmqtt_client, MQTT client源程序,运行MQTT客户端程序,源码位于AT32Fxx_Firmware_Library_v2.x.x\project\at_start_fxx\examples\mqtt_client- e1 ~# D; k/ @- H* L# Q' b
注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考
# H' R" Z3 I9 G; j X; pAT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
' ^5 G8 M" x8 I4 Q' i D! X! A2 AT32 MQTT client程序配置" a9 d4 S+ J1 C! }% Q
2.1 管脚配置. M h4 M2 h6 z$ @
表1. 管脚配置8 X& e" y" S8 C
2 r8 }+ Z* Z! s! g
2.2 LwIP配置7 X# p$ z2 m V/ O, e/ V
硬件资源只提供从PHY到MAC的信号处理,若要进行开发,则需要实作TCP/IP协议栈,在本应用中使用LwIP协议栈,该协议栈主要关注的是怎样减少减少内存的使用和程序代码的大小,这样就可以让LwIP适用于资源有限的小型平台例如嵌入式系统,更详细的内容可以访问官方网站。
/ V! I: }. X9 |7 b S/ _: K由于整个协议栈已经整合到代码中,大部分的内容都无须修改,需要修改的内容主要包括下面两个部分:
/ P z; u. q: ~: p2 t, W1. 根据自己的网段去设定IP地址及闸口地址,这两个全局变量宣告在netconf.c里面;
e% F* F a" u: ? E2. 在mqtt_client.c中配置MQTT_SERVER_ADDRESS和MQTT_SERVER_PORT,用以选择MQTT服务器地址和端口。9 [( _ K; x l3 x9 J) m* z
图1. 配置芯片的IP地址
% v: c( x2 Q& m3 l
z! L2 L- [6 ^* x& R& H; z2.3 MQTT client project设置$ a! G8 Y5 Y, |& S& n3 ?) b
在初始化LwIP协议栈之后,就可以配置MQTT client的应用了,芯片作为客户端是发出请求的一方,所以必须要配置往哪里发送数据,也就是说要知道服务端的socket。所谓的socket就是IP地址加上端口,在代码中我们宣告了几个宏定义代表服务端的socket, 可以在mqtt_client.h中找到MQTT_SERVER_ADDRESS和MQTT_SERVER_PORT这两个宏定义,用户可以根据网段跟应用修改这两个宏。% \) x6 \6 w. z# Y
图2. 配置服务端的socket
4 ?& k; e# U7 ~, ~- t) `: q8 B
7 L5 I" j, C0 [2.4 MQTT server搭建
, }5 a0 K& l; X! KMQTT服务器的搭建我们通过EMQX平台来实现,其提供了公共的MQTT云服务和私有部署两种MQTT服务器搭建方式,其中云服务需要设备能够访问互联网,而私有部署则是将服务器部署在本地,无需访问互联网。本应用指南选择私有部署的方式来实现MQTT服务器的搭建,用户如需使用MQTT云服务请自行访问EMQX官方网站了解详细信息,搭建私有部署MQTT服务器的方式如下。3 x+ C4 m7 N/ w: B+ h' m
1. 访问下载链接,下载并解压EMQX。/ T% o, O- T i# f/ R! y
图3. 下载EMQX
, S7 g8 I/ F' S6 n( U
3 s& j" V7 z8 U# s8 T" v0 I
5 D0 o( ~* }" W( r
2. 启动EMQX+ W4 Q% r4 N. S" B& {7 Y7 `7 U
进入解压后的路径emqx\bin,打开CMD命令行,执行emqx start,如下图。1 s$ g$ x0 J$ R+ I
图4. 启动EMQX
O* i! d- U" X7 Z% f( J p
1 N7 r L* N9 x; _3. 配置上位机的IP地址、子网掩码及网关,IP地址与网关需要跟芯片设置在同一个网段下。
; s: j* T9 m: Q* {; I: F, f图5. 配置上位机的IP地址、子网掩码及网关
7 B) u; k% N0 {8 g2 |' ]" A
! o: N: Y+ Y }7 l* ]6 {4. 浏览器登录EMQX控制台
1 n, }8 ? c1 d# ~& y& Y& O K服务器启动完成,在浏览器中输入本机IP地址192.168.81.1:18083,进入控制台登录界面,输入用户名admin和密码public,如下图。
7 A) q6 e T9 i图6. 浏览器登录EMQX控制台
b9 A) M4 V' m. o% H- n5 i
: h6 { S- `# O点击登录进入控制台,至此私有MQTT服务器搭建完成。
3 b' L/ ]9 @7 M& W1 @! v/ v e! t4 N8 d; S8 M
2.5 软件流程! K; M! |) u$ y4 G) G
1. 在初始化EMAC和LwIP之后,呼叫mqtt_client_init(), 即可开启mqtt client功能;
6 R6 E" j5 u0 A2 C2. 在lwip_periodic_handle函数中将会每秒执行一次at32_mqtt_publish函数对预先定义的信息进行发布;
2 R+ D( _/ B0 U: o# x! s* z3. 通过回调函数at32_mqtt_incoming_data_cb则能够将收到的订阅信息在串口USART1上打印。" u9 x$ j' e! G
图7. 初始化MQTT客户端
1 g% T7 R7 K- d( v
! J5 z- h4 m5 K7 L; ]7 y: U2 i7 O2.6 测试结果& `* F# r7 ?! e: k
1) 将开发板通过网线连接至路由器或网络接口
5 b7 M# Q) ?! v! X6 d* P2) 下载程序,并复位开发板9 u* p% b" |! w* A; Q i) p
3) 打开PC端的MQTT控制台,点击工具->Websocket,并连接* x! w! c& a: T9 ? O7 a3 S7 G; s" L- V% `
图8. EMQX控制台Websocket连接服务器
, ^- n! Q5 k" g0 D) L! I
7 D! Y* M, }- T
4) 填写订阅主题at_pub_topic并点击订阅,填写发布主题at_sub_topic和消息内容并点击发送# C( w# z* |1 |: w5 a
图9. EMQX控制台订阅和发布主题
( }, a5 \& C) Z; T, Z6 K" u- b
3 \) w* R: b6 @7 U+ p5 ]( |5) 在订阅消息列表查看开发板MQTT客户端发布的消息内容,发布消息列表也能看到服务器所发送的内容
; k+ {$ w4 G0 F% `( k% V* u n图10. EMQX控制台查看消息& u( R( J( w0 b. d
- W* I3 i: y5 |
6) 通过USART1串口打印查看EMQX服务器发布的消息内容1 i u* C& s1 w2 @8 p& X3 z
图11.串口打印查看消息2 U( Q. \0 p3 c3 C% b6 h0 j
5 m# U; C3 O+ ]0 i& C! E2 Q) B3 F1 }+ q( z
$ e! d8 ~) _& [4 w* F. f |
|