天天看點

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

視訊回放

VS Code 在 IoT 工程項目中的應用​b23.tv

主講嘉賓介紹

綿旗,進階電工

熟悉模電、數電。使用過MCS-51、 AVR、PIC、MSP430、STM8、STM32、 EFM8等單片機,在MCU軟體程式設計領域内探索較廣。曾從事電子工程專業的實踐教學工作。

大綱

  1. 一個 IoT 項目的執行個體展示(硬體組成介紹)
  2. VS Code 在該 IoT 項目實施中的應用(結合 Arduino 和 PlatformIO 兩個插件,講解 VS Code 在 IoT 項目的用法)
  3. IoT 項目實施前需要了解的細節( MCU 與通信方式)
  4. 常見 IDE 簡介
  5. 選擇 VS Code 的理由

一個 IoT 項目的執行個體展示

主講人首先展示了一個 IoT 的項目。通過 Android 行動電話,實時更新 LED 與液晶顯示屏 LCD 的内容。

項目結構

首先,老師通過一個視訊介紹了項目結構。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

這個電子工程項目從硬體上來說,由7部分組成:行動電話、LED、LCD、電源部分、LCD的對比度調整部分、晶片以及藍牙子產品。工程項目主體部分是:行動電話、LED、LCD、晶片以及藍牙子產品。核心是 ATmega328p 這個晶片。ATmega328p 所在的面包闆上是一個 Arduino UNO 的最小系統,最小系統是讓 ATmega328p 能夠工作的最低電路配置。

這個最低電路配置由三部分組成:電源部分、晶體振蕩器部分、重新開機部分。而如何講代碼或者說程式配置到晶片中呢?這便是 VS Code 參與的工作部分。在 VS Code 中,編寫程式、并編譯成可執行檔案,最終通過另外一個硬體 programmer 将程式導入到晶片中。

項目示範

接着,老師通過視訊示範了

Android智能電話遙控的LCD屏内容實時更新系統

。具體内容為:

  • LED 的開/關及在 LCD 上的狀态顯示;
  • 在 LCD 上顯示一個字元串。
建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

這個項目示範了一部 Android 行動電話,通過藍牙子產品,以藍牙通信的方式把信号發送給微型控制器,讓微型控制器的輸出端顯示行動電話發送的内容。

LCD12864 與 UNO 接線(原理圖)

物聯網強調“聯”字,老師認為有必要通過接線來講解一下原理。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

在如上有線通信中,使用了

SPI串行外部接口

的方式。

UNO 最小系統實物照(面包闆)

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

這個最小系統由3部分組成:

  • 電源:1個穩壓器 + 3個濾波電容器
  • 晶體振蕩器:晶體振蕩器 + 2個濾波電容器,負責給晶片提供外部時鐘信号
  • 重新開機電路:上拉電阻器 + 按鈕開關

我們做物聯網項目時,也要考慮這些最小系統配置。

以 ATmega328p 為例介紹 VS Code 的兩個插件

Arduino 插件

值得注意的是,VS Code Arduino 與 PlatformIO 并不相容。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

在安裝 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 遠小于此。
建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

此外,老師建議從插件首頁建立項目,以此降低軟體故障率。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

主講老師強調了如上方式,在 PlatformIO 插件中查找及安裝 Libray 庫。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

在 PlatformIO 中,還可以在上述頁面中自行識别連接配接到計算機的串行通信口。

實時示範

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

老師在視訊 21:15 部分開始,實時示範了 VS Code 中 PlatformIO 的使用。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

老師示範使用的程式設計器是 Atmel ICE ,在 VS Code 與晶片之間起到轉接的作用。

常見故障:對 platformio.ini 修改

在 IoT 的配置中,出現故障很常見。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

如上,為了使用 Atmel ICE ,老師在配置檔案中增加了相應配置:

upload_protocol = atmelice_isp

upload flags = -e
upload port = usb
           
解決問題方法論

首先,老師前往 bing 檢索故障代碼。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

在檢索結果中,找到了相同的問題。如上。

最後,老師閱讀了問題的讨論、相關部落格,找到了原因與解決方案:

  • Atmel ICE 在出廠時,其 usb 驅動程式是原廠提供的;
  • 但是想要在 VS Code 中使用 PlatformIO 插件 ,必須轉換 usb 驅動程式;
  • 驅動程式可以在 zadig.akeo.ie 下載下傳,在該頁面有驅動程式詳細的注意事項。
建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

老師想強調的是“自己解決問題的能力”:

  • 除了推薦 bing ;
  • 還推薦 github 上使用 issues 交流;
  • 還推薦 StackOverflow 檢索交流;
  • 此外,對于 PlatformIO ,其本身也是個非常活躍的社群,也可在其上檢索。

建立項目

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

如上,老師建立了 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 是系統級晶片,比單片機複雜一點的單片機。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

比較有名的 SoC 是樹莓派。

再複雜一點的是 PC 了。

關于物聯網特别的要提到 MCU :

Espressif

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

如上為兩款最有名的晶片,左邊的 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

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

這種方式存在“一主多從”的關系。其中,“從” slave 可以是并行的,或者是有先後關系的。

無線電頻譜

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

老師提到了無線電頻譜,注意到這裡2.4G的無線電頻譜對應出現了 ZigBee 、出現了 Bluetooth 藍牙、出現了 BLE 低功耗的藍牙、出現了 WiFi 。這意味着藍牙、 WiFi 、 Zigbee 都是無線電通信,隻不過跟我們通常意義上的無線電通信相比,它們的頻率更高一些而已,達到了2.4G。

這裡提到頻譜,為近兩年出現的另外兩種無線電通信方式高影響力做鋪墊:窄帶IoT、勞拉。

窄帶IoT、勞拉的出現背景是:現有的頻譜資源很緊張,是以在硬體上想辦法。

此外,主講老師提到了:使用簡單的 RF transmitter 與 receiver 子產品并沒有問題,根據需求來就好。

老師還介紹了其他無線通信方式:紅外(已經到光譜的頻域)、超音波等。

此時不得不提到“庫”。别人(通常是專業廠家)

将信号處理的部分的代碼封裝好

,便于工程師将精力集中在邏輯與功能上。

“庫”就涉及到 IDE 了。

常見 IDE 簡介

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

如上,是老師接觸過的 IDE 。很多 IDE 來自硬體廠家,也有些專門制作 IDE 的企業。

建立工程沒有atmel_回顧 | VS Code 在 IoT 工程項目中的應用

起步比較早的 IDE 有 IAR 、 ARMKEIL 如上。

此外,還有有趣而不簡單的 ARDUINO ,有故事的 energia.nu (The Untold History of ARDUINO)。

關于 IDE 的幾個共同點

  1. 術業有專攻:幾乎沒有晶片廠家自己編寫的 IDE, 要麼委托專門的IDE團隊改造,要麼自己改裝開源的 IDE 。
  2. 不管 IDE 的來源是什麼, GCC 編譯器是标配,包括 VS Code 。
  3. 标準完整的 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 提供自己的插件。因為,這是一種專業水準的展現)。

一個可進階步驟

  1. Arduino IDE (簡單,但是初學者要的功能都有)
  2. VS Code + Arduino
  3. VS Code + PlatformIO
  4. Atmel Studio + Atmel IDE + AVR

上述進階步驟經過老師實踐,認為有一定可行性。