Getting Started BeagleBone Black Rev.C with BoneScript and Cloud9 IDE

Getting Started BeagleBone Black Rev.C with BoneScript and Clond9 IDE

บทความรีวิวตอนที่ 2 นี้เป็นการแนะนำการใช้งานบอร์ดเพิ่มเติมจากตอนที่แล้ว (ย้อนอ่านตอนที่1) หลังจากเสียบบอร์ดเข้ากับคอมพิวเตอร์ผ่าน USB ให้เข้าไปที่ My Computer จะมองเห็นบอร์ดอยู่ใน Removable Storage Devices ชื่อ BeagleBone Getting Started (H:) (อาจจะเป็น Drive Letter อื่นๆ)

01

เปิด Drive H: แล้วเปิดไฟล์ README.htm หรือ START.htm ด้วยเว็บเบราว์เซอร์

02

หน้าเว็บเพจBeagleBone Black Getting Started แสดงผลจากไฟล์บนบอร์ด

03

ขั้นตอนที่ 1 เมนูด้านซ้ายแสดงขั้นตอนในการใช้งานซึ่งตอนนี้ผ่านขั้นตอนที่ 1 มาแล้วคือให้เสียบบอร์ดเข้าทางพอร์ต USB เมื่อเริ่มทำงาน PWR LED จะติดค้างแสดงว่ามีไฟเลี้ยงเข้าบอร์ด ส่วน User LED (USR) 4 ดวง จะติดตามการทำงานปกติ ดังนี้ 

       – USR0 กระพริบเหมือนจังหวะการเต้นของหัวใจแสดง Heartbeat ของระบบว่ายังทำงานปกติ
       – USR1 จะติดเมื่อเข้าถึง SD Card ตอนนี้จะดับสนิทเนื่องจากไม่ได้เสียบไว้และไม่มีการใช้งาน
       – USR2 กระพริบตามการทำงานของซีพียู หากซีพียูทำงานหนักจะติดค้าง หากซีพียูว่างจะกระพริบเล็กน้อย 
       – USR3 จะติดเมื่อเข้าถึง eMMC Flash Memory บนบอร์ด ตอนนี้จะดับอยู่โดยจะติดหากมีการเข้าถึงไฟล์บนบอร์ด เช่น เปิดลิงค์หรือดาวโหลดไฟล์จากหน้าเว็บเพจ Getting Started

ขั้นตอนที่

2 ติดตั้งไดรฟ์เวอร์ให้สามารถเข้าถึงเน็ตเวิร์คของบอร์ดผ่าน USB (Network-over-USB) ได้ เหมาะสำหรับคนที่ไม่มีระบบเครือข่ายแบบ LAN ในการใช้งานเบื้องต้น ให้เลือกดาวโหลดไฟล์และติดตั้งตามระบบปฏิบัติการที่ใช้ ตัวอย่างเช่น เครื่องนี้เป็น Windows 64-bit ก็จะโหลด 64-bit installer

05

กดดาวน์โหลดไฟล์ แล้วบันทึกลงเครื่องคอมพิวเตอร์เป็นไฟล์ชื่อ BONE_D64.exe ขนาด 1.1 MB

06

รันตัวติดตั้ง BeagleBone Driver Installer สำหรับบอร์ดจาก BeagleBoard.org กดปุ่ม Next

รอสักครู่

ระหว่างโปรแกรมติดตั้งทำงาน

ระหว่างติดตั้งไดรฟ์เวอร์อาจมีหน้าต่างขึ้นมาให้ยืนยันการติดตั้ง ให้กดปุ่ม Install ตรงนี้สามารถคลิกเลือก “Always trust software from SysCo Systems …” ได้ ไดรฟ์เวอร์ที่ติดตั้ง คือ Linux Developer Community Port และ USB to Serial กับ Virtual COM Port ของ FTDI

09

ติดตั้งเรียบร้อย สามารถเลื่อนดูรายละเอียดการติดตั้งได้ เสร็จแล้วกดปุ่ม Finish

ขั้นตอนที่

3 เข้าใช้งานบอร์ดผ่านเว็บเบราว์เซอร์ซึ่งทาง BeagleBoard แนะนำให้ใช้ Chrome หรือ Firefox เนื่องจากหน้าเว็บเพจและสคริปต์ที่แสดงผลบางอย่างอาจจะไม่รองรับกับ Internet Explorer

11

ใช้เว็บเบราว์เซอร์เปิด IP Address 192.168.7.2 เข้าหน้าเว็บเพจ BeagleBone 101 (ตั้งชื่อเหมือนวิชาเรียนพื้นฐานรหัส 101) แสดงเป็นลิงก์และรายละเอียดในด้านต่างๆ ให้เข้าไปศึกษาและใช้งาน ได้แก่
– วิธีติดตั้งและอัพเดทระบบปฏิบัติการบนบอร์ด
– ลิงค์เข้าโปรแกรม Cloud9 IDE เพื่อพัฒนาโปรแกรมผ่านทางเว็บเบราว์เซอร์
– รายละเอียดขาคอนเน็คเตอร์ของ BeagleBone
– ข้อมูลเกี่ยวกับ Cape ซึ่งเป็นบอร์ดเชื่อมต่ออุปกรณ์เสริมต่างๆ ของ BeagleBone
– คู่มือการใช้ BoneScript

12

BoneScript
           BoneScript เป็นไลบรารี่ของ Node.js สร้างขึ้นมาเพื่อทำงานบนบอร์ดตระกูล BeagleBone โดยปรับการเรียกฟังก์ชั่นให้มีความคล้ายคลึงกับ Arduino สามารถเรียกใช้ได้ผ่านเว็บเบราว์เซอร์ เน้นให้ใช้งานง่าย มีฟังก์ชั่นสำหรับการติดต่อกับฮาร์ดแวร์พื้นฐาน ในการพัฒนาโปรแกรมด้วย JavaScript การทำงานของระบบจะแตกต่างกับการเขียนโปรแกรมด้วยภาษา C บนไมโครคอนโทรลเลอร์ คือ ใช้ตัวแปลคำสั่งทำงานทีละบรรทัด (Intepreter) แทนที่จะเป็นตัวแปลคำสั่งทั้งหมดออกมาเป็นโปรแกรมก่อนรัน (Compiler) โดยการทำงานของตัวแปลคำสั่งของ JavaScript กับ Node.js จะทำงานแบบเรียกกลับ (Callback) ซึ่งเมื่อมีการทำเหตุการณ์ (Event) จะมีการหยุดรอการทำงาน เช่น รอกดปุ่ม รอโหลดไฟล์ เป็นต้น เมื่อเสร็จแล้วจึงเข้าไปทำงานตามฟังก์ชั่นและเรียกกลับผลลัพธ์ของการทำงานออกมา จากนั้นตัวจัดการเหตุการณ์อื่นจะถูกเรียกขึ้นมาทำงานในรูปแบบเดียวกันนี้ต่อไป
           BoneScript รันอยู่บน Node.js ในการเรียกใช้โดยตรงบนบอร์ดทำได้โดยเรียก (Invoke) คำสั่ง‘node’ ขึ้นมาโดยตรงหรือให้ตัว Cloud9 IDE ที่ติดตั้งไว้บนบอร์ดเรียกขึ้นมาให้ นอกจากนี้ยังสามารถรันได้ด้วยการเรียกสคริปต์ bonescript.js จากภายนอก (Remote Procedure Calls) ผ่านทางเว็บเบราว์เซอร์โดยใช้งาน Socket.IO โดยใช้ฟังก์ชั่น “require(“bonescript”)” 
           ลองดูตัวอย่างการใช้งาน BoneScript เบื้องต้น โดยเลื่อนลงมาด้านล่างที่หัวข้อ BoneScript interactive guide จะมีตัวอย่างโค้ดของการเขียน JavaScript เรียกไลบรารี่ของ BoneScript เพื่อควบคุมฮาร์ดแวร์บนบอร์ด ลองกดปุ่ม Run เพื่อให้โค้ดทำงานจะเห็นว่า LED ทั้ง 4 ดวงติดพร้อมกันทั้งหมดเป็นช่วงเวลาสั้นๆ 2 วินาที

13

จากโค้ดตัวอย่างโปรแกรมประกาศออบเจ็ค b เรียกใช้ไลบรารี่ BoneScript ด้วยคำสั่ง require(‘bonescript’) 
          คำสั่ง b.pinMode(‘USR0’, b.OUTPUT) เรียกฟังก์ชั่นกำหนดโหมดการทำงานของขาเป็นเอาท์พุตให้กับ USR0 (User LED 0) และใช้ฟังก์ชั่นเดียวกันกับทั้ง USR1 USR2 และ USR3 จนครบ ซึ่ง USR0 ถึง 3 นี้ได้ประกาศเป็นชื่อไว้แล้วอยู่ภายในสำหรับเรียกแทน User LED ทั้ง 4 ดวง 
          จากนั้นคำสั่ง b.digitalWrite(‘USR0’, b.HIGH) เรียกฟังก์ชั่นสั่งให้ส่งลอจิก High ไปที่ขาที่ต่อกับ USR0 และใช้ฟังก์ชั่นเดียวกันกับทั้ง USR1 USR2 และ USR3 
          สุดท้ายคำสั่ง setTimeout(restore, 2000) ทำให้ LED ทั้ง 4 กลับคืนสู่ค่าเดิม หากลองเปลี่ยนตัวเลข 2000 ให้เพิ่มขึ้นหรือลดลงก็จะมีผลกับเวลาที่ LED ทั้ง 4 ดวงติดนานขึ้นหรือสั้นลงด้วย
ฟังก์ชั่น setTimeout(callback, millisecond) เป็นฟังก์ชั่นในส่วนของ JavaScript เรียกใช้ตัวจับเวลา (Timer) แบบทำงานเมื่อหมดเวลา (Timeout) แล้วจึงทำฟังก์ชั่นที่ต้องการโดยกำหนดฟังก์ชั่นที่ต้องการให้ทำงาน และกำหนดค่าเวลาในหน่วยหนึ่งส่วนพันวินาที
          ส่วนฟังก์ชั่น restore() ที่ถูกเรียกกลับให้ทำงานในตอนท้ายจะมีผลเหมือนเวลาที่กดปุ่ม Restore ซึ่งสั่งให้ LED ทั้ง 4 ดับ แล้วคืนค่าการทำงานกลับไปเป็นค่าปกติ คือ ติดและดับตามสถานะการทำงานต่างๆ
***ดูได้จาก http://192.168.7.2/Support/BoneScript/#console
          จากตัวอย่างที่ผ่านมาจะเห็นว่าคำสั่งของ BoneScript มีความเรียบง่ายไม่ซับซ้อนใช้งานร่วมกับเว็บเพจได้ง่ายเพียงเขียนให้เป็น JavaScript แล้วเรียกให้รันขึ้นมาเท่านั้นเอง
ฟังก์ชั่นต่างๆ ของ BoneScript
          สามารถศึกษาตัวอย่างการเรียกใช้ฟังก์ชั่น BoneScript อื่นๆ ได้จากเมนูด้านซ้าย ในส่วนลิงก์ BoneScript > Function โดยกดเลือกที่หัวข้อต่างๆ ตามที่สนใจ 
ฟังก์ชั่น getPatform()
ใช้ดึงข้อมูลรายละเอียดของบอร์ด
Syntax
          – getPlatform([callback]) 
Arguments
          – callback (optional): ฟังก์ชั่นที่จะถูกเรียกเมื่อทำเสร็จเป็นออพชั่น คือ จะไม่กำหนดก็ได้
Return value
          – name: ชื่อของบอร์ด
          – serialNumber: หมายเลขเครื่องของบอร์ด
          – version: รุ่นฮาร์ดแวร์ของบอร์ด
          – bonescript: รุ่นของไลบรารี่โบนสคริปต์ที่ติดตั้งอยู่บนบอร์ด
callback(x)
          – x.value: ค่าต่างๆ ที่ส่งกลับมาตามรายการที่อยู่ใน Return value
          เลือกลิงก์ BoneScript > Functions > getPlatform() จากเมนูด้านซ้าย หน้าเว็บเพจจะแสดงรายละเอียดและโค้ดตัวอย่างการใช้งานดังนี้?

var b = require('bonescript);
b.getPlatform(printData);
function printData(x){
    console.log('name = ' + x.name);
    console.log('version = + x.version);
    console.log('serialNumber = ' + x.serialNumber);
    console.log('bonescript = ' + x.bonescript);
}

           จากโค้ดตัวอย่างประกาศออบเจ็กต์ b เรียกใช้ BoneScript จากนั้นคำสั่ง b.getPlatform(printData) เรียกใช้ฟังก์ชั่น getPlatform() และ Callback เรียกฟังก์ชั่น printData()

           ในการทำงานจะเรียกฟังก์ชั่น getPlatform() ก่อน ซึ่งจะให้ค่าต่างๆ ออกมาเก็บไว้ในออบเจ็กต์ b จากนั้นเรียกใช้ฟังก์ชั่น printData() ส่งค่าจากออบเจ็กต์เข้าไปในฟังก์ชั่น 
           ค่าส่งเข้าไปจะเก็บไว้ในออบเจ็ค x แล้วเรียกใช้ฟังก์ชั่น console.log() เพื่อพิมพ์ค่าออกทางคอนโซล ได้แก่ ค่า x.name x.version x.serialNumber และ x.bonescript
ลองกด Run จะแสดงผลดังนี้

14

ฟังก์ชั่น pinMode()

ใช้กำหนดโหมดการทำงานและทิศทางของขาสัญญาณว่าเป็นอินพุตหรือเอาต์พุต
Syntax
            – pinMode(pin, direction, [mux], [pullup], [slew],[callback]) 
Arguments
            – pin: ชื่อเรียกขาสัญญาณ ตัวอย่างเช่น
                 o P8_14 คือ ขาสัญญาณหมายเลข 14 บนคอนเน็คเตอร์ P8 (ปกติ คือ ขา GPIO_26)
                 o P9_25 คือ ขาสัญญาณหมายเลข 25 บนคอนเน็คเตอร์ P9 (ปกติ คือ ขา GPIO_117)
            – direction:
                 o INPUT – กำหนดให้ขาสัญญาณเป็นอินพุต
                 o INPUT_PULLUP – กำหนดให้ขาสัญญาณเป็นอินพุตแบบ Pull-Up
                 o OUTPUT – กำหนดให้ขาสัญญาณเป็นเอาท์พุต
            – mux (optional): อินเด็กซ์ชี้ไปที่โหมด Multiplexer (ยังอยู่ในระหว่างพัฒนาบน Kernel 3.8)
            – pullup (optional): (ยังอยู่ในระหว่างพัฒนาบน Kernel 3.8)
                 o pullup – กำหนดวงจรภายในให้ทำงานแบบ Pull-Up
                 o pulldown – กำหนดวงจรภายในให้ทำงานแบบ Pull-Down
                 o disable – ไม่กำหนด
            – slew (optional):
                 o fast
                 o slow
            – callback (optional): ฟังก์ชั่นที่จะถูกเรียกเมื่อทำเสร็จ
Return value
            – true ถ้าทำฟังก์ชั่นสำเร็จ
            – false ถ้าทำฟังก์ชั่นไม่สำเร็จ
callback(x)
            – x.value: ค่าต่างๆ ที่ส่งกลับมาตามรายการที่อยู่ใน Return value
            – x.err: ข้อความแสดงสถานะผิดพลาด
ฟังก์ชั่น getPinMode()
ใช้อ่านค่าโหมดการทำงานของขาสัญญาณที่ต้องการ
Syntax
            – getPinMode(pin, [callback])
Argument
            – pin: ชื่อเรียกขาสัญญาณ
            – callback (optional): ฟังก์ชั่นที่ต้องการเรียกทำงานเมื่อทำฟังก์ชั่นนี้เสร็จ
Return value
            – mux: อินเด็กซ์ชี้ไปที่โหมด Multiplexer
            – options: อาเรย์ของชื่อขาสัญญาณตามโหมดการทำงานต่างๆ ที่รองรับ ตัวอย่างเช่น
o P8_14 มีชื่อขาสัญญาณตามโหมดต่างๆ ได้แก่ gpmc_ad10, lcd_data21, mmc1_dat2, mmc2_dat6, ehrpwm2_tripzone_input, pr1_mii0_txen, NA, gpio0_26
            – slew: fast or slow
            – rx: enabled or disabled
            – pullup: disabled pullup or pulldown
            – pin: ชื่อเรียกขาสัญญาณ
            – name: ชื่อของขาสัญญาณตามโหมดที่ทำงานอยู่ใขณะนั้น ตัวอย่างเช่น
o P8_14 เมื่ออยู่ในโหมดการทำงาน GPIO จะแสดงชื่อ GPIO0_26 
            – err: ข้อความแสดงสถานะผิดพลาด
callback(x)
            – x.value: ค่าต่างๆ ที่ส่งกลับมาตามรายการที่อยู่ใน Return value
ฟังก์ชั่น digitalWrite()
ใช้เขียนค่าลอจิก High หรือ Low ให้ขาเอาต์แบบพุตดิจิตอลในโหมด GPIO
Syntax
            – digitalWrite(pin, value, [callback]) 
Argument
            – pin: ชื่อเรียกขาสัญญาณ
            – value: ค่าลอจิกที่ต้องการเขียนกำหนดว่าเป็น HIGH หรือ LOW
            – callback (optional): ฟังก์ชั่นที่ต้องการเรียกทำงานเมื่อทำฟังก์ชั่นนี้เสร็จ
Return value
            – true ถ้าทำฟังก์ชั่นสำเร็จ
            – false ถ้าทำไม่สำเร็จ
callback(x)
            – x.err: ข้อความแสดงสถานะผิดพลาด
ฟังก์ชั่น digitalRead()
ใช้อ่านค่าลอจิก High หรือ Low จากขาอินพุตแบบดิจิตอลในโหมด GPIO
Syntax
            – digitalRead(pin, [callback]) 
Argument
            – pin: ชื่อเรียกขาสัญญาณ
            – callback (optional): ฟังก์ชั่นที่จะถูกเรียกเมื่อทำเสร็จ
Return value
            – HIGH: ถ้าขามีค่าลอจิกเป็น High
            – LOW: ถ้าขามีค่าลอจิกเป็น Low
callback(x)
            – x.value: ค่าต่างๆ ที่ส่งกลับมาตามรายการที่อยู่ใน Return value
            – x.err: ข้อความแสดงสถานะผิดพลาด
            ในการใช้งาน GPIO เพื่อเป็นอินพุตหรือเอาต์พุตต้องกำหนดการทำงานด้วยฟังก์ชั่น pinMode() ก่อนแล้วจึงใช้ฟังก์ชั่น digitalWrite() เพื่อเป็นเอาต์พุต หรือใช้ฟังก์ชั่น digitalRead() เพื่อเป็นอินพุตตามต้องการ ตัวอย่างการใช้ digitalWrite() สามารถย้อนขึ้นไปดูในหัวข้อที่ผ่านมา 
            ตัวอย่างการใช้งาน digitalRead() ให้เลือกที่ลิงก์ BoneScript > Functions > digitalRead() จากเมนูด้านซ้าย หน้าเว็บเพจจะแสดงรายละเอียดและโค้ดตัวอย่างการใช้งาน ลองกดปุ่ม Run เพื่อดูผลการทำงาน

15


              จากโค้ดตัวอย่างคำสั่ง p.pinMode(‘P8_19’, b.INPUT) เรียกใช้ฟังก์ชั่นกำหนดให้ขาสัญญาณเป็นอินพุต จากนั้นคำสั่ง b.digitalRead(‘P8_19’, printStatus) เรียกใช้ฟังก์ชั่นอ่านค่าอินพุตแบบดิจิตอลเข้ามาแล้วเรียกฟังก์ชั่น printStatus() ขึ้นมาแสดงผลของค่าที่อ่านได้ ซึ่งผลลัพธ์ค่า x.value = 0 เนื่องจากเมื่อดูที่ฮาร์ดแวร์ของบอร์ดจะเห็นว่าเราปล่อยขา 19 บนคอเน็คเตอร์ P8 ให้ไว้ไม่ได้ต่ออินพุตอะไรเข้ามา
              ลองจ่ายลอจิก High เข้าที่ขา P8_19 โดยใช้สายเชื่อมต่อขา P8_3 ซึ่งมีแรงดัน 3.3 โวลต์เสมือนเป็นลอจิก High ดังภาพ

16

กดปุ่ม Run อีกครั้งเพื่ออ่านค่าจากอินพุตจะได้ค่า x.value = 1

17

Node.js
            Node.js เป็นแพลตฟอร์มหนึ่งสำหรับพัฒนาแอพพลิเคชั่นบนเครือข่ายคอมพิวเตอร์ที่เน้นความเรียบง่าย สะดวกรวดเร็ว และขยายขอบเขตของระบบได้ดี มีโครงสร้างการทำงานโดยอาศัยเหตุการณ์เป็นตัวขับเคลื่อน (Event-Driven) และส่งผ่านการทำงานอย่างรวดเร็วโดยไม่รอการทำงานของอินพุตและเอาต์พุตต่างๆ (Non-Blocking I/O) ทำให้ใช้งานทรัพยากรของระบบไม่มากในช่วงเวลาหนึ่งสั้นๆ เพื่อทำงานอย่างมีประสิทธิภาพ เหมาะอย่างยิ่งกับแอพพลิเคชั่นที่เน้นด้านการทำงานกับข้อมูลหนักๆ (Data-Intensive) และยังต้องการความทันเวลา (Real-time)
           ยกตัวอย่างเช่นการนำมาใช้พัฒนาแอพพลิเคชั่นบนเว็บเซิร์ฟเวอร์ที่ต้องการรองรับผู้ใช้งานจำนวนมากในเวลาเดียวกัน Node.js จะรับการเชื่อมต่อจากเครื่องลูกข่ายที่เข้ามาแล้วแจ้งให้ระบบปฏิบัติการทราบถึงการเชื่อมต่อและตอบสนองอย่างรวดเร็ว โดยมีการจองพื้นที่ในหน่วยความจำในการทำงานเพียงเล็กน้อยเพียงเพื่อทำงานและเรียกกลับผลการทำงานให้เสร็จอย่างเร็วที่สุด และหลับรอ (Sleep) ขณะที่ไม่มีการทำงานจนกว่าจะมีการเรียกใช้ขึ้นมาใหม่ หากสนใจข้อมูลเพิ่มเติมสามารถอ่านรายละเอียดของ Node.js ได้จากเว็บไซต์ http://nodejs.org/
Cloud9 IDE
            Cloud9 IDE เป็นโปรแกรมสภาพแวดล้อมในการพัฒนา (Integrated Development Environment: IDE) ซึ่งอยู่ในรูปแบบออนไลน์ (Online Development Environment) สำหรับการเขียนแอพพลิเคชั่นด้วย JavaScript และ Node.js หรือใช้ในการพัฒนาเว็บไซต์ด้วย HTML CCS PHP Java Ruby นอกจากนี้ยังรองรับการพัฒนาโปรแกรมภาษาอื่นอีกกว่า 23 ภาษา เป็นทางเลือกสำหรับผู้ที่ต้องการ IDE ที่ทันสมัยและมีความปลอดภัย สามารถเก็บซอร์สโค้ดของโปรแกรมไว้แบบออนไลน์ให้เข้าถึงและทำงานได้จากทุกที่ เหมาะกับการเขียนแอพพลิเคชั่นที่ต้องการรันบนเว็บไซต์ รองรับการทำงานร่วมกันได้หลายคนในรูปแบบโครงการ โดยพัฒนาผ่านเว็บเบราว์เซอร์ รองรับการเชื่อมต่อเข้ากับบริการที่เป็นเป็นประโยชน์และเป็นที่นิยมในหมู่นักพัฒนา เช่น github Bitbucket heroku Openshift เป็นต้น 
            โดยเฉพาะอย่างยิ่งกับการนำไปใช้พัฒนา Node.js ซึ่ง Cloud9 IDE ออกตัวเลยว่ารองรับอย่างไร้ที่ติ (เรียกได้ว่าที่สร้าง Cloud9 ขึ้นมาก็เพื่อใช้พัฒนา Node.js เลย) ทั้งตัวช่วยในการเขียนและเติมเต็มโค้ด (Code Completion) ตรวจสอบและแจ้งข้อผิดพลาดในการทำงานของ Node.js ได้ตลอดเวลา (Live Error Report) สามารถเรียกรันและดีบั๊กโปรแกรมได้ จบในตัวเดียวตั้งแต่การพัฒนาไปจนถึงการส่งแอพพลิเคชั่นขึ้นไปรันในระบบ
            หากสนใจข้อมูลหรือรายละเอียดเพิ่มเติมเกี่ยวกับ Cloud9.IDE สามารถเข้าไปดูได้ที่ https://c9.io/
การใช้งาน Cloud9 IDE
            บอร์ด BeagleBone Black ที่ติดตั้งระบบปฏิบัติการ Debian จะติดตั้ง Cloud9 IDE มาด้วยแล้ว สามารถเข้าใช้ได้จากเมนูด้านซ้ายเลือกลิงก์หัวข้อ Software > Cloud9 IDE หน้าเว็บจะแสดงรายละเอียดสั้นๆ เกี่ยวกับ Cloud9 IDE และวิธีการใช้งานพื้นฐาน ให้กดลิงก์ที่หัวข้อ Cloud9 IDE เพื่อเข้าสู่หน้าต่างโปรแกรมหรือสามารถเข้าโดยตรงจากลิงก์ http://192.168.7.2:3000/
           หน้าต่างโปรแกรมของ Cloud9 IDE บนเว็บเบราว์เซอร์คล้ายกับโปรแกรมสำหรับพัฒนาอื่นๆ คือมีส่วนจัดการไฟล์ (Workspace) แสดงไฟล์ของโปรเจ็กต์ต่างๆ ที่อยู่บนบอร์ด พื้นที่ตรงกลางสำหรับเขียนโค้ด (Code Editor) ส่วนด้านล่างเป็นแถบพิมพ์คำสั่งและแสดงสถานะต่างๆ (Console and Status) ส่วนเมนูด้านบนเป็นเมนูทั่วไปที่คุ้นเคยอยู่แล้วทั้ง การจัดการไฟล์ การแสดงเมนู การแสดงหน้าต่าง การจัดการโปรเจ็กต์ และเครื่องมือต่างๆ

ลองเขียน

โปรแกรมบน Cloud9 IDE เป็นโปรแกรม JavaScript ที่รันบน Node.js เรียกใช้ BoneScript สั่งงานให้ User LED ทั้ง 4 ดวงติดกระพริบ ดังนี้
1. หากมีไฟล์เปิดอยู่ใน Code Editor ให้ปิดไปก่อน

2. สร้างไฟล์เปล่าขึ้นมา 1 ไฟล์โดยกด

เครื่องหมาย + ด้านบนหรือเลือกเมนู File > New File หรือใช้คีย์บอร์ดช็อตคัท Ctrl+N ก็ได้

20

3. เขียนโค้ดลงไปดังนี้?

var b = require('bonescript');
var state = b.LOW;
 
b.pinMode("USR0", b.OUTPUT);
b.pinMode("USR1", b.OUTPUT);
b.pinMode("USR2", b.OUTPUT);
b.pinMode("USR3", b.OUTPUT);
setInterval(toggle, 1000);
 
function toggle() {
if(state == b.LOW) state = b.HIGH;
else state = b.LOW;
b.digitalWrite("USR0", state);
b.digitalWrite("USR1", state);
b.digitalWrite("USR2", state);
b.digitalWrite("USR3", state);
}

4. บันทึกไฟล์ที่สร้างขึ้นมาโดยเลือกเมนู File > Save หรือ Save As… ก็ได้ หรือใช้คีย์บอร์ดช็อตคัท Ctrl+S หรือ Ctrl+Shift+S ตั้งชื่อไฟล์ว่า myblink.js ใส่ไว้ในไดเรกทอรี่ demo แล้วกดปุ่ม Save

21

5. รันโปรแกรมโดยกดปุ่ม Run สีเขียวด้านบน หรือเลือกเมนู Run > Run myblink.js with Node.js หรือใช้คีย์บอร์ดช็อตคัท Alt+F5

6. ดู

ผลการทำงานของ USR0 – USR3 บนบอร์ด
7. หยุดโปรแกรมโดยกดปุ่ม Stop จากแถบสถานะของโปรแกรมที่รันขึ้นมา

จาก

ตัวอย่างที่ผ่านมาเป็นการรันผ่าน Cloud9 IDE โดยให้ Cloud9 เรียก Node.js ขึ้นมาให้ แต่จากที่กล่าวไว้ในตอนต้นว่าสามารถเรียกรันโปรแกรมได้เองด้วยคำสั่ง node จากระบบโดยอาจจะใช้ console ผ่านหน้าจอโปรแกรม Cloud9 ซึ่งเหมือนกับการสั่งรันผ่าน SSH หรือผ่าน Terminal ทางหน้าจอตรงๆ ก็ได้เช่นกัน
            เลือกแท็บ bash-“beaglebone” ในส่วนของคอนโซลด้านล่างจะแสดงหน้าต่างของ Bash Shell ของบอร์ด BeagleBone แต่มีสิทธิการใช้งานเป็น root โดยในตอนนี้อยู่ที่ไดเรกทอรี่ /var/lib/cloud9 ให้ใช้คำสั่ง cd demo เพื่อเปลี่ยนไดเรกทอรี่ จากนั้นใช้คำสั่ง node myblink.js เพื่อรันโปรแกรม แล้วดูผลการทำงานของ USR0 – USR3 เสร็จแล้วสามารถหยุดโปรแกรมด้วยคีย์ Ctrl+C

การควบคุม I/O

ผ่าน Socket.IO
            หัวข้อสุดท้ายในบทความนี้เป็นตัวอย่างการควบคุม I/O บนบอร์ดผ่าน Socket.IO ซึ่งเป็นการทำงานแบบ Remote Procedure Call โดยเขียนหน้าเว็บเพจหรือเว็บไซต์ไว้บนบอร์ด ให้สามารถเข้าผ่านเว็บเบราว์เซอร์จากภายนอกทางเครือข่ายคอมพิวเตอร์เป็นพื้นฐาน หรือจะนำไปปรับเปลี่ยนให้เข้าถึงผ่านอินเตอร์เน็ตก็ได้ หากสนใจรายละเอียดของ Socket.IO สามารถเข้าไปดูได้ที่ http://socket.io
            Socket.IO ไม่ได้ติดตั้งมาพร้อมกับ Node.js ในการติดตั้ง Socket.IO บอร์ด BeagleBone Black ต้องเชื่อมต่ออินเตอร์เน็ตด้วย 
            ตัวอย่างนี้จะให้เห็นการควบคุม I/O ผ่านทางหน้าเว็บเพจแบบอย่างง่ายโดยฝั่งเครื่องลูกข่าย (Client) จะเรียกขอเปิดไฟล์ HTML ซึ่งแสดงผลหน้าเว็บเพจให้มีปุ่มที่สลับ On และ Off ได้ เพื่อส่งค่าไปควบคุม LED 
            ฝั่งเครื่องแม่ข่าย (Server) ให้บอร์ดต่อ LED ที่ขา P8_13 (GPIO_23) ติด-ดับโดยเรียกใช้ BoneScript ที่เขียนในรูปแบบ JavaScript เช่นเดิม แต่เพิ่มขั้นตอนในการเรียกผ่าน Socket.IO 
ดังนั้นไฟล์ที่ต้องสร้างประกอบด้วยไฟล์ HTML และ JavaScript ทำตามขั้นตอนต่างๆ ดังนี้
1. ให้ใช้คอนโซลของ Cloud9 หรือใช้ SSH เข้าไปที่บอร์ดทางเน็ตเวิร์ค สามารถดูวิธีการเข้าใช้งานผ่าน SSH ได้จากบทความ แกะกล่องรีวิว BeagleBone Black – http://www.thaieasyelec.com/article-wiki/review-product-article/เเกะกล่องรีวิว-beaglebone-black-rev-c-เวอร์ชั่นใหม่ล่าสุด-by-thaieasyelec.html 
2. ไปที่ไดเรกทอรี่ /var/lib/cloud9 และติดตั้ง Socket.IO ด้วยคำสั่ง?

12cd /var/lib/cloud9npm install socket.io
25

3. รอสักครู่จนติดตั้งเสร็จ

26

4. คลิ๊กขวาแล้วเลือก New Folder สร้างไดเรกทอรี่ mysocket ไว้ภายในไดเรกทอรี่ cloud9

27

5. สร้างไฟล์ใหม่ขึ้นมาในไดเรกทอรี่ mysocket บันทึกไฟล์ชื่อว่า mysocket.html แล้วเขียนโค้ดลงไป?

<!-- Socket.IO Control BeagleBone LED 
Client-Side Script HTML Code by ThaiEasyElec.com -->
<html>
<head>
    <script src="/socket.io/socket.io.js"></script>
    <script type=text/j-avascript GARBAGE></script>
    <script>
        var socket = io.connect();
        socket.on('led', function (data) {
            console.log(data);