|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
<!-- saved from url=(0071)https://chat.deepseek.com/a/chat/s/9bf6c90d-4a32-4f4f-99c0-b47395a4f6c3 -->
|
|
|
|
|
|
<html lang="zh-CN" class="notranslate" translate="no"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>ESP32 ArduinoMqttClient使用指南 - DeepSeek</title><meta name="viewport" content="initial-scale=1.0,maximum-scale=1,width=device-width,viewport-fit=cover"><meta name="commit-id" content="d97a33f"><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 ArduinoMqttClient使用指南 - 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 ArduinoMqttClient使用指南 - 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 ArduinoMqttClient使用指南 - DeepSeek_files/default-vendors.529c2d46d2.js.下载"></script><script defer="" onerror="_sriCk(this)" src="./ESP32 ArduinoMqttClient使用<EFBFBD><EFBFBD>
|
|
|
|
|
|
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 ArduinoMqttClient使用指南 - DeepSeek_files/katex.66a418a9b7.css" crossorigin="anonymous"><script data-smcp="true" src="./ESP32 ArduinoMqttClient使用指南 - 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><style>@font-face {
|
|
|
|
|
|
font-family: 'quote-cjk-patch';
|
|
|
|
|
|
src: local('PingFangSC-Regular');
|
|
|
|
|
|
unicode-range: U+201C-201D, U+2018-2019;
|
|
|
|
|
|
}</style></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 89.7893 10.6424 89.7893 10.2379C89.7893 9.83332 89.9547 9.42039 90.4319 9.15944C90.9002 8.88955 91.626 8.80015 92.3418 8.80015C93.0576 8.80015 93.7834 8.89905 94.2528 9.15944C94.721 9.42933 94.8954 9.83332 94.8954 10.2379H97.6959C97.6959 9.1952 97
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><ArduinoMqttClient.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">"your_SSID"</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">"your_PASSWORD"</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> broker <span class="token operator">=</span> <span class="token string">"broker.hivemq.com"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">int</span> 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> topic <span class="token operator">=</span> <span class="token string">"esp32/test"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
WiFiClient wifiClient<span class="token punctuation">;</span>
|
|
|
|
|
|
MqttClient <span class="token function">mqttClient</span><span class="token punctuation">(</span>wifiClient<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 comment">// 连接WiFi</span>
|
|
|
|
|
|
<span class="token function">connectWiFi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 设置MQTT</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">setId</span><span class="token punctuation">(</span><span class="token string">"ESP32_Client"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">setUsernamePassword</span><span class="token punctuation">(</span><span class="token string">"username"</span><span class="token punctuation">,</span> <span class="token string">"password"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 如果需要</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 连接MQTT代理</span>
|
|
|
|
|
|
<span class="token function">connectMQTT</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 订阅主题</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span>topic<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 comment">// 保持MQTT连接</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>mqttClient<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">connectMQTT</span><span class="token punctuation">(</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">int</span> messageSize <span class="token operator">=</span> mqttClient<span class="token punctuation">.</span><span class="token function">parseMessage</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>messageSize<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">handleMessage</span><span class="token punctuation">(</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> lastPublish <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> lastPublish <span class="token operator">></span> <span class="token number">5000</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">publishMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
lastPublish <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 punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">poll</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">connectWiFi</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">"Connecting to WiFi"</span><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">"\nConnected to WiFi!"</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">"IP Address: "</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">connectMQTT</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">"Connecting to MQTT broker..."</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>mqttClient<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>broker<span class="token punctuation">,</span> port<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>
|
|
|
|
|
|
<span class="token function">delay</span><span class="token punctuation">(</span><span class="token number">1000</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">"\nConnected to MQTT broker!"</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">handleMessage</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">"Received message on topic: "</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>mqttClient<span class="token punctuation">.</span><span class="token function">messageTopic</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">"Message: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">while</span> <span class="token punctuation">(</span>mqttClient<span class="token punctuation">.</span><span class="token function">available</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 punctuation">(</span><span class="token keyword">char</span><span class="token punctuation">)</span>mqttClient<span class="token punctuation">.</span><span class="token function">read</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>
|
|
|
|
|
|
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">publishMessage</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>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span>topic<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</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">"Message published: "</span> <span class="token operator">+</span> message<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><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><EFBFBD>
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><ArduinoMqttClient.h></span></span>
|
|
|
|
|
|
|
|
|
|
|
|
WiFiClient wifiClient<span class="token punctuation">;</span>
|
|
|
|
|
|
MqttClient <span class="token function">mqttClient</span><span class="token punctuation">(</span>wifiClient<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 回调函数设置</span>
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">setupMQTTCallbacks</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token comment">// 设置消息回调(需要重写 onMessage 方法)</span>
|
|
|
|
|
|
<span class="token comment">// 或者使用以下方式处理消息</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 设置连接状态回调</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">onConnect</span><span class="token punctuation">(</span>onMqttConnect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">onDisconnect</span><span class="token punctuation">(</span>onMqttDisconnect<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">onMqttConnect</span><span class="token punctuation">(</span><span class="token keyword">bool</span> sessionPresent<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">"Connected to MQTT broker"</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">"Session present: "</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>sessionPresent<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 连接后订阅多个主题</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span><span class="token string">"esp32/sensor/temperature"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span><span class="token string">"esp32/sensor/humidity"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<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 comment">// 使用通配符</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">onMqttDisconnect</span><span class="token punctuation">(</span><span class="token keyword">int</span> reason<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 disconnected, reason: "</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>reason<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// QoS设置示例</span>
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">publishWithQoS</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token comment">// QoS 0 - 最多一次</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span><span class="token string">"esp32/qos0"</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"QoS 0 message"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// QoS 1 - 至少一次</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span><span class="token string">"esp32/qos1"</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"QoS 1 message"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// QoS 2 - 恰好一次</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span><span class="token string">"esp32/qos2"</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"QoS 2 message"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</span><span class="token punctuation">(</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">void</span> <span class="token function">publishRetainedMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span><span class="token string">"esp32/status"</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// true表示保留消息</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"online"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</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. 完整项目示例 - 传感器数据发布</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
|
|
|
|
|
|
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><ArduinoMqttClient.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">DHT11</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">"your_SSID"</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">"your_PASSWORD"</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> broker <span class="token operator">=</span> <span class="token string">"broker.hivemq.com"</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">int</span> port <span class="token operator">=</span> <span class="token number">1883</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
WiFiClient wifiClient<span class="token punctuation">;</span>
|
|
|
|
|
|
MqttClient <span class="token function">mqttClient</span><span class="token punctuation">(</span>wifiClient<span class="token punctuation">)</span><span class="token punctuation">;</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> tempTopic <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> humidTopic <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> statusTopic <span class="token operator">=</span> <span class="token string">"esp32/status"</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">connectWiFi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token function">setupMQTT</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 发布设备在线状态(保留消息)</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span>statusTopic<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"online"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</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">setupMQTT</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">setId</span><span class="token punctuation">(</span><span class="token string">"ESP32_Sensor_"</span> <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 punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">"Connecting to MQTT..."</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>mqttClient<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>broker<span class="token punctuation">,</span> port<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">" failed!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">return</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">" success!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 订阅控制主题</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span><span class="token string">"esp32/control/interval"</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">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>mqttClient<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">reconnectMQTT</span><span class="token punctuation">(</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">int</span> messageSize <span class="token operator">=</span> mqttClient<span class="token punctuation">.</span><span class="token function">parseMessage</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>messageSize<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">handleMQTTMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token comment">// 每10秒发布传感器数据</span>
|
|
|
|
|
|
<span class="token keyword">static</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">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> <span class="token number">10000</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token function">publishSensorData</span><span class="token punctuation">(</span><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 punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">poll</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">100</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">handleMQTTMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
String topic <span class="token operator">=</span> mqttClient<span class="token punctuation">.</span><span class="token function">messageTopic</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">""</span><span class="token punctuation">;</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">while</span> <span class="token punctuation">(</span>mqttClient<span class="token punctuation">.</span><span class="token function">available</span><span class="token punctuation">(</span><span class="token punctuation">)</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>mqttClient<span class="token punctuation">.</span><span class="token function">read</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">"Message on '"</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 keyword">if</span> <span class="token punctuation">(</span>topic <span class="token operator">==</span> <span class="token string">"esp32/control/interval"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token comment">// 处理控制消息</span>
|
|
|
|
|
|
<span class="token keyword">int</span> interval <span class="token operator">=</span> message<span class="token punctuation">.</span><span class="token function">toInt</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>interval <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
<span class="token comment">// 更新发布间隔</span>
|
|
|
|
|
|
Serial<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"Update interval: "</span> <span class="token operator">+</span> <span class="token function">String</span><span class="token punctuation">(</span>interval<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 punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<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>
|
|
|
|
|
|
<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 punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span>tempTopic<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>temperature<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</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">"Temperature: "</span> <span class="token operator">+</span> <span class="token function">String</span><span class="token punctuation">(</span>temperature<span class="token punctuation">)</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>humidity<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">beginMessage</span><span class="token punctuation">(</span>humidTopic<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">print</span><span class="token punctuation">(</span>humidity<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">endMessage</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">"Humidity: "</span> <span class="token operator">+</span> <span class="token function">String</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 punctuation">}</span>
|
|
|
|
|
|
<span class="token punctuation">}</span>
|
|
|
|
|
|
|
|
|
|
|
|
<span class="token keyword">void</span> <span class="token function">reconnectMQTT</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">"Reconnecting to MQTT..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
<span class="token keyword">if</span> <span class="token punctuation">(</span>mqttClient<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>broker<span class="token punctuation">,</span> port<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">"Reconnected!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
|
|
|
|
|
mqttClient<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span><span class="token string">"esp32/control/interval"</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">println</span><span class="token punctuation">(</span><span class="token string">"Reconnect failed!"</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>5. 重要函数说明</span></h2><ul><li><p class="ds-markdown-paragraph"><code>connect(broker, port)</code><span> - 连接MQTT代理</span></p></li><li><p class="ds-markdown-paragraph"><code>subscribe(topic)</code><span> - 订阅主题</span></p></li><li><p class="ds-markdown-paragraph"><code>beginMessage(topic)</code><span> - 开始发布消息</span></p></li><li><p class="ds-markdown-paragraph"><code>endMessage()</code><span> - 结束发布消息</span></p></li><li><p class="ds-markdown-paragraph"><code>parseMessage()</code><span> - 解析接收的消息</span></p></li><li><p class="ds-markdown-paragraph"><code>poll()</code><span> - 处理MQTT通信</span></p></li><li><p class="ds-markdown-paragraph"><code>setId(clientId)</code><span> - 设置客户端ID</span></p></li><li><p class="ds-markdown-paragraph"><code>setUsernamePassword(username, password)</code><span> - 设置认证信息</span></p></li></ul><h2><span>6. 注意事项</span></h2><ol start="1"><li><p class="ds-markdown-paragraph"><span>确保WiFi连接稳定</span></p></li><li><p class="ds-markdown-paragraph"><span>定期检查MQTT连接状态</span></p></li><li><p class="ds-markdown-paragraph"><span>合理设置消息发布频率</span></p></li><li><p class="ds-markdown-paragraph"><span>使用合适的QoS等级</span></p></li><li><p class="ds-markdown-paragraph"><span>处理连接断开和重连逻辑</span></p></li></ol><p class="ds-markdown-paragraph"><span>这个库提供了完整的MQTT客户端功能,适合在ESP32上实现物联网应用。</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
|
|
|
|
|
|
</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-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; max-width: 50%; left: 18.6095px; top: 267px;"></div></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="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="bottom" style="--ds-rgb-hover: 0 0 0 / 4%; z-index: 0; left: 1263.05px; top: 809px;"></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></body></html>
|