Wio Terminal以太網(wǎng)連接實戰(zhàn):W5500硬件協(xié)議棧與Arduino網(wǎng)絡編程
1. 從Wi-Fi到有線為什么我們需要Wio Terminal的以太網(wǎng)連接如果你玩過Seeed Studio的Wio Terminal大概率是從它的Wi-Fi功能入手的。這塊自帶屏幕、按鍵和豐富傳感器的小板子配合Arduino框架和Grove生態(tài)做物聯(lián)網(wǎng)原型開發(fā)確實方便。但當你把項目從實驗室搬到工廠車間或者想做一個更穩(wěn)定的數(shù)據(jù)采集節(jié)點時Wi-Fi的局限性就暴露出來了信號波動、連接中斷、配置復雜尤其是在電磁環(huán)境復雜的工業(yè)現(xiàn)場無線連接的不確定性可能成為整個系統(tǒng)的阿喀琉斯之踵。這時有線以太網(wǎng)連接的價值就凸顯出來了。它提供的是物理層級的穩(wěn)定性和確定性。想象一下一個24小時不間斷監(jiān)測溫濕度、光照并將數(shù)據(jù)上傳到服務器的環(huán)境監(jiān)測站或者一個需要毫秒級響應執(zhí)行指令的自動化控制終端穩(wěn)定的網(wǎng)絡連接不是“錦上添花”而是“雪中送炭”。Wio Terminal本身集成了Realtek RTL8720DN雙頻Wi-Fi和藍牙芯片但它并沒有以太網(wǎng)控制器。要實現(xiàn)有線連接我們需要借助一個外部模塊——通常是一個基于W5500或ENC28J60芯片的以太網(wǎng)擴展板或PHY模塊。這篇文章我就來詳細拆解如何為Wio Terminal“插上網(wǎng)線”從硬件選型、庫的適配、代碼編寫到實際部署中的坑分享一套完整的實戰(zhàn)方案。2. 硬件選型與連接W5500還是ENC28J60給微控制器擴展以太網(wǎng)市面上最常見的是兩款芯片Microchip的ENC28J60和WIZnet的W5500。為Wio Terminal選擇哪一款不是一個隨意的決定它直接關系到后續(xù)開發(fā)的復雜度、性能和穩(wěn)定性。2.1 核心芯片對比與選型邏輯我們先從最根本的差異說起。ENC28J60是一個標準的以太網(wǎng)控制器它只負責OSI模型中的數(shù)據(jù)鏈路層MAC和物理層PHY這意味著TCP/IP協(xié)議棧的處理需要完全由主控芯片也就是Wio Terminal用的ATSAMD51通過軟件來實現(xiàn)。你會聽到它常與“輕量級TCP/IP協(xié)議棧”如EtherCard或UIPEthernet庫綁定出現(xiàn)。這種方案的優(yōu)點是成本相對較低但缺點也很明顯它會大量占用主控的CPU資源和內(nèi)存用于處理協(xié)議解析、數(shù)據(jù)包組裝等繁重任務。對于Wio Terminal這種同時要驅(qū)動屏幕、處理傳感器數(shù)據(jù)的應用軟件協(xié)議??赡艹蔀樾阅芷款i特別是在需要高網(wǎng)絡吞吐量或多連接并發(fā)時。而W5500則是一個硬件TCP/IP協(xié)議棧芯片。它內(nèi)部集成了完整的TCP/IP協(xié)議棧包括TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE等并提供了8個獨立的硬件Socket。你可以把它理解為一個自帶“網(wǎng)絡協(xié)處理器”的模塊。主控芯片MCU只需要通過SPI接口像讀寫普通寄存器一樣告訴W5500“建立連接到這個IP的80端口”或者“從Socket 0讀取數(shù)據(jù)”剩下的建立連接、數(shù)據(jù)分包、確認重傳等復雜的網(wǎng)絡協(xié)議交互全部由W5500自己完成。這極大地解放了主控MCU使其能專注于應用邏輯。對于資源并不算特別寬裕的Wio TerminalATSAMD51 Cortex-M4F 120MHz 192KB RAM來說W5500幾乎是追求穩(wěn)定和性能時的唯一選擇。因此我的選型建議非常明確對于Wio Terminal優(yōu)先選擇基于W5500芯片的以太網(wǎng)擴展模塊。除非你的項目對成本極度敏感且網(wǎng)絡通信負載極低例如每分鐘只發(fā)送幾個字節(jié)的數(shù)據(jù)否則W5500帶來的穩(wěn)定性和易用性提升遠超其微小的成本差價。市面上有大量為Arduino設計的W5500擴展板我們需要關注的是其與Wio Terminal的引腳兼容性。2.2 硬件連接與引腳定義Wio Terminal的側邊有40pin的Grove兼容接口但更通用、更可靠的方式是使用其底部的引腳焊盤或?qū)S玫臄U展底座。W5500通常通過SPI接口通信我們需要連接以下四根核心信號線SPI總線SCK (Serial Clock): 時鐘線。連接到Wio Terminal的SCK引腳在Arduino框架中通常對應數(shù)字引腳D24作為主SPI的SCK。MOSI (Master Out Slave In): 主設備輸出從設備輸入。連接到Wio Terminal的MOSI引腳通常對應D23。MISO (Master In Slave Out): 主設備輸入從設備輸出。連接到Wio Terminal的MISO引腳通常對應D22。SS/CS (Slave Select / Chip Select): 片選線低電平有效。這根線需要連接到一個普通的GPIO引腳用于在SPI總線上選中W5500芯片。你可以自由選擇一個未被占用的數(shù)字引腳例如D10。復位線 (RST)用于硬件復位W5500芯片通常也連接到一個GPIO引腳如D8。這不是必須的但建議連接以便在軟件卡死時能強制復位網(wǎng)絡模塊。中斷線 (INT)W5500可以通過此線向主控發(fā)送中斷信號通知有數(shù)據(jù)到達或連接狀態(tài)改變。這可以替代輪詢方式提高效率??梢赃B接到如D9引腳。如果不用中斷此引腳可不接。電源W5500模塊通常需要3.3V供電請務必連接到Wio Terminal的3.3V輸出引腳。絕對不要接到5V上否則會損壞模塊。GND連接到Wio Terminal的GND。一個典型的連接表示例如下使用Wio Terminal的底部引腳或擴展底座W5500模塊引腳Wio Terminal 引腳 (Arduino Pin Number)說明VCC3.3V電源GNDGND地SCKD24 / SCKSPI時鐘MOSID23 / MOSISPI主出從入MISOD22 / MISOSPI主入從出SCS (SS)D10片選自定義RSTD8復位可選建議INTD9中斷可選注意不同廠家生產(chǎn)的W5500模塊引腳絲印可能略有不同例如CS、SS、NSS都指片選請務必以你手中模塊的說明書為準。連接前最好用萬用表確認一下電源和地。3. 軟件環(huán)境搭建與庫的抉擇硬件連好后軟件才是讓一切動起來的關鍵。在Arduino IDE中我們需要安裝核心板支持包和相應的以太網(wǎng)庫。3.1 安裝Seeed SAMD核心與以太網(wǎng)庫首先確保你的Arduino IDE已經(jīng)安裝了Seeed Studio的SAMD核心板支持。在“工具”-“開發(fā)板”-“開發(fā)板管理器”中搜索“Seeed SAMD”安裝“Seeed SAMD Boards by Seeed Studio”。這提供了對Wio Terminal的完整支持。接下來是重頭戲以太網(wǎng)庫。正如硬件選型部分所述針對W5500我們有兩個主流庫可選官方兼容的Ethernet庫和第三方的Ethernet3庫。官方Ethernet庫Arduino IDE自帶的庫最初為Arduino官方以太網(wǎng)盾W5100/W5200/W5500設計。它對W5500有基本支持但可能不是最新或最優(yōu)化的。在Arduino IDE的“庫管理器”中搜索“Ethernet”并安裝即可。Ethernet3庫這是一個由社區(qū)維護的、更現(xiàn)代、功能更強大的庫。它針對WIZnet芯片尤其是W5500進行了大量優(yōu)化修復了官方庫的一些Bug提供了更好的性能和更豐富的示例。我強烈推薦使用這個庫。安裝Ethernet3庫打開Arduino IDE點擊“項目”-“加載庫”-“管理庫…”在搜索框中輸入“Ethernet3”找到由“Arkadiusz666”發(fā)布的版本進行安裝。3.2 庫的配置與關鍵對象解析安裝好庫后我們來看看代碼中需要關心的核心部分。無論是用Ethernet還是Ethernet3其編程模型非常相似都遵循begin()初始化、client/server對象操作的流程。但Ethernet3在細節(jié)上更友好。首先你需要包含正確的頭文件并定義我們硬件連接時使用的片選和復位引腳#include Ethernet3.h // 如果使用Ethernet3庫 // 根據(jù)你的實際連接定義引腳 byte mac[] { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // 一個自定義的MAC地址 IPAddress ip(192, 168, 1, 177); // 為Wio Terminal設定的靜態(tài)IP IPAddress myDns(192, 168, 1, 1); // 你的路由器/DNS服務器地址 IPAddress gateway(192, 168, 1, 1); // 網(wǎng)關地址 IPAddress subnet(255, 255, 255, 0); // 子網(wǎng)掩碼 // 定義我們硬件連接時使用的引腳 #define W5500_CS_PIN 10 // 片選引腳連接至D10 #define W5500_RST_PIN 8 // 復位引腳連接至D8如果連接了在setup()函數(shù)中進行初始化void setup() { Serial.begin(115200); while (!Serial); // 等待串口連接實際部署時可注釋掉 // 如果有連接復位引腳先將其設置為輸出模式并拉高 pinMode(W5500_RST_PIN, OUTPUT); digitalWrite(W5500_RST_PIN, HIGH); delay(200); digitalWrite(W5500_RST_PIN, LOW); // 復位脈沖 delay(200); digitalWrite(W5500_RST_PIN, HIGH); delay(200); // 等待W5500啟動 // 初始化以太網(wǎng)連接 Serial.println(Initializing Ethernet with DHCP...); // 方法1: 使用DHCP動態(tài)獲取IP推薦在測試階段使用 if (Ethernet.begin(mac, 10000, 4000) 0) { // 參數(shù)超時時間響應等待時間 Serial.println(Failed to configure Ethernet using DHCP); // 如果DHCP失敗可以回退到靜態(tài)IP Ethernet.begin(mac, ip, myDns, gateway, subnet); } // 方法2: 直接使用靜態(tài)IP適合固定網(wǎng)絡環(huán)境 // Ethernet.begin(mac, ip, myDns, gateway, subnet); // 等待連接建立 delay(1000); // 打印網(wǎng)絡信息 Serial.print(My IP address: ); Serial.println(Ethernet.localIP()); }這里有幾個關鍵點MAC地址需要為你的設備設置一個唯一的MAC地址。在局域網(wǎng)內(nèi)每個設備的MAC地址必須不同。示例中的{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }是一個常見的測試地址但在實際部署中最好為每個設備分配一個唯一的地址或者使用W5500芯片自帶的唯一MAC地址某些高級庫函數(shù)或模塊支持讀取。DHCP vs 靜態(tài)IP在測試和家庭環(huán)境中使用DHCPEthernet.begin(mac)最方便路由器會自動分配IP。但在工業(yè)或需要固定尋址的場景必須使用靜態(tài)IP如示例中注釋掉的部分所示。超時設置Ethernet3庫的begin函數(shù)允許設置超時和等待時間這在網(wǎng)絡環(huán)境不佳時非常有用。官方庫可能沒有這個參數(shù)。硬件復位通過代碼控制RST引腳進行一次硬件復位可以確保W5500從一個已知的干凈狀態(tài)啟動避免因之前狀態(tài)殘留導致的奇怪問題。這是一個非常實用的技巧。4. 實戰(zhàn)應用構建TCP客戶端與HTTP服務器示例網(wǎng)絡連通后我們就可以開始真正的應用了。最常見的兩種模式是作為客戶端主動連接服務器如上報數(shù)據(jù)到云平臺或作為服務器接收請求如提供簡單的Web配置界面。4.1 作為TCP客戶端上報數(shù)據(jù)假設我們要將Wio Terminal傳感器采集的數(shù)據(jù)上報到一個TCP服務器比如運行在電腦上的一個Python測試服務器地址為192.168.1.100:8080。#include Ethernet3.h #include EthernetClient.h byte mac[] { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress serverIP(192, 168, 1, 100); // 目標服務器地址 int serverPort 8080; EthernetClient client; void setup() { Serial.begin(115200); // ... 以太網(wǎng)初始化代碼同上建議使用靜態(tài)IP避免DHCP租期問題 ... Ethernet.begin(mac, IPAddress(192,168,1,177), IPAddress(192,168,1,1), IPAddress(192,168,1,1), IPAddress(255,255,255,0)); Serial.println(Ethernet initialized); delay(2000); // 給網(wǎng)絡一點穩(wěn)定時間 } void loop() { // 模擬讀取傳感器數(shù)據(jù)例如一個隨機溫度值 float temperature random(200, 350) / 10.0; // 20.0°C - 35.0°C // 檢查客戶端是否已連接如果沒有則嘗試連接 if (!client.connected()) { Serial.println(Attempting to connect to server...); if (client.connect(serverIP, serverPort)) { Serial.println(Connected to server); } else { Serial.println(Connection failed); delay(5000); // 等待5秒后重試 return; } } // 如果連接成功則發(fā)送數(shù)據(jù) if (client.connected()) { // 構造一個簡單的數(shù)據(jù)報文例如 JSON 格式 String data {\device\:\WioTerminal\,\temp\: String(temperature, 1) }; client.println(data); // 發(fā)送數(shù)據(jù)并換行方便服務器按行讀取 Serial.print(Data sent: ); Serial.println(data); // 可選等待并讀取服務器的響應如果有 unsigned long startWait millis(); while (client.available() 0 millis() - startWait 3000) { delay(10); // 等待響應超時3秒 } if (client.available() 0) { String response client.readStringUntil(\n); Serial.print(Server response: ); Serial.println(response); } } // 斷開連接對于短連接或保持連接對于長連接 // client.stop(); // 如果是每次發(fā)送后斷開則取消注釋此行 delay(10000); // 每10秒發(fā)送一次數(shù)據(jù) }實操心得連接狀態(tài)管理client.connected()只能判斷TCP連接是否在技術上建立并不能感知對端是否已關閉。更健壯的做法是結合client.available()讀取數(shù)據(jù)和設置讀寫超時。如果長時間沒有數(shù)據(jù)交互可以主動發(fā)送心跳包或重新連接。數(shù)據(jù)格式選擇一種簡單通用的格式如純文本加換行、CSV或微型JSON。避免在資源有限的MCU上解析復雜的XML。錯誤處理connect可能因為網(wǎng)絡路由問題、服務器未開啟、端口錯誤而失敗。務必添加重試邏輯和失敗提示這對于現(xiàn)場調(diào)試至關重要。4.2 作為簡易HTTP服務器提供Web頁面讓Wio Terminal作為一個Web服務器可以通過瀏覽器訪問其IP地址來查看傳感器數(shù)據(jù)或進行簡單控制。#include Ethernet3.h #include EthernetServer.h byte mac[] { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 177); EthernetServer server(80); // 在80端口監(jiān)聽HTTP請求 void setup() { Serial.begin(115200); Ethernet.begin(mac, ip); server.begin(); Serial.print(HTTP Server is at: http://); Serial.println(Ethernet.localIP()); } void loop() { // 監(jiān)聽傳入的客戶端連接 EthernetClient client server.available(); if (client) { Serial.println(New client connected); boolean currentLineIsBlank true; // HTTP請求以空行結束 String request ; while (client.connected()) { if (client.available()) { char c client.read(); request c; // 累積請求頭用于簡單解析 // HTTP請求以連續(xù)兩個換行符結束\n\n if (c \n currentLineIsBlank) { // 請求頭接收完畢開始發(fā)送響應 sendHttpResponse(client, request); break; } if (c \n) { currentLineIsBlank true; } else if (c ! \r) { currentLineIsBlank false; } } } // 給瀏覽器一點時間接收數(shù)據(jù) delay(10); client.stop(); Serial.println(Client disconnected); // 簡單解析請求這里可以判斷GET /data 或 GET /control?ledon等 Serial.println(Request:); Serial.println(request); } } void sendHttpResponse(EthernetClient client, String req) { // 發(fā)送標準的HTTP響應頭 client.println(HTTP/1.1 200 OK); client.println(Content-Type: text/html); client.println(Connection: close); client.println(); // 空行分隔頭部和主體 // 發(fā)送HTML頁面主體 client.println(!DOCTYPE HTML); client.println(html); client.println(headtitleWio Terminal Status/title/head); client.println(body); client.println(h1Wio Terminal Ethernet Server/h1); client.println(pThis page is served directly from the Wio Terminal!/p); // 可以在這里動態(tài)插入傳感器數(shù)據(jù) // int sensorValue analogRead(A0); // client.print(pAnalog Input A0: ); // client.print(sensorValue); // client.println(/p); // 添加一個簡單的按鈕表單用于控制例如控制板載LED client.println(form action\/\ method\GET\); client.println(input type\hidden\ name\led\ value\toggle\); client.println(input type\submit\ value\Toggle LED\); client.println(/form); // 簡單解析請求中的查詢參數(shù)非?;A的解析 if (req.indexOf(GET /?ledtoggle) ! -1) { // 這里可以執(zhí)行控制動作例如 digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); client.println(pLED state toggled!/p); } client.println(/body); client.println(/html); }注意事項資源消耗即使是一個簡單的HTTP服務器也需要解析請求頭和組裝響應。W5500的硬件協(xié)議棧處理了TCP的復雜性但HTTP應用層邏輯仍需MCU完成。確保你的HTML頁面盡可能精簡避免復雜的字符串操作耗盡內(nèi)存。單線程處理EthernetServer是單線程的一次只能處理一個客戶端請求。在處理一個長請求時其他客戶端會被阻塞。對于需要并發(fā)服務的場景需要考慮更復雜的狀態(tài)機或使用Ethernet3庫中更高級的異步特性如果支持。安全性這個服務器僅用于內(nèi)網(wǎng)演示或調(diào)試。它沒有考慮任何安全措施如輸入驗證、防緩沖區(qū)溢出。絕對不要將其暴露在公網(wǎng)。5. 高級話題與疑難排坑在實際部署中你會遇到比示例代碼更復雜的情況和問題。這里分享幾個進階技巧和常見坑點。5.1 同時處理多路連接與Socket管理W5500有8個硬件Socket這意味著理論上它可以同時維持8個TCP或UDP連接。在Arduino的Ethernet庫中EthernetClient和EthernetServer對象底層會管理這些Socket。但你需要理解每個活動的EthernetClient對象無論是通過server.available()接受的還是通過client.connect()創(chuàng)建的都會占用一個Socket。一個常見的誤區(qū)是在循環(huán)中不斷創(chuàng)建新的EthernetClient對象去連接服務器而不及時調(diào)用client.stop()釋放。這會導致Socket迅速耗盡后續(xù)連接失敗。正確的做法是對于周期性上報的客戶端考慮使用長連接Keep-Alive在一個連接上多次發(fā)送數(shù)據(jù)而不是每次發(fā)送都建立新連接。并在檢測到連接異常時再重建。對于服務器在處理完一個客戶端請求并發(fā)送響應后應及時調(diào)用client.stop()關閉連接釋放Socket資源以供下一個客戶端使用。Ethernet3庫提供了Ethernet.maintain()函數(shù)它可以幫助處理DHCP租約續(xù)期等后臺任務在長時運行的客戶端程序中應在loop()中定期調(diào)用它。5.2 網(wǎng)絡異常處理與重連機制工業(yè)環(huán)境下的網(wǎng)絡并非永遠穩(wěn)定。路由器重啟、網(wǎng)線松動、交換機故障都可能導致鏈路中斷。一個健壯的程序必須具備網(wǎng)絡異常檢測和自動恢復能力。心跳機制與連接健康度檢查 對于客戶端除了檢查client.connected()更可靠的方法是定期例如每30秒通過連接向服務器發(fā)送一個小的“心跳”數(shù)據(jù)包比如一個換行符或特定的“PING”字符串并期待一個“PONG”回應。如果在若干次重試后仍無回應則判定連接失效執(zhí)行client.stop()并嘗試重新connect。unsigned long lastHeartbeat 0; const long heartbeatInterval 30000; // 30秒 void loop() { // ... 其他邏輯 ... if (client.connected()) { if (millis() - lastHeartbeat heartbeatInterval) { if (!sendHeartbeat()) { // 自定義的心跳發(fā)送/檢測函數(shù) Serial.println(Heartbeat failed, reconnecting...); client.stop(); delay(1000); // 嘗試重新連接 } lastHeartbeat millis(); } } else { // 嘗試重連邏輯 attemptReconnect(); } }鏈路中斷檢測W5500的硬件中斷引腳INT可以配置為在連接斷開等事件時觸發(fā)。你可以將此引腳連接到Wio Terminal的一個外部中斷引腳并在中斷服務程序ISR中設置標志位在主循環(huán)中處理重連。這比軟件輪詢更加及時。5.3 典型問題排查流程當你發(fā)現(xiàn)Wio Terminal無法通過以太網(wǎng)通信時可以按照以下步驟排查物理層檢查電源用萬用表測量W5500模塊的VCC引腳確認是穩(wěn)定的3.3V。電壓不足會導致芯片工作異常。連接檢查所有杜邦線或焊接點是否牢固。SPI總線對接觸不良非常敏感??梢試L試重新插拔。網(wǎng)線與路由器換一根已知好的網(wǎng)線將模塊直接連接到路由器LAN口排除中間交換機故障。軟件與配置檢查引腳定義反復核對代碼中的W5500_CS_PIN、W5500_RST_PIN是否與實際硬件連接一致。這是最常見的錯誤。MAC地址沖突確保局域網(wǎng)內(nèi)沒有其他設備使用了相同的MAC地址。嘗試修改MAC地址的最后一位。IP地址沖突如果使用靜態(tài)IP確認該IP沒有被路由器分配給其他設備。可以嘗試在路由器后臺查看DHCP客戶端列表或者使用一個非??亢蟮腎P如.200以上。防火墻如果作為服務器確保電腦防火墻沒有阻止對Wio Terminal IP端口的訪問。診斷工具使用Ping測試在網(wǎng)絡連通后第一時間從電腦pingWio Terminal的IP地址。如果能ping通說明鏈路層和網(wǎng)絡層IP是通的問題可能出在應用層端口、服務器程序。串口輸出充分利用串口打印調(diào)試信息。在初始化、連接、發(fā)送、接收的每個關鍵步驟都打印狀態(tài)信息。Ethernet3庫的Ethernet.hardwareStatus()和Ethernet.linkStatus()函數(shù)可以返回硬件和鏈路狀態(tài)非常有用。網(wǎng)絡抓包對于復雜問題可以在電腦端使用Wireshark等工具抓包查看TCP握手SYN, SYN-ACK, ACK是否成功數(shù)據(jù)包是否被正確發(fā)送和確認。這是定位網(wǎng)絡協(xié)議問題的終極手段。庫與兼容性如果你從Ethernet庫切換到Ethernet3庫或者更新了庫版本有時需要完全清理并重新編譯項目Arduino IDE: 項目 - 清理項目。檢查是否有其他庫與以太網(wǎng)庫存在沖突特別是那些也使用SPI或定時器的庫。為Wio Terminal添加以太網(wǎng)能力實質(zhì)上是為其賦予了工業(yè)級通信的可靠性。這個過程涉及硬件接口、底層驅(qū)動、網(wǎng)絡協(xié)議和應用邏輯多個層面。從選擇硬件協(xié)議棧芯片W5500開始到正確連接SPI總線再到選用功能更完善的Ethernet3庫每一步的選擇都影響著最終項目的穩(wěn)定性。在代碼層面處理好連接狀態(tài)管理、異常重連和資源釋放是構建長期穩(wěn)定運行設備的關鍵。最后掌握一套從物理層到應用層的系統(tǒng)化排查方法能讓你在遇到問題時快速定位而不是盲目地修改代碼。

相關新聞

24GHz毫米波雷達在跌倒檢測中的應用:從原理到實戰(zhàn)開發(fā)

24GHz毫米波雷達在跌倒檢測中的應用:從原理到實戰(zhàn)開發(fā)

1. 項目緣起:為什么毫米波雷達成了跌倒檢測的新寵?最近在做一個智慧養(yǎng)老相關的項目,客戶的核心需求是在衛(wèi)生間、臥室這些私密空間里,實現(xiàn)無感、精準的老人跌倒檢測。一開始我們團隊也考慮過攝像頭、紅外熱釋電、壓力地墊這些傳統(tǒng)方…

2026/8/2 10:45:22 閱讀更多
【數(shù)據(jù)分享】80 + 年連續(xù)觀測!1942–2025 全國 400 + 氣象站長時序觀測ISD-Lite 數(shù)據(jù)集(溫壓濕風云雨全要素)

【數(shù)據(jù)分享】80 + 年連續(xù)觀測!1942–2025 全國 400 + 氣象站長時序觀測ISD-Lite 數(shù)據(jù)集(溫壓濕風云雨全要素)

一、數(shù)據(jù)前言 市面上零散氣象站點素材普遍存在時序斷裂、站點篩選繁瑣、原始文件雜亂、多年份整合難度大等問題,本次整理一套 NOAA-NCDC 官方整編 ISD-Lite 氣象數(shù)據(jù)集,單獨篩選全國(含港澳臺)站點并按年份分包整理完畢,省去批量篩選、原始 FTP 爬取的繁瑣操作,可直接用于…

2026/8/2 11:45:24 閱讀更多
BetterNCM安裝器:3步解鎖網(wǎng)易云音樂的無限潛能

BetterNCM安裝器:3步解鎖網(wǎng)易云音樂的無限潛能

BetterNCM安裝器:3步解鎖網(wǎng)易云音樂的無限潛能 【免費下載鏈接】BetterNCM-Installer 一鍵安裝 Better 系軟件 項目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾幻想過,一個簡單的音樂播放器能夠變身成為功能強大的音樂…

2026/8/2 11:45:24 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產(chǎn)的一款用于半導體設備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機,適用于自動化設備及通用機械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/2 2:52:49 閱讀更多