1618 字
8 分鐘
IoT Final Project 1 - The Beginning

既然 Flutter 課程相關文章已經出現在我的部落格裡了,就順便把這次 IoT 期末專題也記錄一下吧!這次專題,或許又是突破了只用上課所學來完成專題的一次。

What I Have Learned & My Confusion#

從開學到現在,大概目前已經上了六次課,一次大概三小時。大概包括了目前整個 IoT 相關趨勢、M2M 的架構,還有 OM2M 與 Node-Red 相關的東西、使用 App Inventor 2 來讀取手機 GPS 資訊、使用 Arduino 接收感測器資料並送到 OM2M 上。

整體來說,關於實作部分,我是覺得關於觀念部分似乎沒有到很深入,並且也使我留下了不少疑問。比如在送給 OM2M 的資料中,為什麼會有這些東西?又或者說,由於在課程中,我們所燒錄進去的 Arduino 程式,因為我沒什麼碰過這個領域,所以我根本不知道那些程式碼在寫什麼,而且感覺關於 working with network 部分更是令人困惑,個人感覺擴展部分似乎不容易,這要怎麼辦呢?

No OM2M?#

這個章節標題能下得出來的,或許很多人看到都覺得很奇怪吧?OM2M 是全世界 IoT 的標準,那麼流行,我居然不想用?

其實我原本也是想要用的,但是看到這晶片,相信各位已經知道了

即使電腦是 Apple Silicon 晶片,不是也還是可以用嗎?OM2M 不是開源專案,而且用 Java 寫的,能跨平台跑不是嗎?嗯對,Java 能跨平台跑是真的,我曾經嘗試在別的平台上跑 Java project,但這專案…它已經年久失修,目前已經無法建置了。

而這次 IoT 期末專題是 3 人一組,因為我們這組除了我之外,也有一個也是同樣使用 Apple Silicon 晶片的 MacBook。在遇到這個問題後,我只好在報告製作主題前兩週,直接開了小組會議說能不能拋棄 OM2M,因為如果我們兩個都因晶片架構不同而無法使用 OM2M,則製作工作會變成全部壓在一個人身上,這樣非常的不公平,而 OM2M 核心也就 CRUD 系統罷了,真了不起我們可以自己簡單搞一個。最後他們全部都同意了,所以最後就決定寫了一個簡易的 CRUD 系統,雖然說可能跟 OM2M 還是有差異,但至少因為是我們自己寫的,我們知道如何使用它,所以在使用上面會相對比較容易,而且可以額外實作出一些 OM2M 沒有的功能,彌補 OM2M 的不足。

No Node-Red?#

不使用 Node-Red,那麼扯的嗎?

沒錯,因為個人是覺得直接透過撰寫型程式語言(例如 Rust、C++)去寫其實反而比較快,Node-Red 的話雖然說功能強大,只要拖個拼塊,就能做好一個 API 了,並且可以按個按鈕直接部署,但是缺點其實非常明顯。

第一個就是可自訂度低,有些東西模組基本上都是固定了,想換都不太容易;第二個就是「拖拼塊」你要動的是滑鼠,將拼塊從左側列表中找到你想要的,拖出來,然後再連起來,個人是感覺非常耗時。你如果自己寫的話,程式語言還可以自己選,框架自己挑,架構自己決定,這樣不是很舒服嗎?

No C Syntax-like Arduino Code?#

相信各位都知道 Arduino 基本上都是用 C++ 在 Arduino IDE 中寫程式碼然後燒錄到 Arduino 中執行吧?雖然一般用途 C++ 要寫可能問題不大,但是換到 Arduino 上,變成了 setup 與 loop 兩個 function,並且看了一下 Arduino 有給的模組,主要都是給硬體方面的,對於網路的部分其實比較難去做一個整合的動作。而在這一兩個月我也稍微看了 IoT 沒那麼難!新手用 JavaScript 入門做自己的玩具!書的內容還有系列文章,了解了 Johnny-five 這個模組,因為他提供了相關 API 讓使用者可以以 JavaScript/TypeScript 的程式碼風格與方式去操控 Arduino。而我也對 TypeScript 執行後端開發經驗是相對熟悉的,所以這次就決定採用 TypeScript 與 Johnny-five 去操作 Arduino。

當然這次沒意外執行環境會是 Bun,其對於 Johnny-five 的相容性就不得而知了,因為似乎沒有人這樣子玩過。關於 Johnny-five 對於其他 runtime environment 的支援度,其實我也曾經想過這方面的問題,所以我有在 Deno 的官方伺服器上問過這個問題,但我只有得到一個答案…TIAS (Try it and see),可見似乎沒有人這樣嘗試過

那這次就來玩吧!人生中能有多少像這樣嘗試的歲月?而且基本上語法跟在 Node.js 上執行所寫的程式碼沒有什麼兩樣,切換環境那是一下子的事情。

No App Inventor?#

Yeah, because I hate drag-and-drop blocks.

就如同前面文章所說,拖拼塊對我來說是一件非常煩的事情,而這學期我也剛好有修彼得潘的 Flutter 課程,感覺 Flutter 其實是蠻不錯的一個跨平台應用程式框架,雖然說是使用 Dart 程式語言,過去我沒有碰過,但是寫到了現在,我感覺使用 Flutter 寫應用程式就有點像你在寫 React,在 widget class 中 declare 你要用到的 state 和 function,然後下方在 build 方法中像 React 一樣構築一個 widget 並傳回。

Architecture#

當然那時有跟他們討論過,這個是目前暫定的架構,關於某些部分(例如圖中中下的 Elysia)目前也都還是未決定的狀態。

Wrapping Up#

希望這次專題能有非常大的收穫。雖然說基本上很多都用我用過的開發,但是就我也差不多才第二次吧?把不是上課教的工具直接套在期末專題上來說,還是會需要花額外時間去摸索與撰寫程式碼,但我相信這過程會是非常有趣的,並且我也非常期待接下來專題做出來的成果會如何。

IoT Final Project 1 - The Beginning
https://blog.kayxue.xyz/posts/iotproject1/
作者
KayXue
發佈日期
2025-04-30
許可協議
CC BY-NC-SA 4.0