這一篇我將我寫好的程式、程式碼和使用方式附上。
整份程式包含3支程式,2支C程式,1支php的程式,分別是:
- jnx2000_meter.c
- jnx2000_monitor.c
- meter.php
USB無線接收器的讀取程式,它根據前一篇的流程將測電器數據讀出後,
將數據寫到Linux的SHM(ShareMemory)當中,並持續更新。
為了能同時支援多台JNX2000D的USB無線接收器,
每個Channel Number會使用獨立的SHM Key,例如:
Channel 0時,SHM Key為70248070
Channel 1時,SHM Key為70248071
.....
依Channel Number增加使用不同的SHM Key
jnx2000_monitor.c:
Linux Console的測電器資訊顯示程式。
程式執行時,要帶入測電器的Channel Number,
如果SHM Key存在(jnx2000_meter讀取程式正常執行),
就會在終端機中顯示目前的測電器資訊。
畫面如下:
meter.php:
Linux PHP Web版的測電器資訊顯示程式。
直接透過網頁可以讀取到Web Server的測電器資訊,
Web URL同樣要帶入測電器的Channel Number。
畫面如下:
編譯方式:
jnx2000_meter.c:
jnx2000_meter.c的編譯非常簡單,直接如下即可產生jnx2000_meter:
gcc -o jnx2000_meter jnx2000_meter.c
jnx2000_monitor.c:
jnx2000_monitor.c編譯時要稍微注意一下,
jnx2000_monitor的Console繪圖,是使用ncurses這個library,
因此編譯前要先確定有安裝libncurses5-dev這個套件。
在Debian/Ubuntu下,如下安裝:
apt-get install libncurses5-dev
確定有ncurses的library後,如下執行即可產生jnx2000_monitor:
gcc -o jnx2000_monitor jnx2000_monitor.c -lncurses
使用說明:
jnx2000_meter:
jnx2000_meter使用前要注意幾點:
- USB無線接收器的USB要確定插在Linux電腦上,且要確定ttyUSB有抓到
- 要確定USB無線接收器是開機狀態(有數值顯示),因為它有省電保護,一段時間沒有和PC通訊,就會自動關機。
- 操作順序必須是,先開USB無線接收器,確定有開機,再執行jnx2000_meter。如果先執行jnx2000_meter,是抓不到USB無線接收器的
按照上述幾點,操作順序如下圖:
執行方式如圖片所示,輸入
jnx2000_meter &
例如:jnx2000_meter /dev/ttyUSB1&
例如:jnx2000_meter ttyUSB1&
成功取的測電器資訊,會如圖片一樣顯示:
JNX-2000D Channel=9
Share Memory Key=70248079
這就表示jnx2000_meter成功執行中。
最後面記得加上&,讓它在背景執行。
jnx2000_monitor:
jnx2000_monitor使用相對簡單些,要注意的是:
- 要確定ncurses library有安裝,在Debian/Ubuntu下可以安裝libncurses5
apt-get install libncurses5
- 必須要先執行jnx2000_meter,才可以執行jnx2000_monitor
jnx2000_monitor <Channel Number>
例如:jnx2000_monitor 9
meter.php:
php版的meter.php功能和jnx2000_monitor相同。
要使用它,首先將meter.php放在php可以執行的Web路徑中,
以我這邊為例,我的Web路徑在
/var/www/
將meter.php放入/var/www/中,之後Web URL輸入如下:
http://192.168.1.6/meter.php
成功了會看到下面的畫面:
此時同樣的,根據Channel Number,在網址列加入Channel Number,
在這裡,我使用的Channel是9,加上:
http://192.168.1.6/meter.php?channel=9
即可出現下面畫面:
SHM資訊:
jnx2000_meter會將測電器資訊寫入SHM當中,
如果要在其他程式中使用SHM資訊,直接讀取即可使用,
SHM的資訊如下:
- 每個Channel Number會使用獨立的SHM Key,例如:Channel 0時,SHM Key為70248070Channel 1時,SHM Key為70248071.....依Channel Number增加使用不同的SHM Key
- SHM結構如下:
typedef struct power_meter_string_data PowerMeterStringData;
struct power_meter_string_data
{
char voltage[10];
char current[10];
char quantity[10];
char duration_days[10];
char duration_hours[10];
char duration_mins[10];
char factor[10];
char wattage[10];
char reserve[60];
};
所有資訊都使用char表示,並且均為10個字元(含字串結尾),
最後面包含保留空間60個字元。
最後面包含保留空間60個字元。
程式碼與程式