วันจันทร์ที่ 6 มิถุนายน พ.ศ. 2559

Linkit Smart 7688 Duo (ตอนที่ 4) REPL

ในบทความนี้เราจะมาทำความรู้จัก Read-Eval-Print-Loop (REPL) ต่อไปจะเรียกสั้น ๆ ว่า REPL ซึ่งเจ้า REPL นี่จะช่วยทำให้เราสามารถสร้าง Command Line Interface (CLI) ในการสร้างคำสั่งที่ใช้ในการควบคุม Hardware ต่าง ๆ

 Command Line Interface (CLI) 


การทำงานจะต้องอยู่ภายใน function ที่ ชื่อว่า repl.inject()



ต่อไปเราจะมาดู Basic การทำงานของ REPL กันจาก Code ตัวอย่าง


เราได้ทำงานสร้าง function ที่ชื่อว่า hello และใน function นั้น จะให้ทำการ print คำว่า Hello World ออกมาทาง console

ทำการ upload script ไปที่ Duo ในที่นี้จะตั่งชื่อว่า repl.js


จากนั้นใช้ putty ssh ไปที่ Duo เปลี่ยน directory ไปที่เราเก็บ file script จากนั้นรัน script ด้วยคำสั่ง node repl


เมื่อสามารถติดต่อกับบอร์ดได้แล้ว ก็จะ print คำว่า Ready event. Repl instance auto-initialized! ออกมาทาง console นั่นหมายความว่าเราพร้อมที่จะทำงานในโหมดของ REPL แล้ว ให้เราพิมพ์คำสั่ง hello() ลงใน putty console


จากนั้นกด enter เราก็จะเห็นคำว่า Hello World ออกมาทาง console ของ putty


ต่อไปเราจะทำการปรับปรุง code เพื่อใช้ควบคุมการทำงานของ LED บนบอร์ด (D13)



ในที่นี้เราจะมีอยู่ 4 คำสั่งคือ
  1. on()  สั่ง  On LED
  2. off() สั่ง Off  LED
  3. start(interval) เรียกการใช้งาน ไฟกระพริบ โดยมี option ของคาบเวลาจะส่งหรือไม่ส่งก็ได้
  4. stop() หยุดการทำงานของ ไฟกระพริบ


วันอาทิตย์ที่ 5 มิถุนายน พ.ศ. 2559

Linkit Smart 7688 Duo (ตอนที่ 3) i2c LCD

ในบทความนี้เราจะมาใช้งานจอแสดงผลแบบตัวอักษร 20x4 ใช้การเชื่อมต่อแบบ i2c จากก่อนหน้านั้นเราทราบกันแล้วว่าในส่วนของ Duo นั้นเราไม่สามารถใช้งาน GPIO ของ MPU ได้โดยตรงเพราะว่าใน Duo นั้นจะมี ATMega32U4 ในการติดต่อสื่อสารกับ MPU




ซึ่งจริง ๆ แล้วถ้าเราไม่ใช้ Firmata ที่เป็น Protocal มาตรฐานแล้ว เราก็สามารถที่จะพัฒนาในส่วนของ ATMega32U4 ขึ้นมาเองได้เหมือนกัน แต่จะทำให้ระยะเวลาในการพัฒนานานขึ้นเพราะเราต้องทำทั้งสองฝั้ง 


จากรูปด้านบนเราจะเห็นว่าในส่วนของ  Duo นั้นจะใช้ GPIO ของ ATMega32U4 ซึ่ง Firmata จะเป็น Protocal มาตรฐานที่มีใช้อยู่ใน Arduino IDE อยู่แล้ว ส่วนที่เหลือเราก็แค่ Implement ในส่วนการทำงานของ MPU อย่างเดี่ยว ในที่นี้เราจะใช้การทำงานของ NodeJS (JavaScript) 


 Linkit Smart 7688 Duo Pinout

ในการ interface i2c LCD กับ Duo นั้นให้เราดูที่แทบสีส้ม ๆ ซึ่งจะเป็น GPIO ของ ATMega32U4 (Arduino) i2c จะอยู่ที่ 

  1. D2 = SDA
  2. D3 = SCL
ส่วน LCD  นั้นจะใช้ไฟ 5V เราสามารถต่อได้จาก 5V ที่อยู่บน Duo ได้เลย



Upload Script



สั่งรัน Sctipt ด้วยคสั่ง node i2c_lcd



จาก Code

บรรทัดที่ 1 เป็นการเรียกใช้งาน package johnny-five
บรรทัดที่ 2 สร้างส่วนติดต่อกับบอร์ด ซึ่งการติดต่อระหว่าง MPU กับ MCU จะใช้ ttyS0 กับ Serial1
บรรทัดที่ 4 เป็น function callback ถ้าการติดต่อสำเร็จจะถูกเรียกใช้งาน
บรรทัดที่ 5 จะเป็นการสร้าง object LCD แล้วระบุว่าใช้ controller เบอร์อะไร (PCF8574) รายละเอียด
บรรทัดที่ 7, 8 เป็นการระบุว่า LCD ที่เราใช้มีกี่ Row กี่ Column ถ้าหากไม่กำหนดค่า Default ของ roes = 2, cols = 16

ผลจากการรัน script

จาก code ตัวอย่างจะทำการจะทำการอ่านค่า IP Address มาแสดงผล จะเห็นว่าหลังจากที่เราได้ทำการ upload sketch StandardFirmata ลงไปแล้วในส่วนของ ATMega32U4 (Arduino) เราไม่ต้องไปทำอะไรกับมันอีกเลย

Arduino ติดปีก




Linkit Smart 7688 Duo (ตอนที่ 2)

ต่อจากตอนที่แล้ว หลักจากที่เราได้ทำการ setup สวนของ MCU (ATmega32U4) หรือจริงแล้วก็คือ Arduino  Leonado นั่นเอง ต่อไปเราจะมาทำการกำหนดค่าต่าง ๆ สำหรับในส่วนของ NodeJS นั้น Linkit Smart 7688 มีมาให้เราพร้อมใช้งานอยู่แล้วไม่ต้องทำการติดตั่งเพิ่มใดๆ ทั้งสิ้น เราสามารถเช็คได้โดยทำการ SSH เข้าไปที่  Linkit ในที่นี้จะใช้ Puuty


  • Connection Type เลือก SSH
  • Host Name Or IP Address  root@mylinkit.local
ป้อนระหัสผ่านของ Root


พร้อมใช้งาน

จากนั้นให้เราพิมพ์ node -v แล้วกด enter 

แสดง version ของ node

จากนั้นให้เราพิมพ์ npm -v แล้วกด enter 

แสดง version ของ Node Package Manager (npm)

Node Package Manager (npm) คืออะไร? ในการใช้งาน nodejs นั้นจะมี package ให้เราใช้งานมากมายในการเพิ่ม node package เข้ามาใช้งานนั้นจะต้องติดจั่งผ้าน npm (Node Package Manager ) ฉนั้น package ที่เราจะใช้งานในบทความนี้หรือต่อไปจะมีอย่ด้วยกัน 4 package คือ
  1. express
  2. mqtt
  3. socket.io
  4. johnny-five
ในบทความนี้เราจะต้องทำการติดตั้ง johnny-five กันก่อน แต่เนื่องจากว่า Linkit Smart 7688 มี Flash ข้อมข้างน้อยเราจึกต้องทำงานบน SD Card แทน



จากรูปจะเห็นได้ว่าเหลืออยู่น้อยมาก แต่เราก็สามารถทำการ set ให้ระบบ File System ไปอยู่บน SD Card ได้เหมือนกัน เดี๋ยวค่อยว่ากันในบทความต่อไป

ให้เราทำการ mount sd sdcard ด้วยคำสั่ง  mount /dev/mmcblk0p1 /mnt จากนั้นใช้คำสั่ง df -m เพื่อเช็คดูว่าสามารถ mount sdcard สำเร็จหรือไม่ โดยจะมีส่วนของที่เราทำการ mount เข้ามาใหม่

Mount sdcard

จากนั้นให้เราทำการเปลี่ยน directory ไปที่ sdcard ด้วยคำสั่ง cd /mnt แล้วสร้าง folder ขึ้นมาใหม่ mkdir node_app แล้วเปลี่ยน directory ไปที่ node_app

ต่อจากนี้ไปเราจะทำงานอยู่บน sdcard ที่ folder node_app


ต่อไปเราจะทำการติดตั่ง node package ที่ชื่อว่า johnny-five ด้วยคำสั่ง 

npm install --save-dev johnny-five 

จะใช้เวลาประมาณหนึ่งก็ให้ใจเย็นจิบกาแฟรอ


จากนั้นเราจะทำการทดสอบว่าสามารถใช้งานได้หรือป่าว โดยเราจะเขียน JavaScript ในส่วนของ nodejs ซึ่งจะใช้ Editor ตัวไหนก็ได้ในที่นี่จะใช้ Visual Studio Code


จากนั้นเราจะต้องทำการ เอา code ของเราไปวางไว้ที่ /mnt/node_app โดยใช้โปรแกรมที่ชื่อว่า winscp สามารถ download ได้ที่นี่ .

เมื่อ download เรียบร้อยแล้วให้ทำการแตก file แล้วเรียกใช้งาน WinSCP.exe


คลิกที่ปุ่ม New เพื่อสร้างการติดต่อใหม่




 File protocal เลือกเป็น SCP ในช่อง Host Name ป้อน  mylinkit.local และ User Name root จากนั้นกดปุ่ม Save แล้วตั่งชื่อตามความชอบ



จากนั้นกดปุ่ม Login



ป้อนรหัสผ่าน



คลิกที่ปุ่ม Open dirextory เพื่อเปลี่ยนช่องซ้ายไปอยู่ในส่วนที่เราเก็บ code เอาไว้



ช่องขวาก็เปลี่ยนไปที่ /mnt/node_app



ช่องซ้ายมือ คลิกเลือก file ที่ต้องการ upload แล้วลากไปทางช่องขวามือ แล้วปล่อย จากนั้นกดที่ปุ่ม Coppy


File ถูก Upload ไปเรียบร้อย 




กลับไปที่ Putty ลองเช็ดดูว่ามี file หรือป่าวด้วย  คำสั่ง ls


สั่ง run script ด้วยคำสั่ง node blink จะใส่ .js หรือไม่ใส่ก็ได้


มาถึงตอนนีเให้เราดูที่บอร์ด LED จะติดกระพริบ ซึ่งมันจะต่ออยู่กับ D13 ของ ATmega32U4


จาก Code

บรรทัดที่ 1 เป็นการเรียกใช้งาน package johnny-five
บรรทัดที่ 2 สร้างส่วนติดต่อกับบอร์ด ซึ่งการติดต่อระหว่าง MPU กับ MCU จะใช้ ttyS0 กับ Serial1
บรรทัดที่ 4 เป็น function callback ถ้าการติดต่อสำเร็จจะถูกเรียกใช้งาน
บรรทัดที่ 7 เมื่อการเชื่อต่อสำเร็จ จะทำการสร้าง object led ที่ D13
บรรทัดที่ 11 สั่ง blink ที่ 500 ms



 มาถึงตอนนี้เราก็ Hello Johnny-Five ได้แล้ว หวังว่าจะมีประโยชน์ไม่มากก็น้อย



Linkit Smart 7688 Duo (ตอนที่ 1)


หลังจากหายไปนานไม่ได้เขียน blog มาหลายเดือน มาประเดิมเรื่องใหม่กันสำหรับการใช้งาน Linkit Smart 7688 Duo ในปัจจุบันตอนนี้ Linkit Smart 7688 จะมีอยู่สองรุ่น คือ

  1. Linkit Smart 7688
  2. Linkit Smart 7688 Duo
ทั่งสองรุ่นต่างกันยังไง? ต่างกันตรงที่ มีกับไม่มี ATmega32u4 โดยที่รุ่นที่มีคำว่า Duo ต่อท้ายจะมี ATmega32u4 และการใช้งานขา GPIO จะใช้ขา GPIO จาก ATmega32u4  ส่วนรุ่นที่ไม่มีคำว่า Duo ต่อท้ายจะใช้ขา GPIO จาก MPU โดยตรง

Linkit Smart 7688 Duo (Hardware)


Linkit Smart 7688 Duo (Pin layout)


จากข้างต้นที่บอกไปแล้วว่า Duo นั้นจะใช้ขา GPIO จาก ATmega32u4 แล้วจะเขียนโปรแกรมยังไงกันล่ะ ซึ่งมันมีอยู่สองแนวทาง

  1. เราต้องทำการเขียน Firmeare ลงใน ATmega32u4 ซ่ะก่อนโดยใช้ Tool Arduino IDE ในการพัฒนา
  2. เขียนด้วย NodeJS หรือ Python โดยที่ทาง ATmega32u4  จะต้องทำการติดตั่ง Firmware Standare Firmata โดยใช้ Tool Arduino IDE เช่นกัน ซึ่งจะต้องทำการติดตั่ง Linkit ผ่านทาง Board Menager ก่อน
ในที่นี้เราจะใช้วิธีที่สอง ก่อนจะใช้งานเราต้องมาทำการ ติดตั่ง Linkit ผ่านทาง Board Menager เสีก่อนก่อน โดยใช้ Arduino IDE 1.5.6 

ใน Arduino IDE ที่เมนู File คลิกที่เมนู Preferences จากนั้นป้อน http://download.labs.mediatek.com/package_mtk_linkit_smart_7688_test_index.json ลงใน Additional Boards Manager URLs


จากนั้นให้ไปที่เมนู Tool -> Board ->Board Manager


ให้มองหา Linkit Smart 7688 Duo แล้วกดปุ่ม Install


หลังจาก Install เร็จเรียบร้อยแล้วให้ปิดหน้าต่าง Board Manager แล้วไปที่ Tool -> Board มองหา Linkit Smart 7688 Duo เป็นอันว่าเรียบร้อยพร้อมใช้งาน

จากนั้นต้องทำการ Upload Sketch Standare Firmata โดยจะต้องเปิด Sketch ขึ้นมา File -> Examples -> Firmata -> StandareFirmata จากนั้นให้มองหา Function ที่ชื่อว่า Setup ให้ลบบรรทัดตามรูปทิ้ง




แล้วทำการเพิ่ม 2 บรรทัดนี้ลงไปแทน

Serial1.begin(57600);
Firmata.begin(Serial1);


ก่อนทำการ Upload  ให้แน่ใจว่าเราได้เลือก Board และ Port ถูกต้อง โดยที่ Board ต้องเป็น  Linkit Smart 7688 Duo และ Port ตามของเครื่องแต่ละท่าน โดยที่สาน USB ต้องเสียบอยู่ที่  USB Power & MCU USB Port 

หลังจากทำการ Upload Sketch เสร็จเรียบร้อยเราก็พร้อมที่จะใช้งานได้แล้ว







วันพุธที่ 11 พฤศจิกายน พ.ศ. 2558

Smart-Io







การใช้งาน Smart-IO กับ cloudmaker 
cloudmaker เป็นระบบ cloud application ที่มาพร้อมกับ UI ที่ทำให้เราสามารถใช้งานได้เลยไม่ต้องมานั่งพัฒนาในส่วนของการติดต่อกับผู้ใช่งานอีกซึ่งเป็นงานที่ไม่ถนัดของผู้ที่บางทางสาย hardware

คัวระบบพัฒนามาจาก NodeJS + MongoDB ที่มี MQTT Broker ทำงานอยู่เบื่องหลัง


วันจันทร์ที่ 31 สิงหาคม พ.ศ. 2558

Sming Framework ตอนที่3 (Basic GPIO Input/Output)

ในตอนนีี้เราจะมาทำการสร้างโปรเจ็ค HelloWorld สำหรับชาว Hardware กันนั่นก็คือ ไฟกระพริบ หลังจากที่เราทำการสร้างโปรเจ็คใน Eclipse และ กำหนดค่าต่างๆ เรียบร้อยแล้วนั้นเราจะไดเโปเจ็คโล่ง ๆมาแบบนี้

Create source file


จากนั้นให้เราเปิดไปที่ Sample ของ Sming Framework ในที่นี้จะยกตัวอย่าง Basic_Blink


ให้เรา copy 2 File กับอีก 1 Folder คืด Makefile, Makefile-user.mk, include ไปไว้ใน Project ของ Eclipse วิธีการง่าย ๆ คือ คลิกเลือกที่ 2 File กับ 1 Folder นั้นแล้วกด Ctrl+C แล้วไปคลิกเลือกที่ Root project ใน Eclipse จากนั้นกด Ctrl+V ก็จะได้ดังรูปด้านล่าง


จากนั้นให้ทำการเพิ่ม Folder ใน Project โดยให้คลิกขวาที่ Root project แล้วเลือกที่เมนู New -> Folder


กำหนดในช่อง Folder name เป็น app จากนั้นกดปุ่ม Finish


ต่อไปเราจะมาเพิ่ม source file ให้คลิกที่ Root project -> app แล้วเลือกที่เมนู New ->Source File


แล้วกำหนดชื่อในช่อง Source file เป็น application.cpp จากนั้นกดปุ่ม Finish


สิ่งที่เราได้จากขั้นตอนต่าง ๆ




หลังจากที่เราได้ main source file มาแล้วเราต้องทำการเพิ่ม include header เขามาก่อนที่จะใช้งานดังนี้


และต้องทำการเพิ่ม function ที่ชื่อว่า init เข้าไปด้วย


Source code



Create Make Target

ขั้นตอนการสร้าง Make Target ให้คลิกที่ Tab Make Target ที่อยู่ทางด้วนขวามือ ให้มองหาชื่อที่เป็นชื่อเดียวกันกับชื่อโปรเจ็คทร่เราทำงานอยู่ แล้วทำการเพิ่ม Target ตามรูป



Make Target
  1. all คือสั่ง build source code
  2. clean คือสั่งล้าง output ที่ได้จากการ build
  3. flash คือสั่ง flash firmware
  4. rebuild สั่ง rebuild source code ใหม่
การใช้งาน Make Target ก็แค่ double click ที่คำสั่งแต่ล่ะคำสั่ง

ขอให้สนุกกับ Sming น่ะครับ






Donate