干货回顾 | VS Code 在 IoT 工程项目中的应用

VS Code 在 IoT 工程项目中的应用

时间:9月24日(周四)19:30 - 21:30git

视频回放:https://b23.tv/RkvmXvgithub

主讲嘉宾介绍

绵旗,高级电工web

熟悉模电、数电。使用过MCS-5一、 AVR、PIC、MSP430、STM八、STM3二、 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 的内容。json

项目结构

首先,老师经过一个视频介绍了项目结构。微信

这个电子工程项目从硬件上来讲,由7部分组成:移动电话、LED、LCD、电源部分、LCD的对比度调整部分、芯片以及蓝牙模块。工程项目主体部分是:移动电话、LED、LCD、芯片以及蓝牙模块。核心是 ATmega328p 这个芯片。ATmega328p 所在的面包板上是一个 Arduino UNO 的最小系统,最小系统是让 ATmega328p 可以工做的最低电路配置。异步

这个最低电路配置由三部分组成:电源部分、晶体振荡器部分、重启部分。而如何讲代码或者说程序配置到芯片中呢?这即是 VS Code 参与的工做部分。在 VS Code 中,编写程序、并编译成可执行文件,最终经过另一个硬件 programmer 将程序导入到芯片中。编辑器

项目演示

接着,老师经过视频演示了Android智能电话遥控的LCD屏内容实时更新系统。具体内容为:工具

  • LED 的开/关及在 LCD 上的状态显示;
  • 在 LCD 上显示一个字符串。

这个项目演示了一部 Android 移动电话,经过蓝牙模块,以蓝牙通讯的方式把信号发送给微型控制器,让微型控制器的输出端显示移动电话发送的内容。flex

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 的几个共同点

  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

上述进阶步骤通过老师实践,认为有必定可行性。


点击“阅读原文”查看视频回放

本文分享自微信公众号 - VS Code 中文社区(vscodecc)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索