安卓物联网控制应用程序开发基于MQTT技术

MQTT问题

MQTT模型、特点、服务质量、报文、消息类型表

java实现mqtt两种方式:Paho Java原生库、spring boot

MQTT与HTTP:哪一个最适合物联网?

mqtt协议和http协议区别

介绍项目

首先我做了一个为IoT构建Android应用程序。它包括创建一个连接到同一本地网络中的Broker的Mqtt客户机。我们将能够从预定的列表中添加不同的物联网设备。我的研究重点是软件的开发,硬件设备主要通过tasmota网页刷机,涉及到的嵌入式相关还是不如西红柿那个项目多

通过Tasmota网页刷机原理

首先讲讲Tasmota:Tasmota是一个开源固件,用于将普通的家用电器转换为具有智能化功能的设备。它支持多种通信协议,如MQTT,允许设备与智能家居平台进行连接和控制。

准备一个支持Tasmota固件的设备(例如Sonoff智能插座)和一个计算机或移动设备,确保它们处于同一网络环境下。

将待刷机的设备连接到电源,按住设备上的特定按钮(例如Sonoff设备通常有一个按钮)并保持几秒钟来进入刷机模式。

设备进入刷机模式后,它通常会创建一个Wi-Fi热点,在电脑上的Wi-Fi设置中,搜索并连接到设备创建的Wi-Fi热点。打开Web浏览器,并输入设备的IP地址(通常是192.168.4.1)以访问设备的网页界面。

点击网页界面中固件上传选项的“上传”按钮,等待固件上传和刷写过程完成。在此过程中,设备会自动重启并开始运行新的Tasmota固件。

一旦固件刷写完成并设备重新启动,我可以通过搭载了MQTT客户端手机应用或Tasmota提供的网页界面对设备进行控制和监控,例如打开/关闭插座、显示温度等。
 

应用是如何实现mqtt协议

Paho 是 Eclipse Foundation 下的一个项目,提供了多种编程语言的 MQTT 客户端实现,包括 Java。在 Android 平台上,使用 Paho MQTT 客户端库可以方便地实现 MQTT 协议的通信。项目中会引入 Paho MQTT 客户端库,然后通过创建 MqttAndroidClient对象等行为来进行连接、订阅、发布消息等操作。

具体来说,你的应用通过以下关键组件实现MQTT协议:

MqttAndroidClient:该类是Paho MQTT库中的主要组件,用于创建MQTT客户端实例。你的应用通过该客户端与MQTT服务器建立连接,执行订阅和发布等操作。

关于MqttAndroidClient补充如下
连接 MQTT 服务器:
在 connection() 方法中,首先获取连接信息并检查连接状态。
然后创建 MqttAndroidClient 对象,并设置回调处理程序以处理收到的消息和跟踪事件。
最后调用 client.connect() 方法连接到 MQTT 服务器,并在连接成功或失败时触发相应的回调方法。
断开 MQTT 连接:
在 disconnection() 方法中,检查连接状态并调用 client.disconnect() 方法断开连接。同时更新连接状态为断开状态。
订阅主题:
在 subscribe() 方法中,遍历订阅主题列表,并调用 client.subscribe() 方法来订阅每个主题。在订阅成功或失败时触发相应的回调方法。
取消订阅主题:
在 unsubscribe() 方法中,调用 client.unsubscribe() 方法取消订阅指定的主题。在取消订阅成功或失败时触发相应的回调方法。
发布消息:
在 publish() 方法中,检查连接状态和订阅状态,然后调用 client.publish() 方法发布消息到指定的主题。在发布成功或失败时触发相应的回调方法。

MqttConnectOptions:在连接过程中,使用该类配置连接选项,例如连接超时时间、保持连接的时间间隔等。
MqttCallbackHandler:实现MqttCallback接口,处理MQTT连接状态、消息到达和消息传递完成的回调。这样你的应用能够根据具体情况进行逻辑处理,如更新连接状态、主题状态、历史记录等。
MqttTraceCallback:实现MqttTraceHandler接口,处理MQTT的跟踪信息,提供了不同级别的输出,用于调试、错误和异常情况的信息输出。

应用通过Paho MQTT库提供的这些组件,便捷地实现了MQTT协议,而不需要从头编写MQTT协议的底层实现。这种做法通常更加高效和可靠,因为Paho MQTT库是经过验证和优化的开源库,专门用于处理MQTT通信。

编译Tasmota固件的代码

首先,你需要从Tasmota的源代码仓库中获取最新的源代码。通常,Tasmota的源代码托管在GitHub等代码托管平台上。你可以通过git命令克隆Tasmota的仓库到本地:

git clone https://github.com/arendst/Tasmota.git

配置编译环境,包括安装所需的编译工具、依赖库和环境变量设置。Tasmota项目通常使用PlatformIO作为主要的编译工具,从PlatformIO的官方网站下载安装程序并按照说明进行安装,然后确保将PlatformIO的bin目录添加到系统的PATH环境变量中。

然后在platformio.ini文件中选择要编译的设备类型和配置选项,根据需要修改这个文件

一切准备就绪后,在命令行中切换到Tasmota源代码目录,并执行编译命令:

pio run -e <environment>
//这里,<environment>是你选择的环境,比如tasmota-sonoff或者其他适合你设备的环境名称

编译完成后,你可以在输出目录中找到编译生成的固件文件。通常固件文件的路径类似于/.pio/build/<environment>/firmware.bin,这个文件就是刚刚编译生成的Tasmota固件。

框架

\build\outputs\apk\debug:在这里找apk(非release 发布,无签名)

\src\main\java\com\dnomaid\mqtt所有的java逻辑代码

单独的java
MainActivity,主要实现了MQTT连接、UI更新、悬浮按钮的动画效果、导航控制等功能。
MyIntentService,该IntentService类提供了一种在后台处理异步任务的方式,通过定义不同的动作,可以在后台线程中执行不同的任务。在使用时,可以通过调用startActionFoo()和startActionBaz()方法启动服务,并传递相应的参数。

device,管理和操作物联网设备相关信息

global,涉及MQTT 连接和状态管理的功能,用于支持 MQTT 客户端的连接、通知和状态的管理,服务于 MQTT 客户端的不同方面,提供了一些基本的功能和信息管理。

client 主要关注 MQTT 客户端的实际功能,包括连接管理、操作执行等,它是直接负责实现 MQTT 客户端的操作的部分。global 中提供了全局性的支持,用于在整个应用中处理 MQTT 连接和状态的通用逻辑。这些类并不直接执行 MQTT 操作,而是为 client 提供了连接参数、通知显示和状态管理等功能。

topic,放各种消息的:Topic,一个抽象类,提供一个通用的主题类,可以用于处理不同类型的 MQTT 主题,支持 JSON 数据,同时提供一些通用的属性和方法

db数据库,实现 MOTT 连接信息/设备信息的持久化存储和恢复,确保在应用关闭并重新启动时能够保留上一次的连接状态和设备信息。

login:新增登录功能

ui:左边出现的侧边栏的位置

\src\main\res放了前端的各种xml资源

drawable: 存放应用程序使用的图形资源文件,如图片、形状定义等。这些资源可以是不同分辨率和格式的图片。
drawable-v21: 在Android 5.0(API级别21)及以上版本中使用的drawable资源。在这个文件夹中可以放置与Android 5.0及以上版本相关的特定drawable资源。
layout: 存放应用程序的布局文件,定义了界面的布局结构和视图组件的摆放方式。
menu: 存放应用程序的菜单资源文件,定义了应用程序中的菜单项和菜单组。
mipmap-anydpi-v26、mipmap-hdpi、mipmap-mdpi、mipmap-xhdpi、mipmap-xxhdpi、mipmap-xxxhdpi: 存放应用程序的应用图标,其中mipmap-anydpi-v26存放的是适用于API级别26及以上版本的任意密度的应用图标。而其他文件夹则是根据不同的屏幕密度存放的应用图标,以确保在不同密度的屏幕上显示清晰。
values: 存放应用程序的各种资源值,如颜色、尺寸、字符串等。这些资源可以在布局文件、代码中引用,用于保持资源的统一和易于维护性。

作者:bunny playing games

物联沃分享整理
物联沃-IOTWORD物联网 » 安卓物联网控制应用程序开发基于MQTT技术

发表评论