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. 社区6月月报 | Apache DolphinScheduler重要修复和优化记录

    各位热爱Apache DolphinScheduler的小伙伴们,社区6月月报更新啦!这里将记录Apache DolphinScheduler社区每月的重要更新,欢迎关注. 月度Merge Stars ...

  2. OI之奇葩错误

    链式前向星(写法 \(1\)):\(head\) 数组不初始化成 \(-1\).(同学写题) 链式前向星(写法 \(2\)):\(idx\) 不初始化成 \(1\).(同学写题) 用到队列时忘记 \( ...

  3. JNA使用入门

    JNA即Java Native Access. 官方主页 代码仓库 官方样例 maven中心仓库主页 官方文档 Getting Started Functional Description. Mapp ...

  4. 巴特沃斯LPF设计(硬件电路实现)

    高阶 (2n) VSVC单位增益巴特沃斯低通滤波器设计,可分解为 n 个二阶低通,通过对这多个二阶低通的组合优化,可提高滤波器的低通特性和稳定性. 串联的传递函数是各个二阶滤波器传递函数的乘积:\({ ...

  5. Nano 编辑器入门

    按键映射 ⌃: Control M: Meta (Alt) 编辑文件: nano MyFile.txt 退出并保存: ⌃-X 退出(此时 nano 会提示你要不要保存,按 Y 保存) Nano 提示输 ...

  6. Ubuntu 设置远程桌面(RDP)

    安装桌面环境 如果你的 Ubuntu 还没有安装桌面环境,可以选择以下之一安装: GNOME GNOME 是 Ubuntu Desktop 原生桌面环境. # 安装基本的 GNOME 桌面环境 sud ...

  7. uniapp中,getApp()返回的实例到底是什么?为什么getApp()返回的实例无法访问vuex的$store

    按uniapp官方手册中说,getApp()函数用于获取当前应用实例.当前应用,也就是说当前应用程序.因为getApp()返回的实例可以用于访问app.vue中的globaldata,因此这个当前应用 ...

  8. docker高级篇第三章-dockerfile案例之制作自己的centos镜像

    在上一篇文章中<Dockerfile介绍及常用保留指令>,我们介绍了Dockerfile是什么以及Dockerfile常用的保留字段.熟悉了这些之后,有没有想自己动手写一个Dockerfi ...

  9. Codeforces Round 916 (Div. 3) (A~F附带题解和详细思路)

    Codeforces Round 916 (Div. 3) (A~E2) A. Problemsolving Log 签到题,对于给出的字符串,用数组记录每个字母出现的次数,然后遍历一边记录数组,如果 ...

  10. CSS单位em、rem、vh和vw等及CSS3的calc()以及line-height百分比

    css单位我们常用的是px,也即是像素.随着网页开发自适应的要求,css3新增了许多单位,rem.vw和vh.vmin和vmax.ch和ex等. em 做前端的应该对em不陌生,不是什么罕见的单位,是 ...