MQTT相关实验

第一节:Mosquitto 相关实验
第二节:域名解析和内网穿透实验
第三节:OneNET 相关实验

Gitee仓库地址: https://gitee.com/zhj0125/MQTT
Github仓库地址: https://github.com/ZHJ0125/MQTT
此仓库代码及文档仅供学习交流使用
Copyright © 2021 ZhangHoujin

Mosquitto实验

实验一:Mosquitto安装

1.1 更换软件源

首先更换树莓派软件源,在树莓派终端输入以下命令

sudo mousepad /etc/apt/sources.list

在打开的文件中,使用 # 将第一行注释掉,然后在末尾添加以下两行语句

deb http://mirrors.aliyun.com/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ buster main non-free contrib

修改完成的效果如下图所示:

修改完成后,保存并退出。

1.2 安装Mosquitto

在树莓派终端输入以下代码(树莓派默认密码为:raspberry

# 更新软件源
sudo apt-get update
# 导入存储库签名密钥
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
# 切换到软件包管理目录
cd /etc/apt/sources.list.d/
# 下载mosquitto软件源
sudo wget http://repo.mosquitto.org/debian/mosquitto-buster.list
# 更新树莓派软件源
sudo apt-get update
# 安装mosquitto软件包
sudo apt-get install mosquitto mosquitto-clients

正常情况下,安装完成后,mosquitto服务就会自动启动,可以在树莓派终端输入以下命令查看其运行状态

# 查看mosquitto服务状态
service mosquitto status
# 停止mosquitto服务
service mosquitto stop
# 启动mosquitto服务
service mosquitto start

如果mosquitto的服务状态为active (running),则表示该服务正常运行,按下Ctrl+C退出来即可

目前所实现的功能:

  • 安装了Mosquitto Broker,服务器会在1883端口(默认)监听本机的连接请求
  • 安装了Mosquitto Client,可以使用相关命令发布或订阅主题了

实验二:发布/订阅测试

Mosquitto官方手册

命令或文件名称 用途
mosquitto 运行Mosquitto代理服务
mosquitto.conf Mosquitto代理的配置文件
mosquitto_passwd 用于生成Mosquitto密码文件
mosquitto_pub 用于将消息发布到代理
mosquitto_rr 用于与代理进行简单请求/响应的测试
mosquitto_sub 用于在代理上订阅相应的主题
mosquitto-tls 用于配置SSL/TLS支持
mqtt MQTT功能描述

这里我们需要了解mosquitto_pubmosquitto_sub这两个命令,分别用于发布和订阅主题。

两个命令所涉及的主要参数如下,详细参数请看mosquitto_pub参考手册和mosquitto_sub参考手册:

mosquitto_pub命令参数

参数名称 参数名称缩写 用途
–help 显示帮助信息
–host -h 指定要连接的主机,默认为localhost
–port -p 指定要连接服务器的端口号,默认为1883
–id -i 指定客户端ID,默认会自动生成
–topic -t 指定要发布的主题
–message -m 指定要发布的消息
–username -u 指定用户名,需要配合--pw参数
–pw -P 指定密码,需要配合--username参数
–file -f 将文件内容作为消息发送

mosquitto_sub命令参数

参数名称 参数名称缩写 用途
–help 显示帮助信息
–host -h 指定要连接的主机,默认为localhost
–port -p 指定要连接服务器的端口号,默认为1883
–id -i 指定客户端ID,默认会自动生成
–topic -t 指定要订阅的主题
–username -u 指定用户名,需要配合--pw参数
–pw -P 指定密码,需要配合--username参数

2.1 本地测试

因为我们已经在树莓派上安装了客户端和服务器,所以可以在树莓派本地进行简单的发布订阅测试。

首先使用service mosquitto status命令,查看你的mosquitto服务是否处在开启状态,如果服务没启动,则使用命令启动它。

然后我们在树莓派上打开两个终端,一个用于发布消息,一个用于订阅消息

先在订阅端输入命令:

mosquitto_sub -t "test"

然后在发布端输入命令:

mosquitto_pub -t "test" -m "message"

此时订阅端就会收到相应的消息,如下图所示。

上述两行代码的含义是,订阅端首先订阅了主题为test的消息并阻塞等待,然后发布端向服务器发布了主题为test的消息,消息内容为message,然后订阅端就接收到了消息message

这是一个本地的测试,发布是从树莓派本地发布消息到树莓派的mosquitto broker服务,订阅同样是订阅树莓派本地的broker。下面我们来测试一下向外网的服务器进行发布和订阅。

2.2 外网测试

我在服务器上创建了mosquitto broker服务,这样大家就可以直接访问这个服务器,实现向公网上发布/订阅消息。

broker服务端配置信息

  • 地址:“47.95.13.239”
  • 端口:1883
  • 用户名:student
  • 密码:kkxxb401
  • 客户端ID:“student/xx/test” (推荐)

这里使用了用户名和密码等信息,可以让大家练习使用更多的命令参数。

同样在树莓派开启两个终端,先启动订阅客户端,输入命令:

mosquitto_sub -t "student/xx/test" -h "47.95.13.239" -p 1883 -u "student" -P "kkxxb401"

然后在发布端输入以下命令:

mosquitto_pub -t "student/xx/test" -h "47.95.13.239" -p 1883 -u "student" -P "kkxxb401" -m "This is test message"

实现的效果如下图所示

如果不使用指定的用户名和密码,或者书写有误,会出现下图的现象

这是一个外网测试,树莓派客户端发布主题信息到外网服务器,然后树莓派再订阅外网服务器对应的主题,相当于这个消息从树莓派本地发出,经过外网broker服务转发,又回到了树莓派本地。


实验三:树莓派与手机通信

实验二的外网测试部分,我们实现了下图所示的数据转发流程。

接下来使用手机配合树莓派,实现双方的数据通信,其数据的转发流程如下图所示。

手机端需要下载MQTT客户端APP

  • Android 请下载 MQTT Client
  • iOS 请下载 MQTTool

下面以iOS系统(MQTTool软件)为例,演示手机与树莓派互传数据的过程

  • 打开MQTTool软件
  • Host 填写 47.95.13.239
  • Port 填写 1883
  • Client ID 可以不填,使用默认生成的ID
  • Username 填写 student
  • Password 填写 kkxxb401
  • 点击 Connect 连接服务器

连接成功后,如下图所示,Status状态会显示 Connected to 47.95.13.239:1883

(备注:上图中没填密码是因为截图时密码被自动隐藏了)

连接成功后,我们分别尝试 树莓派向手机传输数据 以及 手机向树莓派传输数据 两种方式。

3.1 树莓派向手机传输数据

树莓派作为消息发布者,将以TopicA为主题的消息发布到服务器;手机作为消息接收者,从服务器订阅主题TopicA的消息。

(!!注意:为了区分不同的学生,需要将每个学生发布/订阅的主题做区分,请将下面TopicA/xx中的xx换成自己电脑的序号)

(1)首先手机端先开启订阅

  • 在MQTTool手机APP的底部选择Subscribe,进入订阅页面
  • Topic (主题) 填写 TopicA/xx
  • QoS (服务质量) 选择 0
  • 点击 Subscribe 订阅按钮

订阅成功后,Status 会显示 Subscribed to: TopicA/xx

(2)在树莓派端发布一条消息

打开树莓派终端,填写以下命令

(!!注意:执行该命令时,需要确保手机端处在订阅状态,手机熄屏后有可能就断开与服务器的连接了)

mosquitto_pub -t "TopicA/xx" -h "47.95.13.239" -p 1883 -u "student" -P "kkxxb401" -m "This is a message from RaspberryPi."

此时手机端就会收到该消息,如下图所示

点击该条消息可以查看相关详情

这样,来自树莓派的消息 This is a message from RasppberryPi. 就通过服务器转发到了手机上。

下面可以仿照 树莓派向手机传输数据 的过程,实现 手机向树莓派传输数据

3.2 手机向树莓派传输数据

手机作为消息发布者,将以TopicB为主题的消息发布到服务器;树莓派作为消息订阅者,从服务器订阅主题TopicB的消息。

(!!注意:为了区分不同的学生,需要将每个学生发布/订阅的主题做区分,请将下面TopicB/xx中的xx换成自己电脑的序号)

(1)首先树莓派先开启订阅

mosquitto_sub -t "TopicB/xx" -h "47.95.13.239" -p 1883 -u "student" -P "kkxxb401"

(2)手机端向服务器发布以TopicB/xx为主题的消息Hello,this is from Phone.

发布成功后,树莓派就会接收到这条消息。

练习

Mosquitto官方在它的服务器test.mosquitto.org上搭建了Mosquitto Broker服务,分为未加密、已加密、需要客户端证书等多种连接方式,对应不同的服务器端口,可在https://test.mosquitto.org/查看详情。

课后可以自行测试以下内容:

  • 用手机APP连接test.mosquitto.org,实现消息发布和订阅。
  • 用手机测试 mosquitto_sub -h test.mosquitto.org -t "#" 这条订阅指令,并解释为何会接收到大量不同主题的消息。(可参考通配符主题订阅)

额外说明:如果自己在服务器上搭建Mosquitto Broker服务,必须将监听服务绑定到服务器所有端口并设置连接密码,否则默认只能监听服务器本地的连接请求。这是Mosquitto新版本(2.0以上)的特性,详细信息请看版本迁移说明


End

Mosquitto安装和测试相关推荐

  1. mosquitto在Linux环境下的部署/安装/使用/测试

    看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. 使用传统源码安装步骤: 步骤1:http:/ ...

  2. MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用

    原版地址:http://blog.csdn.net/xukai871105/article/details/39252653 0 前言 MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物 ...

  3. Mosquitto安装及使用简介

    1.源码下载: (1)官方源码下载:http://mosquitto.org/files/source/ (2)性能优化版源码下载:https://github.com/houjixin/mosqui ...

  4. MQTT Mosquitto安装和使用

    物联网(Internet of Things,IoT)最近曝光率越来越高.虽然HTTP是网页的事实标准,不过机器之间(Machine-to-Machine,M2M)的大规模沟通需要不同的模式:之前的请 ...

  5. mosquitto安装与使用

    Eclipse Mosquitto 是实现MQTT协议版本5.0.3.1.1和3.1的开源消息代理(经EPL / EDL许可). mosquitto 是一个开源的轻量级的C实现,适合在从低功耗单板计算 ...

  6. Mosquitto安装

    mosquitto是一款开源免费的软件,官网链接.它是一些可执行文件的集合,通过这些可执行文件,它提供broker,publish,subscribe功能.安装mosquitto一般是为了让它作为MQ ...

  7. my SQL下载安装,环境配置,以及密码忘记的解决,以及navicat for mysql下载,安装,测试连接...

    一.下载 在百度上搜索"mysql-5.6.24-winx64下载" 二.安装 选择安装路径,我的路径"C:\Soft\mysql-5.6.24-winx64" ...

  8. http_load安装与测试参数分析

    http_load安装与测试参数分析 http_load以并行复用的方式运行,用以测试 web 服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死. ...

  9. nginx 没有sbin目录_CentOS7下Nginx+ModSecurity配置、安装、测试教程

    " 最近在工作上遇到一点问题,问了大佬.百度,都没有很好地解决:经过大量搜索查阅以及试验,终于将问题解决.于是写下这篇文章以提醒自己,也可供读者参考." 环境:CentOS-7-x ...

最新文章

  1. Asp.net下实现隐藏真实下载地址(可以实现简单的防盗链)
  2. 【css】垂直居中的几种写法
  3. 单用户模式迁移home家目录
  4. 十年前,他如何自学技术进阿里?
  5. spring mvc错误收集
  6. 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换
  7. 互联网晚报 | 9月2日 星期四 | 小米汽车有限公司正式成立;唯品富邦消费金融获批开业;恒大举行保交楼军令状签署大会...
  8. mysql5.5 5.7区别_mysql 5.5 和5.7 安装的区别
  9. 百年 IBM 终于 All In 人工智能和混合云!
  10. python中for循环语句格式_python中for循环和可迭代对象遍历
  11. Apex 获取真正的IP地址
  12. ECSHOP首页调用指定分类推荐商品/热卖商品/新品商品
  13. 我的世界java版和基岩版对比_我的世界 Java版 与 基岩版 有什么区别?
  14. 增量式修改检验和(IP, TCP, UDP)算法的研究和实现
  15. 掌握这些,你也可以轻松扒谱(下)
  16. 2021东北四省赛部分题解
  17. Python_作图添加水平线和垂直线_linspace语句介绍
  18. win10、ThinkPad遇到静音键不亮,但可以使用的问题
  19. 天津海洋功能区划获批复 排海污水须100%达标-天津海洋功能区划-污水-达标率
  20. 【超简单】latex 参考文献 引用 跳转 多余的空格

热门文章

  1. JZVideo--全屏切小屏报错没有获得的窗口错误
  2. mysql查询表的创建时间
  3. PHP爬虫音乐,PHP 爬虫———爬取网易云音乐歌单
  4. MindSpore单卡GPU训练竟然报NCCL的错
  5. APM(应用性能监控)介绍
  6. 华为防火墙双机热备学习笔记(V500)
  7. 【requests:动态网页爬取】慕课评价
  8. 深入剖析Docker镜像
  9. OSL 网络的分层思想和封装的基本概念
  10. 资本论 卡尔马克思 恩格斯