实验目的:通过自己制作的手机APP,连接MQTT服务器,获取ESP32单片机的温湿度信息,控制ESP32单片机上的LED开关。

实验准备:

1、硬件:ESP32开发板(型号不限,esp01s也可以)、LED灯、DH11温湿度传感器、面包板等

2、软件:

(1)arduino软件,可以到官网https://www.arduino.cc/en/Main/Software下载。

(2)App Inventor 2 集成版,可以到官网https://www.wxbit.com/下载。(解释一下:这个软件是适用于初学者的手机APP制作软件,界面设计所见即所得,程序设计通过拖拽积木块来实现。)

(3)需要一台服务器。(可以是自己的电脑,也可以到网上买云服务器,笔者是购买的腾讯云服务器(每年79元),除了运行网站外,再捎带着提供MQTT服务。)

实验步骤:

一、总体设想

1、建一个MQTT服务器,提供订阅/发布 消息的功能。

2、用App Inventor 2 制作一个APP,功能是连接MQTT服务器,订阅ESP32单片机的温湿度信息,控制ESP32单片机上的LED开关。

3、为ESP32编写程序并烧录,完成连接MQTT服务器,发布温湿度信息,订阅LED控制主题,根据消息来开、关LED灯。

二、MQTT服务器的建立

MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。可以发布或接收特定主题的消息,基于发布/订阅模式。

笔者使用的是腾讯云服务器,操作系统是centos7.5,我使用的软件是Mosquitto,这是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。

安装比较简单:

# 首先要下载源代码包,目前最高版本是1.6.9
wget http://mosquitto.org/files/source/mosquitto-1.6.9.tar.gz
# 下载后,首先是解压
tar zxfv mosquitto-1.6.9.tar.gz
# 进入解压后的目录
cd mosquitto-1.6.9
# 先编译
make
# 最后安装
make instal

安装过程中,可以出现找不**文件的情况,可以使用yum install命令进行安装 。

安装完成后,通过使用以下命令启动。

mosquitto -c /etc/mosquitto/mosquitto.conf -d

对于这个软件,笔者也不太熟悉,仅用到了最基本的功能。

三、设计制作手机APP

设计手机APP,有很多专业软件,功能强大,但对于这些极其简单的应用来说,安装、使用都过于复杂,所以笔者选用了为中小学生设计的一款软件,App Inventor 2 。

WxBit 汉化版由华南理工大学杨道全老师基于 MIT App Inventor 开源项目二次开发,为志同道合的 App Inventor 爱好者服务。通过界面设计和逻辑设计来完成APP的制作,比较简单。

具体使用方法因过于简单,在这儿就不说了,直接贴图吧。

首先是界面的设计 :

最后是逻辑设计,也就是咱们常说的程序代码:

因为是图形的界面,比较简单,就不逐一解释了。

四、ESP32单片机的程序、连接

(一)编写arduino程序,用于完成连接MQTT服务器,发布温湿度信息,订阅LED控制主题,根据消息来开、关LED灯。

1、安装arduino软件,下载直接安装就可以了。Windows安装USB驱动时会弹出安全提示,一定要选择“安装”。

2、简单介绍一下软件的界面:(看图)

3、编程前的准备工作:

(1)安装对ESP32硬件的支持,一般有两种方法,一种是下载硬件包,解压到程序所在文件夹中的hardware文件夹里,一般适用于一些非常见类型的板子。二种是在首选项中设置附加开发板管理网址:https://github.com/espressif/arduino-esp32/releases/download/1.0.2/package_esp32_index.json。

然后在软件中选择工具--开发板****--开发板管理器,在这里输入ESP32进行查找,然后点击安装。(操作看图)

选择合适的开发板及相应参数。

(2)安装DH11温湿度传感器的程序包。

在arduino UNO等硬件中,使用DH11温湿度传感器比较简单,但是在ESP32开发板中使用它,就需要选择合适的程序包了

单击more info链接,可以进入Github网站源码仓库,可以看一下它的例程,因为使用很简单,这里就不详说了。

4、正式编程

思路前边已经说了,在程序中,我也进行了注释,比较简单,为节省时间,直接上代码吧。

#include <WiFi.h> //wlan连接库,有很多种,如esp8266.h……等
#include <PubSubClient.h>//发布订阅库,也可以使用mqtt.h
#include "DHT.h" //这是一个读取DHT温湿度仪的库,用这个库能省点事。这个库也有很多种,这是其中一个。 #define DHTPIN 15 //定义15号口为DHT11温湿度仪的控制口。
#define DHTTYPE DHT11 //定义DHT温湿度仪的类型。如DHT11、DHT21、DHT22,这个要根据实际来选。 DHT dht(DHTPIN, DHTTYPE); //构造函数 const char* ssid = "ssid"; //WIFI的ID
const char* password = "password"; //WIFI的PASSWORD
const char* mqtt_server = "*.*.*.*"; // mqtt服务器的地址。
const char* TOPIC = "ledconc"; // 订阅信息主题
const char* client_id = "cid_dnt_led";//设备的客户端编号
char* sh = new char[10]; //定义两个字符串数组,用来存放温湿度的浮点数转换过来的字符串。
char* st = new char[10]; WiFiClient espClient; // 定义WLAN实例
PubSubClient client(espClient); // 定义PubSubClient的实例 long lastMsg = 0; // 记录上一次发送信息的时间。 void setup() {
dht.begin(); //初始化DHT11温湿度仪。
pinMode(18, OUTPUT); // 定义18号口连接LED灯,设为输出方式
//连接WIFI,如果连接不成功,则等待0.5秒后,继续连接。
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
//
client.setServer(mqtt_server, 1883);//设定MQTT服务器与使用的端口
client.setCallback(leddev); //设定回调程序,当ESP32收到订阅消息时会调用此方法
} void leddev(char* topic, byte* payload, unsigned int length)
{
if ((char)payload[0] == '1')
{
digitalWrite(18, HIGH); // 亮灯
}
else
{
digitalWrite(18, LOW); // 熄灯
}
} void reconnect() {
while (!client.connected()) {
if (client.connect(client_id))
{
client.subscribe(TOPIC);
}
else
{
delay(5000);
}
}
}
void loop() {
if (!client.connected()) //如果MQTT服务器连接不成功,则反复重试,连接成功后重新订阅。
{
reconnect();
}
delay(2000);
float h = dht.readHumidity(); //获取温湿度,是float格式 的。
float t = dht.readTemperature();
dtostrf(h, 2, 2, sh); // dtostrf()函数将float格式转换为字符串。
dtostrf(t, 2, 2, st);
client.loop();
long now = millis();
if (now - lastMsg > 2000)//每过2秒,发送温湿度数据。
{
lastMsg = now;
client.publish("temperature", st);
client.publish("humidity", sh);
}
}

5、进行烧录

这个比较简单,连接设备,选择合适的COM端口,直接上传即可,这里有一个小技巧,如果提示一直无法连接硬件,可以按一下ESP32板上的BOOT键。

手机、ESP32单片机、MQTT服务器连接实验的更多相关文章

  1. ESP8266串口和MQTT服务器消息互传(版本一) 单纯透传+保存WIFI账号信息

    目标 制作一个ESP8266串口和MQTT相互透传的小WIFI,可用手机修改其连接的路由器,由此该模块可以任意加载到各种串口传输的单片机上,完成硬件到云端的传输. 1 实物图 2 MQTT网页测试客户 ...

  2. 【嵌入式硬件Esp32】安装MQTT服务器(Windows) 并连接测试

    对于不知道MQTT的肯定会问MQTT是干什么的....... 现在我有一个项目需求, 看到这个项目第一想法肯定需要一个服务器,所有的wifi设备和手机都去连接这个服务器,然后服务器进行信息的中转,类似 ...

  3. 服务器 三 MQTT服务器手机开发

    目的: 实现手机4G网络控制单片机,需要搭建服务器,手机或者各种控制端远程控制. 本教程 1  MQTT服务器硬件模块 2 MQTT服务器电脑搭建 2.1自己搭建 2.2租阿里云服务器 2 MQTT服 ...

  4. (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)

    如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...

  5. 1-安装MQTT服务器(Windows),并连接测试

    对于不知道MQTT的肯定会问MQTT是干什么的....... 现在我有一个项目需求, 看到这个项目第一想法肯定需要一个服务器,所有的wifi设备和手机都去连接这个服务器,然后服务器进行信息的中转,类似 ...

  6. Arduino IDE开发ESP8266-01S连接MQTT服务器 控制继电器点亮LED

    准备条件: 1.Arduino IDE 2.ESP-01S模块 2.MQTT服务器 3.手机热点或路由器热点 Wi-Fi芯片 默认订阅的主题是  "开关控制" 当你发送主题  &q ...

  7. mqtt网关服务器连接阿里云关联物模型

    mqtt网关服务器连接阿里云关联物模型 卓岚专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体. 可以连接阿 ...

  8. Mqtt服务器搭建

    .bg { background: #99CC99 } Mqtt服务器搭建 测试环境:CentOS64位 1.安装基础软件 yum install gcc-c++ yum install cmake ...

  9. 1-安装MQTT服务器(Windows)

    对于不知道MQTT的肯定会问MQTT是干什么的....... 现在我有一个项目需求, 看到这个项目第一想法肯定需要一个服务器,所有的wifi设备和手机都去连接这个服务器,然后服务器进行信息的中转,类似 ...

  10. mqtt服务器apollo的搭建和测试工具paho的使用

    (1)前言 MQTT协议是IBM开发的一个即时通讯协议; 基于发布/订阅的消息协议,近些年来被广泛应用于能源.电力.....等硬件性能低下的远程设备,此外国内很多企业使用MQTT作为android手机 ...

随机推荐

  1. Vue11 vue的data中属性的值(基础数据类型和对象)

    1 代码 <body> <div id="root"> <h1>{{name}}</h1> <h1>{{obj}}< ...

  2. 与ChatGPT关于测试问题的对话

    1测试人员创造什么价值? 测试人员在软件开发生命周期中扮演着非常重要的角色,他们的主要职责是确保软件在发布前达到高质量标准.以下是测试人员为软件开发和业务提供的价值: 1.缺陷检测和修复:测试人员的主 ...

  3. 安装CUDA

    https://developer.nvidia.com/cuda-toolkit-archive 使用deb安装的话,有时会报错: dpkg: 处理软件包 nvidia-driver-450 (-- ...

  4. Mybatis的逆向工程与延迟加载

    Mybatis 的逆向工程 Mybatis是一个半自动化的ORM框架,SQL语句需要要开发者自己定义,SQL定义在Mapper.xml中,与对应的Mapper接口对应 实体类 接口 Mapper.xm ...

  5. 跳板攻击之:ICMP代理转发与反弹shell

    跳板攻击之:ICMP代理转发与反弹shell 郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护 ...

  6. Revit如何给模型绑定动画的教程

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. Revit模型完成后,为了展示成果,有时需要做动画,本文章将教大家如何在3dsmax中给塔吊族模型绑定旋转动画,并导入到Lumion当中使用. ...

  7. Mybatis-概览地图

    思考: "为什么在使用 Mybatis 的时候,只需定义一个接口,不用写实现类就能使用XML中或者注解上配置好的SQL语句,就能完成对数据库 CRUD 的操作呢?" 这是因为用到了 ...

  8. APP压力稳定性测试-Monkey

    一.Monkey工具简介 1.monkey的来源: Monkey是一个命令行工具,使用安卓调试桥(adb)来运行它,模拟用户:触摸屏幕.滑动Trackball.按键等随机事件流来对设备上的程序进行压力 ...

  9. QQ空间数据抓取

    title: QQ空间数据抓取 author: 杨晓东 permalink: QQ空间数据抓取 date: 2021-10-02 11:27:04 categories: - 嗯哼 tags: - 无 ...

  10. 2023 年 CCF 春季测试赛模拟赛 - 2 题解

    T1 约数和 标准解法 \(n = a_1^{b_1} \times a_2^{b_2} \dots a_k^{b_k}\) 那么根据算术基本定理的推广,约数个数和约数和都是可以快速计算得到 约数和 ...