![](http://static.javashuo.com/static/loading.gif)
VS Code 在 IoT 工程項目中的應用
時間:9月24日(週四)19:30 - 21:30git
視頻回放:https://b23.tv/RkvmXvgithub
主講嘉賓介紹
綿旗,高級電工web
熟悉模電、數電。使用過MCS-5一、 AVR、PIC、MSP430、STM八、STM3二、 EFM8等單片機,在MCU軟件編程領域內探索較廣。曾從事電子工程專業的實踐教學工做。編程
大綱
-
一個 IoT 項目的實例展現(硬件組成介紹) -
VS Code 在該 IoT 項目實施中的應用(結合 Arduino 和 PlatformIO 兩個插件,講解 VS Code 在 IoT 項目的用法) -
IoT 項目實施前須要瞭解的細節( MCU 與通訊方式) -
常見 IDE 簡介 -
選擇 VS Code 的理由
一個 IoT 項目的實例展現
主講人首先展現了一個 IoT 的項目。經過 Android 移動電話,實時更新 LED 與液晶顯示屏 LCD 的內容。json
項目結構
首先,老師經過一個視頻介紹了項目結構。微信
![](http://static.javashuo.com/static/loading.gif)
這個電子工程項目從硬件上來講,由7部分組成:移動電話、LED、LCD、電源部分、LCD的對比度調整部分、芯片以及藍牙模塊。工程項目主體部分是:移動電話、LED、LCD、芯片以及藍牙模塊。核心是 ATmega328p 這個芯片。ATmega328p 所在的麪包板上是一個 Arduino UNO 的最小系統,最小系統是讓 ATmega328p 可以工做的最低電路配置。異步
這個最低電路配置由三部分組成:電源部分、晶體振盪器部分、重啓部分。而如何講代碼或者說程序配置到芯片中呢?這即是 VS Code 參與的工做部分。在 VS Code 中,編寫程序、並編譯成可執行文件,最終經過另一個硬件 programmer 將程序導入到芯片中。編輯器
項目演示
接着,老師經過視頻演示了Android智能電話遙控的LCD屏內容實時更新系統
。具體內容爲:工具
-
LED 的開/關及在 LCD 上的狀態顯示; -
在 LCD 上顯示一個字符串。
![](http://static.javashuo.com/static/loading.gif)
這個項目演示了一部 Android 移動電話,經過藍牙模塊,以藍牙通訊的方式把信號發送給微型控制器,讓微型控制器的輸出端顯示移動電話發送的內容。flex
LCD12864 與 UNO 接線(原理圖)
物聯網強調「聯」字,老師認爲有必要經過接線來說解一下原理。
![](http://static.javashuo.com/static/loading.gif)
在如上有線通訊中,使用了SPI串行外部接口
的方式。
UNO 最小系統實物照(麪包板)
![](http://static.javashuo.com/static/loading.gif)
這個最小系統由3部分組成:
-
電源:1個穩壓器 + 3個濾波電容器 -
晶體振盪器:晶體振盪器 + 2個濾波電容器,負責給芯片提供外部時鐘信號 -
重啓電路:上拉電阻器 + 按鈕開關
咱們作物聯網項目時,也要考慮這些最小系統配置。
以 ATmega328p 爲例介紹 VS Code 的兩個插件
Arduino 插件
值得注意的是,VS Code Arduino 與 PlatformIO 並不兼容。
![](http://static.javashuo.com/static/loading.gif)
在安裝 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 遠小於此。
![](http://static.javashuo.com/static/loading.gif)
此外,老師建議從插件首頁創建項目,以此下降軟件故障率。
![](http://static.javashuo.com/static/loading.gif)
主講老師強調了如上方式,在 PlatformIO 插件中查找及安裝 Libray 庫。
![](http://static.javashuo.com/static/loading.gif)
在 PlatformIO 中,還能夠在上述頁面中自行識別鏈接到計算機的串行通訊口。
實時演示
![](http://static.javashuo.com/static/loading.gif)
老師在視頻 21:15 部分開始,實時演示了 VS Code 中 PlatformIO 的使用。
![](http://static.javashuo.com/static/loading.gif)
老師演示使用的編程器是 Atmel ICE ,在 VS Code 與芯片之間起到轉接的做用。
常見故障:對 platformio.ini 修改
在 IoT 的配置中,出現故障很常見。
![](http://static.javashuo.com/static/loading.gif)
如上,爲了使用 Atmel ICE ,老師在配置文件中增長了相應配置:
upload_protocol = atmelice_isp
upload flags = -e
upload port = usb
解決問題方法論
首先,老師前往 bing 檢索故障代碼。
![](http://static.javashuo.com/static/loading.gif)
在檢索結果中,找到了相同的問題。如上。
最後,老師閱讀了問題的討論、相關博客,找到了緣由與解決方案:
-
Atmel ICE 在出廠時,其 usb 驅動程序是原廠提供的; -
可是想要在 VS Code 中使用 PlatformIO 插件 ,必須轉換 usb 驅動程序; -
驅動程序能夠在 zadig.akeo.ie 下載,在該頁面有驅動程序詳細的注意事項。
![](http://static.javashuo.com/static/loading.gif)
老師想強調的是「本身解決問題的能力」:
-
除了推薦 bing ; -
還推薦 github 上使用 issues 交流; -
還推薦 StackOverflow 檢索交流; -
此外,對於 PlatformIO ,其自己也是個很是活躍的社區,也可在其上檢索。
創建項目
![](http://static.javashuo.com/static/loading.gif)
如上,老師創建了 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 是系統級芯片,比單片機複雜一點的單片機。
![](http://static.javashuo.com/static/loading.gif)
比較有名的 SoC 是樹莓派。
再複雜一點的是 PC 了。
關於物聯網特別的要提到 MCU :Espressif
。
![](http://static.javashuo.com/static/loading.gif)
如上爲兩款最有名的芯片,左邊的 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
![](http://static.javashuo.com/static/loading.gif)
這種方式存在「一主多從」的關係。其中,「從」 slave 能夠是並行的,或者是有前後關係的。
無線電頻譜
![](http://static.javashuo.com/static/loading.gif)
老師提到了無線電頻譜,注意到這裏2.4G的無線電頻譜對應出現了 ZigBee 、出現了 Bluetooth 藍牙、出現了 BLE 低功耗的藍牙、出現了 WiFi 。這意味着藍牙、 WiFi 、 Zigbee 都是無線電通訊,只不過跟咱們一般意義上的無線電通訊相比,它們的頻率更高一些而已,達到了2.4G。
這裏提到頻譜,爲近兩年出現的另外兩種無線電通訊方式高影響力作鋪墊:窄帶IoT、勞拉。
窄帶IoT、勞拉的出現背景是:現有的頻譜資源很緊張,所以在硬件上想辦法。
此外,主講老師提到了:使用簡單的 RF transmitter 與 receiver 模塊並無問題,根據需求來就好。
老師還介紹了其餘無線通訊方式:紅外(已經到光譜的頻域)、超聲波等。
此時不得不提到「庫」。別人(一般是專業廠家)將信號處理的部分的代碼封裝好
,便於工程師將精力集中在邏輯與功能上。
「庫」就涉及到 IDE 了。
常見 IDE 簡介
![](http://static.javashuo.com/static/loading.gif)
如上,是老師接觸過的 IDE 。不少 IDE 來自硬件廠家,也有些專門製做 IDE 的企業。
![](http://static.javashuo.com/static/loading.gif)
起步比較早的 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
上述進階步驟通過老師實踐,認爲有必定可行性。
![](http://static.javashuo.com/static/loading.gif)
點擊「閱讀原文」查看視頻回放
本文分享自微信公衆號 - VS Code 中文社區(vscodecc)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。