我是Docker Captain,我喜欢构建机器人和物联网设备。
在那几年中,我一直为公司和我自己做很多物联网原型。我一直在使用Arduino,Raspberry Pi和其他微控制器。
很少有东西使IoT开发与其他类型的软件开发截然不同。其中之一是您需要拥有一个物理设备来测试代码或构建良好的模拟器。这意味着您需要拥有可以连接到计算机并在其上运行代码的设备。
对我来说,在上班时,我的背包里有很多设备,传感器和电线。当我在世界各地的咖啡店做物联网开发时,我最终会出现许多有趣的情况,就像上面的图片和2015年的many others一样。
介绍
当Arduino开始流行时,我对构建自己的IoT设备的想法感到非常兴奋。我开始学习如何在C/C ++中编程,然后购买了许多传感器和其他组件来构建自己的项目。
,但我很快意识到我在Arduino源代码上花费了太多时间,因此我决定使用JavaScript。我开始使用Johnny-Five,并且能够在几个小时内构建复杂的物联网设备。
原型是新的MVP
当JSDayES 2016发生时,我在其中一个看台。在休息期间,我能够破解受欢迎的糖果罐,并构建由Node.js服务器控制的简单IoT设备。该设备能够根据您在a simple Node.js App中定义的逻辑来更改光的颜色。
约翰尼五人为什么这么酷?
库Johnny-Five是一个JavaScript库,可让您使用JavaScript控制Arduino和其他微控制器。它非常易于使用,并且有很多示例可以用来学习如何使用它。
作为JavaScript开发人员,我很高兴能够使用相同的语言来构建IoT设备:
Arduino板的典型眨眼LED示例如下:
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(13);
led.blink(1000);
});
与经典方法相比:
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
它看起来可能并不大,但是当您构建复杂的物联网设备时,它会产生很大的不同。您可以使用所有JavaScript功能,例如承诺,异步/等待等。构建您的IoT设备以及主机设备提供的所有计算功率,以及我们今天期望的所有现代通信(HTTP APIS,SDKS ..) 。
这将迫使您连接(USB,蓝牙...)IoT设备一直与计算机连接,因为该设备没有记录的说明。
显然并不是所有的IoT项目都符合此要求,但是对于简单的原型来说,这是一个很棒的解决方案。
我为什么要扩展我的项目?
Johnny Fix是一个很棒的图书馆,但是他们的某些依赖性具有复杂的安装过程(在引擎盖下),这有时很难在某些环境中安装库。特别是,如果您需要在设备之间进行更改,那么在我决定使用Docker以使执行更易于执行之前,这对我来说是非常令人沮丧的。
扩展您的JS IoT应用程序
我创建了这个repository来对接眨眼示例,因此更容易遵循和探索细节。
获取必要的软件
开始之前,您需要在计算机上使用Docker installed。
写一个Dockerfile
这是一个超简化的Dockerfile,如果您想建立一个准备就绪的示例Start from this
如果您说西班牙语,我也建议您我的电子书"Docker Seguro"
FROM node:18.14.1
WORKDIR /usr/src/app
RUN apt-get update
RUN apt-get -y install udev
COPY package*.json ./
RUN npm install --unsafe-perm --build-from-source=serialport
COPY . .
CMD [ "npm", "run", "start" ]
构建Docker图像
使用docker build
命令,创建一个docker映像。
docker build -t blink .
在Docker容器中运行您的应用程序
使用docker run
命令启动您的应用程序,指定必要的参数以配置您的容器。
这是棘手的部分,您需要将USB设备传递到容器中,以便它可以访问Arduino板。
docker run -it --rm --privileged --device=/dev/ttyUSB0 blink
在我的情况下,端口是/dev/ttyUSB0
,但这对您来说可能有所不同。在此Guide中,您可以找到更多信息。
有时从docker访问USB设备可能很棘手,尤其是在MacOS中。
我可以通过USB设备转到容器吗?
不幸的是,由于需要在管理员级别上支撑的支持,因此无法通过USB设备(或串行端口)将其通过。
Docker: General FAQs for Desktop
但是社区有很多解决方法:
- Docker - a way to give access to a host USB or serial device?
- How to use a USB device in a Docker container on Mac
发布您的Docker图像
可选,您可以将Docker映像发布到容器注册表,例如Docker Hub,以便于访问和分发。