IoT/HCIP實驗-5/基于WIFI的智慧農業實驗(LwM2M/CoAP+PSK+ESP8266 連接到 IoTDA)

文章目錄

  • 概述
  • WIFI8266 通信模組
    • WIFI模組也用AT指令?
    • ESP8266 內置協議棧?
    • 支持的無線網絡模式
    • MCU通過串口與模組交互
  • Wifi模組做客戶端
    • PC-AT接入路由器
    • 向本地TCP服務發數據
    • 用代碼接入你家路由器
    • 已接入AP(你家Wifi)
  • 平臺側開發
  • 工程配置和編譯
    • 工程配置
    • 編譯不過
    • WIFI連接參數
    • 接入AP成功,IoTDA失敗
    • 無可用加密套件
  • 成功接入平臺

概述

本實驗基于WIFI模組實現智慧農業案例,實現實時數據采集,實現命令下發和響應,實現端云互通。實驗目的包括:

  • 掌握Wifi通信方式的配置。
  • 掌握智慧農業案例的開發過程。
  • 掌握Wifi+DTLS+PSK接入華為云物聯網平臺的方法。
  • 了解LiteOS以及DTLS的裁剪,避免板卡Flash不足以存儲編譯結果。
  • NB-IoT模組通過串口與主板MCU以AT指令交互,wifi模組也是。

@NOTE
轉載請標明出處,https://blog.csdn.net/quguanxin/category_12929470.html

@HISTORY
從本實驗開始,我將放棄使用LiteOS Stduio集成開發環境,轉而使用新構建的 GitBash+GCC+CortexDebug 集成開發環境。在原本的計劃里頭,本文是要探尋LwM2M/CoAP與AT指令、Wifi、NB-IoT之間的關聯,但實際上并沒有,因為我遇到了其他困難。我原本以為在智慧農業NB-IoT實驗基礎上,Wifi實驗過程會很順利,但事與愿違。在編譯階段,啟用DTLS模塊后,遇到了程序大小超過Flash總額的問題。在平臺接入階段,由于錯把設備ID當做設備標識碼使用,導致接入平臺失敗。為了分析和解決上述問題,延伸多寫了其他幾篇文章。

WIFI8266 通信模組

WIFI8266通信模塊是小熊派開發板用于通過Wi-Fi傳輸數據的通信擴展板,板載樂鑫 ESP8266 Wi-Fi通信模組。
在這里插入圖片描述

WIFI模組也用AT指令?

從學習華為云物聯網開始,這可能是我給自己挖的最大的坑,我一直以為AT指令是NB-IoT通信下的一種特有的指令,可現在來看,WIFI通信模組也是要使用AT指令的。那么,我們不得不重新來審視什么是AT指令?

AT指令絕非僅限于NB-IoT,而是貫穿各類通信模組(WiFi、4G藍牙等)的通用控制協議,堪稱物聯網設備的 “神經系統語言”。
AT是"Attention"的縮寫,歷史遺留術語,它起源于很久以前,NB-IoT只是其后來的一個受益者而已。它在1981年由Hayes公司設計,用于調制解調器撥號控制(如ATDT撥號),通過文本化命令實現對通信模塊的操控,隔離底層硬件差異,使主控MCU無需理解復雜射頻協議。其本質是通過ASCII字符串控制通信模組的協議,實現設備與模組間的交互。

3GPP TS 27.007,定義基礎指令如 AT+CSQ(信號強度),不是只指針對NB的,而是覆蓋蜂窩網絡,也包含4G/5G 等。但是 Wi-Fi 不在3GPP規范范圍內,其AT指令由各芯片廠商(如樂鑫ESP8266)自行定義。雖無全球統一標準,但廠商也常會參考3GPP語法,采用類似格式,如,AT+CWJAP(連接Wi-Fi)、AT+CWSAP(創建熱點)等指令。只是格式差不多,指令名不一樣,
在這里插入圖片描述
小熊派社區,擴展板資料中也有 <ESP-12F(ESP8266) AT指令使用示例.pdf> 等可以下載參考。在小熊派開發板這個場景下,AT指令是主板(MCU)與通信模組之間的控制語言,用于操控模組底層行為。

ESP8266 內置協議棧?

ESP8266 模塊是有獨立運行能力的哈,這點一定要提前意識到。
其內部集成Tensilica L106 32位微控制器,自帶Flash存儲,可直接運行固件。該固件包含完整的 LwIP 協議棧,支持 IPv4 的TCP、UDP、HTTP 等常見協議。ESP8266 擴展板僅通過 UART/TX/RX引腳 與主板通信,主板僅需實現串口數據傳輸,不參與任何協議處理。主板(如STM32)僅需通過UART串口發送AT指令控制ESP8266,例如,AT+CIPSTART=“TCP”,“192.168.1.100”,8080 建立TCP連接。
進一步的,這意味著什么呢?我們不需要在主板程序中啟用LWIP協議棧,這將會減少很多的一筆開銷。
需要注意的是,ESP8266模組并不內置LwM2M客戶端,
如前文所述,其內置LwIP TCP/IP協議棧,支持基礎網絡通信,但并無內置LwM2M/CoAP這種更上層的應用層協議。在理論上,Wifi模組可以通過OpenCPU/SDK可集成CoAP/LwM2M,但需開發者手動實現,且資源占用較高。

支持的無線網絡模式

ESP8266 Wi-Fi擴展板(如小熊派開發板所用)支持三種主要無線網絡模式:
Station(STA)模式SoftAP(AP)模式STA+AP混合模式。這些模式決定了模塊如何與其他設備或網絡交互,適用于不同物聯網場景。
在這里插入圖片描述
Station (STA) 模式 - 客戶端角色,
源自 IEEE 802.11(Wi-Fi)標準術語,指連接到無線網絡的終端設備,如手機、筆記本電腦。你的手機連接家里路由器時,手機(相關通信模組)就是 Station,哈哈,這里的Station其含義車站的乘客,不是車站,AP才是車站,互聯網算是動車高鐵吧。當擴展板處于此工作模式時,它就相當于你的手機一樣,去鏈接你家的路由器。該角色下的設備,會包含掃描可用網絡、發起認證連接(向AP接入點的認證請求)、獲取IP地址(DHCP客戶端)等技術行為。

Access Point (AP) 模式 - 服務端角色,
IEEE 802.11 標準定義的無線網絡接入點,即提供Wi-Fi信號的設備,如,路由器。也就是說擴展板可以像我們家路由器那樣,做為網絡的創建者和服務提供者,主動廣播SSID創建無線網絡、為STA設備分配IP、路由數據,組件本地局域網。該角色下的設備,會有,廣播信標幀、宣告網絡存在,認證連接請求(如WPA2-PSK握手),作為DHCP服務器分配IP地址,等技術行為。SoftAP 區別于硬件AP(專用路由器芯片),其通常是資源受限的,具有臨時性,通常用于特定場景(如配網),在早期家用無線攝像頭配置方案里確實見過。

MCU通過串口與模組交互

在<IoT/透過oc_lwm2m和at源碼,分析NB-IoT通信模組和主板MCU之間的通信過程和工作機制> 文中,我們已經從軟件源碼層級上,分析論證了NB-IoT模組與主板MCU之間是通過串口進行通信的。那么ESP8266同樣依賴UART傳輸AT指令和數據嗎?首先,答案是肯定的。但在本文我們先不急著從軟件實現層次上去分析這個事情。因為看看硬件原理圖,一切就不容狡辯。實錘。

Wifi/ESP8266通信模組原理圖,
在這里插入圖片描述
NB-IoT通信模組原理圖,
在這里插入圖片描述
如上,無論是WiFi或NB-IoT通信模組,都具有串口Rx/Tx通信管腳導出,用于和主板進行串口通信,交互AT指令和數據。

Wifi模組做客戶端

在我們的實驗5-Wifi智慧農業,中 ESP8266,其工作在客戶端模式。

PC-AT接入路由器

其實一開始,我不知道ESP8266這東西還能用PC-AT指令接入接力的路由器,我是在看了一會源碼后才發現的。 <ESP-12F(ESP8266) AT指令使用示例.pdf> 等手冊可以從文中連接下載。接下來,我們根據手冊內容,進行些簡單實驗。與NB-IoT-AT指令的PC實踐一樣,撥碼開發要撥到PC側,但是這里的波特率是115200,不與PC-AT一樣了哈。

//設置模組為客戶端模式
AT+CWMODE=3
//固件中是純字符串解析,相當脆弱,一定要注意不要在任何地方不要亂加空格
AT+CWJAP="HUAWEI-IoT","1xxxxxxxxx2+"

在這里插入圖片描述
建立TCP連接,
在這里插入圖片描述
這里還鬧騰了烏龍。早期我使用Wifi代碼連接到平臺的實踐中,我連接的是家里凌霄路由器的客人WIFI,當時我是實驗成功的。現如今用PC-AT指令實驗,依據ESP8266的AT指令手冊,使用網絡助手在本地創建TCP服務端,使用AT指令控制ESP8266建立TCP連接,結果總是連接不上。我關閉了防火墻、禁用了所有其他網絡適配器,依然不行。但是當我切換到正常的WIFI網絡時,我就可以ping通了。當然,關閉防火墻或進行更細粒度的策略配置,肯定是必要,否則你肯定是ping不通的。至于為啥客網在PC-AT指令實現時,存在不通,可能這是凌霄Q6獨有策略吧,我沒再深究,沒有那個時間。

向本地TCP服務發數據

//查詢模組的IP地址
AT+CIFSR
//測試從模組到PC主機的可達性
AT+PING="192.168.155.10"
//連接到本地TCP服務
AT+CIPSTART="TCP","192.168.3.7",62100
//數據發送/發多了會被截斷哈
AT+CIPSEND=4

如下圖,我們發送 CSDN_DAHE_QU 多個字符,最終實際發送4個字符成功.
在這里插入圖片描述
我們前文提到過,ESP8266也是用AT指令與MCU通信的,看到上述CIPSTART、CIPSEND等指令,去源碼里搜一下就豁然開朗了。

用代碼接入你家路由器

首先在.config配置中,修改CONFIG_ESP8266_SSID和CONFIG_ESP8266_PWD的值,為你家的Wifi名稱和密碼。這兩個宏定義會在 ESP8266 驅動程序中使用,并最終作為 esp8266_joinap 函數的輸入參數,具體過程如下,

//宏重命名
#define WIFI_SSID                 CONFIG_ESP8266_SSID  //在.config模式下定義
#define WIFI_PASSWD               CONFIG_ESP8266_PWD   //在.config模式下定義
//使用上述宏作實參的函數實現
static bool_t esp8266_joinap(char *ssid, char *passwd) {char cmd[64];(void) memset(cmd,0,64);(void) snprintf(cmd,64,"AT+CWJAP_CUR=\"%s\",\"%s\"\r\n",ssid, passwd);return esp8266_atcmd(cmd,"OK");
}

通過上述函數實現可以看出來,底層通過調用擴展板的AT指令,完成擴展板與AP的鏈接過程。這里AT指令,可參見相關手冊。在代碼調試前,可以先基于PC上的AT指令測試上述連接過程。

已接入AP(你家Wifi)

這個過程挺順利的。我在終端中配置的是Q6訪客網的連接信息,在Q6的Web管理頁面中,可以檢索到擴展板連接情況。
在這里插入圖片描述

平臺側開發

與實驗-5/基于NB-IoT,使用相同產品模型和設備定義也是可以的。我們這里只重點再強調下設備注冊中的設備秘鑰配置問題。為了更好的說明一些問題,我們重新注冊一個新設備,包括密碼設置什么的,截圖上都不打碼,以更好的理解。
在這里插入圖片描述
密碼設置時,我坑了自己好幾次了,哈哈,還每次都覺得自己理解無誤。
在這里插入圖片描述
上述紅色告警信息有些不靠譜,自己與左側提示信息就矛盾著。
首先,華為云IoT平臺在創建注冊設備時,似乎無法區分是否為NB設備。其次,你輸入非16進制(0~F)字符,如H、J、Q等字符時,是無法通過輸入檢查的。上圖右側的告警,也很繞人。所謂1個十六進制字符,并不是字符串單字符的概念,如上0x00、0x99、0xAA 都只算是一個字符,即單字節8bit的16進制數據。是字節數據,不是字符數據,以A5為例,它可以使用0xA5這個單字節存儲或傳輸,當然也可以使用0x41(‘A’)和0x35(‘5’)兩個字節來存儲或傳輸。

另外,已經驗證過的一個問題是,
使用Wifi模組進行通信時,我們可以任意但唯一的指定設備標識碼,不必一定是MAC。NB-IoT設備不行哦,只能是IMEI。

工程配置和編譯

工程配置,并不復雜,基本可按照HCIP-IOT實驗手冊進行。編譯過程中倒是遇到了不少的麻煩。

工程配置

修改.config中的串口波特率。將NB-IoT連接模式修改為WIFI模式,詳情可參見具體源碼,點擊此鏈接下載即可。

CONFIG_UARTAT_BAUDRATE=115200
CONFIG_TCPIP_AL_ENABLE=y
CONFIG_ESP8266_ENABLE=y
CONFIG_ESP8266_SSID="HUAWEI-IoT"
CONFIG_ESP8266_PWD="135836xxx02+"
CONFIG_DTLS_AL_ENABLE=y    //記得打開
CONFIG_MBEDTLS_ENABLE=y    //記得打開
CONFIG_MBEDTLS_PSK=y       //記得打開
CONFIG_OCLWM2M_ENABLE=y
CONFIG_OCLWM2MTINY_ENABLE=y

編譯不過

開啟上述DTLS三聯配置后,編譯報錯,說是Flash溢出了,即Flash存不下編譯生成的elf可執行文件了,
在這里插入圖片描述
小熊派開發板使用的STM32L431RCT6,其片內Flash只有256K,確實不大。通過芯片手冊,或小熊派官網可以查詢到,
在這里插入圖片描述
為了驗證編譯器報錯是否靠譜,我們先造個假,欺騙下編譯器。我們修改在 LiteOS_Lab_HCIP\targets\STM32L431_BearPi\GCC 目錄下的 os.ld 配置文件,臨時設置Flash為512K,重新編譯。
在這里插入圖片描述
被欺騙的編譯器是可以通過編譯的。左側是啟用DTLS前的編譯結果,
在這里插入圖片描述
啟用DTLS后,作為編譯結果的程序大出來68000字節,約合65KB字節,為什么DTLS這么耗費存儲呢?是源碼中開啟的模塊宏,如一些調試和日志模塊。包括底層LiteOS的一些暫時不用的模塊,都開啟了。需要裁減,但是這很費心神,愁得慌啊真是。我當時先的辦法,
0、裁簡DTLS模塊。(LiteOS我還不是特別熟,可能裁減不好,DTLS我試了試,各個細枝末節有關聯,也沒有參考)
1、不使用DTLS,退回到不安全模式。 (后記/應該確實不支持了)
2、是使用外擴展的Flash,來存放程序。(這不簡單啊)
3、放棄使用小熊派開發板,轉而使用Flash更大的芯片或板子。(太貴了)

哎,每個都不簡單啊。好在天無絕人之路,LiteOS中的Wifi示例程序,盡然裁減的不錯,可以滿足編譯呢。使用小熊派提供的示例程序,
…\bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Demos\oc_wifi_lwm2m_agriculture,結合自己的代碼,結果如下,
在這里插入圖片描述

WIFI連接參數

基于LiteOS lwM2M_al 的核心封裝實現,在應用層看來,NB-IoT通信或基于Wifi通信是一致的,連設備接入流程的代碼都是一致的,只是在接入參數配置上有所區別,這是真替用戶考慮啊。應用層代碼實現請參考 #<IoT/HCIP實驗-5/基于NB-IoT的智慧農業實驗(平臺側開發+端側編碼+基礎調試分析)>#,本文只簡單說說WIFI通信下的設備接入配置。

#define cn_app_pskid     "csdn_dahe_0528"
//#define cn_app_psk     "00112233445566778899" //這是錯誤的哈
const unsigned char  cn_app_psk[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA};
#define cn_app_psklen     10 //建議使用sizeof(cn_app_psk)static int app_report_task_entry() {...oc_param.app_server.address = CONFIG_APP_SERVERIP;oc_param.app_server.port = CONFIG_APP_SERVERPORT;oc_param.app_server.ep_id = CONFIG_APP_ENDPOIINT_ID;oc_param.boot_mode = en_oc_boot_strap_mode_factory;oc_param.rcv_func = app_msg_deal;#if 1 //CoAPS/DTLS加密oc_param.app_server.ep_id = cn_app_pskid;oc_param.app_server.psk = (char *)cn_app_psk;oc_param.app_server.psk_len = sizeof(cn_app_psk);oc_param.app_server.psk_id = cn_app_pskid;#endifret = oc_lwm2m_config( &oc_param);...
}

特別注意,特別注意,WIFI下的oc_param.app_server.psk,即cn_app_psk定義,與NB-IoT不同,不是使用字符串哈。

接入AP成功,IoTDA失敗

異常分析,小熊派開發板使用Wifi通信擴展板,接入AP成功,但是連接平臺失敗,

[DEBUG][189183][registration_step:1382] [189][registration_step:1382] targetP Status: STATE_REG_PENDING
[DEBUG][189192][transaction_step:505] [189][transaction_step:505] Entering
[DEBUG][189199][lwm2m_step:767] [189][lwm2m_step:767] Final timeoutP: ld
[DEBUG][189206][lwm2m_step:769] [189][lwm2m_step:769] Final state: STATE_REGISTERING

小熊派開發板WiFi接入AP成功后連接華為云平臺失敗(狀態卡在STATE_REG_PENDING和STATE_REGISTERING)。平臺地址或端口配置已經在NB-IoT實驗中進行過實驗(后來發現這是病灶)。因此分析最可能導致上述問題的原因是,DTLS握手失敗。

無可用加密套件

握手失敗錯誤-0x6900通常因未啟用CCM_C或PSK導致。
在這里插入圖片描述
在這里插入圖片描述
我在嘗試自己裁減HCIP-IoT-Lab代碼中的DTLS算法庫時,曾經遇到以上問題,關鍵原因是無可用加密套件,或者是PSK與平臺設置不一致,在后續的其他文章中,我們還會單獨針對DTLS采集重新討論。

成功接入平臺

設備側接入日志,
在這里插入圖片描述
平臺側設備詳情,
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95857.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

定時器輸出PWM波配置(呼吸燈)

使用定時器 4 通道 3 生成 PWM 波控制 LED1 &#xff0c;實現呼吸燈效果。 頻率&#xff1a;2kHz&#xff0c;PSC71&#xff0c;ARR499pwm.c:#include "pwm.h" // 本模塊頭文件&#xff1a;應聲明 pwm_init/pwm_compare_set 等原型、并包含 HAL 頭//&#xff08;示…

[ai-agent]環境簡介之沙盒e2b vs daytona

所謂的環境的就是agent運行在哪里&#xff0c;或者是agent和那里進行交互。 最常見的環境就是本地開發環境&#xff0c;也就是個人主機&#xff0c;但是存在問題就是沒有辦法出網和橫向擴展。 在沙盒之前也是有其他選擇的&#xff1a; 云服務器&#xff0c; 虛擬機&#xff0c;…

【前端面試題】前端面試知識點(第三十一題到第六十一題)

三十一. CSS實現垂直水平居中 實現元素的垂直水平居中是前端開發中的常見需求,主要有以下幾種思路: text-align + line-height實現單行文本水平垂直居中 適用于單行文本元素,通過text-align: center實現水平居中,line-height等于容器高度實現垂直居中 text-align + vertic…

嵌入式練習項目——————抓包獲取天氣信息

一、內容 嘗試通過實時天氣接口 - 數據接口 - NowAPI此網站獲取天氣信息&#xff0c;實現可以發送城市查詢當前天氣和未來天氣 二、獲取請求報文 可以根據測試示例看到獲取內容&#xff0c;此時數據是cJSON格式&#xff0c;我們首先要通過合適的網址抓包獲取到請求報文&#x…

Python爬蟲實戰:研究NewsCrawl ,構建新浪和網易新聞數據采集系統

1. 引言 1.1 研究背景與意義 在信息時代,新聞作為社會動態、公眾觀點的重要載體,其傳播速度與影響力持續擴大。傳統的人工篩選與采集方式已無法滿足對海量新聞數據的高效處理需求,亟需自動化工具實現大規模、結構化的新聞數據采集。網絡爬蟲技術作為一種按照預設規則自動抓…

PyTorch神經網絡工具箱全解析:nn.Module vs nn.functional

&#x1f50d; 為何需要神經網絡工具箱&#xff1f; 在僅用 Autograd 和 Tensor 實現模型時&#xff0c;開發者需手動設置參數梯度&#xff08;requires_gradTrue&#xff09;、反向傳播&#xff08;backward()&#xff09;及梯度提取&#xff0c;過程繁瑣且易出錯。nn 工具箱應…

Java注解學習記錄

目錄 一、為什么要學注解&#xff1f; 二、注解是什么&#xff1f; 三、為什么要使用注解&#xff1f; 四、注解的作用 五、注解的分類 5.1 元注解 Retention&#xff08;/ r??ten?(?)n /&#xff09; ★★★★★ Target ★★★★★ Inherited(/ ?n?her?t?d /…

43.安卓逆向2-補環境-使用unidbg(使用Smali語法調用方法和使用方法地址調用方法)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

【Kubernetes知識點問答題】Pod 調度

1. 如何將特定 Pod 調度到指定的節點&#xff1f;可以使用下列方法中的任何一種來選擇 K8s 對特定 Pod 的調度&#xff1a;① 與節點標簽匹配的 nodeSelector&#xff1a;在 Pod 的規范中使用 nodeSelector 字段來指定節點標簽&#xff0c;以便將 Pod 調度到具有特定標簽的節點…

wordpress顯示時間日期的幾種常見的方式

在WordPress中&#xff0c;顯示時間日期有多種常見方式&#xff0c;包括使用默認設置、模板標簽、插件等&#xff0c;以下是詳細介紹&#xff1a; 使用默認設置 WordPress的默認設置允許你在文章列表中顯示文章的發布時間。登錄到WordPress后臺&#xff0c;在“設置”中找到“…

基于飛算JavaAI實現布隆過濾器防止緩存穿透:原理、實踐與全流程解析

引言&#xff1a;當緩存失效時&#xff0c;系統如何避免“雪崩式崩潰”&#xff1f; 在互聯網高并發場景中&#xff08;如電商秒殺、社交平臺熱點新聞&#xff09;&#xff0c;緩存是提升系統性能的核心手段——將頻繁訪問的數據&#xff08;如商品詳情、用戶信息&#xff09;存…

DeepResearch開源與閉源方案對比

在這個AI不再只是聊天工具的時代&#xff0c;"深度研究"已經成為大語言模型&#xff08;LLM&#xff09;的一項新能力。先進的LLM不再只是給出快速的一次性回答&#xff0c;而是可以像研究助手一樣工作——搜索網上信息&#xff0c;調用各種工具&#xff08;比如搜索…

UniApp 頁面傳參方式詳解

在 UniApp 開發中&#xff0c;頁面間參數傳遞是核心功能之一。以下是 8 種常用的傳參方式&#xff0c;每種方式都有其適用場景和特點&#xff1a;一、URL 拼接傳參&#xff08;最常用&#xff09; 適用場景&#xff1a;簡單數據傳遞&#xff0c;如 ID、狀態值等基礎類型數據 實…

音頻分類標注工具

pyqt 分類標注工具&#xff1a;import glob import sys import json import os from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableWidget, QTableWidgetItem,QSplitter, QVBoxLayout, QWidget, QPushButton, QRadioButton,QButtonGroup, QLabel, QHBoxLayout, Q…

云計算-Kubernetes+Istio 實現金絲雀發布:流量管理、熔斷、流量鏡像、ingreess、污點及pv案例實戰

介紹 在微服務架構中,如何安全、高效地實現服務發布與流量管理是保障業務穩定性的核心挑戰。金絲雀發布(Canary Release)、灰度發布等策略通過精細化的流量控制,可有效降低新版本上線風險, Istio 作為主流的服務網格(Service Mesh)工具。 此次Istio 在 Kubernetes 集群…

12.web api 3

定時器-間歇函數

ComfyUI進階:EchoMimic插件全解析,讓靜態肖像實現音頻驅動的精準口型動畫

在數字內容創作中&#xff0c;讓靜態肖像“開口說話”并做出自然表情&#xff0c;是提升交互感與沉浸感的關鍵。傳統動畫制作需專業人員逐幀調整口型與表情&#xff0c;成本高且效率低。ComfyUI的EchoMimic插件通過音頻驅動技術&#xff0c;實現了“輸入音頻→自動生成匹配口型…

鏈式前向星、vector存圖

場景設定 想象你是一個社交達人&#xff0c;要記錄你和所有朋友的關系&#xff08;這就是“圖”&#xff09;。每個朋友是一個節點&#xff0c;關系是一條邊。你需要快速回答&#xff1a;“我有哪些朋友&#xff1f;”&#xff08;遍歷鄰居&#xff09;。方式1&#xff1a;鏈式…

YAML 中定義 List 的幾種方式

在 YAML 配置文件中定義 List 并在 Spring 應用中注入是非常常見的操作&#xff0c;下面詳細介紹具體寫法和注入方式。一、YAML 中定義 List 的幾種方式1. 縮進式寫法&#xff08;推薦&#xff09;最常用的方式&#xff0c;通過短橫線 - 加空格表示列表項&#xff1a;yaml# app…

C# 反射和特性(自定義特性)

自定義特性 你或許已經注意到了&#xff0c;應用特性的語法和之前見過的其他語法有很大不同。你可能會覺得特 性是一種完全不同的結構類型&#xff0c;其實不是&#xff0c;特性只是一種特殊的類。 有關特性類的一些要點如下。 用戶自定義的特性類叫作自定義特性。所有特性類都…