การติดตั้ง MRAA

บทความนี้เขียนขึ้นมาเพื่อ
1. บันทึกช่วยจำ
2. แลกเปลี่ยนความเห็น





ขอเริ่มต้นด้วย mraa คืออะไรก่อนนะครับ ยกข้อความของเขามาเลย


Libmraa is a C/C++ library with bindings to Python, 
Javascript and Java to interface with the I/O on Galileo,
Edison & other platforms, with a structured and 
sane API where port names/numbering matches the board 
that you are on. Use of libmraa does not tie you to 
specific hardware with board detection done at runtime 
you can create portable code that will work across the supported platforms.

The intent is to make it easier for developers and 
sensor manufacturers to map their sensors & actuators 
on top of supported hardware and to allow control of 
low level communication protocol by high level languages & constructs.


(อ้างอิงจาก http://iotdk.intel.com/docs/master/mraa/index.html)

ประเด็นที่น่าสนใจอยู่ตรงย่อหน้าที่สองนี่แหล่ะ ครับ เนื่องจาก mraa จะทำให้ developer สามารถย้าย code ของตัวเองไปทำงานบน board อื่น ๆ ได้ โดยไม่ต้องไปดัดแปลง code ให้เหนื่อย สำหรับ board ที่สนับสนุนมีอะไรบ้าง (สำหรับตอนนี้) ก็ดูได้จากเว็บที่อ้างอิงไว้ได้เลยครับ

ในบทความนี้ จะกล่าวถึงขั้นตอนในการติดตั้ง mraa บน Raspbian Jessie Lite (2016-09-23) โดยอ้างอิงจาก http://iotdk.intel.com/docs/master/mraa/building.html

ติดตั้งตัว Dependencies 


$ sudo apt-get update
$ sudo apt-get install git nodejs-dev python-dev cmake automake build-essential


ปัญหาที่พบคือ mraa ต้องการ swig 3.0.5 หรือใหม่กว่า ซึ่งหากติดตั้งโดยใช้ apt-get install ก็จะได้ swig รุ่น 3.0.0 ซึ่งใช้ไม่ได้ ดังนั้นเราต้อง compile จาก source code เท่านั้น

ติดตั้ง Swig


$ cd 
$ git clone https://github.com/swig/swig.git
$ cd swig
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

ผลที่ได้คือ Swig รุ่นล่าสุด

ติดตั้ง mraa


$ cd 
$ git clone https://github.com/intel-iot-devkit/mraa.git
$ cd mraa
$ mkdir build
$ cd build

มาถึงขั้นตอนนี้ก่อนจะดำเนินการต่อไปควรทำความเข้าใจเรื่อง configuration flags ให้เข้าใจก่อนว่าความต้องการของท่านเป็นอย่างไร ในกรณีที่ต้องการให้ mraa ใช้ได้กับ Java และ Javascript ท่านต้องทำการติดตั้ง JDK และ NodeJs ก่อนนะครับ แต่ในกรณีของผมนั้นจะใช้กับ Python ก็เลยไม่ต้องติดตั้งเพิ่ม ดังนั้น configuration flags ของผมจะใช้ได้กับ Python เท่านั้นนะครับ


$ cmake \
-DBUILDSWIGPYTHON=ON \
-DBUILDSWIGNODE=OFF \
-DBUILDSWIGJAVA=OFF \
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DCMAKE_BUILD_TYPE=DEBUG \
..

เสร็จจากขั้นตอนนี้ก็ทำการตรวจสอบว่า mraa ไปอยู่ถูกที่ถูกทางไหม ซึ่งกรณีของผมต้องไปตรวจสอบกับ Python2.7 ครับ โดยไปดูที่ /usr/local/lib/python2.7/site-packages ก็พบว่ามี mraa.py และ _mraa.so มาอยู่แล้ว ต่อไปก็ทดสอบด้วยการเขียน code


import mraa
import time

x = mraa.Gpio(13) # map to GPIO 27 on Raspberry Pi B,B+,3
x.dir(mraa.DIR_OUT)
for i in range(3):
     x.write(0)
     time.sleep(1)
     x.write(1)
     time.sleep(1)
x.write(0) 

Gotcha ! LED กระพริบแล้ว 

 ปล. หากต้องการให้ mraa ใช้ได้กับ Python3 ก็ต้องติดตั้ง python3 และ python3-dev ก่อนด้วยนะ ครับ

Previous
Next Post »