|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
<!-- saved from url=(0071)https://chat.deepseek.com/a/chat/s/f94d9dda-93e6-4f36-bd0a-f972cad34664 -->
|
|
|
|
|
|
<html lang="zh-CN" class="notranslate" translate="no"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>ESP32 Arduino MQTT Client 使用指南 - DeepSeek</title><meta name="viewport" content="initial-scale=1.0,maximum-scale=1,width=device-width,viewport-fit=cover"><meta name="commit-id" content="083093f"><meta name="description" content="Chat with DeepSeek AI – your intelligent assistant for coding, content creation, file reading, and more. Upload documents, engage in long-context conversations, and get expert help in AI, natural language processing, and beyond. | 深度求索(DeepSeek)助力编程代码开发、创意写作、文件处理等任务,支持文件上传及长文本对话,随时为您提供高效的AI支持。"><meta name="keywords" content="DeepSeek,DeepSeek AI,DeepSeek Chat,AI assistant,coding assistant,long-context LLM,Open Source LLM,natural language processing,AI chatbot,AI long text,AI content creation,large language model,深度求索,大语言模型,自然语言处理,AI聊天机器人,代码开发,创意写作,AI助手,长文本对话,文件处理AI,大模型公司,人工智能,AI开发助手"><meta property="og:url" content="https://chat.deepseek.com"><meta property="og:type" content="website"><meta property="og:title" content="DeepSeek"><meta property="og:description" content="Chat with DeepSeek AI."><meta property="og:image" content="https://cdn.deepseek.com/images/deepseek-chat-open-graph-image.jpeg"><meta name="twitter:card" content="summary_large_image"><meta property="twitter:domain" content="deepseek.com"><meta property="twitter:url" content="https://chat.deepseek.com"><meta name="twitter:title" content="DeepSeek"><meta name="twitter:description" content="Chat with DeepSeek AI."><meta name="twitter:image" content="https://cdn.deepseek.com/images/deepseek-chat-open-graph-image.jpeg"><meta name="google" content="notranslate"><meta name="ip" content="183.45.77.145"><meta name="region" content="CN"><link rel="apple-touch-icon" href="https://cdn.deepseek.com/chat/icon.png"><link rel="icon" type="image/x-icon" href="https://chat.deepseek.com/favicon.svg"><script type="text/javascript" async="" id="_intercom_npm_loader" src="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/guh50jw4"></script><script>!function(n,t){if(n.LogAnalyticsObject=t,!n[t]){var c=function(){c.q.push(arguments)};c.q=c.q||[],n[t]=c}n[t].l=+new Date}(window,"collectEvent")</script><script async="" src="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/collect-rangers-v5.2.1.js.下载"></script><script>(()=>{"use strict";let e=function(){return"function"!=typeof window.collectEvent?()=>0:window.collectEvent.apply(window,arguments)},t=null,n=!1,o={en:{t:"Resource Loading Error",d:"Unable to load page resources. Please refresh and try again.",b:"Refresh Page"},zh:{t:"资源加载异常",d:"页面资源加载异常,请刷新重试",b:"刷新页面"}};window._sriCk=function(){var a;let r,l,i,s=(e=>{let t=navigator.languages||[navigator.language||""];for(let n=0;n<t.length;n++){let o=t[n].toLowerCase().split("-")[0];if(e.includes(o))return o}return null})(Object.keys(o)),c=s?o[s]:o.en,d='<div class="_sri-ck"><style>._sri-ck{width:fit-content;margin:20vh auto}</style>';d+='<img src="https://cdn.deepseek.com/logo.png" alt="Logo" class="logo" width=114 height=24><h1 class="title">'+c.t+'</h1><p class="desc">'+c.d+'</p><button class="btn" onclick="location.reload()">'+c.b+"</button></div>",(i=(l=document).createElement("div"),l.body.replaceChildren(i),i).innerHTML=d,a=arguments,n||(n=!0,e("start"),e("init",{app_id:0x13145ad,channel_domain:"https://gator.volces.com",enable_storage:!0,disable_sdk_monitor:!0}),(r=document.head.querySelector('meta[name="commit-id"]'))&&(t=r.getAttribute("content"))),e("scriptLoadError",{src:a[0]?a[0].src:"",dsp__commitId:t})}})()</script><script defer="" onerror="_sriCk(this)" src="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/default-vendors.529c2d46d2.js.下载"></script><script defer="" onerror="_sriCk(this)" src="./ESP32 Arduino MQTT
|
|
|
|
|
|
body.change-theme * {
|
|
|
|
|
|
transition: none !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
body.change-theme *::before {
|
|
|
|
|
|
transition: none !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
body.change-theme *::after {
|
|
|
|
|
|
transition: none !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style><link data-webpack="@deepseek/chat:chunk-59" rel="stylesheet" href="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/katex.66a418a9b7.css" crossorigin="anonymous"><script data-smcp="true" src="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/smcp.min.js.下载"></script><style>
|
|
|
|
|
|
.ds-scroll-area__gutters {
|
|
|
|
|
|
display: block;
|
|
|
|
|
|
}
|
|
|
|
|
|
.ds-scroll-area {
|
|
|
|
|
|
scrollbar-width: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
.ds-scroll-area::-webkit-scrollbar {
|
|
|
|
|
|
display: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style><script src="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/fp-1.min.js.下载" data-fp="true"></script><style>@font-face {
|
|
|
|
|
|
font-family: 'quote-cjk-patch';
|
|
|
|
|
|
src: local('PingFangSC-Regular');
|
|
|
|
|
|
unicode-range: U+201C-201D, U+2018-2019;
|
|
|
|
|
|
}</style><link rel="stylesheet" crossorigin="anonymous" href="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/style.min.css"><link rel="stylesheet" crossorigin="anonymous" href="./ESP32 Arduino MQTT Client 使用指南 - DeepSeek_files/font.css"></head><body class="zh_CN light" style="--app-height: 932px;"><div id="root"><div class="ds-theme" style="--ds-rgb-hover: 0 0 0 / 4%;"><div class="cb86951c"><div class="cddfb2ed"></div><div class="c3ecdb44"><div class="dc04ec1d"><div class="b8812f16 a2f3d50e"><div class="_262baab"><div class="e066abb8"><svg width="143" height="23" viewBox="0 0 143 23" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M78.6785 18.6823H77.1078V16.2472H78.6785C79.6513 16.2472 80.6342 16.0047 81.2672 15.3308C81.9009 14.6569 82.14 13.6232 82.14 12.59C82.14 11.5569 81.9109 10.5231 81.2672 9.84981C80.6247 9.17594 79.6513 8.93343 78.6785 8.93343C77.7056 8.93343 76.7228 9.17594 76.0886 9.84981C75.4549 10.5237 75.2158 11.5569 75.2158 12.59V22.5909H72.4605V6.50781H75.2158V7.53204H75.7209C75.7757 7.4689 75.8304 7.41525 75.8857 7.36161C76.5752 6.73244 77.6308 6.50781 78.6684 6.50781C80.2944 6.50781 81.9193 6.91236 82.9849 8.03549C84.0499 9.15861 84.4265 10.8835 84.4265 12.6001C84.4265 14.3166 84.0404 16.0326 82.9849 17.1647C81.9288 18.2967 80.2944 18.6834 78.6785 18.6834V18.6823Z" fill="var(--dsw-alias-brand-primary)"></path><path d="M36.7486 6.94097H38.3188V9.37609H36.7486C35.7753 9.37609 34.7929 9.61859 34.1593 10.2925C33.5257 10.9663 33.2871 12.0001 33.2871 13.0332C33.2871 14.0664 33.5167 15.0996 34.1593 15.7734C34.8019 16.4473 35.7753 16.6898 36.7486 16.6898C37.722 16.6898 38.7049 16.4473 39.3385 15.7734C39.9722 15.0996 40.2108 14.0664 40.2108 13.0332V3.02344H42.9655V19.116H40.2108V18.0918H39.7057C39.6503 18.1544 39.5956 18.2086 39.5403 18.2622C38.8513 18.8908 37.7952 19.116 36.7576 19.116C35.1321 19.116 33.5067 18.712 32.4416 17.5889C31.3766 16.4658 31 14.7403 31 13.0243C31 11.3083 31.3856 9.59177 32.4416 8.45971C33.5067 7.33658 35.1321 6.94097 36.7486 6.94097Z" fill="var(--dsw-alias-brand-primary)"></path><path d="M56.7855 12.8155V13.795H49.4483V11.8454H54.3152C54.2051 11.1358 53.9481 10.4709 53.4887 9.9853C52.8277 9.2846 51.808 9.03316 50.7983 9.03316C49.7886 9.03316 48.7688 9.2846 48.1078 9.9853C47.4468 10.686 47.2076 11.7555 47.2076 12.816C47.2076 13.8766 47.4462 14.9544 48.1078 15.6462C48.7688 16.338 49.788 16.5989 50.7983 16.5989C51.8085 16.5989 52.8277 16.3475 53.4887 15.6462C53.5804 15.5473 53.6631 15.4395 53.7458 15.3316H56.4642C56.2256 16.1765 55.849 16.9403 55.2796 17.5332C54.1777 18.692 52.479 19.1145 50.7983 19.1145C49.1175 19.1145 47.4188 18.701 46.3169 17.5332C45.215 16.3653 44.8111 14.5862 44.8111 12.816C44.8111 11.0458 45.2061 9.25778 46.3169 8.0989C47.4283 6.94001 49.1175 6.51758 50.7983 6.51758C52.479 6.51758 54.1777 6.93107 55.2796 8.0989C56.3904 9.26672 56.7855 11.0458 56.7855 12.816V12.8155Z" fill="var(--dsw-alias-brand-primary)"></path><path d="M70.6151 12.8155V13.795H63.2779V11.8454H68.1448C68.0341 11.1358 67.7776 10.4709 67.3183 9.9853C66.6573 9.2846 65.6376 9.03316 64.6279 9.03316C63.6182 9.03316 62.5984 9.2846 61.9374 9.9853C61.2764 10.686 61.0372 11.7555 61.0372 12.816C61.0372 13.8766 61.2758 14.9544 61.9374 15.6462C62.5984 16.338 63.6182 16.5989 64.6279 16.5989C65.6376 16.5989 66.6573 16.3475 67.3183 15.6462C67.4105 15.5473 67.4927 15.4395 67.5748 15.3316H70.2938C70.0546 16.1765 69.678 16.9403 69.1086 17.5332C68.0067 18.692 66.3081 19.1145 64.6279 19.1145C62.9476 19.1145 61.2484 18.701 60.1465 17.5332C59.0446 16.3653 58.6406 14.5862 58.6406 12.816C58.6406 11.0458 59.0357 9.25778 60.1465 8.0989C61.2579 6.94001 62.9471 6.51758 64.6279 6.51758C66.3086 6.51758 68.0067 6.93107 69.1086 8.0989C70.22 9.26672 70.6151 11.0458 70.6151 12.816V12.8155Z" fill="var(--dsw-alias-brand-primary)"></path><path d="M92.2781 19.1156C93.9589 19.1156 95.657 18.8731 96.7589 18.1813C97.8608 17.4896 98.2653 16.438 98.2653 15.3959C98.2653 14.3538 97.8697 13.2932 96.7589 12.6104C95.657 11.9276 93.9583 11.6756 92.2781 11.6756C91.5612 11.6756 90.9002 11.5767 90.4319 11.3163C89.9637 11.0464
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><PubSubClient.h></span></span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// WiFi 配置</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> ssid <span class="token operator">=</span> <span class="token string">"你的WiFi名称"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> password <span class="token operator">=</span> <span class="token string">"你的WiFi密码"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// MQTT 配置</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> mqtt_server <span class="token operator">=</span> <span class="token string">"broker.hivemq.com"</span><span class="token punctuation">;</span> <span class="token comment">// 公共测试服务器</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">int</span> mqtt_port <span class="token operator">=</span> <span class="token number">1883</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> mqtt_user <span class="token operator">=</span> <span class="token string">""</span><span class="token punctuation">;</span> <span class="token comment">// 如果需要认证</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> mqtt_password <span class="token operator">=</span> <span class="token string">""</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
WiFiClient espClient<span class="token punctuation">;</span>
|
|
|
|
|
|
PubSubClient <span class="token function">client</span><span class="token punctuation">(</span>espClient<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">setup_wifi</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"正在连接: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>ssid<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
WiFi<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span>ssid<span class="token punctuation">,</span> password<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">while</span> <span class="token punctuation">(</span>WiFi<span class="token punctuation">.</span><span class="token function">status</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">!=</span> WL_CONNECTED<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">delay</span><span class="token punctuation">(</span><span class="token number">500</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"WiFi 连接成功"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"IP 地址: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>WiFi<span class="token punctuation">.</span><span class="token function">localIP</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">callback</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token operator">*</span> topic<span class="token punctuation">,</span> byte<span class="token operator">*</span> payload<span class="token punctuation">,</span> <span class="token keyword">unsigned</span> <span class="token keyword">int</span> length<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"收到消息 ["</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>topic<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"]: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span>payload<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">reconnect</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token operator">!</span>client<span class="token punctuation">.</span><span class="token function">connected</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"尝试 MQTT 连接..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 客户端 ID</span>
|
|
|
|
|
|
String clientId <span class="token operator">=</span> <span class="token string">"ESP32Client-"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
clientId <span class="token operator">+=</span> <span class="token function">String</span><span class="token punctuation">(</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">0xffff</span><span class="token punctuation">)</span><span class="token punctuation">,</span> HEX<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 尝试连接</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>client<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>clientId<span class="token punctuation">.</span><span class="token function">c_str</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> mqtt_user<span class="token punctuation">,</span> mqtt_password<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"连接成功"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 订阅主题</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span><span class="token string">"esp32/test"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span><span class="token string">"esp32/control"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"失败,错误代码: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>client<span class="token punctuation">.</span><span class="token function">state</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">" 5秒后重试..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token function">delay</span><span class="token punctuation">(</span><span class="token number">5000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">115200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token function">setup_wifi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setServer</span><span class="token punctuation">(</span>mqtt_server<span class="token punctuation">,</span> mqtt_port<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setCallback</span><span class="token punctuation">(</span>callback<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>client<span class="token punctuation">.</span><span class="token function">connected</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">reconnect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 发布消息示例</span>
|
|
|
|
|
|
<span class="token keyword">static</span> <span class="token keyword">unsigned</span> <span class="token keyword">long</span> lastMsg <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">millis</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> lastMsg <span class="token operator">></span> <span class="token number">5000</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
lastMsg <span class="token operator">=</span> <span class="token function">millis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
String message <span class="token operator">=</span> <span class="token string">"Hello from ESP32 - "</span> <span class="token operator">+</span> <span class="token function">String</span><span class="token punctuation">(</span><span class="token function">millis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"esp32/status"</span><span class="token punctuation">,</span> message<span class="token punctuation">.</span><span class="token function">c_str</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"消息已发布: "</span> <span class="token operator">+</span> message<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span></pre><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _33882ae"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _28d7e84"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><h2><span>3. 高级功能示例</span></h2><h3><span>3.1 带 QoS 和保留消息的发布</span></h3><div class="md-code-block md-code-block-light"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">cpp</span></div><div class="d2a24f03 _246a029"><div class="efa13877"><button role="button" aria-disabled="false" class="ds-atom-button ds-text-button ds-text-button--with-icon" style="margin-right: 4px;"><div class="ds-icon ds-atom-button__icon" style="font-size: 16px; width: 16px; height: 16px; margin-right: 3px;"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.14926 4.02039C7.11194 4.02039 7.8798 4.02023 8.49594 4.07605C9.12125 4.13276 9.65789 4.25194 10.1414 4.53113C10.7201 4.86536 11.2008 5.34597 11.535 5.92468C11.8142 6.40824 11.9334 6.94488 11.9901 7.57019C12.0459 8.18631 12.0457 8.95426 12.0457 9.91687C12.0457 10.8795 12.0459 11.6474 11.9901 12.2635C11.9334 12.8889 11.8142 13.4255 11.535 13.9091C11.2008 14.4877 10.7201 14.9684 10.1414 15.3026C9.65789 15.5818 9.12125 15.701 8.49594 15.7577C7.87981 15.8135 7.11193 15.8134 6.14926 15.8134C5.18664 15.8134 4.41871 15.8135 3.80258 15.7577C3.17727 15.701 2.64063 15.5818 2.15707 15.3026C1.57837 14.9684 1.09775 14.4877 0.763519 13.9091C0.484335 13.4255 0.365153 12.8889 0.308441 12.2635C0.252618 11.6474 0.252777 10.8795 0.252777 9.91687C0.252777 8.95425 0.252634 8.18632 0.308441 7.57019C0.365153 6.94488 0.484335 6.40824 0.763519 5.92468C1.09774 5.34596 1.57836 4.86535 2.15707 4.53113C2.64063 4.25194 3.17727 4.13276 3.80258 4.07605C4.41871 4.02024 5.18663 4.02039 6.14926 4.02039ZM6.14926 5.37781C5.16178 5.37781 4.46631 5.37768 3.92563 5.42664C3.39431 5.47479 3.07856 5.5658 2.83578 5.70593C2.46317 5.92112 2.15351 6.23077 1.93832 6.60339C1.7982 6.84617 1.70718 7.16192 1.65903 7.69324C1.61007 8.23391 1.6102 8.9294 1.6102 9.91687C1.6102 10.9044 1.61006 11.5998 1.65903 12.1405C1.70718 12.6718 1.7982 12.9876 1.93832 13.2303C2.15352 13.6029 2.46318 13.9126 2.83578 14.1278C3.07856 14.2679 3.39431 14.3589 3.92563 14.4071C4.46631 14.4561 5.16179 14.4559 6.14926 14.4559C7.13679 14.4559 7.83221 14.4561 8.37289 14.4071C8.90422 14.3589 9.21996 14.2679 9.46274 14.1278C9.83532 13.9126 10.145 13.6029 10.3602 13.2303C10.5003 12.9876 10.5913 12.6718 10.6395 12.1405C10.6885 11.5998 10.6883 10.9044 10.6883 9.91687C10.6883 8.92941 10.6885 8.23391 10.6395 7.69324C10.5913 7.16192 10.5003 6.84617 10.3602 6.60339C10.145 6.23078 9.83533 5.92113 9.46274 5.70593C9.21996 5.5658 8.90421 5.47479 8.37289 5.42664C7.83221 5.37766 7.13679 5.37781 6.14926 5.37781ZM9.80161 0.368042C10.7638 0.368042 11.5314 0.367947 12.1473 0.423706C12.7725 0.480374 13.3093 0.598826 13.7928 0.877808C14.3716 1.21198 14.8521 1.69361 15.1864 2.27234C15.4655 2.75581 15.5857 3.29171 15.6424 3.91687C15.6983 4.53307 15.6971 5.30167 15.6971 6.26453V7.82996C15.6971 8.29271 15.6989 8.59 15.6649 8.84851C15.4668 10.3526 14.4009 11.5739 12.9832 11.9989V10.5468C13.6973 10.1904 14.2104 9.49669 14.3192 8.67175C14.3387 8.52354 14.3407 8.33586 14.3407 7.82996V6.26453C14.3407 5.27713 14.3398 4.58155 14.2909 4.04089C14.2427 3.50975 14.1526 3.19379 14.0125 2.95105C13.7974 2.57856 13.4875 2.26876 13.1151 2.05359C12.8723 1.91353 12.5564 1.82244 12.0252 1.77429C11.4847 1.72534 10.7888 1.72546 9.80161 1.72546H7.71469C6.75617 1.72565 5.92662 2.27704 5.52328 3.07898H4.07016C4.54218 1.51138 5.99317 0.368253 7.71469 0.368042H9.80161Z" fill="currentColor"></path></svg></di
|
|
|
|
|
|
<span class="token comment">// QoS 0 - 最多一次</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"esp32/temp"</span><span class="token punctuation">,</span> <span class="token string">"25.5"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// QoS 1 - 至少一次</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"esp32/humidity"</span><span class="token punctuation">,</span> <span class="token string">"60.2"</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// QoS 2 - 精确一次(需要服务器支持)</span>
|
|
|
|
|
|
<span class="token comment">// PubSubClient 默认支持 QoS 0 和 1</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 发布保留消息</span>
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">publishRetainedMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
boolean retained <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"esp32/device/status"</span><span class="token punctuation">,</span> <span class="token string">"online"</span><span class="token punctuation">,</span> retained<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span></pre><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _33882ae"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _28d7e84"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><h3><span>3.2 完整的主题管理</span></h3><div class="md-code-block md-code-block-light"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">cpp</span></div><div class="d2a24f03 _246a029"><div class="efa13877"><button role="button" aria-disabled="false" class="ds-atom-button ds-text-button ds-text-button--with-icon" style="margin-right: 4px;"><div class="ds-icon ds-atom-button__icon" style="font-size: 16px; width: 16px; height: 16px; margin-right: 3px;"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.14926 4.02039C7.11194 4.02039 7.8798 4.02023 8.49594 4.07605C9.12125 4.13276 9.65789 4.25194 10.1414 4.53113C10.7201 4.86536 11.2008 5.34597 11.535 5.92468C11.8142 6.40824 11.9334 6.94488 11.9901 7.57019C12.0459 8.18631 12.0457 8.95426 12.0457 9.91687C12.0457 10.8795 12.0459 11.6474 11.9901 12.2635C11.9334 12.8889 11.8142 13.4255 11.535 13.9091C11.2008 14.4877 10.7201 14.9684 10.1414 15.3026C9.65789 15.5818 9.12125 15.701 8.49594 15.7577C7.87981 15.8135 7.11193 15.8134 6.14926 15.8134C5.18664 15.8134 4.41871 15.8135 3.80258 15.7577C3.17727 15.701 2.64063 15.5818 2.15707 15.3026C1.57837 14.9684 1.09775 14.4877 0.763519 13.9091C0.484335 13.4255 0.365153 12.8889 0.308441 12.2635C0.252618 11.6474 0.252777 10.8795 0.252777 9.91687C0.252777 8.95425 0.252634 8.18632 0.308441 7.57019C0.365153 6.94488 0.484335 6.40824 0.763519 5.92468C1.09774 5.34596 1.57836 4.86535 2.15707 4.53113C2.64063 4.25194 3.17727 4.13276 3.80258 4.07605C4.41871 4.02024 5.18663 4.02039 6.14926 4.02039ZM6.14926 5.37781C5.16178 5.37781 4.46631 5.37768 3.92563 5.42664C3.39431 5.47479 3.07856 5.5658 2.83578 5.70593C2.46317 5.92112 2.15351 6.23077 1.93832 6.60339C1.7982 6.84617 1.70718 7.16192 1.65903 7.69324C1.61007 8.23391 1.6102 8.9294 1.6102 9.91687C1.6102 10.9044 1.61006 11.5998 1.65903 12.1405C1.70718 12.6718 1.7982 12.9876 1.93832 13.2303C2.15352 13.6029 2.46318 13.9126 2.83578 14.1278C3.07856 14.2679 3.39431 14.3589 3.92563 14.4071C4.46631 14.4561 5.16179 14.4559 6.14926 14.4559C7.13679 14.4559 7.83221 14.4561 8.37289 14.4071C8.90422 14.3589 9.21996 14.2679 9.46274 14.1278C9.83532 13.9126 10.145 13.6029 10.3602 13.2303C10.5003 12.9876 10.5913 12.6718 10.6395 12.1405C10.6885 11.5998 10.6883 10.9044 10.6883 9.91687C10.6883 8.92941 10.6885 8.23391 10.6395 7.69324C10.5913 7.16192 10.5003 6.84617 10.3602 6.60339C10.145 6.23078 9.83533 5.92113 9.46274 5.70593C9.21996 5.5658 8.90421 5.47479 8.37289 5.42664C7.83221 5.37766 7.13679 5.37781 6.14926 5.37781ZM9.80161 0.368042C10.7638 0.368042 11.5314 0.367947 12.1473 0.423706C12.7725 0.480374 13.3093 0.598826 13.7928 0.877808C14.3716 1.21198 14.8521 1.69361 15.1864 2.27234C15.4655 2.75581 15.5857 3.29171 15.6424 3.91687C15.6983 4.53307 15.6971 5.30167 15.6971 6.26453V7.82996C15.6971 8.29271 15.6989 8.59 15.6649 8.84851C15.4668 10.3526 14.4009 11.5739 12.9832 11.9989V10.5468C13.6973 10.1904 14.2104 9.49669 14.3192 8.67175C14.3387 8.52354 14.3407 8.33586 14.3407 7.82996V6.26453C14.3407 5.27713 14.3398 4.58155 14.2909 4.04089C14.2427 3.50975 14.1526 3.19379 14.0125 2.95105C13.7974 2.57856 13.4875 2.26876 13.1151 2.05359C12.8723 1.91353 12.5564 1.82244 12.0252 1.77429C11.4847 1.72534 10.7888 1.72546 9.80161 1.72546H7.71469C6.75617 1.72565 5.92662 2.27704 5.52328 3.07898H4.07016C4.54218 1.51138 5.99317 0.368253 7.71469 0.368042H9.80161Z" fill="currentColor"></path></svg></div><span class=""><span class="code-info-button-text"><EFBFBD>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> TOPIC_STATUS <span class="token operator">=</span> <span class="token string">"esp32/status"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> TOPIC_TEMP <span class="token operator">=</span> <span class="token string">"esp32/sensor/temperature"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> TOPIC_HUMIDITY <span class="token operator">=</span> <span class="token string">"esp32/sensor/humidity"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> TOPIC_CONTROL <span class="token operator">=</span> <span class="token string">"esp32/control/#"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">setupTopics</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token comment">// 订阅多个主题</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span>TOPIC_CONTROL<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span><span class="token string">"esp32/command/#"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">callback</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token operator">*</span> topic<span class="token punctuation">,</span> byte<span class="token operator">*</span> payload<span class="token punctuation">,</span> <span class="token keyword">unsigned</span> <span class="token keyword">int</span> length<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
String message<span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
message <span class="token operator">+=</span> <span class="token punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span>payload<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"主题: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>topic<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">" | 消息: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 根据主题处理消息</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">String</span><span class="token punctuation">(</span>topic<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token string">"esp32/control/led"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>message <span class="token operator">==</span> <span class="token string">"ON"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">digitalWrite</span><span class="token punctuation">(</span>LED_BUILTIN<span class="token punctuation">,</span> HIGH<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"esp32/status/led"</span><span class="token punctuation">,</span> <span class="token string">"ON"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>message <span class="token operator">==</span> <span class="token string">"OFF"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">digitalWrite</span><span class="token punctuation">(</span>LED_BUILTIN<span class="token punctuation">,</span> LOW<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"esp32/status/led"</span><span class="token punctuation">,</span> <span class="token string">"OFF"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span></pre><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _33882ae"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _28d7e84"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><h3><span>3.3 带 JSON 的数据发布</span></h3><div class="md-code-block md-code-block-light"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">cpp</span></div><div class="d2a24f03 _246a029"><div class="efa13877"><button role="button" aria-disabled="false" class="ds-atom-button ds-text-button ds-text-button--with-icon" style="margin-right: 4px;"><div class="ds-icon ds-atom-button__icon" style="font-size: 16px; width: 16px; height: 16px; margin-right: 3px;"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.14926 4.02039C7.11194 4.02039 7.8798 4.02023 8.49594 4.07605C9.12125 4.13276 9.65789 4.25194 10.1414 4.53113C10.7201 4.86536 11.2008 5.34597 11.535 5.92468C11.8142 6.40824 11.9334 6.94488 11.9901 7.57019C12.0459 8.18631 12.0457 8.95426 12.0457 9.91687C12.0457 10.8795 12.0459 11.6474 11.9901 12.2635C11.9334 12.8889 11.8142 13.4255 11.535 13.9091C11.2008 14.4877 10.7201 14.9684 10.1414 15.3026C9.65789 15.5818 9.12125 15.701 8.49594 15.7577C7.87981 15.8135 7.11193 15.8134 6.14926 15.8134C5.18664 15.8134 4.41871 15.8135 3.80258 15.7577C3.17727 15.701 2.64063 15.5818 2.15707 15.3026C1.57837 14.9684 1.09775 14.4877 0.763519 13.9091C0.484335 13.4255 0.365153 12.8889 0.308441 12.2635C0.252618 11.6474 0.252777 10.8795 0.252777 9.91687C0.252777 8.95425 0.252634 8.18632 0.308441 7.57019C0.365153 6.94488 0.484335 6.40824 0.763519 5.92468C1.09774 5.34596 1.57836 4.86535 2.15707 4.53113C2.64063 4.25194 3.17727 4.13276 3.80258 4.07605C4.41871 4.02024 5.18663 4.02039 6.14926 4.02039ZM6.14926 5.37781C5.16178 5.37781 4.46631 5.37768 3.92563 5.42664C3.39431 5.47479 3.07856 5.5658 2.83578 5.70593C2.46317 5.92112 2.15351 6.23077 1.93832 6.60339C1.7982 6.84617 1.70718 7.16192 1.65903 7.69324C1.61007 8.23391 1.6102 8.9294 1.6102 9.91687C1.6102 10.9044 1.61006 11.5998 1.65903 12.1405C1.70718 12.6718 1.7982 12.9876 1.93832 13.2303C2.15352 13.6029 2.46318 13.9126 2.83578 14.1278C3.07856 14.2679 3.39431 14.3589 3.92563 14.4071C4.46631 14.4561 5.16179 14.4559 6.14926 14.4559C7.13679 14.4559 7.83221 14.4561 8.37289 14.4071C8.90422 14.3589 9.21996 14.2679 9.46274 14.1278C9.83532 13.9126 10.145 13.6029 10.3602 13.2303C10.5003 12.9876 10.5913 12.6718 10.6395 12.1405C10.6885 11.5998 10.6883 10.9044 10.6883 9.91687C10.6883 8.92941 10.6885 8.23391 10.6395 7.69324C10.5913 7.16192 10.5003 6.84617 10.3602 6.60339C10.145 6.23078 9.83533 5.92113 9.46274 5.70593C9.21996 5.5658 8.90421 5.47479 8.37289 5.42664C7.83221 5.37766 7.13679 5.37781 6.14926 5.37781ZM9.80161 0.368042C10.7638 0.368042 11.5314 0.367947 12.1473 0.423706C12.7725 0.480374 13.3093 0.598826 13.7928 0.877808C14.3716 1.21198 14.8521 1.69361 15.1864 2.27234C15.4655 2.75581 15.5857 3.29171 15.6424 3.91687C15.6983 4.53307 15.6971 5.30167 15.6971 6.26453V7.82996C15.6971 8.29271 15.6989 8.59 15.6649 8.84851C15.4668 10.3526 14.4009 11.5739 12.9832 11.9989V10.5468C13.6973 10.1904 14.2104 9.49669 14.3192 8.67175C14.3387 8.52354 14.3407 8.33586 14.3407 7.82996V6.26453C14.3407 5.27713 14.3398 4.58155 14.2909 4.04089C14.2427 3.50975 14.1526 3.19379 14.0125 2.95105C13.7974 2.57856 13.4875 2.26876 13.1151 2.05359C12.8723 1.91353 12.5564 1.82244 12.0252 1.77429C11.4847 1.72534 10.7888 1.72546 9.80161 1.72546H7.71469C6.75617 1.72565 5.92662 2.27704 5.52328 3.07898H4.07016C4.54218 1.51138 5.99317 0.368253 7.71469 0.368042H9.80161Z" fill="currentColor"></path></svg></div><span class=""><span class="code-info-button-text
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">publishSensorData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
StaticJsonDocument<span class="token operator"><</span><span class="token number">200</span><span class="token operator">></span> doc<span class="token punctuation">;</span>
|
|
|
|
|
|
doc<span class="token punctuation">[</span><span class="token string">"device"</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">"ESP32_001"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
doc<span class="token punctuation">[</span><span class="token string">"temperature"</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">readTemperature</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
doc<span class="token punctuation">[</span><span class="token string">"humidity"</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">readHumidity</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
doc<span class="token punctuation">[</span><span class="token string">"timestamp"</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">millis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
String jsonString<span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token function">serializeJson</span><span class="token punctuation">(</span>doc<span class="token punctuation">,</span> jsonString<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"esp32/sensor/data"</span><span class="token punctuation">,</span> jsonString<span class="token punctuation">.</span><span class="token function">c_str</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span></pre><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _33882ae"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _28d7e84"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><h2><span>4. 安全连接 (TLS/SSL)</span></h2><div class="md-code-block md-code-block-light"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">cpp</span></div><div class="d2a24f03 _246a029"><div class="efa13877"><button role="button" aria-disabled="false" class="ds-atom-button ds-text-button ds-text-button--with-icon" style="margin-right: 4px;"><div class="ds-icon ds-atom-button__icon" style="font-size: 16px; width: 16px; height: 16px; margin-right: 3px;"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.14926 4.02039C7.11194 4.02039 7.8798 4.02023 8.49594 4.07605C9.12125 4.13276 9.65789 4.25194 10.1414 4.53113C10.7201 4.86536 11.2008 5.34597 11.535 5.92468C11.8142 6.40824 11.9334 6.94488 11.9901 7.57019C12.0459 8.18631 12.0457 8.95426 12.0457 9.91687C12.0457 10.8795 12.0459 11.6474 11.9901 12.2635C11.9334 12.8889 11.8142 13.4255 11.535 13.9091C11.2008 14.4877 10.7201 14.9684 10.1414 15.3026C9.65789 15.5818 9.12125 15.701 8.49594 15.7577C7.87981 15.8135 7.11193 15.8134 6.14926 15.8134C5.18664 15.8134 4.41871 15.8135 3.80258 15.7577C3.17727 15.701 2.64063 15.5818 2.15707 15.3026C1.57837 14.9684 1.09775 14.4877 0.763519 13.9091C0.484335 13.4255 0.365153 12.8889 0.308441 12.2635C0.252618 11.6474 0.252777 10.8795 0.252777 9.91687C0.252777 8.95425 0.252634 8.18632 0.308441 7.57019C0.365153 6.94488 0.484335 6.40824 0.763519 5.92468C1.09774 5.34596 1.57836 4.86535 2.15707 4.53113C2.64063 4.25194 3.17727 4.13276 3.80258 4.07605C4.41871 4.02024 5.18663 4.02039 6.14926 4.02039ZM6.14926 5.37781C5.16178 5.37781 4.46631 5.37768 3.92563 5.42664C3.39431 5.47479 3.07856 5.5658 2.83578 5.70593C2.46317 5.92112 2.15351 6.23077 1.93832 6.60339C1.7982 6.84617 1.70718 7.16192 1.65903 7.69324C1.61007 8.23391 1.6102 8.9294 1.6102 9.91687C1.6102 10.9044 1.61006 11.5998 1.65903 12.1405C1.70718 12.6718 1.7982 12.9876 1.93832 13.2303C2.15352 13.6029 2.46318 13.9126 2.83578 14.1278C3.07856 14.2679 3.39431 14.3589 3.92563 14.4071C4.46631 14.4561 5.16179 14.4559 6.14926 14.4559C7.13679 14.4559 7.83221 14.4561 8.37289 14.4071C8.90422 14.3589 9.21996 14.2679 9.46274 14.1278C9.83532 13.9126 10.145 13.6029 10.3602 13.2303C10.5003 12.9876 10.5913 12.6718 10.6395 12.1405C10.6885 11.5998 10.6883 10.9044 10.6883 9.91687C10.6883 8.92941 10.6885 8.23391 10.6395 7.69324C10.5913 7.16192 10.5003 6.84617 10.3602 6.60339C10.145 6.23078 9.83533 5.92113 9.46274 5.70593C9.21996 5.5658 8.90421 5.47479 8.37289 5.42664C7.83221 5.37766 7.13679 5.37781 6.14926 5.37781ZM9.80161 0.368042C10.7638 0.368042 11.5314 0.367947 12.1473 0.423706C12.7725 0.480374 13.3093 0.598826 13.7928 0.877808C14.3716 1.21198 14.8521 1.69361 15.1864 2.27234C15.4655 2.75581 15.5857 3.29171 15.6424 3.91687C15.6983 4.53307 15.6971 5.30167 15.6971 6.26453V7.82996C15.6971 8.29271 15.6989 8.59 15.6649 8.84851C15.4668 10.3526 14.4009 11.5739 12.9832 11.9989V10.5468C13.6973 10.1904 14.2104 9.49669 14.3192 8.67175C14.3387 8.52354 14.3407 8.33586 14.3407 7.82996V6.26453C14.3407 5.27713 14.3398 4.58155 14.2909 4.04089C14.2427 3.50975 14.1526 3.19379 14.0125 2.95105C13.7974 2.57856 13.4875 2.26876 13.1151 2.05359C12.8723 1.91353 12.5564 1.82244 12.0252 1.77429C11.4847 1.72534 10.7888 1.72546 9.80161 1.72546H7.71469C6.75617 1.72565 5.92662 2.27704 5.52328 3.07898H4.07016C4.54218 1.51138 5.99317 0.368253 7.71469 0.368042H9.80161Z" fill="currentColor"></path></svg></div><span class=""><span class="code-info-button-text"><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
WiFiClientSecure espClient<span class="token punctuation">;</span>
|
|
|
|
|
|
PubSubClient <span class="token function">client</span><span class="token punctuation">(</span>espClient<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token comment">// ... WiFi 连接代码</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 设置 TLS</span>
|
|
|
|
|
|
espClient<span class="token punctuation">.</span><span class="token function">setCACert</span><span class="token punctuation">(</span>root_ca<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 设置 CA 证书</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 或者跳过证书验证(仅用于测试)</span>
|
|
|
|
|
|
<span class="token comment">// espClient.setInsecure();</span>
|
|
|
|
|
|
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setServer</span><span class="token punctuation">(</span>mqtt_server<span class="token punctuation">,</span> <span class="token number">8883</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// SSL 端口</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> root_ca <span class="token operator">=</span> \
|
|
|
|
|
|
<span class="token string">"-----BEGIN CERTIFICATE-----\n"</span> \
|
|
|
|
|
|
<span class="token string">"你的 CA 证书内容\n"</span> \
|
|
|
|
|
|
<span class="token string">"-----END CERTIFICATE-----\n"</span><span class="token punctuation">;</span></pre><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _33882ae"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _28d7e84"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><h2><span>5. 完整的物联网应用示例</span></h2><div class="md-code-block md-code-block-light"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">cpp</span></div><div class="d2a24f03 _246a029"><div class="efa13877"><button role="button" aria-disabled="false" class="ds-atom-button ds-text-button ds-text-button--with-icon" style="margin-right: 4px;"><div class="ds-icon ds-atom-button__icon" style="font-size: 16px; width: 16px; height: 16px; margin-right: 3px;"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.14926 4.02039C7.11194 4.02039 7.8798 4.02023 8.49594 4.07605C9.12125 4.13276 9.65789 4.25194 10.1414 4.53113C10.7201 4.86536 11.2008 5.34597 11.535 5.92468C11.8142 6.40824 11.9334 6.94488 11.9901 7.57019C12.0459 8.18631 12.0457 8.95426 12.0457 9.91687C12.0457 10.8795 12.0459 11.6474 11.9901 12.2635C11.9334 12.8889 11.8142 13.4255 11.535 13.9091C11.2008 14.4877 10.7201 14.9684 10.1414 15.3026C9.65789 15.5818 9.12125 15.701 8.49594 15.7577C7.87981 15.8135 7.11193 15.8134 6.14926 15.8134C5.18664 15.8134 4.41871 15.8135 3.80258 15.7577C3.17727 15.701 2.64063 15.5818 2.15707 15.3026C1.57837 14.9684 1.09775 14.4877 0.763519 13.9091C0.484335 13.4255 0.365153 12.8889 0.308441 12.2635C0.252618 11.6474 0.252777 10.8795 0.252777 9.91687C0.252777 8.95425 0.252634 8.18632 0.308441 7.57019C0.365153 6.94488 0.484335 6.40824 0.763519 5.92468C1.09774 5.34596 1.57836 4.86535 2.15707 4.53113C2.64063 4.25194 3.17727 4.13276 3.80258 4.07605C4.41871 4.02024 5.18663 4.02039 6.14926 4.02039ZM6.14926 5.37781C5.16178 5.37781 4.46631 5.37768 3.92563 5.42664C3.39431 5.47479 3.07856 5.5658 2.83578 5.70593C2.46317 5.92112 2.15351 6.23077 1.93832 6.60339C1.7982 6.84617 1.70718 7.16192 1.65903 7.69324C1.61007 8.23391 1.6102 8.9294 1.6102 9.91687C1.6102 10.9044 1.61006 11.5998 1.65903 12.1405C1.70718 12.6718 1.7982 12.9876 1.93832 13.2303C2.15352 13.6029 2.46318 13.9126 2.83578 14.1278C3.07856 14.2679 3.39431 14.3589 3.92563 14.4071C4.46631 14.4561 5.16179 14.4559 6.14926 14.4559C7.13679 14.4559 7.83221 14.4561 8.37289 14.4071C8.90422 14.3589 9.21996 14.2679 9.46274 14.1278C9.83532 13.9126 10.145 13.6029 10.3602 13.2303C10.5003 12.9876 10.5913 12.6718 10.6395 12.1405C10.6885 11.5998 10.6883 10.9044 10.6883 9.91687C10.6883 8.92941 10.6885 8.23391 10.6395 7.69324C10.5913 7.16192 10.5003 6.84617 10.3602 6.60339C10.145 6.23078 9.83533 5.92113 9.46274 5.70593C9.21996 5.5658 8.90421 5.47479 8.37289 5.42664C7.83221 5.37766 7.13679 5.37781 6.14926 5.37781ZM9.80161 0.368042C10.7638 0.368042 11.5314 0.367947 12.1473 0.423706C12.7725 0.480374 13.3093 0.598826 13.7928 0.877808C14.3716 1.21198 14.8521 1.69361 15.1864 2.27234C15.4655 2.75581 15.5857 3.29171 15.6424 3.91687C15.6983 4.53307 15.6971 5.30167 15.6971 6.26453V7.82996C15.6971 8.29271 15.6989 8.59 15.6649 8.84851C15.4668 10.3526 14.4009 11.5739 12.9832 11.9989V10.5468C13.6973 10.1904 14.2104 9.49669 14.3192 8.67175C14.3387 8.52354 14.3407 8.33586 14.3407 7.82996V6.26453C14.3407 5.27713 14.3398 4.58155 14.2909 4.04089C14.2427 3.50975 14.1526 3.19379 14.0125 2.95105C13.7974 2.57856 13.4875 2.26876 13.1151 2.05359C12.8723 1.91353 12.5564 1.82244 12.0252 1.77429C11.4847 1.72534 10.7888 1.72546 9.80161 1.72546H7.71469C6.75617 1.72565 5.92662 2.27704 5.52328 3.07898H4.07016C4.54218 1.51138 5.99317 0.368253 7.71469 0.368042H9.80161Z" fill="currentColor">
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><PubSubClient.h></span></span>
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><DHT.h></span></span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">DHT_PIN</span> <span class="token expression"><span class="token number">4</span></span></span>
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">DHT_TYPE</span> <span class="token expression">DHT22</span></span>
|
|
|
|
|
|
|
|
|
|
|
|
DHT <span class="token function">dht</span><span class="token punctuation">(</span>DHT_PIN<span class="token punctuation">,</span> DHT_TYPE<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 配置信息</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> ssid <span class="token operator">=</span> <span class="token string">"你的WiFi"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> password <span class="token operator">=</span> <span class="token string">"你的密码"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> mqtt_server <span class="token operator">=</span> <span class="token string">"broker.hivemq.com"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
WiFiClient espClient<span class="token punctuation">;</span>
|
|
|
|
|
|
PubSubClient <span class="token function">client</span><span class="token punctuation">(</span>espClient<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">unsigned</span> <span class="token keyword">long</span> lastSensorRead <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">const</span> <span class="token keyword">long</span> sensorInterval <span class="token operator">=</span> <span class="token number">30000</span><span class="token punctuation">;</span> <span class="token comment">// 30秒</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">readAndPublishSensorData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token keyword">float</span> temperature <span class="token operator">=</span> dht<span class="token punctuation">.</span><span class="token function">readTemperature</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">float</span> humidity <span class="token operator">=</span> dht<span class="token punctuation">.</span><span class="token function">readHumidity</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">isnan</span><span class="token punctuation">(</span>temperature<span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token operator">!</span><span class="token function">isnan</span><span class="token punctuation">(</span>humidity<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token keyword">char</span> tempStr<span class="token punctuation">[</span><span class="token number">8</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">char</span> humStr<span class="token punctuation">[</span><span class="token number">8</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token function">dtostrf</span><span class="token punctuation">(</span>temperature<span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> tempStr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token function">dtostrf</span><span class="token punctuation">(</span>humidity<span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> humStr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"iot/sensor/temperature"</span><span class="token punctuation">,</span> tempStr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span><span class="token string">"iot/sensor/humidity"</span><span class="token punctuation">,</span> humStr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"传感器数据已发布: 温度=%s°C, 湿度=%s%%\n"</span><span class="token punctuation">,</span> tempStr<span class="token punctuation">,</span> humStr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token number">115200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
dht<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token function">setup_wifi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setServer</span><span class="token punctuation">(</span>mqtt_server<span class="token punctuation">,</span> <span class="token number">1883</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setCallback</span><span class="token punctuation">(</span>callback<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token function">pinMode</span><span class="token punctuation">(</span>LED_BUILTIN<span class="token punctuation">,</span> OUTPUT<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>client<span class="token punctuation">.</span><span class="token function">connected</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">reconnect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 定期读取传感器数据</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">millis</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> lastSensorRead <span class="token operator">></span> sensorInterval<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
lastSensorRead <span class="token operator">=</span> <span class="token function">millis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token function">readAndPublishSensorData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span></pre><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _33882ae"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _28d7e84"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><h2><span>6. 常见问题解决</span></h2><ol start="1"><li><p class="ds-markdown-paragraph"><strong><span>连接失败</span></strong><span>:检查 WiFi 和 MQTT 服务器配置</span></p></li><li><p class="ds-markdown-paragraph"><strong><span>频繁断开</span></strong><span>:调整 </span><code>client.setKeepAlive(60)</code><span> 和 </span><code>client.setSocketTimeout(30)</code></p></li><li><p class="ds-markdown-paragraph"><strong><span>内存不足</span></strong><span>:减少消息大小或发布频率</span></p></li><li><p class="ds-markdown-paragraph"><strong><span>QoS 问题</span></strong><span>:确认服务器支持的 QoS 级别</span></p></li></ol><h2><span>7. 重要配置参数</span></h2><div class="md-code-block md-code-block-light"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">cpp</span></div><div class="d2a24f03 _246a029"><div class="efa13877"><button role="button" aria-disabled="false" class="ds-atom-button ds-text-button ds-text-button--with-icon" style="margin-right: 4px;"><div class="ds-icon ds-atom-button__icon" style="font-size: 16px; width: 16px; height: 16px; margin-right: 3px;"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.14926 4.02039C7.11194 4.02039 7.8798 4.02023 8.49594 4.07605C9.12125 4.13276 9.65789 4.25194 10.1414 4.53113C10.7201 4.86536 11.2008 5.34597 11.535 5.92468C11.8142 6.40824 11.9334 6.94488 11.9901 7.57019C12.0459 8.18631 12.0457 8.95426 12.0457 9.91687C12.0457 10.8795 12.0459 11.6474 11.9901 12.2635C11.9334 12.8889 11.8142 13.4255 11.535 13.9091C11.2008 14.4877 10.7201 14.9684 10.1414 15.3026C9.65789 15.5818 9.12125 15.701 8.49594 15.7577C7.87981 15.8135 7.11193 15.8134 6.14926 15.8134C5.18664 15.8134 4.41871 15.8135 3.80258 15.7577C3.17727 15.701 2.64063 15.5818 2.15707 15.3026C1.57837 14.9684 1.09775 14.4877 0.763519 13.9091C0.484335 13.4255 0.365153 12.8889 0.308441 12.2635C0.252618 11.6474 0.252777 10.8795 0.252777 9.91687C0.252777 8.95425 0.252634 8.18632 0.308441 7.57019C0.365153 6.94488 0.484335 6.40824 0.763519 5.92468C1.09774 5.34596 1.57836 4.86535 2.15707 4.53113C2.64063 4.25194 3.17727 4.13276 3.80258 4.07605C4.41871 4.02024 5.18663 4.02039 6.14926 4.02039ZM6.14926 5.37781C5.16178 5.37781 4.46631 5.37768 3.92563 5.42664C3.39431 5.47479 3.07856 5.5658 2.83578 5.70593C2.46317 5.92112 2.15351 6.23077 1.93832 6.60339C1.7982 6.84617 1.70718 7.16192 1.65903 7.69324C1.61007 8.23391 1.6102 8.9294 1.6102 9.91687C1.6102 10.9044 1.61006 11.5998 1.65903 12.1405C1.70718 12.6718 1.7982 12.9876 1.93832 13.2303C2.15352 13.6029 2.46318 13.9126 2.83578 14.1278C3.07856 14.2679 3.39431 14.3589 3.92563 14.4071C4.46631 14.4561 5.16179 14.4559 6.14926 14.4559C7.13679 14.4559 7.83221 14.4561 8.37289 14.4071C8.90422 14.3589 9.21996 14.2679 9.46274 14.1278C9.83532 13.9126 10.145 13.6029 10.3602 13.2303C10.5003 12.9876 10.5913 12.6718 10.6395 12.1405C10.6885 11.5998 10.6883 10.9044 10.6883 9.91687C10.6883 8.92941 10.6885 8.23391 10.6395 7.69324C10.5913 7.16192 10.5003 6.84617 10.3602 6.60339C10.145 6.23078 9.83533 5.92113 9.46274 5.70593C9.21996 5.5658 8.90421 5.47479 8.37289 5.42664C7.83221 5.37766 7.13679 5.37781 6.14926 5.37781ZM9.80161 0.368042C10.7638 0.368042 11.5314 0.367947 12.1473 0.423706C12.7725 0.480374 13.3093 0.598826 13.7928 0.877808C14.3716 1.21198 14.8521 1.69361 15.1864 2.27234C15.4655 2.75581 15.5857 3.29171 15.6424 3.91687C15.6983 4.53307 15.6971 5.30167 15.6971
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">setupMqtt</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setServer</span><span class="token punctuation">(</span>mqtt_server<span class="token punctuation">,</span> mqtt_port<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setCallback</span><span class="token punctuation">(</span>callback<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setKeepAlive</span><span class="token punctuation">(</span><span class="token number">60</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 保活时间</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setSocketTimeout</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 套接字超时</span>
|
|
|
|
|
|
client<span class="token punctuation">.</span><span class="token function">setBufferSize</span><span class="token punctuation">(</span><span class="token number">1024</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 缓冲区大小</span>
|
|
|
|
|
|
<span class="token punctuation">}</span></pre><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _33882ae"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="_9bc997d _28d7e84"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><p class="ds-markdown-paragraph"><span>这个指南涵盖了 ESP32 Arduino MQTT Client 的主要用法,你可以根据具体需求进行调整和扩展。</span></p></div></div><div class="ds-theme" style="--ds-rgb-hover: 245 245 245; --ds-rgb-primary: 77 107 254; --ds-button-hover-color: #2563EB; --ds-bordered-secondary-button-color: var(--dsr-text-1); --ds-input-prefix-color: var(--dsr-text-1);"></div><div class="ds-flex _0a3d93b" style="align-items: center; gap: 10px;"><div class="ds-flex _965abe9 _54866f7" style="align-items: center; gap: 10px;"><div class="ds-icon-button db183363" tabindex="-1" role="button" aria-disabled="false" style="--hover-size: 28px; width: 28px; height: 28px;"><div class="ds-icon-button__hover-bg"></div><div class="ds-icon" style="font-size: 16px; width: 16px; height: 16px;"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.14926 4.02039C7.11194 4.02039 7.8798 4.02023 8.49594 4.07605C9.12125 4.13276 9.65789 4.25194 10.1414 4.53113C10.7201 4.86536 11.2008 5.34597 11.535 5.92468C11.8142 6.40824 11.9334 6.94488 11.9901 7.57019C12.0459 8.18631 12.0457 8.95426 12.0457 9.91687C12.0457 10.8795 12.0459 11.6474 11.9901 12.2635C11.9334 12.8889 11.8142 13.4255 11.535 13.9091C11.2008 14.4877 10.7201 14.9684 10.1414 15.3026C9.65789 15.5818 9.12125 15.701 8.49594 15.7577C7.87981 15.8135 7.11193 15.8134 6.14926 15.8134C5.18664 15.8134 4.41871 15.8135 3.80258 15.7577C3.17727 15.701 2.64063 15.5818 2.15707 15.3026C1.57837 14.9684 1.09775 14.4877 0.763519 13.9091C0.484335 13.4255 0.365153 12.8889 0.308441 12.2635C0.252618 11.6474 0.252777 10.8795 0.252777 9.91687C0.252777 8.95425 0.252634 8.18632 0.308441 7.57019C0.365153 6.94488 0.484335 6.40824 0.763519 5.92468C1.09774 5.34596 1.57836 4.86535 2.15707 4.53113C2.64063 4.25194 3.17727 4.13276 3.80258 4.07605C4.41871 4.02024 5.18663 4.02039 6.14926 4.02039ZM6.14926 5.37781C5.16178 5.37781 4.46631 5.37768 3.92563 5.42664C3.39431 5.47479 3.07856 5.5658 2.83578 5.70593C2.46317 5.92112 2.15351 6.23077 1.93832 6.60339C1.7982 6.84617 1.70718 7.16192 1.65903 7.69324C1.61007 8.23391 1.6102 8.9294 1.6102 9.91687C1.6102 10.9044 1.61006 11.5998 1.65903 12.1405C1.70718 12.6718 1.7982 12.9876 1.93832 13.2303C2.15352 13.6029 2.46318 13.9126 2.83578 14.1278C3.07856 14.2679 3.39431 14.3589 3.92563 14.4071C4.46631 14.4561 5.16179 14.4559 6.14926 14.4559C7.13679 14.4559 7.83221 14.4561 8.37289 14.4071C8.90422 14.3589 9.21996 14.2679 9.46274 14.1278C9.83532 13.9126 10.145 13.6029 10.3602 13.2303C10.5003 12.9876 10.5913 12.6718 10.6395 12.1405C10.6885 11.5998 10.6883 10.9044 10.6883 9.91687C10.6883 8.92941 10.6885 8.23391 10.6395 7.69324C10.5913 7.16192 10.5003 6.84617 10.3602 6.60339C10.145 6.23078 9.83533 5.92113 9.46274 5.70593C9.21996 5.5658 8.90421 5.47479 8.37289 5.42664C7.83221 5.37766 7.13679 5.37781 6.14926 5.37781ZM9.80161 0.368042C10.7638 0.368042 11.5314 0.367947 12.1473 0.423706C12.7725 0.480374 13.3093 0.598826 13.7928 0.877808C14.3716 1.21198 14.8521 1.69361 15.1864 2.27234C15.4655 2.75581 15.5857 3.29171 15.6424 3.91687C15.6983 4.53307 15.6971 5.30167 15.6971 6.26453V7.82996C15.6971 8.29271 15.6989 8.59 15.6649 8.84851C15.4668 10.3526 14.4009 11.5739 12.9832 11.9989V10.5468C13.6973 10.1904 14.2104 9.49669 14.3192 8.67175C14.3387 8.52354 14.3407 8.33586 14.3407 7.82996V6.26453C14.3407 5.27713 14.3398 4.58155 14.2909 4.04089C14.2427 3.50975 14.1526 3.19379 14.0125 2.95105C13.7974 2.57856 13.4875 2.26876 13.1151 2.05359C12.8723 1.91353 12.5564 1.82244 12.0252 1.77429C11.4847 1.72534 10.7888
|
|
|
|
|
|
</div></div><div class="ec4f5d61"><button role="button" aria-disabled="false" class="ds-atom-button f79352dc ds-toggle-button ds-toggle-button--md" tabindex="0" style="transform: translateZ(0px);"><div class="ds-icon ds-atom-button__icon" style="font-size: 14px; width: 14px; height: 14px; color: var(--dsw-alias-label-primary); margin-right: 0px;"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.06431 5.93342C7.68763 5.93342 8.19307 6.43904 8.19322 7.06233C8.19322 7.68573 7.68772 8.19123 7.06431 8.19123C6.44099 8.19113 5.9354 7.68567 5.9354 7.06233C5.93555 6.43911 6.44108 5.93353 7.06431 5.93342Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M8.6815 0.963693C10.1169 0.447019 11.6266 0.374829 12.5633 1.31135C13.5 2.24805 13.4277 3.75776 12.911 5.19319C12.7126 5.74431 12.4386 6.31796 12.0965 6.89729C12.4969 7.54638 12.8141 8.19018 13.036 8.80647C13.5527 10.2419 13.6251 11.7516 12.6883 12.6883C11.7516 13.625 10.242 13.5527 8.8065 13.036C8.19022 12.8141 7.54641 12.4969 6.89732 12.0965C6.31797 12.4386 5.74435 12.7125 5.19322 12.911C3.75777 13.4276 2.2481 13.5 1.31138 12.5633C0.374859 11.6266 0.447049 10.1168 0.963724 8.68147C1.17185 8.10338 1.46321 7.50063 1.82896 6.8924C1.52182 6.35711 1.27235 5.82825 1.08872 5.31819C0.572068 3.88278 0.499714 2.37306 1.43638 1.43635C2.37308 0.499655 3.8828 0.572044 5.31822 1.08869C5.82828 1.27232 6.35715 1.5218 6.89243 1.82893C7.50066 1.46318 8.10341 1.17181 8.6815 0.963693ZM11.3573 8.01154C10.9083 8.62253 10.3901 9.22873 9.80943 9.8094C9.22877 10.3901 8.62255 10.9083 8.01158 11.3572C8.4257 11.5841 8.8287 11.7688 9.21275 11.9071C10.5456 12.3868 11.4246 12.2547 11.8397 11.8397C12.2548 11.4246 12.3869 10.5456 11.9071 9.21272C11.7688 8.82866 11.5841 8.42568 11.3573 8.01154ZM2.56529 8.02912C2.37344 8.39322 2.21495 8.74796 2.09263 9.08772C1.61291 10.4204 1.74512 11.2995 2.16001 11.7147C2.57505 12.1297 3.45415 12.2618 4.78697 11.7821C5.11057 11.6656 5.44786 11.5164 5.7938 11.3367C5.249 10.9223 4.70922 10.4533 4.19029 9.9344C3.57578 9.31987 3.03169 8.67633 2.56529 8.02912ZM6.90708 3.2469C6.24065 3.70479 5.5646 4.26321 4.91392 4.91389C4.26325 5.56456 3.70482 6.24063 3.24693 6.90705C3.72674 7.63325 4.32777 8.37459 5.03892 9.08576C5.64943 9.69627 6.28183 10.2265 6.90806 10.6678C7.59368 10.2025 8.2908 9.63076 8.96079 8.96076C9.6308 8.29075 10.2025 7.59366 10.6678 6.90803C10.2265 6.2818 9.69631 5.6494 9.08579 5.03889C8.37462 4.32773 7.63328 3.72672 6.90708 3.2469ZM11.7147 2.15998C11.2996 1.74509 10.4204 1.61288 9.08775 2.0926C8.74835 2.21479 8.39382 2.37271 8.03013 2.56428C8.67728 3.03065 9.31995 3.5758 9.93443 4.19026C10.4534 4.7092 10.9223 5.24896 11.3368 5.79377C11.5164 5.44785 11.6656 5.11052 11.7821 4.78694C12.2618 3.45416 12.1297 2.57502 11.7147 2.15998ZM4.91197 2.2176C3.57922 1.73788 2.70004 1.86995 2.28501 2.28498C1.87001 2.70003 1.73791 3.5792 2.21763 4.91194C2.31709 5.18822 2.44112 5.47427 2.58677 5.7674C3.01931 5.1887 3.51474 4.6158 4.06529 4.06526C4.61584 3.5147 5.18872 3.01928 5.76743 2.58674C5.47431 2.4411 5.18824 2.31706 4.91197 2.2176Z" fill="currentColor"></path></svg></div><span class=""><span class="_6dbc175">深度思考</span></span></button><button role="button" aria-disabled="false" class="ds-atom-button f79352dc ds-toggle-button ds-toggle-button--md" tabindex="0" style="transform: translateZ(0px);"><div class="ds-icon ds-atom-button__icon" style="font-size: 14px; width: 14px; height: 14px; color: var(--dsw-alias-label-primary); margin-right: 0px;"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.00003 0.150391C10.7832 0.150391 13.8496 3.21685 13.8496 7C13.8496 10.7832 10.7832 13.8496 7.00003 13.8496C3.21688 13.8496 0.150421 10.7832 0.150421 7C0.150421 3.21685 3.21688 0.150391 7.00003 0.150391ZM5.37796 7.59961C5.4267 9.03204 5.64754 10.2965 5.97366 11.2197C6.15996 11.7471 6.36946 12.1301 6.57327 12.3701C6.77751 12.6105 6.92343 12.6504 7.00003 12.6504C7.07663 12.6504 7.22255 12.6105 7.42679 12.3701
|
|
|
|
|
|
@keyframes intercom-lightweight-app-launcher {
|
|
|
|
|
|
from {
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
transform: scale(0.5);
|
|
|
|
|
|
}
|
|
|
|
|
|
to {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: scale(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@keyframes intercom-lightweight-app-gradient {
|
|
|
|
|
|
from {
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
to {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@keyframes intercom-lightweight-app-messenger {
|
|
|
|
|
|
0% {
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
transform: scale(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
40% {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
100% {
|
|
|
|
|
|
transform: scale(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
z-index: 2147483001;
|
|
|
|
|
|
width: 0;
|
|
|
|
|
|
height: 0;
|
|
|
|
|
|
font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-gradient {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
z-index: 2147483002;
|
|
|
|
|
|
width: 500px;
|
|
|
|
|
|
height: 500px;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
right: 0;
|
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
|
background: radial-gradient(
|
|
|
|
|
|
ellipse at bottom right,
|
|
|
|
|
|
rgba(29, 39, 54, 0.16) 0%,
|
|
|
|
|
|
rgba(29, 39, 54, 0) 72%);
|
|
|
|
|
|
animation: intercom-lightweight-app-gradient 200ms ease-out;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
z-index: 2147483003;
|
|
|
|
|
|
padding: 0 !important;
|
|
|
|
|
|
margin: 0 !important;
|
|
|
|
|
|
border: none;
|
|
|
|
|
|
bottom: 20px;
|
|
|
|
|
|
right: 20px;
|
|
|
|
|
|
max-width: 48px;
|
|
|
|
|
|
width: 48px;
|
|
|
|
|
|
max-height: 48px;
|
|
|
|
|
|
height: 48px;
|
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
background: #0f0f0f;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.06), 0 2px 32px 0 rgba(0, 0, 0, 0.16);
|
|
|
|
|
|
transition: transform 167ms cubic-bezier(0.33, 0.00, 0.00, 1.00);
|
|
|
|
|
|
box-sizing: content-box;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher:hover {
|
|
|
|
|
|
transition: transform 250ms cubic-bezier(0.33, 0.00, 0.00, 1.00);
|
|
|
|
|
|
transform: scale(1.1)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher:active {
|
|
|
|
|
|
transform: scale(0.85);
|
|
|
|
|
|
transition: transform 134ms cubic-bezier(0.45, 0, 0.2, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher:focus {
|
|
|
|
|
|
outline: none;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
width: 48px;
|
|
|
|
|
|
height: 48px;
|
|
|
|
|
|
transition: transform 100ms linear, opacity 80ms linear;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-open {
|
|
|
|
|
|
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: rotate(0deg) scale(1);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-open svg {
|
|
|
|
|
|
width: 24px;
|
|
|
|
|
|
height: 24px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-open svg path {
|
|
|
|
|
|
fill: rgb(255, 255, 255);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-self-serve {
|
|
|
|
|
|
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: rotate(0deg) scale(1);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-self-serve svg {
|
|
|
|
|
|
height: 44px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-self-serve svg path {
|
|
|
|
|
|
fill: rgb(255, 255, 255);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-custom-icon-open {
|
|
|
|
|
|
max-height: 24px;
|
|
|
|
|
|
max-width: 24px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: rotate(0deg) scale(1);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-minimize {
|
|
|
|
|
|
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
transform: rotate(-60deg) scale(0);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-icon-minimize svg path {
|
|
|
|
|
|
fill: rgb(255, 255, 255);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Extended launcher styles */
|
|
|
|
|
|
.intercom-lightweight-app-launcher.intercom-launcher-extended {
|
|
|
|
|
|
width: calc(180px - 30px);
|
|
|
|
|
|
max-width: calc(180px - 30px);
|
|
|
|
|
|
height: calc(45px - 26px);
|
|
|
|
|
|
max-height: calc(45px - 26px);
|
|
|
|
|
|
border-radius: 12px;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: flex-start;
|
|
|
|
|
|
padding: 12px 16px 12px 12px !important;
|
|
|
|
|
|
gap: 6px;
|
|
|
|
|
|
/* Use theme background instead of hardcoded gradient */
|
|
|
|
|
|
background: #0f0f0f;
|
|
|
|
|
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
|
|
|
|
box-shadow: 0px -2px 50px rgba(0, 0, 0, 0.1);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher.intercom-launcher-extended .intercom-lightweight-app-launcher-icon {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
width: 24px;
|
|
|
|
|
|
height: 24px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-launcher-text {
|
|
|
|
|
|
/* Match text color with launcher icon */
|
|
|
|
|
|
color: rgb(255, 255, 255);
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
line-height: 1.5;
|
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
|
max-width: 140px;
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transition: opacity 80ms linear;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-messenger {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
z-index: 2147483003;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
background-color: #ffffff;
|
|
|
|
|
|
animation: intercom-lightweight-app-messenger 250ms cubic-bezier(0, 1, 1, 1);
|
|
|
|
|
|
transform-origin: bottom right;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
width: 400px;
|
|
|
|
|
|
height: calc(100% - 40px);
|
|
|
|
|
|
max-height: 704px;
|
|
|
|
|
|
min-height: 250px;
|
|
|
|
|
|
right: 20px;
|
|
|
|
|
|
bottom: 20px;
|
|
|
|
|
|
box-shadow: 0 5px 40px rgba(0,0,0,0.16);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
border-radius: 16px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-messenger-header {
|
|
|
|
|
|
height: 64px;
|
|
|
|
|
|
border-bottom: none;
|
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.intercom-lightweight-app-messenger-footer{
|
|
|
|
|
|
position:absolute;
|
|
|
|
|
|
bottom:0;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 80px;
|
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
line-height: 21px;
|
|
|
|
|
|
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
box-shadow: 0px 0px 25px rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@media print {
|
|
|
|
|
|
.intercom-lightweight-app {
|
|
|
|
|
|
display: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style></div><div class="ds-theme ds-modal-wrapper ds-modal-wrapper--hide" data-transform-origin="center" style="--ds-rgb-hover: 245 245 245; --ds-rgb-primary: 77 107 254; --ds-button-hover-color: #2563EB; --ds-bordered-secondary-button-color: var(--dsr-text-1); --ds-input-prefix-color: var(--dsr-text-1); z-index: 0;"></div><div class="ds-floating-container" style="z-index: 0;"><div class="ds-floating-position-wrapper ds-theme" data-transform-origin="bottom" style="--ds-rgb-hover: 0 0 0 / 4%; z-index: 0; left: 673.5px; top: 827px;"></div></div><div class="ds-floating-container" style="z-index: 0;"><div class="ds-floating-position-wrapper ds-theme" data-transform-origin="top" style="--ds-rgb-hover: 0 0 0 / 4%; z-index: 0; left: 1860px; top: 53px;"></div></div><div class="ds-floating-container" style="z-index: 0;"><div class="ds-floating-position-wrapper ds-theme" data-transform-origin="bottom" style="--ds-rgb-hover: 0 0 0 / 4%; z-index: 0; left: 821.5px; top: 827px;"></div></div><div class="ds-floating-container" style="z-index: 0;"><div class="ds-floating-position-wrapper ds-theme" data-transform-origin="top" style="--ds-rgb-hover: 0 0 0 / 4%; z-index: 0; left: 698.5px; top: 752px;"></div></div></body></html>
|