• 3D列印服務
  • COSPLAY 3D 建模
  • #maker+t=market
  • 1
  • 2
  • 3
發佈日期 2018-12-19
回上一頁

用 ESP8266 架設 HTTPS 伺服器

為了方便控制攝影棚內的照明,把很多燈光的配線集中管理,希望達到的效果是透過 WEB 介面直接點擊某個鍵,由 ESP8266 取得參數後設定 TB62706 (位移暫存器),再透過光耦合器去控制 RELAY MODULE 上的開關來控制燈光亮滅。

錯誤選擇

一開始是用 Wifiduino (Wemos D1)來架,但是 Arduino 本身的時脈太低、記憶體不足,所以只能架 HTTP server,架不了支援 SSL 的 HTTPS server。因此,改換成 ESP8266 d1-mini 來架。

使用工具 - PlatformIO

因為設定的硬體架構除了 ESP8266 的 Wifi 和透過 SPI 去控制的位移暫存器外,還需要支援 SD Card 來運件,所以在 ESP8266 D1-mini 的腳位上來說,是有一些吃緊,但還好依然夠用。

不過一開始對這些硬體該用那些函示庫不是很熟,原本的 Arduino IDE 介面對這部份的管理較弱,所以先是改用了 Visual Studio Code 來安裝 PlatformIO 來設計,它的好處是對於整個專案用到了那些函示庫,要作那些設定都有很清楚的規劃和對應的檔案架構,這對於專案管理的幫助很大。在此大力推薦!

開發瓶項

整個開發過程基本上就是按部就班,先拿 ESP8266WebServer 的範例確認 Wifi 的運作正常和 HTTP Request 的處理正常,之後才改成 ESP8266WebServerSecure,但這部份有遇到瓶頸,因為認證檔有兩種格式,一種是 PEM,一種是 DER,各有不同的範例,寫法也略有不同。

認證部份因為 DER 要直接編譯在晶片上,比較不方便,所以最後選擇 PEM 格式,然後把 CERT 和 KEY 都存在 SD 卡裡面,在啟用時讀入資料,然後建立 RSA 驗證機制。這樣作的好處是隨時要換認證的話,只要改 SD 卡的檔案即可。

這裡有個伏筆是為了用免費的合法認證所準備,也就是像 Letsencrypt 這樣的免費認證服務。

不過這部份的取得有點小技巧,也就是手上要有域名主導權,先用電腦架一個空的主機,再向 Letsencrypt 申請憑證,取得憑證後把它存入 SD 卡,這樣就可以了。

最後整合

在完成 HTTPS server 的架構之後,接下來就是把位移暫存器的運作程式加進去,這部份因為一樣是用 SPI 的 protocol 在運作,程式不複雜,但腳位又很有限,所以選擇獨立設計 SPI 的運作,不確定是否可以共用函示庫,甚至腳位。這部份以後再研究。

用了三個腳位來負責 LE, SCK, SDI,然後串了兩顆 TB62706來控制 32 埠的 RELAY MODULE。運作的方式很簡單,就是用一個 unsigned long 變數來記錄每個埠的亮滅狀態,再從每次取得的 bit 序號來決定亮滅的埠,算出變動後的數值,再透過 SPI 寫到位移暫存器上,整個就可以運作了。

下一步 - MQTT

不過整個架起來之後發現實用性有限,為了資訊安全的考量加入了 SSL 認證,卻造成每個請求都要花5秒左右才能完成,整個實用性大大下降。

當然,如果降低憑證的長度可以提高速度,但這又會讓憑證變成是不安全的狀態,實在兩難。所以下一步只好讓 ESP8266 只負責內部網路的部份,改走 MQTT 協定,加速運作。之後,再用 Raspberry PI 來架 MQTT Server 和 HTTPS Server,讓硬體端的運作不受限於速度,讓安全性和認證的問題由 Raspberry PI 來把關,分層負責。

小插曲 - CORS

因為在 ESP8266 上架了一個 HTTPS Server,但是如果讓它像一般的 Web Server 一樣負責所有的內容輸出的話,整個效率也會很低。所以基本上是由另一個 Web server 來控制它,例如用 www.inventor.com.tw/lab 的介面去呼叫 lab.inventor.com.tw 上的功能,這時就產生了 CORS 的問題,也就是跨網存取的現象。

這部份一方面點出了跨網存取的授權設定之外,另一方面也造成每一個動作都會產生兩次請求,一次 OPTIONS,一次 GET 或 POST,這會造成 HTTP request 的處理程序重覆運作,尤其是在開關切換的動作上,作二次剛好等於沒作。

這部份就要特別把 OPTIONS requests 濾掉,只回覆跨網存取授權,之後再處理正常的 GET/POST 來決定系統的運作,這樣才會正常。但是也因為每個動作都呼叫兩次,造成實際運作的速度更慢了。所以非改成 MQTT 和透過 Raspberry PI 來主控不可,不然真是慢到爆啊~~

結語

不論是否真的具備實用性,但經此一役至少證明了用 ESP8266 是能架出合法憑證的網站的,也能夠正常運作。同時也深刻了解到運作的瓶頸和限制,知道應該用怎樣的架構運作才最有實用性。希望一點心得能與同好們共享~~~有興趣的可以下載原始檔玩玩。

附加檔案 ESP8266_HTTPS.zip

創客情報

  1. EPSON 1390 洗噴頭 Part II
  2. UV平噴機噴頭堵塞維修記錄(EPSON 1390噴頭)
  3. 側拍架試用 - Mac mini server 2010 SSD replacement
  4. 庫存管理系統上線!
  5. 鉛酸電池復活技巧
  6. 中科自造一日遊-雷射切割課程
  7. [文件]蓄电池充放电电源模块板 集成电压表 欠压过压保护 定时充放电
  8. 用 ESP8266 架設 HTTPS 伺服器
  9. [心得分享] 最近比較煩 - 網路亂象
  10. [MEMS應用] BikeSpark 自行車煞車燈
  11. [回收] 通用物資回收價格
  12. [電機] 三相電機配線筆記
  13. [CNC]真空吸盤及切削液槽
  14. [GEEK] 自製 3D 全象術投影
  15. [3DP] 牽絲抑制
  16. [3DP] 關於堵料
  17. [3DP] 透明料對比測試
  18. [CNC] CNC 相關改裝應用
  19. [數位攝影棚] - 瑪莉蓮夢露風扇
  20. [3DP] ATOM 2.0/2.5 擴充模組
  21. [3DP] PROTON+ 設計開發記錄

回到最上方

回上一頁