ESP8266 + MQTT

git 地址: https://gitee.com/zhudachangs/esp8266-mqtt.git (如果无法打开说明在审核)

引用库

  • include <ESP8266WiFi.h>

  • include <PubSubClient.h>

  • include <Ticker.h>

#include <Arduino.h>
#include <Ticker.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h> // wifi info
const char *SSID = "wifi-name"; // 你家的wifi名
const char *PASSWORD = "123456a"; // wifi 密码 // MQTT info https://www.emqx.com/zh/mqtt/public-mqtt5-broker
const char *MQTT_SERVER = "192.168.110.54"; // MQTT 服务器地址
const int MQTT_PROT = 1883; // MQTT 端口
const char *mqtt_user = "zhangds";
const char *mqtt_password = "zhangds123a"; // mqtt 主题
const char *MQTT_TOPIC_PUB_ONLINE = "my/home/pub_online";
const char *MQTT_TOPIC_PUB_UPDATE = "my/home/pub_update"; // 订阅更新
const char *MQTT_TOPIC_SUB_DATA = "my/home/sub_data"; // 发布
const char *MQTT_TOPIC_HEARTBEAT = "my/home/heartbeat"; // 心跳
const char *CLIENT_ID = "esp8266-457065e5-f063-474e-2saf-cacf5cb52af5"; // ticker.attach(s秒数, 函数名)
Ticker ticker; // 定时调用某一个函数
WiFiClient espClient;
PubSubClient client(espClient); void init_wifi(); // 初始化wifi
void mqtt_reconnect(); // 重新连接wifi
void mqtt_msg_callback(char *topic, byte *payload, unsigned int length); // mqtt 消息回调
void mqtt_heartbeat(); // 心跳 void setup()
{
Serial.begin(115200);
init_wifi();
client.setServer(MQTT_SERVER, MQTT_PROT); // 设置mqtt 服务和端口
client.setCallback(mqtt_msg_callback); // 设置mqtt 回调函数 // 心跳
ticker.attach(1, mqtt_heartbeat);
} void loop()
{
if (!client.connected())
{
mqtt_reconnect();
}
client.loop();
} void init_wifi()
{
Serial.println("Connecting to");
Serial.println(SSID); WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
} void mqtt_reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection..."); // 第一步: 创建连接
if (client.connect(CLIENT_ID, mqtt_user, mqtt_password))
{
Serial.println("connected");
client.publish(MQTT_TOPIC_PUB_ONLINE, "online"); // 发布
client.subscribe(MQTT_TOPIC_PUB_UPDATE); // 监听
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
} void mqtt_msg_callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic); // 打印主题信息
Serial.print("] ");
String data = "";
for (unsigned int i = 0; i < length; i++)
{
Serial.print((char)payload[i]); // 打印主题内容
data += (char)payload[i];
}
Serial.println();
// ************** string 转 char * 不能对该变量任何操作 **************
// const char *cstr = data.c_str();
// 如果需要修改 必须使用 strcpy 函数复制 注意!!!!!!!!!!!
char *cstr = new char[data.length() + 1];
strcpy(cstr, data.c_str());
cstr = "改变的数据"; // ************** string 转 float **************
String test_float = "12.024";
float num_float = test_float.toFloat();
Serial.print(num_float);
Serial.println(); // ************** string 转 int **************
String test_int = "1254";
int num_int = test_int.toInt();
Serial.print(num_int); // ************ 字符串比较 ***************
// strcmp(const char s1, const char s2);
// 当 str1 < str2 时,返回为负数(-1);
// 当 str1 == str2 时,返回值= 0;
// 当 str1 > str2 时,返回正数(1)。
// 主题判断
if (strcmp(MQTT_TOPIC_PUB_UPDATE, topic) == 0)
{
// 发布
client.publish(MQTT_TOPIC_SUB_DATA, cstr);
}
} void mqtt_heartbeat()
{
if (client.connected())
{
client.publish(MQTT_TOPIC_HEARTBEAT, "1");
}
}

ESP8266 + MQTT (platformio 开发环境)加用户名和密码的更多相关文章

  1. ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  2. Mac Arduino ESP8266 ESP32 搭建开发环境

    目录 1.安装Arduino 2.搭建开发板管理器 3.可能出现的错误 1.安装Arduino Arduino下载. 官方下载地址:Arduino官方网站 Arduino中文社区:下载地址 安装方式: ...

  3. Webpack配置开发环境总结

    本文主要讲解webpack.config.js文件的配置,不会讲解webpack是什么,默认你会安装webpack及其它npm包,并对webpack有一些了解. 下面将从webpack.config. ...

  4. Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)

    PlatformIO简介 PlatformIO是开源的物联网开发生态系统.提供跨平台的代码构建器.集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等 支持在Windows.Lin ...

  5. 【转】Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。

    @2019-02-28 [小记] Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印.

  6. C# 动态加载组件后怎么在开发环境中调试

    动态加载组件 那就是简单的Assembly.Load动态加载dll而以.这网上资料也有不少.基本的思路基本上就是在本地上一个指定目录如[plugs]存在着一堆dll文件.主程序在初始运行时一般会把指定 ...

  7. ESP8266 AT指令开发(基于STC89C52单片机): 测试下诱人的程序(51单片机,8266,MQTT远程通信控制)

    前言 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, 简而言之: 51单片机+ESP8266用AT指令实现实现MQTT,(连接的本 ...

  8. 如何通过webpack和node来实现多个静态页面html,多个入口,能打包能热加载开发环境调试

    demo已经传到了github,地址:https://github.com/13476075014/04.node-vue-project/tree/master/03.singlewebpack: ...

  9. 总结 ESP8266 RTOS 开发环境搭建

    总结 ESP8266 RTOS 开发环境搭建 仔细看官方文档. 必须一步一步操作. 不要想当然,以为 make 就可以. 忽略编译警告,除非是错误. 工具链必须使用官方提供的. 多看看 Issues ...

  10. vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)

    第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...

随机推荐

  1. 修复 Longhorn 卷挂载失败(”CentOS 7.6-'fsck' found errors on device“)

    查看 Pod 日志 kubectl describe po clickhouse-0 -n clickhouse ...... #Events: # Type Reason Age From Mess ...

  2. 单链表-18个基本操作代码实现C语言

    单链表-18个基本操作代码实现C语言 原文地址:https://www.cnblogs.com/actanble/p/6713434.html 无更改,仅复现 运行后如图,运行软件dev-C++,系统 ...

  3. abc366-cnblog

    [E](E - Manhattan Multifocal Ellipse (atcoder.jp)) 解题思路 这题求的是满足\(\sum^n_{i=1}(|x-x_i|+|y-y_i|)\leq D ...

  4. SMU Autumn 2023 Round 2(Div.1+2)

    SMU Autumn 2023 Round 2(Div.1+2) C. Chaotic Construction 把环展开的话就是\(1 \sim 2n\),若\(D\)的位置放上路障的话,在这个展开 ...

  5. logback日志级别动态切换的四种方案 荐

    生产环境中经常有需要动态修改日志级别. 现在就介绍几种方案 方案一:开启logback的自动扫描更新 配置如下 <?xml version="1.0" encoding=&q ...

  6. ARM架构及ARM指令集、Thumb指令集你了解多少?

    https://www.sohu.com/a/339622340_100281310 1991 年ARM 公司成立于英国剑桥,在成立后的那几年,ARM业绩平平,工程师们也人心惶惶,害怕随时都会失业.在 ...

  7. Linux驱动 | 从0写一个设备树节点实例

    一.前言 设备树是每一个Linux驱动工程师都必须掌握的一个知识点,有很多之前做单片机的朋友刚接触Linux驱动时,会一脸懵! 其实设备树的使用并没有大家想像的那么复杂,对于大部分工程师来说,只要会修 ...

  8. WPF 设备输入事件封装

    本文主要介绍WPF应用对鼠标输入.触摸屏触笔以及触摸事件的封装 之前有简单说明设备输入类型 WPF 屏幕点击的设备类型 - 唐宋元明清2188 - 博客园 (cnblogs.com) 1.鼠标 - 通 ...

  9. 数据结构 - 关键路径(AOE)

    数据结构 - 关键路径求解

  10. 微软RDL远程代码执行超高危漏洞(CVE-2024-38077)漏洞检测排查方式

    漏洞名称:微软RDL远程代码执行超高危漏洞(CVE-2024-38077) CVSS core:   9.8 漏洞描述: CVE-2024-38077 是微软近期披露的一个极其严重的远程代码执行漏洞. ...