視訊回放
VS Code 在 IoT 工程項目中的應用b23.tv
主講嘉賓介紹
綿旗,進階電工
熟悉模電、數電。使用過MCS-51、 AVR、PIC、MSP430、STM8、STM32、 EFM8等單片機,在MCU軟體程式設計領域内探索較廣。曾從事電子工程專業的實踐教學工作。
大綱
- 一個 IoT 項目的執行個體展示(硬體組成介紹)
- VS Code 在該 IoT 項目實施中的應用(結合 Arduino 和 PlatformIO 兩個插件,講解 VS Code 在 IoT 項目的用法)
- IoT 項目實施前需要了解的細節( MCU 與通信方式)
- 常見 IDE 簡介
- 選擇 VS Code 的理由
一個 IoT 項目的執行個體展示
主講人首先展示了一個 IoT 的項目。通過 Android 行動電話,實時更新 LED 與液晶顯示屏 LCD 的内容。
項目結構
首先,老師通過一個視訊介紹了項目結構。
這個電子工程項目從硬體上來說,由7部分組成:行動電話、LED、LCD、電源部分、LCD的對比度調整部分、晶片以及藍牙子產品。工程項目主體部分是:行動電話、LED、LCD、晶片以及藍牙子產品。核心是 ATmega328p 這個晶片。ATmega328p 所在的面包闆上是一個 Arduino UNO 的最小系統,最小系統是讓 ATmega328p 能夠工作的最低電路配置。
這個最低電路配置由三部分組成:電源部分、晶體振蕩器部分、重新開機部分。而如何講代碼或者說程式配置到晶片中呢?這便是 VS Code 參與的工作部分。在 VS Code 中,編寫程式、并編譯成可執行檔案,最終通過另外一個硬體 programmer 将程式導入到晶片中。
項目示範
接着,老師通過視訊示範了
Android智能電話遙控的LCD屏内容實時更新系統
。具體内容為:
- LED 的開/關及在 LCD 上的狀态顯示;
- 在 LCD 上顯示一個字元串。
這個項目示範了一部 Android 行動電話,通過藍牙子產品,以藍牙通信的方式把信号發送給微型控制器,讓微型控制器的輸出端顯示行動電話發送的内容。
LCD12864 與 UNO 接線(原理圖)
物聯網強調“聯”字,老師認為有必要通過接線來講解一下原理。
在如上有線通信中,使用了
SPI串行外部接口
的方式。
UNO 最小系統實物照(面包闆)
這個最小系統由3部分組成:
- 電源:1個穩壓器 + 3個濾波電容器
- 晶體振蕩器:晶體振蕩器 + 2個濾波電容器,負責給晶片提供外部時鐘信号
- 重新開機電路:上拉電阻器 + 按鈕開關
我們做物聯網項目時,也要考慮這些最小系統配置。
以 ATmega328p 為例介紹 VS Code 的兩個插件
Arduino 插件
值得注意的是,VS Code Arduino 與 PlatformIO 并不相容。
在安裝 Arduino 插件後,配置其路徑很重要。
即便在 VS Code 中安裝了插件,我們還是要依賴 Arduino IDE 。安裝插件隻是為了在 VS Code 中書寫代碼,其運算還是要依賴 Arduino IDE 。
既然如此,為何還要使用 VS Code 呢?- Arduino IDE 沒有代碼補全功能, VS Code 有。
PlatformIO 插件
主講老師建議,如果用 Arduino 很熟了,可以考慮更換為 PlatformIO 這個插件。老師的 IoT 項目也是用 PlatformIO 做的。
PlatformIO 相比 Arduino IDE 的優勢有:
- PlatformIO 支援 800 多種晶片及闆材,而 Arduino IDE 遠小于此。
此外,老師建議從插件首頁建立項目,以此降低軟體故障率。
主講老師強調了如上方式,在 PlatformIO 插件中查找及安裝 Libray 庫。
在 PlatformIO 中,還可以在上述頁面中自行識别連接配接到計算機的串行通信口。
實時示範
老師在視訊 21:15 部分開始,實時示範了 VS Code 中 PlatformIO 的使用。
老師示範使用的程式設計器是 Atmel ICE ,在 VS Code 與晶片之間起到轉接的作用。
常見故障:對 platformio.ini 修改
在 IoT 的配置中,出現故障很常見。
如上,為了使用 Atmel ICE ,老師在配置檔案中增加了相應配置:
upload_protocol = atmelice_isp
upload flags = -e
upload port = usb
解決問題方法論 首先,老師前往 bing 檢索故障代碼。
在檢索結果中,找到了相同的問題。如上。
最後,老師閱讀了問題的讨論、相關部落格,找到了原因與解決方案:
- Atmel ICE 在出廠時,其 usb 驅動程式是原廠提供的;
- 但是想要在 VS Code 中使用 PlatformIO 插件 ,必須轉換 usb 驅動程式;
- 驅動程式可以在 zadig.akeo.ie 下載下傳,在該頁面有驅動程式詳細的注意事項。
老師想強調的是“自己解決問題的能力”:
- 除了推薦 bing ;
- 還推薦 github 上使用 issues 交流;
- 還推薦 StackOverflow 檢索交流;
- 此外,對于 PlatformIO ,其本身也是個非常活躍的社群,也可在其上檢索。
建立項目
如上,老師建立了 Atmel + UNO 建立了最小系統。
實施一個 IoT 項目前需要了解的細節
- loT: Internet of Things -物聯網
- 兩個核心:“聯” and “物”
- “聯” - 通聯 - 通信 - communication
- "物”( MCU 的硬體選型):
- 從使用者(user), 也就是消費者(consumer)的角度了解: target(目标,對象)
- 舉例:電視機、電冰箱、洗衣機、腕表。。。
從開發者(developer), 也就是工程師(engineer)、 設計者(designer)的角度看: chip(晶片) - device(裝置)。
構思一個項目前的考量
- 項目本身 - 應用場景(類似于“盈利模式")
- 硬體 - 成本(cost)、環境、通信方式
關于 MCU 晶片
- 目前主流的晶片都是基于 ARM 的 32 位機
- 部分廠家有自己的16位機:Microchip (微芯)、Texas Instruments (德州儀器)
- 幾乎所有的晶片廠家都起步于8位機:英飛淩(Infineon)、恩智浦(NXP)、 芯聯科技(Silicon Labs)、 意法半導體(ST)、 美西(Maxim).....
物聯網項目在計算機中的作用
物聯網使用的是 MCU , MCU 處于計算機體系的底層,底層并不意味着其技術含量低,隻是說其結構簡單;比 MCU 複雜一點的是 SoC (system on a chip), SoC 是系統級晶片,比單片機複雜一點的單片機。
比較有名的 SoC 是樹莓派。
再複雜一點的是 PC 了。
關于物聯網特别的要提到 MCU :
Espressif
。
如上為兩款最有名的晶片,左邊的 esp8266 内置了 wifi 功能;右邊的 esp32 内置了 wifi 與藍牙功能。這兩款晶片功能強、價格低、穩定性好,知名度高,并且還是國産晶片。
MCU 級别的常用通信方式
有線:
- UART
- SPI
- IIC
無線:
- Bluetooth
- wifi
- Zigbee
- Ant+
- NB-IoT
- LoWa
- RF - 443MHz、315MHz
- IrDA
- ultrasonic
UART 原理
接着老師介紹了 UART (通用異步收發傳輸器)原理。傳輸二者不分主次。
對于 usb 口,其使用的是 UART 模式。
SPI - Serial Peripheral Interface
這種方式存在“一主多從”的關系。其中,“從” slave 可以是并行的,或者是有先後關系的。
無線電頻譜
老師提到了無線電頻譜,注意到這裡2.4G的無線電頻譜對應出現了 ZigBee 、出現了 Bluetooth 藍牙、出現了 BLE 低功耗的藍牙、出現了 WiFi 。這意味着藍牙、 WiFi 、 Zigbee 都是無線電通信,隻不過跟我們通常意義上的無線電通信相比,它們的頻率更高一些而已,達到了2.4G。
這裡提到頻譜,為近兩年出現的另外兩種無線電通信方式高影響力做鋪墊:窄帶IoT、勞拉。
窄帶IoT、勞拉的出現背景是:現有的頻譜資源很緊張,是以在硬體上想辦法。
此外,主講老師提到了:使用簡單的 RF transmitter 與 receiver 子產品并沒有問題,根據需求來就好。
老師還介紹了其他無線通信方式:紅外(已經到光譜的頻域)、超音波等。
此時不得不提到“庫”。别人(通常是專業廠家)
将信号處理的部分的代碼封裝好
,便于工程師将精力集中在邏輯與功能上。
“庫”就涉及到 IDE 了。
常見 IDE 簡介
如上,是老師接觸過的 IDE 。很多 IDE 來自硬體廠家,也有些專門制作 IDE 的企業。
起步比較早的 IDE 有 IAR 、 ARMKEIL 如上。
此外,還有有趣而不簡單的 ARDUINO ,有故事的 energia.nu (The Untold History of ARDUINO)。
關于 IDE 的幾個共同點
- 術業有專攻:幾乎沒有晶片廠家自己編寫的 IDE, 要麼委托專門的IDE團隊改造,要麼自己改裝開源的 IDE 。
- 不管 IDE 的來源是什麼, GCC 編譯器是标配,包括 VS Code 。
- 标準完整的 IDE 要涵蓋四個環節一編輯(edit)、編譯(build)、 上載(program)、調試(debug)。
必須要提的物聯網 IDE :RT-Thread Studio
RT-Thread Studio免 費開源,且以面向物聯網的定位而出現,其核心部件從 2006 年就開始,且是國産。在上半年,已經在 6億+ 晶片上安裝。
初學者選擇 VS Code 的理由
- Arduino IDE 中沒有的代碼補全功能
- 通過插件可以選用比 Arduino IDE 中更多晶片型号
- 結合了 GUI 和 CLI 界面:.json 檔案、 Terminal 與 CMD 對話框
- 後發優勢:IDE 功能的集大成
- 品牌感召力:以 RT-Thread 為例(即便是像 RT-Thread 這樣相對小一些的工具,也會及時給 VS Code 提供自己的插件。因為,這是一種專業水準的展現)。
一個可進階步驟
- Arduino IDE (簡單,但是初學者要的功能都有)
- VS Code + Arduino
- VS Code + PlatformIO
- Atmel Studio + Atmel IDE + AVR
上述進階步驟經過老師實踐,認為有一定可行性。