• 3D列印服務
  • #maker+t=market
  • COSPLAY 3D 建模
  • 1
  • 2
  • 3

用 ESP8266 架設 HTTPS 伺服器

發佈日期 2018-12-19           

為了方便控制攝影棚內的照明,把很多燈光的配線集中管理,希望達到的效果是透過 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. [數位攝影棚] 可程式調變 LED 電源維修 DPX800S
  2. [分享]超細排線焊接
  3. [分享] 空壓機維修及使用心得
  4. [網管]使用 Letsencrypt 加密讓 webmin 管理系統更安全
  5. [Maker] 鑽頭收納盒設計
  6. [DIY] 自製兩用電動攻牙機及電鑽
  7. [PCB] KiCAD + FlatCAM 電路板繪製雕刻流程
  8. [Maker] 居家小電鍋維修
  9. [FreeCAD] Vcarve 使用疑南指引
  10. [居家修繕] 洗完衣服就淹水怎麼辦?
  11. [3DP] 自組 Delta 多用途加工機
  12. [看影片學技術] 老機車翻新用到的化學常識
  13. [3DP] ATOM 2.0 重組成果分享
  14. [數位攝影棚] 模組化無縫牆施作
  15. [CNC] 從無到有組裝第一台CNC
  16. [POC] 自製除濕模組研究
  17. [POC]3DP CNC模組-硬碟無刷電機
  18. [MAKER] 電烙鐵升級溫控烙鐵
  19. [EXPO] 一些不錯的行銷創意
  20. [CNC] 限位開關訊號整合
  21. 數位攝影棚之燈光控制箱
  22. 新年新氣象
  23. [資料科學] 粉絲團意見領袖KOL發展歷程分析
  24. [DIY] FORD Tierra 之 Panasonic 汽車音響 CX-CC1930AAT 維修筆記
  25. [MAKER] 電動窗簾 based on Schneider Electric Motion MDRIVE 23 Plus
  26. [MAKER] 鑽孔定位小技巧
  27. [NOTE] LM-2596-DC-DC-降壓模組
  28. [MAKER] Schneider Electric Motion MDRIVE 23 Plus 應用
  29. [CNC]關於Mach 3出現 R less than Z in the xy plane 錯誤的原因
  30. [心得分享]後社群媒體 - 五行觀點
  31. FreeCAD 實務分享
  32. 預知的能力
  33. 發掘社群互動的含金量
  34. [maker] 真空吸盤之負壓產生系統
  35. [開箱]海底撈自煮火鍋試吃 87度不會更高!
  36. 惡搞之用文氏管來抽真空桶
  37. EPSON 1390 洗噴頭 Part II
  38. UV平噴機噴頭堵塞維修記錄(EPSON 1390噴頭)
  39. 側拍架試用 - Mac mini server 2010 SSD replacement
  40. 庫存管理系統上線!
  41. 鉛酸電池復活技巧
  42. 中科自造一日遊-雷射切割課程
  43. [文件]蓄电池充放电电源模块板 集成电压表 欠压过压保护 定时充放电
  44. 用 ESP8266 架設 HTTPS 伺服器
  45. [心得分享] 最近比較煩 - 網路亂象
  46. [MEMS應用] BikeSpark 自行車煞車燈
  47. [回收] 通用物資回收價格
  48. [電機] 三相電機配線筆記
  49. [CNC]真空吸盤及切削液槽
  50. [GEEK] 自製 3D 全象術投影
  51. [3DP] 牽絲抑制
  52. [3DP] 關於堵料
  53. [3DP] 透明料對比測試
  54. [CNC] CNC 相關改裝應用
  55. [數位攝影棚] - 瑪莉蓮夢露風扇
  56. [3DP] ATOM 2.0/2.5 擴充模組
  57. [3DP] PROTON+ 設計開發記錄

回到最上方

回上一頁