首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

STM32 做 Web Server 實現廣域網遠程控制:公網 IP + 端口映射 + DDNS 完整方案

     編輯:程式設計綜合問答

核心需求

青島手機瀏覽器訪問廈門 STM32 Web Server,控制電器設備。

必要條件

  1. 公網 IP:STM32 所在網絡必須有固定或動態公網 IP
  2. 端口映射:路由器配置 DNAT,將公網 IP:80(或自定義端口)映射到 STM32 內網 IP:80
  3. 80 端口未被運營商封鎖:住宅寬帶常封 80/443,需改用非常用端口(如 8080、8888)
  4. DDNS(動態域名解析):若公網 IP 動態變化,需配合花生殼、No-IP 等服務

架構圖解

[手機瀏覽器] --HTTPS/HTTP--> [公網域名:端口] --DNS--> [公網IP:端口]
                                                       ↓
                                          [路由器端口映射/防火牆]
                                                       ↓
                                            [STM32 內網IP:80 (Web Server)]

實現步驟

1. STM32 端:輕量級 Web Server

  • 使用 LwIP 協議棧 + HTTPD 組件
  • 啟用 LWIP_HTTPD_CGI、LWIP_HTTPD_SSI 支援動態頁面
  • 將控制介面(HTML/JS/CSS)存儲於外部 SPI Flash 或內部 FS(LittleFS/FATFS)
  • CGI 處理函數解析 GET/POST 參數,控制 GPIO/Relay/PWM

2. 路由器端:端口映射配置

# 典型配置(以 TP-Link 為例)
外部端口: 8080
內部端口: 80
內部IP:   192.168.1.100 (STM32靜態IP)
協議:     TCP

3. DDNS 配置(動態公網 IP 必備)

  • 路由器支援 DDNS 客戶端 → 直接配置花生殼/No-IP 帳號
  • 或 STM32 端定時請求 DDNS 更新 API(需實現 HTTP Client)
  • 最終獲得固定域名:mydevice.ddns.net:8080

4. 安全加固(生產環境必做)

替代方案:無公網 IP 怎麼辦?

  • 內網穿透:frp、ngrok、ZeroTier、Tailscale
  • 雲端中轉:STM32 → MQTT/HTTP → 雲服務器 → 手機 App/WebSocket
  • P2P 打洞:STUN/TURN/ICE(複雜度高,不推薦嵌入式直連)

資源建議

  • LwIP 官方貢獻應用:contrib/apps/httpd
  • STM32CubeIDE 內建 LwIP + HTTPD 範例
  • 《STM32 網絡開發實戰》第 7 章

有公網 IP + 端口映射 + DDNS,即可實現「何時何地」遠程控制。安全防護不可省略!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
措施實現方式
HTTPS移植 mbedTLS,配置自簽或 Let's Encrypt 證書
認證授權HTTP Basic Auth / JWT / Session Cookie
防暴力破解失敗鎖定、速率限制
固件簽名OTA 升級驗證簽名