【ラズパイでもDocker!】Dockerコンテナ越しにシリアル通信を叩くNode.jsアプリの作成方法
※ 当ページには【広告/PR】を含む場合があります。
2021/06/12
Dockerで動くNode.jsアプリの作成
node-serialport v9でシリアル通信プログラム実装
$ npm insall serialport
#OR
$ yarn add serialport
const SerialPort = require('serialport');
const Readline = require('@serialport/parser-readline');
//👇ゲスト上のSerialデバイスに名前を合せる
const portName = '/dev/ttyUSB0';
//👇接続先(Arduino)のシリアルモデムを考慮
const sp = new SerialPort(portName, {
baudRate: 9600,
dataBits: 8,
parity: 'none',
stopBits: 1,
flowControl: false,
});
//👇ポート開放時の初期化処理
sp.on('open', ()=> {
console.log('Open Serialport');
});
//👇パーサクラスを指定
const parser = sp.pipe(new Readline());
//👇データ(Arduino > ラズパイ)の受信
parser.on('data', (inp_) => {
try {
console.log(`Received: ${inp_}`);
} catch(e) {
return;
}
});
serialport.on('data',...)
Dockerイメージの作成
FROM arm32v7/node:12-alpine3.11
RUN apk update && apk upgrade && apk add --no-cache \
--virtual sp-deps make gcc g++ python alpine-sdk linux-headers udev
ENV NODE_ENV development
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN cd /usr/src/app && yarn install && yarn cache clean
RUN apk del sp-deps
COPY index.js /usr/src/app/
CMD ["node", "index.js"]
{
"name": "serial-dckr",
"version": "0.0.1",
"license": "MIT",
"dependencies": {
"serialport": "^9.0.0"
}
}
serial-dckr:node12
$ docker build -t serial-dckr:node12 .
DockerコンテナのNodeアプリの起動
/dev/ttyACM0
/dev/ttyUSB0
piserial
$ docker run -it \
--rm \
--device=/dev/ttyACM0:/dev/ttyUSB0 \
--name piserial \
serial-dckr:node12
#👇node index.jsのプロセスが走り出す
Open Serialport
Received: LED OFF
Received: LED ON
Received: LED OFF
Received: LED ON
#...省略
起動しているコンテナの止め方
docker stop
$ docker stop piserial
--rm
コンテナに外部デバイスへのアクセス権限を追加する
個別にデバイスを許可する
docker run
$ docker run --device=<ホスト上のデバイス名>[:コンテナ上のデバイス名][:権限タイプ] ...
:コンテナ上のデバイス名
$ docker run --device=/dev/ttyACM0 ...
#👇と同じ
$ docker run --device=/dev/ttyACM0:/dev/ttyACM0 ...
:r
:w
:m
:rwm
特権を与える(最終奥義)
--privileged
$ docker run --privileged -it <コンテナ名>
/dev/
GPIOとUSBデバイスの違い
--device=/dev/tty...
/sys/class/gpio
--device=/dev/gpiomem
/sys/
--volume=/sys:/sys
/sys/class/gpio
まとめ
参考サイト
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー