How to Build Node.js Barcode Reader on Raspberry Pi
Node.js is available for all platforms including IoT devices like Raspberry Pi. In this post, I will demonstrate how to quickly create an online barcode reader on Raspberry Pi using Node.js and Dynamsoft Barcode Reader SDK.
Node.js for Raspberry Pi
If you flashed Rasbian Jessie, the latest Linux ROM for Raspberry Pi, you might have noticed that Node.js is pre-installed by default. Nevertheless, the Node version is out of date. To get new features of Node.js, download the latest version.
Here are the steps to install Node.js for Raspberry Pi:
-
Remove the pre-installed Node.js:
sudo apt-get remove node
-
Check Pi hardware information:
uname –m armv7l
- Download the matched Node version for ARM.
-
Extract the package:
tar –xf node-v4.4.1-linux-armv7l.tar.xz
-
Add the bin path to ~/.bashrc:
vim ~/.bashrc export PATH=$PATH:/home/pi/node-v4.4.0-linux-armv7l/bin source ~/.bashrc
-
Check whether Node can work:
node –v v4.4.0
Building Online Barcode Reader
Download Dynamsoft Barcode Reader 4.2 for Raspberry Pi.
Extract the package and generate a symbolic link:
sudo ln -s <DynamsoftBarcodeReader>/lib/libDynamsoftBarcodeReader.so /usr/lib/libDynamsoftBarcodeReader.so
Install node-gyp for building Node C/C++ addons:
npm install -g node-gyp
Create dbr.cc and binding.gyp:
// dbr.cc
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
// convert v8 string to char *
String::Utf8Value license(args[0]->ToString());
String::Utf8Value fileName(args[1]->ToString());
char *pFileName = *fileName;
char *pszLicense = *license;
// Dynamsoft Barcode Reader: init
__int64 llFormat = args[2]->IntegerValue();
int iMaxCount = 0x7FFFFFFF;
ReaderOptions ro = {0};
pBarcodeResultArray pResults = NULL;
// Initialize license
if (pszLicense && (strcmp(pszLicense, "null") !=0) )
{
printf("license: %s\n", pszLicense);
DBR_InitLicense(pszLicense);
}
else {
#ifdef LINUX_DBR
printf("Linux dbr license\n");
DBR_InitLicense("<license>");
#endif
}
ro.llBarcodeFormat = llFormat;
ro.iMaxBarcodesNumPerPage = iMaxCount;
// Decode barcode image
int ret = DBR_DecodeFile(pFileName, &ro, &pResults);
// binding.gyp
{
"targets": [
{
'target_name': "dbr",
'sources': [ "dbr.cc" ],
'conditions': [
['OS=="linux"', {
'defines': [
'LINUX_DBR',
],
'include_dirs': [
"/home/pi/Desktop/dbr/include"
],
'libraries': [
"-lDynamsoftBarcodeReader", "-L/home/pi/Desktop/dbr/lib"
]
}]
]
}
]
}
Build dbr.so:
node-gyp build
Install Node modules express and formidable for rapidly making a Web project:
npm install express formidable
Use the barcode module in server.js:
var dbr = require('./build/Release/dbr');
dbr.decodeFile(
license, fileName, barcodeType,
function(msg) {
var response = 'Totol count: ' + msg.length;
var result = null;
for (index in msg) {
result = msg[index]
response += '<p>' + result['format'] + ': ';
response += result['value'] + '<p>';
}
res.send(response);
}
);
Start the server:
node server.js
Visit http://localhost:2016/index.htm:
Source Code
https://github.com/dynamsoftlabs/raspberry-pi-nodejs-barcode-reader-