<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://docs.bouffalolab.com/index.php?action=history&amp;feed=atom&amp;title=AT%E6%A8%A1%E5%9D%97_9%3A_%E9%99%84%E5%BD%95%EF%BC%88Appendix%EF%BC%89</id>
	<title>AT模块 9: 附录（Appendix） - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://docs.bouffalolab.com/index.php?action=history&amp;feed=atom&amp;title=AT%E6%A8%A1%E5%9D%97_9%3A_%E9%99%84%E5%BD%95%EF%BC%88Appendix%EF%BC%89"/>
	<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=AT%E6%A8%A1%E5%9D%97_9:_%E9%99%84%E5%BD%95%EF%BC%88Appendix%EF%BC%89&amp;action=history"/>
	<updated>2026-04-14T09:01:42Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=AT%E6%A8%A1%E5%9D%97_9:_%E9%99%84%E5%BD%95%EF%BC%88Appendix%EF%BC%89&amp;diff=186&amp;oldid=prev</id>
		<title>张良：​创建页面，内容为“= 附录 =  == 生成 romfs.bin ==  首先,您需要创建一个新的 romfs 文件夹,并将需要烧录的证书文件放置在 romfs 目录中:  &lt;pre&gt; romfs$ ca_01.crt  cert_01.crt  private_01.key &lt;/pre&gt;  然后,使用 SDK 目录中的 genromfs 工具生成 romfs.bin。您可以在 Makefile 中添加命令:  &lt;pre&gt; $(shell ./tools/genromfs -d romfs/ -f ./build/build_out/romfs.bin) &lt;/pre&gt;  在 flash 配置文件 &quot;flash_prog_cfg.ini&quot; 中添加下载 romfs 分…”</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=AT%E6%A8%A1%E5%9D%97_9:_%E9%99%84%E5%BD%95%EF%BC%88Appendix%EF%BC%89&amp;diff=186&amp;oldid=prev"/>
		<updated>2026-01-12T02:18:40Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“= 附录 =  == 生成 romfs.bin ==  首先,您需要创建一个新的 romfs 文件夹,并将需要烧录的证书文件放置在 romfs 目录中:  &amp;lt;pre&amp;gt; romfs$ ca_01.crt  cert_01.crt  private_01.key &amp;lt;/pre&amp;gt;  然后,使用 SDK 目录中的 genromfs 工具生成 romfs.bin。您可以在 Makefile 中添加命令:  &amp;lt;pre&amp;gt; $(shell ./tools/genromfs -d romfs/ -f ./build/build_out/romfs.bin) &amp;lt;/pre&amp;gt;  在 flash 配置文件 &amp;quot;flash_prog_cfg.ini&amp;quot; 中添加下载 romfs 分…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= 附录 =&lt;br /&gt;
&lt;br /&gt;
== 生成 romfs.bin ==&lt;br /&gt;
&lt;br /&gt;
首先,您需要创建一个新的 romfs 文件夹,并将需要烧录的证书文件放置在 romfs 目录中:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
romfs$&lt;br /&gt;
ca_01.crt  cert_01.crt  private_01.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后,使用 SDK 目录中的 genromfs 工具生成 romfs.bin。您可以在 Makefile 中添加命令:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$(shell ./tools/genromfs -d romfs/ -f ./build/build_out/romfs.bin)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在 flash 配置文件 &amp;quot;flash_prog_cfg.ini&amp;quot; 中添加下载 romfs 分区的选项:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#media factory&lt;br /&gt;
[romfs]&lt;br /&gt;
filedir = ./build/build_out/romfs.bin&lt;br /&gt;
address = 0x378000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
address 字段是分区表中 media 分区的地址。分区表的路径为:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bsp/board/&amp;lt;chip_name&amp;gt;/config/partition_cfg_4M.toml&lt;br /&gt;
或&lt;br /&gt;
bsp/board/&amp;lt;chip_name&amp;gt;/config_8M/partition_cfg_8M.toml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最后,执行命令行固件下载命令后,romfs.bin 文件也会被下载到芯片中。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make flash CHIP=bl616 COMX=&amp;lt;com_port&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTTPS 本地服务搭建 ===&lt;br /&gt;
&lt;br /&gt;
=== https.py ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import http.server&lt;br /&gt;
import ssl&lt;br /&gt;
import sys&lt;br /&gt;
from socketserver import ThreadingMixIn&lt;br /&gt;
import threading&lt;br /&gt;
&lt;br /&gt;
class httpHandler(http.server.BaseHTTPRequestHandler):&lt;br /&gt;
    def do_GET(self):&lt;br /&gt;
        response = &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        self.send_response(200)&lt;br /&gt;
        self.send_header(&amp;quot;Content-Type&amp;quot;, &amp;quot;text/plain&amp;quot;)&lt;br /&gt;
        self.send_header(&amp;quot;Content-Length&amp;quot;, str(len(response)))&lt;br /&gt;
        self.end_headers()&lt;br /&gt;
&lt;br /&gt;
        self.wfile.write(response.encode())&lt;br /&gt;
    def do_HEAD(self):&lt;br /&gt;
        self.send_response(200)&lt;br /&gt;
        self.send_header(&amp;quot;Content-Type&amp;quot;, &amp;quot;text/plain&amp;quot;)&lt;br /&gt;
        self.send_header(&amp;quot;Content-Length&amp;quot;, str(len(&amp;quot;Hello World&amp;quot;)))&lt;br /&gt;
        self.end_headers()&lt;br /&gt;
    def do_POST(self):&lt;br /&gt;
        self.send_response(405)&lt;br /&gt;
        self.send_header(&amp;quot;Content-Type&amp;quot;, &amp;quot;text/plain&amp;quot;)&lt;br /&gt;
        self.send_header(&amp;quot;Content-Length&amp;quot;, str(len(&amp;quot;POST Method success&amp;quot;)))&lt;br /&gt;
        self.end_headers()&lt;br /&gt;
        self.wfile.write(b&amp;quot;POST Method success&amp;quot;)&lt;br /&gt;
    def log_message(self, format, *args):&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
class ThreadedHTTPServer(ThreadingMixIn, http.server.HTTPServer):&lt;br /&gt;
    daemon_threads = True&lt;br /&gt;
&lt;br /&gt;
class HttpsServer:&lt;br /&gt;
    def __init__(self, ip, port, certfile, keyfile, ca_certs=None):&lt;br /&gt;
        self.server_address = (ip, port)&lt;br /&gt;
        self.certfile = certfile&lt;br /&gt;
        self.keyfile = keyfile&lt;br /&gt;
        self.ca_certs = ca_certs&lt;br /&gt;
        self.httpd = ThreadedHTTPServer(self.server_address, httpHandler)&lt;br /&gt;
&lt;br /&gt;
        # 启用服务端 SSL 并验证客户端证书&lt;br /&gt;
        self.httpd.socket = ssl.wrap_socket(&lt;br /&gt;
            self.httpd.socket,&lt;br /&gt;
            certfile=self.certfile,&lt;br /&gt;
            keyfile=self.keyfile,&lt;br /&gt;
            server_side=True,&lt;br /&gt;
            cert_reqs=ssl.CERT_REQUIRED,  # 要求客户端证书&lt;br /&gt;
            ca_certs=self.ca_certs  # 用于客户端验证的 CA 证书路径&lt;br /&gt;
        )&lt;br /&gt;
        self.thread = None&lt;br /&gt;
&lt;br /&gt;
    def start_server(self):&lt;br /&gt;
        if self.thread is None:&lt;br /&gt;
            self.thread = threading.Thread(target=self.httpd.serve_forever)&lt;br /&gt;
            self.thread.start()&lt;br /&gt;
            print(f&amp;quot;Server started at https://{self.server_address[0]}:{self.server_address[1]}&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Server is already running.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def stop_server(self):&lt;br /&gt;
        if self.thread is not None:&lt;br /&gt;
            self.httpd.shutdown()&lt;br /&gt;
            self.thread.join()&lt;br /&gt;
            self.thread = None&lt;br /&gt;
            print(&amp;quot;Server stopped.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Server is not running.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 使用示例:&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    ip = sys.argv[1]&lt;br /&gt;
    port = int(sys.argv[2])&lt;br /&gt;
    certfile = sys.argv[3]&lt;br /&gt;
    keyfile = sys.argv[4]&lt;br /&gt;
    ca_certs = sys.argv[5] if len(sys.argv) &amp;gt; 5 else None  # 可选的 CA 证书用于客户端验证&lt;br /&gt;
&lt;br /&gt;
    server = HttpsServer(ip, port, certfile, keyfile, ca_certs)&lt;br /&gt;
    server.start_server()&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        input(&amp;quot;Press Enter to stop the server...\n&amp;quot;)&lt;br /&gt;
    finally:&lt;br /&gt;
        server.stop_server()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 您可以使用提供的 Python 代码快速搭建本地 HTTPS 服务器。创建一个新的 https.py 文件,将代码复制到文件中,并运行以下命令:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python3 https.py 192.168.31.112 4443 lfs/lfs/server_1.crt lfs/lfs/server_1.key lfs/lfs/ca_1.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. BL HTTPS 双向认证&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPSSLCFG=0,3,&amp;quot;client_1.crt&amp;quot;,&amp;quot;client_1.key&amp;quot;,&amp;quot;ca_1.crt&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. BL HTTPS 服务器认证&lt;br /&gt;
&lt;br /&gt;
在 https.py 代码中注释掉这一行以禁用客户端验证: cert_reqs=ssl.CERT_REQUIRED,  # Require client certificate&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPSSLCFG=0,1,,,&amp;quot;ca_1.crt&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. BL HTTPS 客户端认证&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPSSLCFG=0,2,&amp;quot;client_1.crt&amp;quot;,&amp;quot;client_1.key&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. BL HTTPS 无认证&lt;br /&gt;
&lt;br /&gt;
在 https.py 代码中注释掉这一行以禁用客户端验证: cert_reqs=ssl.CERT_REQUIRED,  # Require client certificate&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPSSLCFG=0,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. BL HTTPS Head 请求&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPCLIENT=0,1,0,&amp;quot;https://192.168.31.112:4443/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. BL HTTPS Get 请求&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPCLIENT=0,2,0,&amp;quot;https://192.168.31.112:4443/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. BL HTTPS Post 请求&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPCLIENT=0,3,0,&amp;quot;https://192.168.31.112:4443/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9. BL HTTPS Put 请求&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+HTTPCLIENT=0,4,0,&amp;quot;https://192.168.31.112:4443/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MQTT 本地服务搭建 ==&lt;br /&gt;
&lt;br /&gt;
1. 安装 mosquitto&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install mosquitto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. 设置密码&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_passwd -c /etc/mosquitto/passwd bflb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
输入两次密码,例如:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
12345678&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. 配置证书&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp {case_path}/lfs/lfs/server_1.crt /etc/mosquitto/server_1.crt&lt;br /&gt;
&lt;br /&gt;
cp {case_path}/lfs/lfs/server_1.key /etc/mosquitto/server_1.key&lt;br /&gt;
&lt;br /&gt;
cp {case_path}/lfs/lfs/ca_1.crt /etc/mosquitto/ca_1.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. 启动 MQTT 服务&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto -c /etc/mosquitto/mosquitto.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. PC 订阅主题&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -h 192.168.31.156 -u bflb -P 12345678 --cafile lfs/lfs/ca_1.crt --cert lfs/lfs/client_1.crt --key lfs/lfs/client_1.key -t &amp;quot;test/topic1&amp;quot; --tls-version tlsv1.2 --insecure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. BL MQTT 用户配置&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTUSERCFG=0,4,&amp;quot;BL001&amp;quot;,&amp;quot;bflb&amp;quot;,&amp;quot;12345678&amp;quot;,&amp;quot;client_1.crt&amp;quot;,&amp;quot;client_1.key&amp;quot;,&amp;quot;ca_1.crt&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. BL 连接到 MQTT Broker&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTCONN=0,&amp;quot;192.168.31.156&amp;quot;,8883,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. BL 发布消息&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTPUB=0,&amp;quot;test/topic1&amp;quot;,&amp;quot;This is a MQTT test&amp;quot;,2,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9. BL 订阅主题&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTSUB=0,&amp;quot;test/topic2&amp;quot;,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. PC 发布消息&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub -h 192.168.31.156 -p 8883 -u bflb -P 12345678 --cafile lfs/lfs/ca_1.crt --cert lfs/lfs/client_1.crt --key lfs/lfs/client_1.key -t &amp;quot;test/topic2&amp;quot; -m &amp;quot;Hello MQTT&amp;quot; --tls-version tlsv1.2 --insecure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 使用 HiveMQ 的 MQTT TLS 方案 ==&lt;br /&gt;
&lt;br /&gt;
=== a. Serverless 版本的验证步骤 ===&lt;br /&gt;
&lt;br /&gt;
1. 从 HiveMQ 下载 broker Root CA 证书 (isrgrootx1.pem) 并放置在以下文件夹中:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
examples/wifi/spi_wifi/lfs/lfs/isrgrootx1.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. 在 examples/wifi/spi_wifi/ 文件夹中,运行 &amp;quot;make&amp;quot; 重新构建项目并使用 BLonn_Flash 工具烧录镜像。&lt;br /&gt;
&lt;br /&gt;
3. 在 HiveMQ web 控制台中,在 serverless 计划下创建一个 broker 并设置相应的凭据(例如,username = BL_test_0, password = BL123456,权限设置为发布和订阅)。此步骤请参考 HiveMQ 官方文档。&lt;br /&gt;
&lt;br /&gt;
4. 将 BL 连接到 WiFi AP(根据需要调整 SSID 和密码):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+CWMODE=1&lt;br /&gt;
&lt;br /&gt;
AT+CWJAP=&amp;quot;8E88&amp;quot;,&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. 配置 MQTT 用户设置:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTUSERCFG=0,2,&amp;quot;bflb&amp;quot;,&amp;quot;BL_test_0&amp;quot;,&amp;quot;BL123456&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;isrgrootx1.pem&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(0 表示本地客户端索引; 2 指定使用单向 TLS,其中客户端验证服务器的证书; &amp;quot;bflb&amp;quot; 是 MQTT 客户端 ID; &amp;quot;BL_test_0&amp;quot;/&amp;quot;BL123456&amp;quot; 是在控制台上设置的用户名和密码; isrgrootx1.pem 是 broker Root CA。)&lt;br /&gt;
&lt;br /&gt;
6. 配置 MQTT SSL/TLS SNI。实践证明必须设置 SNI,否则连接将失败(可能是因为 HiveMQ broker 使用 SNI 来识别正确的 broker 实例):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTSNI=0,&amp;quot;8f3ef71da5bf445eb0669e56eecef396.s1.eu.hivemq.cloud&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. 配置 MQTT 连接属性:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTCONNCFG=0,120,0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,0,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(0 表示本地客户端索引; 120 是 MQTT 客户端保活时间(秒); 第一个 0 表示禁用 clean session。)&lt;br /&gt;
&lt;br /&gt;
8. 发起 MQTT 连接:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTCONN=0,&amp;quot;8f3ef71da5bf445eb0669e56eecef396.s1.eu.hivemq.cloud&amp;quot;,8883,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(注意:此处提供的主机和端口信息必须与 HiveMQ broker 控制台匹配。)&lt;br /&gt;
&lt;br /&gt;
9. 订阅所有主题:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTSUB=0,&amp;quot;#&amp;quot;,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. 发布主题消息:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTPUB=0,&amp;quot;/test/bflb&amp;quot;,&amp;quot;What&amp;#039;s up guys&amp;quot;,0,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== b. Starter 版本的验证步骤 ===&lt;br /&gt;
&lt;br /&gt;
1. 从 HiveMQ 下载 broker Root CA 证书 (isrgrootx1.pem) 并放置在以下文件夹中:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
examples/wifi/spi_wifi/lfs/lfs/isrgrootx1.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. 在 examples/wifi/spi_wifi/ 文件夹中,运行 &amp;quot;make&amp;quot; 重新构建项目并使用 BLFlash 工具烧录镜像。&lt;br /&gt;
&lt;br /&gt;
3. 在 HiveMQ web 控制台中,在 starter 计划下创建一个 broker 并设置相应的凭据(例如,username = BL_test_0, password = BL123456,权限设置为发布和订阅)。此外,将 ca_1.crt 添加为 Root CA,用于验证设备的证书到 broker。此步骤请参考 HiveMQ 官方文档。&lt;br /&gt;
&lt;br /&gt;
4. 将 BL 连接到 WiFi AP(根据需要调整 SSID 和密码):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+CWMODE=1&lt;br /&gt;
&lt;br /&gt;
AT+CWJAP=&amp;quot;8E88&amp;quot;,&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. 配置 MQTT 用户设置:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTUSERCFG=0,4,&amp;quot;changeme&amp;quot;,&amp;quot;BL_test_0&amp;quot;,&amp;quot;BL123456&amp;quot;,&amp;quot;client_1.crt&amp;quot;,&amp;quot;client_1.key&amp;quot;,&amp;quot;isrgrootx1.pem&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(0 表示本地客户端索引; 4 指定使用双向 TLS; &amp;quot;changeme&amp;quot; 是 MQTT 客户端 ID; &amp;quot;BL_test_0&amp;quot;/&amp;quot;BL123456&amp;quot; 是在控制台上设置的用户名和密码; client_1.crt 是由 ca_1 签发的设备 x509 证书; client_1.key 是与设备证书匹配的密钥; isrgrootx1.pem 是 broker Root CA。)&lt;br /&gt;
&lt;br /&gt;
6. 配置 MQTT SSL/TLS SNI。实践证明必须设置 SNI,否则连接将失败(可能是因为 HiveMQ broker 使用 SNI 来识别要使用的 broker 实例):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTSNI=0,&amp;quot;indigosquash-2lk628.a02.usw2.aws.hivemq.cloud&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. 配置 MQTT 连接属性:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTCONNCFG=0,120,0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,0,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(0 表示本地客户端索引; 120 是 MQTT 客户端保活时间; 0 禁用 clean session。)&lt;br /&gt;
&lt;br /&gt;
8. 发起 MQTT 连接:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTCONN=0,&amp;quot;indigosquash-2lk628.a02.usw2.aws.hivemq.cloud&amp;quot;,8883,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(注意:此处的主机和端口必须与 HiveMQ broker 控制台提供的信息匹配。)&lt;br /&gt;
&lt;br /&gt;
9. 订阅所有主题:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTSUB=0,&amp;quot;#&amp;quot;,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. 发布主题消息:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+MQTTPUB=0,&amp;quot;/test/bflb&amp;quot;,&amp;quot;What&amp;#039;s up guys&amp;quot;,0,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
</feed>