如今,js 语言已经在服务端有了必定的应用,有人也想到了用 Node 去控制硬件设备,Node也很早就退出了 armv六、armv七、armv8 三个版本,而树莓派基于 armv7 架构,也就是说我么能够轻松的使用 Node 在树莓派端编程。推出了,甚至有一些开发板直接能够编译 js 文件。javascript
绝大多数嵌入式设备选用的是 C/C++ 语言,对于一些实时性较高的语言则选用汇编语言。可是随着硬件设备的性能提高,愈来愈有可能选用本身熟悉的语言进行编程,好比java、C#、javascript、python等。目前,在一些高端的微处理器(如树莓派)上已经可使用这些语言进行编程,大多数 MCU (绝大多数8/16位芯片)的编译环境都是将 C 语言编译成16进制文件烧录到芯片中执行。因此,当选用一个本身熟悉的语言在低端芯片中编程时,可能没法借助现有的编译器完成。本文以 Ardunio UNO (8位芯片)为例,用 Javascript 编写一个硬件的“Hello World”(点亮LED)程序。java
MCU 下载程序须要软硬件共同支持,通常会使用现成的 IDE 工具,极少会关注到这些。那么将一段程序下载到 MCU 中须要哪些支持呢?这里以 Ardunio UNO 为例进行讲解。将一段程序下载到 Ardunio UNO ,Ardunio UNO 依靠 ATmega32U4/ATmega16U2(不一样版本的 UNO 使用的芯片不一样,高版本的有所升级)等 进行下载。而 ATmega32U4/ATmega16U2 等是 USB 接口芯片,是将 PC 发送的信号传递到 UNO 主芯片的中枢。从第一章的电路图能够看出,ATmega16U2 芯片能够将 USB 信号转换为 ISP、串口信号等,而这里是将其转化为串口信号下载到主芯片(不一样厂商、不一样芯片支持不一样的下载方式)。另外一方面,不一样平台电脑也会装上对应的驱动(第一章安装环境中有提到),ATmega16U2 内置 Bootloader ,按照特定的协议与 PC 通讯。这里特别提一下,ATmega16U2 系列芯片支持固件升级,须要借助官方提供的软件 Flip 对其升级,对应的固件 megaUSB_DFU_Bootloaders 都是16进制文件。下图是 ATmega16U2 等硬件及 Boot 处理流程:node
Arduino IDE 是不支持 Javascript 语法的,这里没法使用 Arduino IDE 进行 Js 编程。首先,须要用 js 编写程序,而后将 js 程序写入到 arduino 中。这里须要一个协议来支持 PC 与 MCU 的通讯。而 Arduino IDE 自己集成 Firmata 协议(准确的说是 Firmata 从 Aduino 抽离出来的)。这里首先须要作的事讲 Firmata 协议的 Arduino 实现烧写到芯片中。而后,用 js 实现 Firmata 协议,PC 经过 Firmata 协议控制 Arduino.python
Arduino IDE 自己是集成了 Firmata,只须要找到这个程序,烧写到 arduino 中便可,具体位置以下图:git
首先,要实现 PC 与 MCU 的 Firmata 协议,这里直接借助 firmata.js,firmata.js 实现了用 PC 端用 js 与 MCU 的 Firmata 通讯。在这个基础上,编写 “Hello World” 。链接 USB 线,找到对应的设备端口ls /dev/tty.usb*
:github
编写程序,当 PC 和 MCU 与链接成功以后,将 Arduino 的13(链接LED)管脚置为高电平。将刚才显示的设备端口写到如下程序中:编程
var Board = require("firmata"); var board = new Board("/dev/tty.usbmodem1421"); board.on("ready", function() { // Arduino is ready to communicate console.log('connet'); board.digitalWrite(13, 1) });
如图,链接成功,开发板 LED 点亮:架构
上面就实现了用 js 控制硬件,当想用 js 编写复杂的程序是,也能够依赖一些现成的 js 库,这里推荐一个 johnny-five。一样,用其余的语言也能够实现,只须要使用 Firmata 对应的实现。Firmata client libraries,这个文档中列出各类语言对 Firmata 实现的库。工具
更多内容可访问:性能