核心需求
青島手機瀏覽器訪問廈門 STM32 Web Server,控制電器設備。
必要條件
- 公網 IP:STM32 所在網絡必須有固定或動態公網 IP
- 端口映射:路由器配置 DNAT,將公網 IP:80(或自定義端口)映射到 STM32 內網 IP:80
- 80 端口未被運營商封鎖:住宅寬帶常封 80/443,需改用非常用端口(如 8080、8888)
- 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. 安全加固(生產環境必做)
| 措施 | 實現方式 |
| HTTPS | 移植 mbedTLS,配置自簽或 Let's Encrypt 證書 |
| 認證授權 | HTTP Basic Auth / JWT / Session Cookie |
| 防暴力破解 | 失敗鎖定、速率限制 |
| 固件簽名 | OTA 升級驗證簽名 |
替代方案:無公網 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,即可實現「何時何地」遠程控制。安全防護不可省略!
- 上一篇文章: Java PreparedStatement 陷阱:佔位符 ? 不能用於欄位名,正確動態更新寫法
- 下一篇文章: JavaScript window.onload 賦值 vs 調用:加括號與不加括號的本質區別
Copyright ©
程式碼之家 All Rights Reserved