Edited at

ラズパイでTrackrr.ioに位置情報を表示してみた(2)

More than 3 years have passed since last update.

前回からの続きです。

GPSモジュールをゲットしたのでラズパイに接続して、モジュールからの位置情報を表示できるようにしてみます。

IMG_2127.JPG


GPSを接続してみる


接続前


lsusb

pi@raspberrypi:~/trackrr.io-sdk-js-sample$ lsusb

Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


ls /dev/tty*

pi@raspberrypi:~/trackrr.io-sdk-js-sample$ ls /dev/tty*

/dev/tty /dev/tty13 /dev/tty19 /dev/tty24 /dev/tty3 /dev/tty35 /dev/tty40 /dev/tty46 /dev/tty51 /dev/tty57 /dev/tty62 /dev/ttyprintk
/dev/tty0 /dev/tty14 /dev/tty2 /dev/tty25 /dev/tty30 /dev/tty36 /dev/tty41 /dev/tty47 /dev/tty52 /dev/tty58 /dev/tty63
/dev/tty1 /dev/tty15 /dev/tty20 /dev/tty26 /dev/tty31 /dev/tty37 /dev/tty42 /dev/tty48 /dev/tty53 /dev/tty59 /dev/tty7
/dev/tty10 /dev/tty16 /dev/tty21 /dev/tty27 /dev/tty32 /dev/tty38 /dev/tty43 /dev/tty49 /dev/tty54 /dev/tty6 /dev/tty8
/dev/tty11 /dev/tty17 /dev/tty22 /dev/tty28 /dev/tty33 /dev/tty39 /dev/tty44 /dev/tty5 /dev/tty55 /dev/tty60 /dev/tty9
/dev/tty12 /dev/tty18 /dev/tty23 /dev/tty29 /dev/tty34 /dev/tty4 /dev/tty45 /dev/tty50 /dev/tty56 /dev/tty61 /dev/ttyAMA0


接続後


lsusb

pi@raspberrypi:~/trackrr.io-sdk-js-sample$ lsusb

Bus 001 Device 007: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

PL2303 Serial Portが増えてますね。


ls /dev/tty*

pi@raspberrypi:~/trackrr.io-sdk-js-sample$ ls /dev/tty*

/dev/tty /dev/tty13 /dev/tty19 /dev/tty24 /dev/tty3 /dev/tty35 /dev/tty40 /dev/tty46 /dev/tty51 /dev/tty57 /dev/tty62 /dev/ttyUSB0
/dev/tty0 /dev/tty14 /dev/tty2 /dev/tty25 /dev/tty30 /dev/tty36 /dev/tty41 /dev/tty47 /dev/tty52 /dev/tty58 /dev/tty63 /dev/ttyprintk
/dev/tty1 /dev/tty15 /dev/tty20 /dev/tty26 /dev/tty31 /dev/tty37 /dev/tty42 /dev/tty48 /dev/tty53 /dev/tty59 /dev/tty7
/dev/tty10 /dev/tty16 /dev/tty21 /dev/tty27 /dev/tty32 /dev/tty38 /dev/tty43 /dev/tty49 /dev/tty54 /dev/tty6 /dev/tty8
/dev/tty11 /dev/tty17 /dev/tty22 /dev/tty28 /dev/tty33 /dev/tty39 /dev/tty44 /dev/tty5 /dev/tty55 /dev/tty60 /dev/tty9
/dev/tty12 /dev/tty18 /dev/tty23 /dev/tty29 /dev/tty34 /dev/tty4 /dev/tty45 /dev/tty50 /dev/tty56 /dev/tty61 /dev/ttyAMA0

/dev/ttyUSB0が増えてますね。

正常に認識されたようです。


シリアル通信してみる

pi@raspberrypi:~/trackrr.io-sdk-js-sample$ cu -s 4800 -l /dev/ttyUSB0

Connected.
$GPGGA,,,,,,0,00,,,M,0.0,M,,0000*48
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,,V,,,,,,,,,,N*53
$GPGGA,,,,,,0,00,,,M,0.0,M,,0000*48
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,,V,,,,,,,,,,N*53
$GPGGA,,,,,,0,00,,,M,0.0,M,,0000*48
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,01,00,000,,02,00,000,,03,00,000,,04,00,000,*7C
$GPGSV,3,2,12,05,00,000,,06,00,000,,07,00,000,,08,00,000,*77
$GPGSV,3,3,12,09,00,000,,10,00,000,,11,00,000,,12,00,000,*71
$GPRMC,,V,,,,,,,,,,N*53
$GPGGA,,,,,,0,00,,,M,0.0,M,,0000*48
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,,V,,,,,,,,,,N*53
$GPGGA,,,,,,0,00,,,M,0.0,M,,0000*48
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$G~PRMC,,V,,,,,,,,,,N*53
.

Disconnected.

お~来てますね。因みに終了は「~.」(チルダ ピリオド)を入力です。

でも、緯度経度とれてなくね?空っぽですね・・。

どうやらずっと信号検索中ままで受信できてないみたいです。


高感度受信機で、森林や都市部など上空が遮蔽された場所において性能を発揮します。


なんて書いてあるんですけどね。

社内で自席が一番窓際から遠いところにあり、厳しい感じなんですかね・・。

試行錯誤の結果、20mのLANケーブルをつなげて、なんとかラズパイを窓際に移動することに成功しました!

(移動作業を手伝ってくれたynottさんありがとうござしましたw)

すると

pi@raspberrypi:~$ cu -s 4800 -l /dev/ttyUSB0

Connected.
$GPGGA,040557.249,3541.7314,N,13945.9898,E,1,04,5.6,40.8,M,39.4,M,,0000*6D
$GPGSA,A,3,01,07,30,28,,,,,,,,,8.8,5.6,6.8*30
$GPGSV,3,1,12,01,69,232,23,07,34,241,39,30,34,275,26,28,21,316,26*70
$GPGSV,3,2,12,22,30,156,18,27,25,076,20,09,64,315,,13,50,099,*79
$GPGSV,3,3,12,16,44,185,,03,13,174,,08,10,257,,04,05,297,*76
$GPRMC,040557.249,A,3541.7314,N,13945.9898,E,1.02,267.56,270716,,,A*6C
$GPGGA,040558.249,3541.7317,N,13945.9899,E,1,04,5.6,41.1,M,39.4,M,,0000*68
$GPGSA,A,3,01,07,30,28,,,,,,,,,8.8,5.6,6.8*30
$GPRMC,040558.249,A,3541.7317,N,13945.9899,E,1.17,267.53,270716,,,A*60
~$GPGGA,040559.249,3541.7316,N,.

Disconnected.

取れてるじゃないですか!


コーディング


そのまえに

Node.jsでシリアル通信できるNode Serialport、NMEA-0183フォーマットをパースするためにnode-nmeaをインストールします。

pi@raspberrypi:~/trackrr.io-sdk-js-sample$ npm install serialport nmea-0183 --save

npm WARN package.json trackrr.io-sdk-js-sample@1.0.0 No description
npm WARN package.json trackrr.io-sdk-js-sample@1.0.0 No repository field.
npm WARN package.json trackrr.io-sdk-js-sample@1.0.0 No README data
/
> serialport@4.0.1 install /home/pi/trackrr.io-sdk-js-sample/node_modules/serialport
> node-pre-gyp install --fallback-to-build

node-pre-gyp ERR! Tried to download: https://github.com/EmergingTechnologyAdvisors/node-serialport/releases/download/4.0.1/serialport-v4.0.1-node-v46-linux-arm.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.1 and node@4.4.7 (node-v46 ABI) (falling back to source compile with node-gyp)
make: Entering directory '/home/pi/trackrr.io-sdk-js-sample/node_modules/serialport/build'
CXX(target) Release/obj.target/serialport/src/serialport.o
CXX(target) Release/obj.target/serialport/src/serialport_unix.o
CXX(target) Release/obj.target/serialport/src/serialport_poller.o
SOLINK_MODULE(target) Release/obj.target/serialport.node
COPY Release/serialport.node
make: Leaving directory '/home/pi/trackrr.io-sdk-js-sample/node_modules/serialport/build'
nmea-0183@0.0.7 node_modules/nmea-0183

serialport@4.0.1 node_modules/serialport
tqq bindings@1.2.1
tqq es6-promise@3.2.1
tqq commander@2.9.0 (graceful-readlink@1.0.1)
tqq debug@2.2.0 (ms@0.7.1)
tqq nan@2.4.0
mqq object.assign@4.0.4 (function-bind@1.1.0, object-keys@1.0.11, define-properties@1.1.2)


index.jsに処理を追加


index.js

var trackrr = require('trackrr.io-sdk-js');

var gpsKey = 'Trackrr.ioで取得したGPSのキー';
var secret = 'Trackrr.ioで取得したアクセスキー';
var client = new trackrr.GpsClientManager(gpsKey, secret);

var serialport = require("serialport");
var nmea = require('nmea-0183');
var port = '/dev/ttyUSB0';
var baudrate = 4800;
var readline = '\r\n';

var receiver = new serialport(port, {
baudrate: parseInt(baudrate),
parser: serialport.parsers.readline(readline)
});

client.on('connect', () => {
receiver.on('data', function(data) {
var nmeaData = nmea.parse(data);
if (nmeaData['id'] == 'GPRMC') {
var gps = {};
var coords = {};
gps.coords = {};
gps.coords.latitude = Number(nmeaData.latitude);
gps.coords.longitude = Number(nmeaData.longitude);
client.publish(gps);
console.log(gps);
console.log(nmeaData);
}
});
});


こんな感じになれば成功です。

pi@raspberrypi:~/trackrr.io-sdk-js-sample$ node index.js

{ coords: { latitude: 35.69557, longitude: 139.76688667 },
identity: 'ap-northeast-1:XXXXX',
gpsKey: 'XXXXX',
createdDate: 1469676353018 }
{ id: 'GPRMC',
time: '032552.000',
valid: 'A',
latitude: '35.69557000',
longitude: '139.76688667',
speed: 0,
course: 94.96,
date: '280716',
mode: '',
variation: NaN }
{ coords: { latitude: 35.69557, longitude: 139.76688667 },
identity: 'ap-northeast-1:XXXXX',
gpsKey: 'XXXXX',
createdDate: 1469676353760 }
{ id: 'GPRMC',
time: '032553.000',
valid: 'A',
latitude: '35.69557000',
longitude: '139.76688667',
speed: 0,
course: 94.96,
date: '280716',
mode: '',
variation: NaN }
{ coords: { latitude: 35.69557, longitude: 139.76688667 },
identity: 'ap-northeast-1:XXXXX',
gpsKey: 'XXXXX',
createdDate: 1469676354536 }
{ id: 'GPRMC',
time: '032554.000',
valid: 'A',
latitude: '35.69557000',
longitude: '139.76688667',
speed: 0,
course: 94.96,
date: '280716',
mode: '',
variation: NaN }
^C
pi@raspberrypi:~/trackrr.io-sdk-js-sample$

で、Trackrr.ioのコンソール画面では表示されてますね。

image

しかし、微動だにしないんで面白みに欠けますね。

次回は誰かのバッグに忍ばせてみることにします・・・。