沿續前一個 Web of Things 的實驗計畫 在 NodeMCU 上使用 er-coap-13,RTOS WoT 使用由 SuperHouse 開發的 [esp-open-rtos]() 版本,進行一些實驗性質的修改。esp-open-rtos 同樣是基於 Espressif 官方的 Espressif IOT RTOS SDK,但改採 open source 版本的 FreeRTOS 與 lwIP 程式碼。
標準 C 程式庫(libc)部份,esp-open-rtos 改用 newlib 來取代 Espressif 官方的標準 C 程式庫(libmain.a),並加入了 thread-safe 的支援。相關說明可參考 SuperHouse 官方的 esp-open-rtos 計畫。
RTOS WoT 目標
RTOS WoT 是 esp-open-rtos 的一份 fork,目標是基於 FreeRTOS 設計並實作符合 W3C Web of Things 標準的 WoT server。RTOS WoT 目標是支援 constrained devices(Micro-controllers),這與目前 W3C 正在發展的 Web of Things Framework(採用 Node.js)目標不同,但未來都會經由 Web of Things 標準,讓不同的平台互通(interoperability)。
RTOS WoT v0.1.0
RTOS WoT 共有 10 個版本計畫,第一個版本(v0.1.0)的目標非常簡單:
使用 C++ programming model
加入 WebSocket(版本 13 以上)的支援
WebSocket 的部份還在測試中,C++ programming model 的概念說明如下。
Reusable Components
加入 C++ programming model 的想法,「不是」為了使用 C++ 來撰寫 FreeRTOS 應用程式,而是能將 device drivers 的程式碼,封裝為 component,以達到重用(reuse)的目的。
源由
沿續前一個 Web of Things 的實驗計畫 在 NodeMCU 上使用 er-coap-13,RTOS WoT 使用由 SuperHouse 開發的 [esp-open-rtos]() 版本,進行一些實驗性質的修改。esp-open-rtos 同樣是基於 Espressif 官方的 Espressif IOT RTOS SDK,但改採 open source 版本的 FreeRTOS 與 lwIP 程式碼。
標準 C 程式庫(libc)部份,esp-open-rtos 改用 newlib 來取代 Espressif 官方的標準 C 程式庫(libmain.a),並加入了 thread-safe 的支援。相關說明可參考 SuperHouse 官方的 esp-open-rtos 計畫。
RTOS WoT 目標
RTOS WoT 是 esp-open-rtos 的一份 fork,目標是基於 FreeRTOS 設計並實作符合 W3C Web of Things 標準的 WoT server。RTOS WoT 目標是支援 constrained devices(Micro-controllers),這與目前 W3C 正在發展的 Web of Things Framework(採用 Node.js)目標不同,但未來都會經由 Web of Things 標準,讓不同的平台互通(interoperability)。
RTOS WoT v0.1.0
RTOS WoT 共有 10 個版本計畫,第一個版本(v0.1.0)的目標非常簡單:
WebSocket 的部份還在測試中,C++ programming model 的概念說明如下。
Reusable Components
加入 C++ programming model 的想法,「不是」為了使用 C++ 來撰寫 FreeRTOS 應用程式,而是能將 device drivers 的程式碼,封裝為 component,以達到重用(reuse)的目的。
設計考量部份,只需要將 ESP8266 的 GPIO、Analog、I2C、UART 腳位,封裝為 class library 即可,但不封裝 FreeRTOS APIs。這項工作的目標,是讓 FreeRTOS 可以具備一層能重用的 device driver 架構。
實作部份,則是直接引用 ARM mbed 的程式碼,範例可參考 DigitalOut.h。有了 mbed components 的移植,未來還可以使用 mbed programming style 來撰寫 FreeRTOS 的驅動程式。
例如,要讀取 ESP8266 的 A0 數據,使用 mbed programming style 的寫法如下:
以下是一個 Air Quality 的完整程式碼範例: