TestMate 這樣玩 (I):LED & OLED

作者:Jack (吳致佑)
愛文西門科技系統應用工程師

  本文要跟大家分享我自己在使用 TestMate 上的一些小應用,文中範例所選擇的開發板是很受大家歡迎的 Raspberry Pi(RPi)。當然,你也可以搭配自己喜歡的開發板使用。範例的材料如下:
  1. 硬體:Raspberry Pi 3 Model B( 1 片)、TestMate( 1 片)、杜邦線 ( 10 條 )
  2. 軟體:onoffoled-i2c-busi2c-busoled-font-5x7
我們將透過 Node.js 來操作板子上的 GPIO,當然你也可以透過 /sys/class/gpio 或使用 C 語言做檔案操作來進行 GPIO 的控制。這裡就用我習慣的 Node.js 來做演示,透由 GPIO 和 I2C 的控制來操作 TestMate 上的 LED 及 OLED 螢幕。就讓我們開始吧~ 首先,我們需要在 Pi 上先安裝 Node.js。
 

一、安裝 Node.js

1. 透過 SSH 登入 RPi 後,將系統套件更新到最新。

$ sudo apt-get update
$ sudo apt-get upgrade

2. 透過 curl 指令下載 Node.js v8.x 之後的最新版本。

$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

3. 完成後輸入以下指令安裝 Node.js。

$ sudo apt-get install -y nodejs

4. 最後查詢 Node.js 版本號,來確認是否安裝成功。

$ node -v

二、TestMate LED 示範


  這裡我們要介紹如何使用 Node.js 控制 RPi 上的 GPIO 來點亮 TestMate 的 LED。TestMate 共有 8 顆 LED 燈,分別有綠、黃、橘、紅,四種顏色。LED1 至 LED4 為 pull-down LED,高電位動作(Active High);LED5 至 LED8 為 pull-up LED,低電位動作(Active Low)。範例中將使用 npm 上較熱門的 onoff 模組來開發。
 

2.1 硬體配置



  如下圖所示,TestMate 上的 LEDs 均已經接上 4.7 kΩ 的偏壓限流電阻。因此,我們可以用杜邦線將 RPi 上的 GPIO 和 TestMate 腳位直接連接起來就可以使用 LED 了。假如你突然需要用 LED 當測試元件,而手邊又沒有麵包板或合適的電阻,手邊有一片 TestMate 就可立馬解決問題。

2.2 撰寫範例程式:led.js

1. 建立資料夾以及 led.js 檔案。

$ mkdir testmate && cd testmate
/testmate$ touch led.js

2. 接著初始化專案,並使用 npm install 安裝 onoff 模組。

/testmate$ npm init
/testmate$ npm install onoff --save

3. 接著撰寫 led.js 測試程式碼如下:
var Gpio = require('onoff').Gpio;
var led1 = new Gpio(4,  'out'),
    led2 = new Gpio(17, 'out'),
    led3 = new Gpio(27, 'out'),
    led4 = new Gpio(22, 'out'),
    led5 = new Gpio(5,  'out', { activeLow: true }),
    led6 = new Gpio(6,  'out', { activeLow: true }),
    led7 = new Gpio(13, 'out', { activeLow: true }),
    led8 = new Gpio(19, 'out', { activeLow: true });

var leds = [ led1, led2, led3, led4, led5, led6, led7, led8 ];
var indexCount = 0,
    dir = "up";

setInterval(function () {
  leds.forEach(function(led) {
    led.writeSync(1);
  });

  leds[indexCount].writeSync(0); 

  if (dir === 'up') {
    indexCount++;
    if (indexCount == 7)
      dir = 'down';
  } else if (dir === 'down') {
    indexCount--;
    if (indexCount == 0)
      dir = 'up';
  }
}, 200);

4. 完成後儲存,然後輸入以下指令執行程式。
/testmate$ node led.js

如果正常運作,你會看到 LED 會像下圖這樣就跑起來了:

三、TestMate OLED 示範


  TestMate 上的 OLED 螢幕是很常見的 0.96 吋 (128x64) 顯示器,它的驅動 IC 型號為新款的 SSD1315,其功能與舊款 SSD1306 相容,走 I2C 控制介面,相關文件在網路上也很容易找到。這裡選擇的 npm 套件是可以直接控制 SSD1306 的 oled-i2c-bus 模組。

3.1 硬體配置


Note:透過 RPi 控制 TestMate OLED,需將 R11 電阻改為 0 歐姆或短路,如下圖。

3.2 啟用 I2C 功能

  預設情況下 RPi 的 I2C 功能是關閉的,所以在使用 I2C 之前需要先將這個功能啟用。
 
1. 在終端機輸入以下指令進入 Software Configuration Tool 的設定畫面。
$ sudo raspi-config

2. 進入設定畫面後,選擇 5 Interfacing Options,按下 Enter 鍵。


3. 接著選擇 P5 I2C,按下 Enter 鍵。


4. 選擇 <Yes>,按下 Enter 鍵。


3.3 撰寫範例程式:olde.js

1. 建立 oled.js 檔案。
/testmate$ touch oled.js

2. 安裝 oled-i2c-bus、i2c-bus 及 oled-font-5x7 模組。
/testmate$ npm install oled-i2c-bus i2c-bus oled-font-5x7 --save

3. 編輯 oled.js 程式碼。
var i2c = require('i2c-bus'),
    Oled = require('oled-i2c-bus'),
    font = require('oled-font-5x7');

var opts = {
    width: 128,
    height: 64,
    address: 0x3C
};

var i2cBus = i2c.openSync(1),
    oled = new Oled(i2cBus, opts);

oled.setCursor(20, 5);
oled.writeString(font, 2, 'Happy', 1, true);
oled.setCursor(20, 25);
oled.writeString(font, 2, 'New Year', 1, true);
oled.setCursor(20, 45);
oled.writeString(font, 2, '2019!', 1, true);

oled.startScroll('left', 0, 15);

4. 完成後儲存,然後輸入以下指令執行程式。
/testmate$ node oled.js

如程式碼運作正常,你會看到 OLED 上顯示如下所示:

 
我有空時,會陸續再寫一些和 TestMate 應用相關的文章,請持續鎖定 E.E. 狂想曲,謝謝大家!
 
 
 


沒有留言

技術提供:Blogger.