搭建MQTT服务器实现Android客户端与ESP8266之间即时通信

  • 1、MQTT服务器端
    • 2、Android客户端
    • 3、ESP8266端
    • 4、结语

1、MQTT服务器端

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,假如你发布一个topic那么其他订阅了这个topic的设备就可以收到你发送的信息,反之亦然。关于mqtt是什么这里不再赘述。我们的目的是Android端和ESP8266连接到MQTT服务端,双方之间进行通信,实现8266对温湿度采集在Android端进行监控,Android端也可以控制8266进行一些业务逻辑操作,比如控制继电器开合进而控制一切开关型电器。

首先你需要一台服务器,关于服务器有很多选择,阿里云腾讯云皆可,且都有学生优惠,我这里使用阿里云的Windows server 2012版。购置一台服务器后首先安装JDK,建议1.8版本以上。学过Java应该都会,实在不行百度一下,很简单。接下来就是下载一个MQTT服务端软件,这里我们选择apache-apollo,安装和使用过程简单方便。前往下载 提取码:2cfq

1 在服务器里下载之后解压到C盘

2 打开命令行进入到apache-apollo-1.7.1\bin目录下,输入apollo.cmd create apache-apollo(apache-apollo并非固定,随便都行)。完成后会在C盘生成一个apache-apollo文件夹
3 apache-apollo下的etc\users.properties存储了连接MQTT服务器的用户名,groups.properties则存储了密码,默认用户名为admin,密码为password,这里不作修改。
4 然后打开命令行进入C:\apache-apollo\broker\bin目录下输入
apollo-broker run,MQTT服务器就开始运行了,关闭命令行后MQTT服务器随之关闭。上面会显示各种连接的地址和端口
5 我们MQTT基于TCP连接所以会用到61613端口,注意一定要在云服务器的安全组规则里开放61613端口,否则无法连接。完成后你可以在浏览器输入http://127.0.0.1:61680登录MQTT服务器管理页面,出现下图则服务器端配置就成功结束了,在这里你可以看到有谁连接和订阅。
6 C:\apache-apollo-1.7.1\examples\mqtt\websocket目录下有一个index.html测试网页,你可以用它进行一个简单的发送消息的测试
7 如果你不想自己搭建服务器也可以选择其他物联网平台,比如中国移动ONENET平台,在开发者中心创建一个旧版MQTT协议的产品,然后添加设备,里面的产品id就相当于用户名,鉴权信息就是密码,设备id就是客户端id,服务器地址和端口是183.230.40.39:6002。知道这些就可以了,下文会依次说到。

2、Android客户端

1 开发环境为Android Studio 3.6,当然也需要JDK,先看看效果图

8266传过来温湿度,这里控制led开关。

2 下面看代码,先添加依赖。

implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.2'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

3 在Androidmainifest.xml里添加权限

 <uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.INTERNET" />

这一部分要放在application里

<service android:name="org.eclipse.paho.android.service.MqttService"/>

4主要代码

private void initClient() throws MqttException {//连接参数设置// 获取默认的临时文件路径String tmpDir = System.getProperty("java.io.tmpdir");       MqttDefaultFilePersistence dataStore = new MqttDefaultFilePersistence(tmpDir);String serverURI = "tcp://*****:61613";//服务器IP地址和端口号String clientId = "***";//客户端id,随便写,不要和别人一样就行MqttConnectOptions options = new MqttConnectOptions();options.setCleanSession(false);options.setUserName("******");//创建MQTT服务器时的用户名,默认adminoptions.setPassword("******".toCharArray());//创建MQTT服务器时的用户名,默认passwordoptions.setAutomaticReconnect(true);mClient = new MqttAndroidClient(getApplicationContext(), serverURI, clientId,dataStore);//连接回调mClient.setCallback(new MqttCallbackExtended() {//连接服务器成功时触发,可在这时订阅想要订阅的topic@Overridepublic void connectComplete(boolean reconnect, String serverURI) {Log.e("connectComplete","connectComplete");}//连接丢失时触发@Overridepublic void connectionLost(Throwable cause) {Log.e("connectionLost","connectionLost");}//接收到订阅的消息,可以进行一些逻辑业务处理,这是最重要的部分@Overridepublic void messageArrived(String topic, MqttMessage message) throws Exception {Log.e("messageArrived",message.toString());              }@Overridepublic void deliveryComplete(IMqttDeliveryToken token) {Log.e("deliveryComplete","deliveryComplete");}});mClient.connect(options);//开始连接}

5 过程中可能会出现连接不上,可以发送不能接收消息,类加载异常等等细节问题,不要担心,都可以解决。我在接收的时候会有收不到消息的问题,重启一下MQTT服务器,就是重新Apollo-broker run 就能收到,可能是因为服务器配置低,太卡?但是在连接onenet服务器时就不会出现这个问题程序不需要改,只需改用户名,密码,客户端ID和IP地址端口号就行,上面已经说过。

6 完整代码

3、ESP8266端

0 说在最前面,arduino我也是现学现卖,以前只学过51单片机,不足之处请见谅。

1 开发环境为arduino IDE ,需要一个ESP8266模块,这里用的是ESP8266-01S,一个烧写器用于下载程序,一个DHT11温湿度传感器,一些杜邦线,简单说一下过程,传感器获取环境数据通过8266发布出去,然后手机订阅就可以收到这些数据。8266有两个IO口,一个用于连接传感器,另一个则控制继电器。一个取巧的连接方式,直接插在下载器上,下载器有标识,对应接口可以连接传感器和继电器。

也可直接插在物联网继电器上。

2 首先你可以在arduino 官网下载软件,安装完成后需要下载esp8266扩展,在 文件–>首选项 里找到附加开发板管理器地址添加以下内容

http://arduino.esp8266.com/stable/package_esp8266com_index.json


3 之后点击工具 - 开发板 - 开发板管理器,进入开发板管理器界面:搜索esp8266并安装。

4 再进入工具 - 管理库界面,搜索EspMqttClient并安装,然后重启一下。

5 点击文件 - 示例 - 翻到最下方EspMqttClient点击SampleMQTTClient创建一个项目。主要代码

EspMQTTClient client("WifiSSID",//8266需要联网,你的无线网名称"WifiPassword",//无线网密码"*********",  // MQTT服务器ip"MQTTUsername",   // 用户名,默认admin"MQTTPassword",   // 密码,默认password"TestClient",     // 客户端id,任意填写61613              // MQTT服务器端口
);

订阅一个topic,回调也在里面,可以进行一些业务逻辑操作。


client.subscribe("LED_STATUS", [](const String & payload) {Serial.println(payload);});

发布消息,前者是topic,后者是内容。

client.publish("mytopic/test", "This is a message");

6 还要导入DHT11的包,否则无法使用。

7 不只是arduino IDE,还有其他编程软件,比如安信可公司的AiThinkerIDE,不过这个需要网8266里烧录固件,下载和烧录在这里有详细的说明,就不再细说了,具体可以前往看我同学的说明,他采用的是AiThinkerIDE连接ONENET平台,也是手机端控制。

8 8266也一样可以连接其他MQTT服务器,onenet,阿里云等等,同Android,也是只需修改那几个参数,用户名密码等。

9 完整代码

4、结语

以上仅是把我自己的实验心得分享出来,菜鸟一个,大神轻喷。若有错误地方欢迎指正,感谢阅读。

搭建MQTT服务器实现Android客户端与ESP8266之间即时通信相关推荐

  1. Ubuntu16.04LTS环境下搭建MQTT服务器以及QT实现MQTT客户端

    MQTT服务器搭建 使用EMQX搭建MQTT服务器,EMQX 4.2.14 for Ubuntu 16.04下载 下载zip包,选择安装方式为zip,cpu架构选择x86_64 按照网页的指示进行下载 ...

  2. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)

    前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...

  3. MQTT在Windows下搭建MQTT服务器

    MQTT 在Windows下搭建MQTT服务器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012163234/article/details/ ...

  4. 转 【MQTT】在Windows下搭建MQTT服务器

    MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放.简单.轻量.易于实现.这些特点使它适用于受限环境.该协议的特点有: 使用发布/订阅消息模式,提供 ...

  5. 【MQTT】在Windows下搭建MQTT服务器

    MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放.简单.轻量.易于实现.这些特点使它适用于受限环境.该协议的特点有: 使用发布/订阅消息模式,提供 ...

  6. UbuntuServer搭建MQTT服务器

    一.MQTT协议简介 MQTT 是一个基于发布/订阅模式的消息传输协议.它具有轻量级.开放.简单,易于实现,通信带宽要求低等特点.这些特点使得它对机器与机器的通信(M2M)以及物联网应用(IoT)来说 ...

  7. 使用EMQX搭建MQTT服务器,实现设备的通信(1)

    一.前言 最近我们选择智能家居方面的比赛.课设,为了保存学习记录,所以用文章来记录一下我们从软件到硬件的整个实现的过程,同时希望能帮助也想要实现相关功能的小伙伴. 二.MQTT介绍 (可跳过) MQT ...

  8. nodejs快速搭建MQTT服务器

    简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议.它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而 ...

  9. Windows下搭建MQTT服务器

    Windows下搭建MQTT服务器 1.MQTT服务器软件筛选 2.MQTT服务器软件mosquitto下载 3.修改mosquitto配置,并启动mosquitto服务 4.利用mosquitto工 ...

  10. activemq搭建MQTT服务器

    activemq搭建MQTT服务器 1. 搭建服务器需要的软件下载 2. 开启服务器 3. 登录管理员后台 4. 客户端测试 4.1 QMQTT撰写的客户端 4.2 使用客户端软件 4.3 两个客户端 ...

最新文章

  1. gRPC in ASP.NET Core 3.x -- Protocol Buffer, Go语言的例子(上)
  2. Python 3.6出现报错解决方案:No Python 3.6 installation was detected,无法卸载Python
  3. AndroidStudio安卓原生开发_一个activity中引用多个fragment_以及不同activity中复用某个fragment---Android原生开发工作笔记117
  4. [轉]function, new function, new Function
  5. android debug bridge tools_飞凌干货丨Android 应用程序如何获取system权限
  6. PHPCrawl webcrawler library/framework
  7. 【ARM】Linux驱动移植
  8. 华为android9.1.0怎么隐藏应用,华为手机怎么隐藏app
  9. MCE公司:新型STAT3抑制剂
  10. jQuery 遍历 - 同胞(siblings)
  11. App Store审核规则简要汇总
  12. 转自猎豹移动CEO傅盛:深度学习是什么?
  13. 怎么在线把pdf文件合并
  14. DDD(领域驱动设计)专题(一):什么是DDD?
  15. Windows重装电脑系统教程(制作启动U盘+重装系统)建议收藏
  16. CUDA:CUDA内核中内联PTX(汇编语言)用法的实例
  17. HTML实现公告文字滚动效果
  18. ubantu提交代码Warning:subject >50 characters; use shorter first paragraph怎么解决
  19. html圆圈中间一个感叹号实现,一个圆圈加一个感叹号是什么标识?
  20. GDKOI2023游记

热门文章

  1. CentOS查找redis配置文件及防火墙相关命令
  2. ssd网络详解之detection output layer
  3. Ansys-结构动力学分析-有预应力琴弦横向振动模态分析学习收获
  4. W10如何下载经典扫雷游戏
  5. 事业单位计算机技术岗工资,事业单位待遇,是管理岗好还是技术岗好?
  6. 自动阅读专业版第九次更新---原薅羊毛专业版(最后一次源代码分享)
  7. python三大禁忌_Python2.7 和 Python3.5 是两个不同版本的 Python ,它们之间并不相互兼容。_学小易找答案...
  8. EXCEL_20211117_filter平替
  9. 最简单的 Django 教程
  10. WOW装备大全(07.11.30)