从头部署 EMQX

本文介绍了使用EMQX开源MQTT服务实现设备通过扫码开机,并在状态变化时上报状态。通过硬件AT指令操作GM510模块完成MQTT连接与订阅。后端采用Golang的MQTT SDK,利用webhook处理设备状态和指令交互。小程序端因仅支持wss,故通过nginx转发实现。此外,还涉及了EMQX Dashboard静态资源的重新部署及系统调优。
摘要由CSDN通过智能技术生成

应用场景:

        设备通过扫码开机,在设备状态发生变更的时候上报设备状态

实现方法:

        EMQX 开源的MQTT服务

安装步骤:

        下载 EMQX

        我是CentOS,所以我直接

yum install emqx

安装好以后在浏览器中输入

http://IP:18083

可以看到 EMQX Dashboard

一个单节点的MQTT服务就算搞定了,多节点等我设备足够多的量 我再去研究~~~

接下来 硬件 AT 指令 操作GM510 模块 实现MQTT联网

我就提供下 AT 指令的顺序,按序执行命令即可,建议所有的步骤 都通过串口中断触发

联网步骤的结构体

typedef struct network_content_step_struct {
	int	 	    step;            //步骤顺序
	uint8_t     is_use;          //是否执行
	char 		at[100];         //默认at命令
	char    	at_err[100];     //失败后执行的at命令
}NetWork_Step;

创建了结构体数组

NetWork_Step steps[12] = {

	{0,1,"AT+ZVN\r\n"},
    {1,1,"AT+CSQ\r\n"},
    {2,1,"AT+CPIN?\r\n"},
    {3,1,"AT+CREG?\r\n"},
    {4,1,"AT+ZPAS?\r\n"},
    {5,1,"AT+CEREG?\r\n"},
	{6,1,"AT+ZIPCALL=1\r\n"},
    {7,1,"AT+ZIPCALL?\r\n",},
    {8,1,"AT+ZMQCFG=1,RX_RPT\r\n"},
    {9,1,"AT+ZMQCFG=1,KEEPALIVE,10\r\n"},
	{10,1,"AT+ZMQCON=1,$,{IP 填你自己的},1883,username,password\r\n"},
	{11,1,"AT+ZMQSUB=1,topic,0\r\n"}

};

11部全都OK,那么你的模块 mqtt 链接/订阅 都已经成功了

接下来就需要 通过AT命令发布报文

{"AT+ZMQPUB=1,topic,0,0,@\r\n"}

这里的 @ 我用来最为占位符,硬件上发送指令是一位一位发送,所以当发送的这一位等于@,那么就替换成我的内容,内容自定义

以上就完成了 设备Client 和服务器的MQTT server 互联互通

再然后需要我的业务层 也作为一个client ,通过 MQTT server 这个中间件 获取 设备上报状态,发送设备指令 等

这里我的后端是golang,所以 用了 MQTX 的 go SDK

GitHub - eclipse/paho.mqtt.golang

业务层 通过 web hook 来获取 设备在线,离线,订阅,消息是否发送,消息是否接受

当频道 和发送的消息 QoS 为2 时,web hook 能有消息的 ack 事件回调

通过这个来判断设备是否收到消息

业务逻辑没啥说的

接下来就是 小程序的对接部署

小程序只支持 wss 好嘛 ,只能通过nginx 转发来实现了

贴个转发配置

我的nginx 配置过了 https 

所以只需要转发

  location /mqtt {
      proxy_pass http://127.0.0.1:8083/mqtt;
      proxy_read_timeout 300s;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
                
  }

https 证书配置也比较简单,我顺带贴一些

server {

    #listen       80;
    listen       443  ssl;
    
    server_name  goserver.njgzzz.com;
    

    ssl_certificate       /etc/nginx/conf.d/cert/xxxxx.pem;
    
    ssl_certificate_key   /etc/nginx/conf.d/cert/xxxxx.key;
    
    ssl_session_timeout   5m;
    
    ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;
    
    ssl_ciphers           ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    
    ssl_prefer_server_ciphers       on;

    error_page   500 502 503 504  /50x.html;
    
    client_max_body_size 20M;



    location /mqtt {
      proxy_pass http://127.0.0.1:8083/mqtt;
      proxy_read_timeout 300s;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
                
    }






   
}

顺带说一句,小程序的wss协议头被腾讯封装了,js中要用 wxs:// 很奇怪吧,啥都要封装一下~~~

好了, 一路部署下来,除了业务层的东西,整个框架雏形出来了

最后提一下 EMQT Dashboard  静态资源 的 重新部署

首先配置一个 子域名    mqtt.xxx.com

然后把 静态资源 copy 到 nginx/html/www 下

静态资源的路径:

/usr/lib/emqx/lib/emqx_dashboard-5.0.2/priv/www/

 新增nginx 配置项

server{
	listen 80 ;
	server_name mqtt.xxxx.com;

 location / {
    root /usr/share/nginx/html/www/mqtt;
    index index.html; 
}

执行nginx 命令

nginx -t

nginx -s reload

EMQT 官方文档有 服务优化,我因为设备还算少,就没去深究

贴下优化文档

系统调优 | EMQX 5.0 文档

有兴趣的可以留言~~交流学习~~~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hotter23

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值