uniAPP开发小程序使用MQTT通讯EMQX Cloud

这篇具有很好参考价值的文章主要介绍了uniAPP开发小程序使用MQTT通讯EMQX Cloud。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uniAPP开发小程序使用MQTT通讯EMQX Cloud

首先感谢大佬参考案例

下载并安装工具
1.Hbuilderx 2. nodejs 3.MQTTX

链接放这,自己下载安装

MQTT服务器:EMQX

第一步:测试MQTTX通讯

1.记住这地址,你的服务器地址
hbuilderx mq连接通信,uni-app,小程序,java
2.随便创建几个用户
hbuilderx mq连接通信,uni-app,小程序,java
3.打开MQTTX
填入刚刚的服务器地址
注意我选的参数
用户就是上图的用户和密码
hbuilderx mq连接通信,uni-app,小程序,java

点击连接,成功

失败的,自己再重复下上面看看哪里错了

第二步:源码测试
混个积分,谢谢,,,,源码

1.打开源码

IP就是刚刚你服务器的地址,
密码就是服务器里面创建的用户的密码
还有那个文件,我也没深究,所以还是要感谢大佬参考案例
hbuilderx mq连接通信,uni-app,小程序,java

2.不要源码
必须先安装Nodejs
选择目录,右键,用命令行窗口打开

分两次输入

npm install mqtt@3.0.0
 
npm install uuid

hbuilderx mq连接通信,uni-app,小程序,java

主要源码

<template>
	<view class="home">
		<view class="mqttPswordtype">
			<radio-group @change="radioChange">
				<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in radDataArr" :key="item.value">
					<radio :value="item.value" :checked="index === current" />
					{{item.name}}
				</label>
			</radio-group>
		</view>
		<view class="mqttTest">
			<button type="primary" @click="connect">mqtt 连接</button>
			<button type="primary" @click="subscribe">mqtt 订阅</button>
			<button type="primary" @click="publish">mqtt 发布</button>
			<button type="primary" @click="unsubscribe">取消订阅</button>
			<button type="primary" @click="unconnect">断开连接</button>
			<view>message:{{ receiveMessage.toString() }}</view>
		</view>
	</view>
</template>

<script>
	import mqtt from '@/utils/mqtt4.1.0.js';
	export default {
		data() {
			return {
				radDataArr: [{
						value: 'uniAppH5',
						name: '网页',
						checked: 'true'
					},
					{
						value: 'uniAppWx01',
						name: '微信仿真'
					},
					{
						value: 'uniAppWx02',
						name: '微信手机'
					}
				],
				current: 0,
				receiveMessage: "",
				mqttServeInfo: {
					IP: '*******.cn',
					port: '8084',
					postfix: '/mqtt',
				},
				mqttClient: null,
				//MQTT连接的配置
				mqttOptions: {
					wsOptions: {},
					protocolVersion: 5, //MQTT连接协议版本
					clientId: '',
					keepalive: 60,
					clean: false,
					username: 'uniAppH5',
					password: '****',
					reconnectPeriod: 1000, //1000毫秒,两次重新连接之间的间隔
					connectTimeout: 30 * 1000, //1000毫秒,两次重新连接之间的间隔
					resubscribe: true //如果连接断开并重新连接,则会再次自动订阅已订阅的主题(默认true)
				},
				Qos: 2,
				onTopic: 'fasong',
				onSub: 'jieshou',
			}
		},
		methods: {
			radioChange: function(evt) {
				for (let i = 0; i < this.radDataArr.length; i++) {
					if (this.radDataArr[i].value === evt.detail.value) {
						this.current = i;
						this.mqttOptions.username = evt.detail.value
						break;
					}
				}
			},
			connect: function() {
				try {

					var hosts = '',
						// #ifdef APP-PLUS
						hosts = 'wss://' + this.mqttServeInfo.IP + ':' + this.mqttServeInfo.port + this.mqttServeInfo
						.postfix
					console.log("APP-PLUS:" + hosts);
					// #endif

					// #ifdef H5
					hosts = 'wss://' + this.mqttServeInfo.IP + ':' + this.mqttServeInfo.port + this.mqttServeInfo
						.postfix
					console.log("H5:" + hosts);
					//#endif

					// #ifdef MP-WEIXIN
					hosts = 'wxs://' + this.mqttServeInfo.IP + ':' + this.mqttServeInfo.port + this.mqttServeInfo
						.postfix
					console.log("MP-WEIXIN:" + hosts);
					//#endif 
					if (this.mqttClient == null || this.mqttClient.connented == false) {
						uni.showLoading({
							title: '连接中···'
						})
						var clientId = this.mqttOptions.username + '_' + Math.random().toString(16).substr(2, 8);
						console.log("生成的随机clientId为:" + clientId);
						this.mqttOptions.clientId = clientId;
						this.mqttClient = mqtt.connect(
							hosts,
							this.mqttOptions
						);

						this.mqttClient.on('connect', () => {
							uni.hideLoading();
							this.showToast('连接成功', 1000, 'success')
							this.subscribe()
						});
						this.mqttClient.on('message', (topic, message) => {
							console.log('收到来自' + topic + '的消息' + message.toString());
							this.receiveMessage = message

						});
					}

					this.mqttClient.on('reconnect', error => {
						uni.hideLoading();
						this.showToast('正在重连···', 1000)

					});
					this.mqttClient.on('error', error => {
						uni.hideLoading();
						this.showToast('连接失败!', 1000)
					});
				} catch (e) {
					console.log("连接异常" + e);
				}

			},
			subscribe: function() {
				// 判断是否已成功连接
				if (!this.mqttClient || !this.mqttClient.connected) {
					this.showToast('客户端未连接', 1000)
					return;
				}

				this.mqttClient.subscribe(this.onTopic, {
					qos: this.Qos
				}, error => {
					if (!error) {
						this.showToast('订阅成功', 1000, 'success')
						console.log('订阅成功');
					}
				});

				/* //订阅多个主题
			this.mqttClient.subscribe(['one', 'two', 'three'], { qos: 1 }, err => {
				console.log(err || '订阅成功');
				this.show(err || '订阅成功');
			 });
			
				    // 订阅不同 qos 的不同主题
				    this.mqttClient.subscribe(
				        [
				            { hello: 1 },
				            { 'one/two/three': 2 },
				            { '#': 0 }
				        ],
				        (err) => {
				          this.show();console.log(err || '订阅成功')
				        },
				    )
		
		
			}); */
			},
			publish: function() {
				// 判断是否已成功连接
				if (!this.mqttClient || !this.mqttClient.connected) {
					this.showToast('客户端未连接', 1000)
					return;
				}
				if (this.sendMassage != '') {
					// var send = '{"code": 200, "msg": "发送打1111指令", "data": "2.doc"}';

					// 定义JSON对象
					const messageq = {
						code: 200,
						msg: '发送打印指令',
						data: '2.doc'
					}

					// 将JSON对象转换为JSON字符串
					const message1 = JSON.stringify(messageq)
					this.mqttClient.publish(this.onSub, message1, error => {
						console.log(error || '消息发布成功');
						this.showToast('消息发布成功', 1000, 'success')
					});
				} else {
					this.showToast('发布消息为空', 1000)
				}

			},
			unsubscribe: function() {
				this.mqttClient.unsubscribe(
					// topic, topic Array, topic Array-Onject
					// ['one', 'two', 'three'],
					this.onTopic,
					err => {
						console.log(err || '取消订阅成功');
						this.showToast('取消订阅成功', 1000, 'success')
					}
				);
			},
			unconnect: function() {
				if (!this.mqttClient || !this.mqttClient.connected) {
					this.showToast('客户端未连接', 1000)
					return;
				}
				this.mqttClient.end();
				//this.mqttClient = null
				this.showToast('成功断开连接', 1000, 'success')
				console.log('断开连接');
			},
			showToast: function(title, time, icon = 'none') {
				uni.showToast({
					title: title,
					icon: icon,
				});
				setTimeout(function() {
					uni.hideToast();
				}, time);
			},
		}
	}
</script>

<style lang="scss">
	.mqttPswordtype {
		height: 100rpx;
		background: #F7F8FA;
		white-space: pre-wrap;

	}

	.mqttTest {
		button {
			margin: 20rpx 10rpx;
			height: 100rpx;
			color: #F7F8FA;
		}
	}
</style>

亲测有效

H5演示:
hbuilderx mq连接通信,uni-app,小程序,java
小程序演示,我这里直接用了小程序的ID,进行真机模拟
hbuilderx mq连接通信,uni-app,小程序,java
回到服务器查看,可以看到三个在连接
hbuilderx mq连接通信,uni-app,小程序,java
*注:大佬如果需要我删除,直接留言即可文章来源地址https://www.toymoban.com/news/detail-791530.html

到了这里,关于uniAPP开发小程序使用MQTT通讯EMQX Cloud的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MQTT协议原理介绍及如何使用emqx

    MQTT(Message Queuing Telemetry Transport)协议是一种轻量级的、基于发布/订阅模式的通信协议。它最初由IBM开发,用于在低带宽和不稳定的网络环境中传输小型数据包。MQTT协议被广泛应用于物联网(IoT)领域,例如传感器数据采集、远程监控和控制等。 MQTT协议使用了一种异步的、

    2024年02月12日
    浏览(39)
  • Java 使用 EMQX 实现物联网 MQTT 通信

    EMQX 实现物联网 MQTT 通信。物联网的 MQ 消息通信方式。 MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的\\\"轻量级\\\"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,

    2024年02月03日
    浏览(39)
  • 微信小程序+MQTT(emqx)+Ngnix解决真机调试持续重新连接问题

       最近想用微信小程序订阅MQTT的消息,但是想要用MQTT,微信小程序不允许用ip去连接,必须用经过备案的域名,然后就开始了艰辛的合法域名探索之路。   我现在申请的是阿里云的免费域名,1年。实际上付费的也不贵,每年几十块的也有。详细教程参考阿里云的官方教

    2024年02月03日
    浏览(41)
  • 微信小程序集成和使用mqtt(同时支持uniapp和原生)

           在集成mqtt到小程序的开发过程中,确实走了不少弯路,下了许许多多的示例,一步步踩坑到现在终于完美解决了小程序引入mqtt的方法。该方法原生和uniapp均适用。 先登录微信公众平台,找到开发》开发管理》开发设置页面   服务器域名配置中 配置socket合法域名为,

    2024年02月07日
    浏览(74)
  • MQTT协议-EMQX技术文档-spring-boot整合使用--发送接收-消费

    MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的通信协议,它与MQ(Message Queue,消息队列)有一定的关联,但二者并不完全相同。 MQTT是一种轻量级的通信协议,专门为在物联网(IoT)设备之间的消息传递而设计。它运行在TCP协议之上,以“发布-订阅”模式进行

    2024年02月12日
    浏览(38)
  • 使用合宙Air724UG物联网模块发送MQTT消息至EMQX服务器 MQTT如何发送消息 AIR724发送MQTT至腾讯云 腾讯云接收MQTT消息

    在上一篇关于物联网的文章中介绍了如何建立一个MQTT的EMQX服务器,有需要的同学可以点击查看。在这里服务器的作用相当于建立一个MQTT消息的中转站,消息先发送到服务器中,再在服务器进行转发消息。 那么有了一个转发的平台,如何在嵌入式终端中发送MQTT消息呢,在这

    2024年02月09日
    浏览(58)
  • uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯

    最近在小程序项目用到web-view,需要web-view承载的H5和小程序通讯,碰到个大坑,所以写一下实现过程及怎么避坑。 一、小程序向web-view承载的H5传递参数,直接在url后接参数即可(xxxxx.com) 二、H5向小程序发送消息 在uniapp项目根目录创建 模板html 2、然后在模板html里引入微信

    2024年02月13日
    浏览(51)
  • 跨平台开发神器如何在Uniapp中使用WebView实现与Web页面的通讯!

    Uniapp 是一个跨平台的开发框架,可以同时开发出 iOS、Android、H5 等多个平台的应用。在开发过程中,我们可能需要与 Web 页面进行通讯,这时可以使用 WebView 组件来实现。 本教程将介绍如何在 uniapp 中使用 WebView 组件与 Web 页面进行通讯。 首先,我们需要创建一个 uniapp 项目。

    2024年02月09日
    浏览(61)
  • uniapp vue3中使用webview在微信小程序中实现双向通讯

    直接上图,注意事项是这里 官网链接: https://uniapp.dcloud.net.cn/component/web-view.html 传递方法的话好像只能通过url来传,其它方式不支持,,,我这个参数没做处理,用的话记得把参数做一下处理 也就是说传递数据之后需要 uni.redirectTo({ url: \\\'/pages/testFabric/index\\\' }) 特定时机,当然用

    2024年04月13日
    浏览(50)
  • uniapp - 完美解决 mqtt 插件报错:socketTask onOpen is not a function问题(在uniapp小程序/h5网页/安卓苹果app端中使用mqtt协议报错解决)

    在uniapp全端平台开发中,安装引入mqtt物联网协议使用报错:socketTask onOpen is not a function 解决办法。 这个错误频发于App端、nvue等, 本博客可完美解决该报错问题。 其实,

    2024年01月18日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包