上一篇介绍了如何安装MQTT:
张业生:阿里云上安装Mosquitto6 赞同 · 1 评论文章
这里将介绍如何通过MQTT来控制ESP8266(NodeMCU v1.0)。
材料准备:
1、原理解析
手机/电脑推送一个消息到MQTT,ESP8266订阅了相应的消息,接着就可以解析消息并做出对应的响应行为。
2、例子
接下来实现一个简单的应用,通过手机控制LED灯的开与关。
之前有简单介绍阿里云上安装Mosquitto,如果没有服务器也可以在本地机器进行安装。
// mqtt + esp8266
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
const char* ssid = "your_wifi_name"; // wifi名称
const char* password = "your_wifi_password"; // wifi密码
const char* mqtt_server = "your_mqtt_server"; // mqtt服务器地址,如本地ip192.168.31.22
WiFiClient espClient;
PubSubClient client(espClient);
const byte ledPin = D4; // 需要控制的led灯
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
char receivedChar = (char)payload[i];
Serial.print(receivedChar); // 打印mqtt接收到消息
if (receivedChar == '1') { // 收到消息是 '1' 点亮LED灯
digitalWrite(ledPin, HIGH);
}
if (receivedChar == '0') // 收到消息是 '0' 关闭LED灯
digitalWrite(ledPin, LOW);
}
Serial.println();
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP8266 Client")) {
Serial.println("connected");
client.subscribe("ledStatus"); // 订阅 'ledStatus' 这个topic
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup()
{
Serial.begin(9600);
client.setServer(mqtt_server, 1883); // 连接mqtt
client.setCallback(callback); // 设置回调,控制led灯
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (!client.connected()) {
reconnect();
}
client.loop();
}
3、测试
开启MQTT服务,把上面程序烧录到ESP8266。
开启一个终端用于发送MQTT消息:
// 打开led灯
$ mosquitto_pub -h your_mqtt_ip -d -t ledStatus -m 1
// your_mqtt_ip换成自己的mqtt服务器ip
// 如果有用户名和密码,加上 -u userName -P password进行连接
// 关闭led灯
$ mosquitto_pub -h your_mqtt_ip -d -t ledStatus -m 0
最终效果:
00:00
/ 00:13
下载
播放速度
画中画
视频信息
镜像画面
循环播放
[X]
DeviceId
:
web_644411697706BF12
PlayerVersion
:
1.0.27
SessionId
:
3e346221-92ad-4181-960e-f4bac55ec09f
StreamHost
:
vdn6.vzuu.com
Res
:
mse mp4 h264 720x1280@25.00
Color
:
(tv bt709)
Codec
:
avc1.4d401f/mp4a.40.5
Frames
:
0/0 4/0
VideoBuffered
:
13520 ms
AudioBuffered
:
13491 ms
Speed
:
0.00 KB/s
TotalReceive
:
3459.35 KB
GPU
:
ANGLE (Intel, Intel(R) Iris(R) Xe Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)
播放 (k)
00:00 / 00:13
倍速
2.0x1.5x1.25x1.0x0.75x0.5x
高清
高清 720P清晰 480P
画中画 (p)
网页全屏 (t)
全屏 (f)
00:13
现在的效果是通过终端进行控制,易用性是很差的;可以通过python、nodejs等语言做一个简易的客户端或者直接做一个小程序进行控制,这样就很好使用了。
Wi-Fi名称密码的变更这个情况没有集成到例子中,可以参考:
https://github.com/tzapu/WiFiManagergithub.com/tzapu/WiFiManager
代码地址: https://github.com/CNBlackJ/iot-lesson/blob/master/esp8266/mqtt.cpp
原网址: 访问
创建于: 2023-10-08 11:02:33
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论