ardunio R4 WiFi連接實戰

ardunio WiFi連接模板

ardunio R4 WiFi 開發板有著不錯的性能和板載內存,本機自帶 WiFi 連接模塊,可以完成簡單的網絡服務。對于這個小東西我情有獨鐘,也總希望能夠用它來做些什么,所以先從 WiFi 連接開始學起,未來考慮一步一步為它接入大模型服務,做出一個小的桌面顯示小玩具。

WiFiClient 只能訪問簡單的http鏈接

ardunio R4 WiFi開發板依賴WiFiS3.h庫進行網絡連接。同時,最好新建一個保存密鑰的頭文件保存WiFi名稱和密碼。

使用WiFiClient聲明client對象,用于表示一個TCP/IP客戶端(類似于網絡套接字)。并聲明WiFi連接狀態status,初始化為WL_IDLE_STATUSWifiS3庫內置如下幾種WiFi連接狀態:

  • WL_NO_SHIELD** / **WL_NO_MODULE :沒有檢測到WiFi模塊。
  • WL_IDLE_STATUS :WiFi模塊處于空閑狀態。
  • WL_NO_SSID_AVAIL :沒有可用的SSID。
  • WL_SCAN_COMPLETED :WiFi掃描完成。
  • WL_CONNECTED :成功連接到WiFi網絡。
  • WL_CONNECT_FAILED :連接失敗。
  • WL_CONNECTION_LOST :連接丟失。
  • WL_DISCONNECTED :斷開連接。
  • WL_AP_LISTENING :WiFi模塊作為接入點監聽中。
  • WL_AP_CONNECTED :設備已連接到WiFi模塊作為接入點。
  • WL_AP_FAILED :接入點模式啟動失敗。
WiFiClient client;
int status = WL_IDLE_STATUS;

之后在setup中配置網絡連接初始化:聲明波特率 → WiFi連接 → 嘗試連接直到成功 → 打印IP。

void setup() {Serial.begin(115200);delay(1000);Serial.println("Connecting to WiFi");WiFi.begin(ssid, pass);                          //WifiS3庫已經內置WiFi全局變量,可以直接使用while(WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("Connected to WiFi");Serial.println("IP Address: ");Serial.println(WiFi.localIP());}

WiFiSSLClient 可以訪問https安全鏈接

WiFiClient只能訪問基礎的http連接,想要允許 Arduino 設備通過 WiFi 網絡與支持 SSL/TLS 加密的服務器建立安全連接,從而安全地發送和接收數據需要使用WiFiSSLClient 類。它的使用方法和WiFiClient相似,只需改為聲明WiFiSSLClient client;

為了向服務器發送請求,我們使用如下方式添加請求內容:

if (client.connect(server, 443)) {Serial.println("connected to server");client.println("GET / HTTP/1.1");client.println("Host: www.google.com");client.println("Connection: close");client.println();
}

client.connect(server, 443)這行代碼嘗試通過TCP/IP協議連接到目標服務器的443端口(HTTPS默認端口)。如果連接成功,說明Arduino已經與網頁服務器建立了通信通道。

client.println() 是用來向服務器發送HTTP請求,GET / HTTP/1.1表示請求根路徑(/)的內容,使用HTTP 1.1協議;**Host: www.google.com指定目標主機名;Connection: close**告訴服務器在響應完成后關閉連接。

請求完成,我們可以使用如下方式查看服務器響應內容:

void read_response() {uint32_t received_data_num = 0;while (client.available()) {/* actual data reception */char c = client.read();/* print data to serial port */Serial.print(c);/* wrap data to 80 columns*/received_data_num++;if(received_data_num % 80 == 0) {Serial.println();}}
}

參考完整示例,訪問少數派文章為Claude桌面端集成tavily搜索 - 少數派

/*TLS WiFi Web client - 訪問少數派文章Board CA Root certificate bundle is embedded inside WiFi firmware:https://github.com/arduino/uno-r4-wifi-usb-bridge/blob/main/certificates/cacrt_all.pem
*/#include "WiFiS3.h"
#include "WiFiSSLClient.h"
#include "IPAddress.h"#include "secret.h"///please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID;        // your network SSID (name)
char pass[] = SECRET_PASS;        // your network password (use for WPA, or use as key for WEP)int status = WL_IDLE_STATUS;
// 修改為少數派網站
char server[] = "sspai.com";    // 少數派網站域名// Initialize the SSL client
WiFiSSLClient client;/* -------------------------------------------------------------------------- */
void setup() {
/* -------------------------------------------------------------------------- *///Initialize serial and wait for port to open:Serial.begin(115200);while (!Serial) {; // wait for serial port to connect. Needed for native USB port only}// check for the WiFi module:if (WiFi.status() == WL_NO_MODULE) {Serial.println("Communication with WiFi module failed!");// don't continuewhile (true);}String fv = WiFi.firmwareVersion();if (fv < WIFI_FIRMWARE_LATEST_VERSION) {Serial.println("Please upgrade the firmware");}// attempt to connect to WiFi network:while (status != WL_CONNECTED) {Serial.print("Attempting to connect to SSID: ");Serial.println(ssid);// Connect to WPA/WPA2 network.status = WiFi.begin(ssid, pass);// wait 10 seconds for connection:delay(10000);}printWifiStatus();Serial.println("\nStarting connection to sspai.com...");// if you get a connection, report back via serial:if (client.connect(server, 443)) {Serial.println("connected to server");// Make a HTTP request for the specific article:client.println("GET /post/97248 HTTP/1.1");client.println("Host: sspai.com");client.println("User-Agent: Mozilla/5.0 (compatible; Arduino/1.0)");  // 添加更友好的User-Agentclient.println("Accept: text/html");                                  // 接受HTML內容client.println("Connection: close");client.println();} else {Serial.println("Connection to server failed");}
}/* just wrap the received data up to 80 columns in the serial print*/
/* -------------------------------------------------------------------------- */
void read_response() {
/* -------------------------------------------------------------------------- */uint32_t received_data_num = 0;while (client.available()) {/* actual data reception */char c = client.read();/* print data to serial port */Serial.print(c);/* wrap data to 80 columns*/received_data_num++;if(received_data_num % 80 == 0) {Serial.println();}}
}/* -------------------------------------------------------------------------- */
void loop() {
/* -------------------------------------------------------------------------- */read_response();// if the server's disconnected, stop the client:if (!client.connected()) {Serial.println();Serial.println("disconnecting from server.");client.stop();// do nothing forevermore:while (true);}
}/* -------------------------------------------------------------------------- */
void printWifiStatus() {
/* -------------------------------------------------------------------------- */// print the SSID of the network you're attached to:Serial.print("SSID: ");Serial.println(WiFi.SSID());// print your board's IP address:IPAddress ip = WiFi.localIP();Serial.print("IP Address: ");Serial.println(ip);// print the received signal strength:long rssi = WiFi.RSSI();Serial.print("signal strength (RSSI):");Serial.print(rssi);Serial.println(" dBm");
}

串口打印示例:

14:11:22.536 -> SSID: ZTE_2AED09
14:11:22.536 -> IP Address: 192.168.0.5
14:11:22.578 -> signal strength (RSSI):-51 dBm
14:11:22.578 -> 
14:11:22.578 -> Starting connection to sspai.com...
14:11:23.804 -> connected to server
14:11:24.536 -> HTTP/1.1 200 OK
14:11:24.536 -> Date: Thu, 13 Mar 2025 06:11:22 GMT
14:11:24.536 -> Content-Type: text/html; c
14:11:24.536 -> harset=utf-8
14:11:24.536 -> Content-Length: 119824
14:11:24.536 -> Connection: close
14:11:24.536 -> Vary: Accept-Encoding
14:11:24.536 -> 
14:11:24.536 -> Cache-Control: no-store
14:11:24.536 -> 
14:11:24.536 -> <!DOCTYPE html>
14:11:24.536 -> <html lang="zh-CN" id="html">
14:11:24.536 -> <head>
14:11:24.536 -> 
14:11:24.536 ->   <meta charset="utf-8">
14:11:24.536 ->   <meta name="viewport" content="width=device-width, us
14:11:24.536 -> er-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewpor
14:11:24.568 -> t-fit=cover">
14:11:24.568 ->   <meta name="theme-color" content="" />
14:11:24.568 ->   <meta
14:11:24.568 ->     http-equiv="C
14:11:24.568 -> ontent-Security-Policy"
14:11:24.568 ->     content="frame-src https://sspai.com https://*.sspai
14:11:24.568 -> .com https://*.bilibili.com https://bilibili.com https://v.qq.com https://embed.
14:11:24.568 -> music.apple.com https://jinshuju.net https://share.newsroom.apple;"
14:11:24.607 ->   >
14:11:24.607 ->   <meta 
14:11:24.607 -> name="fragment" content="!">
14:11:24.607 ->   <link rel="shortcut icon" href="https://cdn-stati
14:11:24.607 -> c.sspai.com/favicon/sspai.ico" type="image/x-icon" />
14:11:24.607 ->   <link rel="icon" href="h...14:11:48.951 ->     var _hmt = _hmt || []
14:11:48.951 -> ;
14:11:48.951 ->     (function () {
14:11:48.951 ->       var hm = document.createElement("script");
14:11:48.951 ->       hm.s
14:11:48.951 -> rc = "//hm.baidu.com/hm.js?92174dab8163cf598817a93d11d5c588";
14:11:48.984 ->       var s = docu
14:11:48.984 -> ment.getElementsByTagName("script")[0];
14:11:48.984 ->       s.parentNode.insertBefore(hm, s);
14:11:48.984 -> 
14:11:48.984 ->     })();
14:11:48.984 -> 
14:11:48.984 ->   </script>
14:11:48.984 ->   <!-- Baidu Push -->
14:11:48.984 ->   <script>
14:11:48.984 ->     (function () {
14:11:48.984 ->      
14:11:48.984 ->  var bp = document.createElement('script');
14:11:48.984 ->       var curProtocol = window.locat
14:11:48.984 -> ion.protocol.split(':')[0];
14:11:48.984 ->       if (curProtocol === 'https') {
14:11:48.984 ->         bp.src 
14:11:48.984 -> = 'https://zz.bdstatic.com/linksubmit/push.js';
14:11:48.984 ->       } else {
14:11:49.025 ->         bp.src = 
14:11:49.025 -> 'http://push.zhanzhang.baidu.com/push.js';
14:11:49.025 ->       }
14:11:49.025 ->       var s = document.getEle
14:11:49.025 -> mentsByTagName("script")[0];
14:11:49.058 ->       s.parentNode.insertBefore(bp, s);
14:11:49.058 ->     })();
14:11:49.058 ->  
14:11:49.058 ->  </script>
14:11:49.058 -> </body>
14:11:49.058 -> </html>
14:11:49.058 -> 
14:11:49.058 -> disconnecting from server.

WiFiServer把ardunio作為服務器

ardunio同樣可以作為服務器使用,提供瀏覽器以http訪問IP的能力。它的交互過層如下:

  1. 瀏覽器(客戶端)連接到Arduino的IP地址
  2. 瀏覽器發送HTTP請求
  3. Arduino處理請求并返回網頁內容
  4. 瀏覽器接收內容并斷開連接
  5. Arduino在串口打印“客戶端斷開連接”

通過聲明WiFiServer server(80);來定義服務器。之后,使用server.begin();啟動服務器。主循環參考如下:

void loop() {// 檢查是否有新的客戶端連接WiFiClient client = server.available();if (client) {Serial.println("新客戶連接");String currentLine = "";    // 用于存儲當前讀取的HTTP請求行// 當客戶端保持連接時持續處理while (client.connected()) {// 檢查是否有數據可讀if (client.available()) {// 逐字符讀取HTTP請求char c = client.read();Serial.write(c);        // 將讀取的字符輸出到串口監視器// 處理換行符if (c == '\n') {// 空行標志著HTTP請求頭的結束if (currentLine.length() == 0) {sendHttpResponse(client);  // 發送HTTP響應break;                     // 退出處理循環} else {currentLine = "";         // 重置當前行,準備讀取下一行}} else if (c != '\r') {      // 忽略回車符currentLine += c;           // 將字符添加到當前行}}}delay(1);                        // 短暫延時確保數據傳輸完成client.stop();                   // 關閉客戶端連接Serial.println("客戶端斷開連接");}
}

當瀏覽器向ardunio發送請求時,ardunio服務器會向客戶端發送HTTP響應,通過自定義的sendHttpResponse函數封裝了這個響應,它具體如下:

void sendHttpResponse(WiFiClient &client) {// 發送HTTP頭client.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html; charset=UTF-8");client.println("Connection: close");client.println();// 發送HTML內容client.print(HTML_HEADER);// 可以在這里處理動態內容替換String content = HTML_CONTENT;content.replace("%SERVER_TIME%", String(millis() / 1000));client.print(content);client.print(HTML_FOOTER);
}
  • client.println("HTTP/1.1 200 OK"); :這行代碼發送HTTP狀態行。 HTTP/1.1 表示使用的HTTP協議版本, 200 是狀態碼,代表請求已成功處理, OK 是狀態碼對應的文本描述。客戶端收到這個狀態行后,就知道請求已經成功處理。
  • client.println("Content-Type: text/html; charset=UTF-8"); :這行代碼發送 Content-Type 頭部。它告訴客戶端響應內容的類型是HTML,并且使用的字符編碼是UTF - 8。這樣客戶端就能正確解析和顯示響應內容。
  • client.println("Connection: close"); :這行代碼發送 Connection 頭部。 close 表示在響應完成后,服務器會關閉與客戶端的連接。這是一種常見的做法,特別是在處理簡單的HTTP請求時。
  • client.println(); :這行代碼發送一個空行。在HTTP協議中,空行用于分隔頭部和主體。發送空行后,后續發送的內容就是響應的主體部分了。

服務器完整示例如下

#include "WiFiS3.h"
#include "IPAddress.h"
#include "secret.h" // 確保創建此文件
#include "html_content.h"// 在arduino_secrets.h中定義您的網絡憑據
// #define SECRET_SSID "ZTE_2AED09" 
// #define SECRET_PASS "您的密碼"
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;int status = WL_IDLE_STATUS;
WiFiServer server(80);void setup() {// 初始化串口通信Serial.begin(115200);while (!Serial) {; // 等待串口連接}Serial.println("Arduino Web Server啟動");// 檢查WiFi模塊if (WiFi.status() == WL_NO_MODULE) {Serial.println("WiFi模塊通信失敗!");while (true); // 不繼續}// 檢查固件版本String fv = WiFi.firmwareVersion();Serial.print("WiFi固件版本: ");Serial.println(fv);if (fv < WIFI_FIRMWARE_LATEST_VERSION) {Serial.println("請升級固件");}// 連接到WiFi網絡while (status != WL_CONNECTED) {Serial.print("嘗試連接到SSID: ");Serial.println(ssid);// 連接到WPA/WPA2網絡status = WiFi.begin(ssid, pass);// 等待10秒連接delay(10000);}// 打印WiFi狀態printWifiStatus();// 啟動服務器server.begin();Serial.println("服務器已啟動");
}void loop() {// 檢查是否有新的客戶端連接WiFiClient client = server.available();if (client) {Serial.println("新客戶連接");String currentLine = "";    // 用于存儲當前讀取的HTTP請求行// 當客戶端保持連接時持續處理while (client.connected()) {// 檢查是否有數據可讀if (client.available()) {// 逐字符讀取HTTP請求char c = client.read();Serial.write(c);        // 將讀取的字符輸出到串口監視器// 處理換行符if (c == '\n') {// 空行標志著HTTP請求頭的結束if (currentLine.length() == 0) {sendHttpResponse(client);  // 發送HTTP響應break;                     // 退出處理循環} else {currentLine = "";         // 重置當前行,準備讀取下一行}} else if (c != '\r') {      // 忽略回車符currentLine += c;           // 將字符添加到當前行}}}delay(1);                        // 短暫延時確保數據傳輸完成client.stop();                   // 關閉客戶端連接Serial.println("客戶端斷開連接");}
}void sendHttpResponse(WiFiClient &client) {// 發送HTTP頭client.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html; charset=UTF-8");client.println("Connection: close");client.println();// 發送HTML內容client.print(HTML_HEADER);// 可以在這里處理動態內容替換String content = HTML_CONTENT;content.replace("%SERVER_TIME%", String(millis() / 1000));client.print(content);client.print(HTML_FOOTER);
}void printWifiStatus() {// 打印SSIDSerial.print("SSID: ");Serial.println(WiFi.SSID());// 打印IP地址IPAddress ip = WiFi.localIP();Serial.print("IP Address: ");Serial.println(ip);// 打印信號強度long rssi = WiFi.RSSI();Serial.print("signal strength (RSSI):");Serial.print(rssi);Serial.println(" dBm");// 顯示訪問鏈接Serial.println();Serial.print("在瀏覽器中訪問 http://");Serial.println(ip);
}

http網頁

#ifndef HTML_CONTENT_H
#define HTML_CONTENT_H// HTML頭部
const char HTML_HEADER[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Arduino Web服務器</title><style>body {font-family: Arial, sans-serif;margin: 20px;text-align: center;background-color: #f0f0f0;}h1 {color: #0066cc;}.container {max-width: 800px;margin: 0 auto;background-color: white;padding: 20px;border-radius: 8px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);}</style>
</head>
<body><div class="container">
)rawliteral";// 主要內容
const char HTML_CONTENT[] PROGMEM = R"rawliteral(<h1>Arduino Web服務器</h1><p>歡迎訪問Arduino UNO R4 WiFi服務器!</p><p>服務器運行正常</p><p>當前時間: <span id="server-time">%SERVER_TIME%</span></p>
)rawliteral";// 底部
const char HTML_FOOTER[] PROGMEM = R"rawliteral(</div>
</body>
</html>
)rawliteral";#endif

串口打印

打開瀏覽器,訪問http://192.168.0.5

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

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

相關文章

C++11 編譯使用 aws-cpp-sdk

一、對sdk的編譯前準備 1、軟件需求 此文檔針對于在Linux系統上使用源碼進行編譯開發操作系統使用原生的contos7Linux。機器配置建議 內存8G以上,CPU 4個 以上GCC 4.9.0 及以上版本Cmake 3.12以上 3.21以下apt install libcurl-devel openssl-devel libuuid-devel pulseaudio-…

得物 Android Crash 治理實踐

一、前言 通過修復歷史遺留的Crash漏報問題&#xff08;包括端側SDK采集的兼容性優化及Crash平臺的數據消費機制完善&#xff09;&#xff0c;得物Android端的Crash監控體系得到顯著增強&#xff0c;使得歷史Crash數據的完整捕獲能力得到系統性改善&#xff0c;相應Crash指標也…

SpringBoot3+Lombok如何配置logback輸出日志到文件

Background/Requirement SpringBoot3Lombok如何配置logback輸出日志到文件&#xff0c;因為我需要對這些日志進行輸出&#xff0c;控制臺輸出和文件輸出&#xff0c;文件輸出是為了更好的作為AuditLog且支持滾動式備份&#xff0c;每天一個文件。 Technical Solution 1.確保你…

主流向量數據庫對比

在 AI 的 RAG&#xff08;檢索增強生成&#xff09;研發領域&#xff0c;向量數據庫是存儲和查詢向量嵌入的核心工具&#xff0c;用于支持高效的語義搜索和信息檢索。向量嵌入是文本或其他非結構化數據的數值表示&#xff0c;RAG 系統通過這些嵌入從知識庫中檢索相關信息&#…

搞定python之四----函數、lambda和模塊

本文是《搞定python》系列專欄的第四篇&#xff0c;通過代碼演示列python自定義函數、lambda和模塊的用法。本文學習完成后&#xff0c;python的基礎知識就完了。后面會學習面向對象的內容。 1、自定義函數 # 測試python自定義函數# 有參數&#xff0c;沒有返回值 def say_he…

[操作系統] 學校課程關于“靜態優先級搶占式調度“作業

今天我們來分享兩道題目哈, 學校弄得題目. T1: 靜態優先級, 搶占式(1為高優先級) 圖解: 以下是靜態優先級搶占式調度的解題過程和結果&#xff1a; 解題思路&#xff1a; 優先級規則&#xff1a; 數值越小優先級越高。新進程到達時&#xff0c;若其優先級高于當前運行進程&…

洛谷P1320 壓縮技術(續集版)

P1320 壓縮技術&#xff08;續集版&#xff09; 題目描述 設某漢字由 N N N \times N NN 的 0 \texttt 0 0 和 1 \texttt 1 1 的點陣圖案組成。 我們依照以下規則生成壓縮碼。連續一組數值&#xff1a;從漢字點陣圖案的第一行第一個符號開始計算&#xff0c;按書寫順序從…

使用DeepSeek完成一個簡單嵌入式開發

開啟DeepSeek對話 請幫我使用Altium Designer設計原理圖、PCB&#xff0c;使用keil完成代碼編寫&#xff1b;要求&#xff1a;使用stm32F103RCT6為主控芯片&#xff0c;控制3個流水燈的原理圖 這里需要注意&#xff0c;每次DeepSeek的回答都不太一樣。 DeepSeek回答 以下是使…

volatile、synchronized和Lock

名詞解釋&#xff1a; 指令重排是計算機為了優化執行效率&#xff0c;在不改變單線程程序結果的前提下&#xff0c;對代碼的執行順序進行重新排列的操作。它可能發生在編譯階段&#xff08;編譯器優化&#xff09;或CPU運行階段&#xff08;處理器優化&#xff09;。 舉個栗子…

嵌入式八股C語言---面向對象篇

面向對象與面向過程 面向過程 就是把整個業務邏輯分成多個步驟,每步或每一個功能都可以使用一個函數來實現面向對象 對象是類的實例化,此時一個類就內部有屬性和相應的方法 封裝 在C語言里實現封裝就是實現一個結構體,里面包括的成員變量和函數指針,然后在構造函數中,為結構體…

Distilling the Knowledge in a Neural Network知識蒸餾

一.知識蒸餾的定義 1. 量化VS蒸餾 量化&#xff1a;減小精度 例如參數float32—>float16蒸餾&#xff1a;Student model模仿Teacher model,在保持較高性能的同時&#xff0c;減少模型大小和計算復雜度的技術。 二.知識蒸餾步驟 1.教師模型訓練: 訓練一個大型且復雜的神…

靜態程序分析

參考&#xff1a;https://github.com/RangerNJU/Static-Program-Analysis-Book/blob/master/SUMMARY.md 課件&#xff1a;https://pascal-group.bitbucket.io/teaching.html 視頻&#xff1a;南京大學《軟件分析》課程01&#xff08;Introduction&#xff09;_嗶哩嗶哩_bilib…

Flutter_學習記錄_device_info_plus 插件獲取設備信息

引入三方庫device_info_plus導入頭文件 import package:device_info_plus/device_info_plus.dart;獲取設備信息的主要代碼 DeviceInfoPlugin deviceInfoPlugin DeviceInfoPlugin(); BaseDeviceInfo deviceInfo await deviceInfoPlugin.deviceInfo;完整案例 import package…

日有所得-google 瀏覽器離線安裝

一、目標&#xff1a; 基于UOS系統進行瀏覽器插件開發&#xff0c;目標展現形式為側欄 二、背景&#xff1a; UOS操作系統需支持1032及以上版本 瀏覽器插件基于google瀏覽器&#xff0c;自帶360等瀏覽器能兼容基于google瀏覽器開發的插件 JS庫借用Vue庫以提高效率 三、問…

高效自動化測試:打造Python+Requests+Pytest+Allure+YAML的接口測試框架

一、背景 在快節奏的開發周期中&#xff0c;如何確保接口質量&#xff1f;自動化測試是關鍵。通過構建標準化、可復用的測試框架&#xff0c;能顯著提升測試效率與準確性&#xff0c;為項目質量保駕護航[1][7]。 二、目標 ? 核心目標&#xff1a; ● 實現快速、高效的接口測試…

談談List,Set,Map的區別

List、Set 和 Map 是 Java 集合框架&#xff08;Java Collections Framework&#xff09;中的三種主要接口&#xff0c;它們各自有不同的特點和用途。以下是它們的區別和使用場景的詳細解釋&#xff1a; 1. List&#xff08;列表&#xff09; 1.1 特點 有序集合&#xff1a;Li…

智能運維管理系統的主要優勢

智能運維管理系統通過整合大數據、人工智能、機器學習等技術&#xff0c;顯著提升了IT運維的效率和質量。以下是智能運維管理系統的主要優勢&#xff1a; 一、提升運維效率 1.自動化運維 自動執行重復性任務&#xff08;如日志分析、故障排查、系統備份&#xff09;&#xf…

分享一個用來解決運維問題的 AI 提示詞

模板如下&#xff08;每次我都是自己寫的&#xff0c;但是感覺可以更加調優一些&#xff09; 我遇到了如下問題<問題的清晰描述>你是一位資深運維工程師&#xff0c;任務是指導我一步步排查并解決上面的問題排查過程中&#xff0c;你給我操作指示&#xff0c;我將操作的…

【python運行Janus-Pro-1B文生圖功能】

前言 體驗了一把本地部署Janus-Pro-1B實現文生圖功能。 1、開源項目下載 官方開源項目代碼直接從Github上下載。 2、模型下載 模型官方下載需要魔法 Janus-Pro-1B模型文件&#xff1a;Janus-Pro-1B模型文件 百度網盤&#xff1a; https://pan.baidu.com/s/16t4H4z-QZe2UDAg4…

跨越時空的對話:圖靈與GPT-4聊AI的前世今生

&#xff08;背景&#xff1a;虛擬咖啡廳&#xff0c;圖靈身著1950年代西裝&#xff0c;端著一杯熱茶&#xff0c;GPT-4以全息投影形態坐在對面&#xff09; 圖靈&#xff08;喝了口茶&#xff09;&#xff1a;“聽說你能寫詩&#xff1f;我當年在布萊切利園破解Enigma時&…