在 Intel Edison 開發板上,利用 JavaScript 打造聰明的桌上型時鐘

步驟 7:匯入 MRAA 與 UPM LCD 程式庫

一大堆字母縮寫,夠多了嗎?;)

MRAA是某種低階 C++ 程式庫,促成 Edison 的 Linux(軟體)端代表 Edison 的通用輸入輸出針腳(硬體)端進行通訊。Intel 維護的 mraa 程式庫放在 Github 這裡:https://github.com/intel-iot-devkit/mraa

例如,要點亮連接到 Pin 13 的 LED,就像這樣使用 MRAA:

var mraa = require('mraa');
var led = new mraa.Gpio(13);
led.dir(mraa.DIR_OUT);
led.write(1);

UPM是比較高階的程式庫,使用 MRAA 來簡化對於現成電子元件的操控,尤其是有些元件需要的不只是簡單的開關命令,像是上面 LED 的例子。要讓 LCD 螢幕顯示文字,就需要發送某些非常精確計時的電氣信號,所以要有額外的動作,裝進個別的 UPM 程式庫中。Intel 維護的 UPM 程式庫放在 Github 這裡:https://github.com/intel-iot-devkit/upm

LCD代表液晶顯示器 (Liquid Crystal Display),如果有興趣知道 LCD 螢幕的組成,請移至 YouTube 觀看「Building a liquid crystal display」影片。)

針對 Grove LCD 元件 (Jhd1313m1),仍然要像上面那樣包含 MRAA 程式庫,此外還要使用個別的 UPM I2C LCD 程式庫,像下面這樣:

var mraa = require('mraa');
var jsUpmI2cLcd = require ('jsupm_i2clcd');

// Initialize the LCD.
// The 1st param is the BUS ID:
//   Intel Edison: Use 6
//   Intel Galileo Gen 2: Use 6 (I think)
//   Intel Galileo Gen 1: Use 0
var lcd = new jsUpmI2cLcd.Jhd1313m1(6, 0x3E, 0x62);

// Make the backlight red
lcd.setColor(255, 0, 0);

// Go to the 2nd row, 6th character (0-indexed)
// and print out "Hello!"
lcd.setCursor(1,5);
lcd.write('Hello!');

如果需要更多其他的感測器範例程式碼,可以透過 Github 的 UPM 範例資料夾或是Intel IoT 的感測器網頁尋找。

所以,在 main.js 檔案的最上方,需要有這個:

var mraa = require('mraa');
var jsUpmI2cLcd = require ('jsupm_i2clcd');
var lcd = new jsUpmI2cLcd.Jhd1313m1(6, 0x3E, 0x62);

步驟 8:加入我的 LCD 文字輔助程式庫

用 JavaScript 的 UPM LCD 程式庫其實相當簡陋,只會提供幾種命令,像是將文字寫到螢幕上、清除螢幕,以及改變 RGB 背光顏色。

如果嘗試寫入超過 16 個字元長度的文字,內容就會截斷(超出螢幕顯示範圍)。

在智慧型鬧鐘的例子裡,行事曆事件的名稱很可能會超過 16 個字元,所以我寫了一個 Node 模組,倘若文字超出一行的範圍,就會左右捲動。

  1. 從這裡下載:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/iot-version/lcd_text_helper.js 這段控制碼。
  2. 將 lcd_text_helper.js 放進您的專案目錄,與 main.js 放在一起。
  3. 在 main.js 中,加入這個部分,與 UPM LCD 程式庫放在一起:
var jsUpmI2cLcd  = require ('jsupm_i2clcd');
var LcdTextHelper = require('./lcd_text_helper');
var lcd = new jsUpmI2cLcd.Jhd1313m1(6, 0x3E, 0x62);
var lcdText = new LcdTextHelper(lcd);

4. 像這樣使用:

/**
 * Try it out with some test messages.
 */
 
var LCD_MESSAGE_VERY_LONG = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvxyz"; // >16 characters long (48 chars)
var LCD_MESSAGE_LONG = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // >16 characters long (24 chars)
var LCD_MESSAGE_16CHAR = "1234567890ABCDEF"; // ==16 characters long
var LCD_MESSAGE_SHORT = "1234567890"; // <16 characters long (10 chars)
var LCD_MESSAGE_VERY_SHORT = "ABC"; // <16 characters long (3 chars)
 
lcdText.set([
  "  Hello,", 
  "        World!"
]);
 
setTimeout(function(){
  lcdText.set([
    LCD_MESSAGE_SHORT, 
    LCD_MESSAGE_VERY_SHORT
  ]);
}, 5000);
 
setTimeout(function(){
  lcdText.set([
    LCD_MESSAGE_LONG, 
    LCD_MESSAGE_VERY_LONG
  ]);
}, 10000);

現在,有了基本(但看起來相當不錯)的功能,可以將文字輸出到 LCD 螢幕,我們再來將一些行事曆的邏輯加到程式碼中。

步驟 9:加入最後的行事曆事件邏輯

看一看在 Github 這裡 main.js 最終的程式碼:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/iot-version/main.js


我在最終版本做了一件事,就是將 Google Calendar API 的東西從 main.js 挪出來,放進獨立的 Node 模組,叫做 GoogleCalendarEventFetcher。

  1. 從這裡下載:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/iot-version/google_calendar_event_fetcher.js
  2. 將 google_calendar_event_fetcher.js 放進您的專案目錄,與 main.js 放在一起。
  3. 在 main.js 中,加入這個部分,與 LCD 文字輔助功能放在一起。
var LcdTextHelper = require('./lcd_text_helper');
var GoogleCalendarEventFetcher = require('./google_calendar_event_fetcher');

4. 像這樣使用:

// Initialize it
var calendar = new GoogleCalendarEventFetcher();
calendar.init(successCallback, optionalErrorDisplayCallback);

// Then, in the success callback:
calendar.getEvents(eventsReceivedCallback, MAX_EVENTS, beginTimeToQuery.toISOString(), endTimeToQuery.toISOString());

 

Jazzbear
作者

使用 Facebook 留言
發表回應
謹慎發言,尊重彼此。按此展開留言規則