手机、ESP32单片机、MQTT服务器连接实验

实验目的:通过自己制作的手机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键。

原文地址:https://www.cnblogs.com/lzszs/p/12512022.html

时间: 2024-10-04 02:36:25

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

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

如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengwu/p/8026014.html 关于钱的问题,其实自己是花钱买的云服务,虽然自己现在能支付的起,但是呢为了尽量减少支出,自已还有好多好多文章要写,好多好多元器件要买,所以哈会在自己的淘宝上卖源码2元价格,一元捐出,一元自己留着当亲们支付云服务的费用了 如果看不懂也没关系,跟着做就可以了,做完以后您

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

1-安装MQTT服务器(Windows),并连接测试 摘自:https://www.cnblogs.com/yangfengwu/p/7764667.html 对于不知道MQTT的肯定会问MQTT是干什么的....... 现在我有一个项目需求, 看到这个项目第一想法肯定需要一个服务器,所有的wifi设备和手机都去连接这个服务器,然后服务器进行信息的中转,类似于咱的QQ 这个服务器呢第一种方式是自己开发 就变成了 要是自己开发的话,其实想想就麻烦,要把谁的wifi设备数据给谁,要事先规定好协议,如

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

准备条件: 1.Arduino IDE 2.ESP-01S模块 2.MQTT服务器 3.手机热点或路由器热点 Wi-Fi芯片 默认订阅的主题是  “开关控制” 当你发送主题  “开关控制” 消息 “1”    时LED熄灭 其他消息时 LED都是亮的. /* 基本的ESP8266 MQTT示例 */ #include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "XXXXXX";//手

Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器

一.硬件准备 USB转ESP8266两块.DHT11温度湿度传感器.ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别) USB转ESP8266 说明:为什么要买两块 二.软件准备 Arduino.EMQX(这是mqtt服务器可以部署在本地也可以放在远程服务器上).MQTTBox(mqtt客户端程序).如果是Window系统的话 安装相关USB驱动程序. 三.安装EMQX 下面介绍的方法是部署在远程服务器上. MQTT服务器配置方法 四.安装

WLGK-51单片机接口技术基础实验 ——LED闪烁灯

WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这个实验是带领我们走入"软硬件综合使用"的一个很好入门示例,51单片机是他的一个载体.下面小伙伴们,让我们一起来揭开LED的神秘面纱吧! 万立高科官网:www.wanligaoke.com 万立高科官方商城:http://www.wlgkbj.com 万立高科淘宝直销店铺:https://r

DNS笔记&主从服务器搭建实验

DNS笔记  DNS正反主从服务搭建 ==========================理论部分========================= DNS:Domain Name Service协议,属于应用层协议 使用端口53/TCP  53/UDP 作用:提供域名和IP的解析服务,在互联网中属于非常重要的基础服务 .  根域 .com  .edu  .gov  .org  等等  顶级域,用来指示某个国家或地区或组织使用的名称类型 baidu.com  qq.com    等等,二级域名,

运用MQTT-JMeter插件测试MQTT服务器性能

今天我们介绍XMeter团队带来的新版MQTT-JMeter插件,您可以更为方便地添加MQTT连接.发布.订阅取样器,构造组合的应用场景,例如背景连接.多发少收.少发多收,计算消息转发时延等.利用该插件,我们为EMQ成功实施了包括百万级并发连接在内的一系列测试场景,这里有详细的测试报告. 该插件发布在github,欢迎下载.使用并告诉我们您的意见建议. 下面介绍一下插件的使用方法. 安装 从github下载您需要的release版本, 解压mqtt–xmeter-jar-with-depende

服务器群集实验 ——SQL群集1

服务器群集实验 --SQL群集 1.  规划设计 1.1.  拓扑规划 1.2.  主机LAN规划 域名:freshman.local 主机名 IP地址 角色 网络 备注 freshmandc1. freshman.local 172.16.1.26 域控制器.DNS 桥接 freshmannode1.freshman.local 172.16.1.27 群集节点1 桥接 freshmannode2. freshman.local 172.16.1.28 群集节点2 桥接 freshmanclu

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

MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放.简单.轻量.易于实现.这些特点使它适用于受限环境.该协议的特点有: 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合. 对负载内容屏蔽的消息传输. 使用 TCP/IP 提供网络连接. 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量. 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制. 有三种消息发布服务质量: