နိဒါန်း
Raspberry Pi သည် ATM card အရွယ်အစားသာ ရှိသော ကွန်ပျူတာ တစ်လုံးဖြစ်ပါသည်။ ၎င်းတွင် ပြင်ပ devices များနှင့် ချိတ်ဆက် အသုံးပြုနိုင်သော GPIO (gerneral purpose input/output) pin များ ပါဝင်သောကြောင့် Embedded System များ ပြုလုပ်ရန်၊ အီလက်ထရောနစ် ပရောဂျက်များ တည်ဆောက်ရန်တို့တွင် အလွန် အသုံးဝင်ပါသည်။ အလွယ်ဆုံး ဥပမာတစ်ခုမှာ ကျွန်တော်တို့က ဖြစ်စေ (input)၊ Pi ကဖြစ်စေ (output)၊ ပရိုဂရမ်ရေးပြီး ဖွင့်လို့ ပိတ်လို့ရသော ခလုတ်လေးများ ဖြစ်ကြပါသည်။ ထို့ပြင် အချို့ GPIO pin များအား PWM (pulse width modulation) အတွက် အသုံးပြုနိုင်သောကြောင့် power control နှင့် servo motor control များအတွက်လည်း အသုံးဝင်ပါသည်။
GPIO pinsအထက်ပါပုံတွင် Raspberry Pi ၏ GPIO pins များအား board ပေါ်တွင် မြင်တွေ့ရပုံ ဖြစ်ပါသည်။ P1 ဟု ရေးသားထားသော ဘယ်ဘက် အစွန်ဆုံး အောက်ဘက် pin သည် physical pin 1 ဖြစ်ပါသည်။ physical pin number များ အားလုံးကို အောက်တွင် ပုံနှင့် ပြသပေးထားပါသည်။
GPIO pin number များသည် physical pin number များနှင့် မတူညီကြပါ။ ၎င်းတို့ကို အောက်ပါပုံတွင် အသေးစိတ် ဖော်ပြပေးထားပါသည်။
GPIO pins များ လက်တွေ့ အသုံးပြုပုံ
လက်တွေ့ စမ်းသပ်ပြုလုပ်ရာတွင် GPIO pins များသည် အံ့သြစရာ ကောင်းလောက်အောင် အသုံးဝင်ကြောင်း သတိထားမိပါလိမ့်မည်။ Input များကို ခလုပ် တပ်ထားပြီး ဖွင့်ပိတ်ပေးမှ မဟုတ်ဘဲ sensor များကနေဖြစ်စေ၊ အခြား ကွန်ပျူတာ နှင့် device များ၏ signal အနေနှင့် ဖြစ်စေ ထည့်သွင်းပေးနိုင်ပါသည်။ Output အနေနှင့် LED တစ်လုံး အဖွင့်အပိတ်ပြုလုပ်ရန်အတွက်သာမက မော်တာများ မောင်းနှင်နိုင်စေရန်၊ Relay များ အဖွင့်အပိတ်လုပ်ရန်နှင့် အခြား ကွန်ပျူတာများ၊ device များအား signal များ ပေးပို့ရန်အတွက်လည်း အသုံးပြုနိုင်ပါသည်။
တကယ်၍ Raspberry Pi အား အင်တာနက် နှင့် ချိတ်ဆက်ပေးထားခဲ့မည် ဆိုပါက Piနဲ့ ချိတ်ဆက်ထားသော ပစ္စည်းများကို မည်သည့်နေရာကနေမဆို လှမ်းပြီး ထိန်းချုပ်နိုင်မှာဖြစ်ပြီး အချက်အလက်များအား အပြန်အလှန် ပေးပို့နိုင်မှာ ဖြစ်ပါသည်။ Physical device များအား အင်တာနက်က တဆင့် ထိန်းချုပ်ခိုင်းစေနိုင်ခြင်းသည် စိတ်လှုပ်ရှားစရာကောင်းသော နည်းလမ်းတစ်ခုဖြစ်ပြီး Raspberry Pi အတွက် အသင့်တော်ဆုံး အသုံးပြုမှု တစ်ခုလဲ ဖြစ်ပါသည်။
အိမ်တွင်း ဝါယာလက်နှင့် ချိတ်ဆက်ပြီး အသုံးပြုမည်ဆိုပါကလည်း ကွန်ပျူတာ၊ မိုဘိုင်းဖုန်းများက တဆင့် အလွယ်တကူ ဆက်သွယ်ထိန်းချုပ် အသုံးပြုနိုင်မှာ ဖြစ်ပါသည်။
Rpi ၏ GPIO pin များအား အသုံးပြုနိုင်ရန် ပရိုဂရမ် ရေးသားရာတွင် များသောအားဖြင့် Python, Bash နှင့် C တို့ကို အသုံးပြုလေ့ ရှိပါသည်။ ဤဆောင်းပါးတွင် ၎င်းတို့ အားလုံးကို အသုံးပြု၍ GPIO ပရိုဂရမ်းမင်း ရေးသားနည်းများအား လေ့လာ တင်ပြသွားမည် ဖြစ်ပါသည်။
အထူးသတိထားရမည့် အချက်မှာ Rpi ၏ GPIO pin များသည် အကာအကွယ်ပြုလုပ်ထားခြင်း မရှိသောကြောင့် short ckt ဖြစ်ပွားပါက Rpi တစ်ခုလုံး ပျက်စီးသွားနိုင်ပါသည်။ အတွေ့အကြုံ မရှိသေးသော လေ့လာသူများ အန္တရာယ်ကင်းစေဖို့ $10 ခန့် တန်ဖိုးရှိတဲ့ Pibrella ကို အသုံးပြုနိုင်ပါသည်။
GPIO pin များအား စမ်းသပ်အသုံးပြုရန် အောက်ပါပုံတွင် ပြသထားသည့်အတိုင်း LED တစ်လုံး၊
ဘက်ထရီ တစ်လုံး၊ Resistor တစ်ခုနှင့် ခလုတ်တစ်ခုပါဝင်သော အရိုးရှင်းဆုံး ဆားကစ်တစ်ခုကို
အခြေခံ၍ စမ်းသပ်နိုင်ပါသည်။ (Resistor ကို အသုံးပြုထားရခြင်းမှာ LED အား ကာကွယ်ရန် ဖြစ်ပါသည်။)
GPIO pin အား အသုံးပြုမည်ဆိုပါက ခလုတ်တစ်ခုနှင့် ဘက်ထရီ နေရာအား Pi ဖြင့် အစားထိုး အသုံးပြုနိုင်မည် ဖြစ်ပါသည်။ အဘယ်ကြောင့်ဆိုသော GPIO pin တစ်ခုသည် ON (High) နေချိန်တွင် 3.3volts ထွက်နေမည်ဖြစ်ပြီး OFF (LOW) ဖြစ်နေချိန်တွင် 0volts ဖြစ်နေမည် ဖြစ်သောကြောင့် ဖြစ်ပါသည်။ ထို့ကြောင့် အောက်ပါပုံတွင် Raspberry Pi ၏ GPIO pin သည် ဘက်ထရီ၏ အပေါင်းဘက်နှင့် သဏ္ဍန်တူပြီး ground pin သည် အနုတ်ဘက်နှင့် သဏ္ဍန်တူနေမည် ဖြစ်သည်။
ထို့ပြင် သတိပြုရမည့် နောက်တစ်ချက်မှာ GPIO pin များအား အသုံးပြုမည့် ပရိုဂရမ်များအားလုံးသည် root အနေဖြင့် RUN ပေးရန် လိုအပ်ပါသည်။ ထို့ကြောင့် command အားလုံး၏ ရှေ့တွင် sudo ကို ထည့်သွင်းပေးရမည် ဖြစ်ပါသည်။
Python: ကို အသုံးပြု၍ ရေးသားနည်း
ပထမဦးစွာ Python package installer - pip ကို install ပြုလုပ်ရန် လိုအပ်ပါသည်။ Raspberry Pi ၏ terminal တွင် အောက်ပါ command ကို ရိုက်ထည့်ပါ။
sudo curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
ထို့နောက် Rpi.GPIO Python module ကို install ပြုလုပ်ပေးရမည် ဖြစ်ပါသည်။
sudo pip install rpi.gpio
လိုအပ်သော Python module များ install ပြုလုပ်ပြီးနောက် အောက်ပါအတိုင်း စမ်းသပ် ရေးသားနိုင်ပါသည်။
import RPI.GPIO as GPIO
GPIO.setup(7,GPIO.OUT)
GPIO.output(7,True)
GPIO.output(7,False)
Bash: ကို အသုံးပြု၍ ရေးသားနည်း
Unix စနစ်တွင် အရာအားလုံးသည် ဖိုင်များပင် ဖြစ်သည်။ ထို့ကြောင့် Raspberry Pi တွင်လည်း GPIO pin များသည် ဖိုင်များဖြစ်ကြသည်။ ဤအချက်ကို အသုံးပြု၍ အောက်ပါအတိုင်း Bash ဖြင့် ဖိုင်များအား အချက်အလက် ရေးသားထည့်သွင်းသကဲ့သို့ echo နှင့် > ကို အသုံးပြု၍ ရေးသား ထိန်းချုပ်နိုင်သည်။ သတိပြုရမည့် အချက်မှာ ဤနည်းကို အသုံးမပြုမီ root ဖြစ်နေစေရန် sudo su command ကို စတင်ထားရမည် ဖြစ်သည်။
sudo su -
echo "4" > /sys/class/gpio/export
echo "4" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio4/direction
echo "1" > /sys/class/gpio/gpio4/value
echo "0" > /sys/class/gpio/gpio4/value
GPIO pin မှာ input ဖတ်ရန် အခြားဖိုင်များမှ ဖတ်သကဲ့သို့ပင် cat ကို အသုံးပြုနိုင်ပါသည်။
echo "0" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio0/direction
cat /sys/class/gpio/gpio0/value
C: ကိုအသုံးပြု၍ ရေးသားနည်း
C language ဖြင့် ရေးသားရာတွင် native C language သက်သက်ဖြင့် ရေးသားရန် ခက်ခဲမည် ဖြစ်ပါသည်။ သို့ရာတွင် Raspberry Pi ကို Arduino သဖွယ် အသုံးပြုနိုင်စေရန် Gordon က Arduino-like library တစ်ခုကို ရေးသားပေးခဲ့ပါသည်။ ၎င်းကို C ဖြင့် ရေးသားထားပြီး WiringPi ဟုခေါ်ပါသည်။ C, C++ နှင့် အခြား ပရိုဂရမ်းမင်း ဘာသာစကားများတွင် ထည့်သွင်းရေးသားနိုင်ပါသည်။
အောက်ပါ အတိုင်း download ရယူပါ။
cd /tmp
wget http://project-downloads.drogon.net/files/wiringPi.tgz
tar xfz wiringPi.tgz
cd wiringPi/wiringPi
make
sudo make install
cd ../gpio
make
sudo make install
အထက်ပါ installation ပြုလုပ်ပြီးသည့်အခါ wiringPi library ကို ပရိုဂရမ်ရေးသားရာတွင် ထည့်သွင်း အသုံးပြုနိုင်ပြီ ဖြစ်ပါသည်။ ထို့ကြောင့် nano ကို အသုံးပြု၍ blink.c အမည်ဖြင့် အောက်ပါအတိုင်း ရေးသားနိုင်ပါသည်။
cd ~
nano blink.c
အောက်ပါ ကုဒ်များကို ကူးယူရေးသား၍ သိမ်းဆည်းလိုက်ပါ။
/*
* blink.c:
* Simple test program to blink an LED on pin 7
*/
#include <wiringPi.h>
#include <stdio.h>
int main (void)
{
int pin = 7;
printf("Raspberry Pi wiringPi blink test\n");
if (wiringPiSetup() == -1)
exit (1);
pinMode(pin, OUTPUT);
for (;;){
printf("LED On\n");
digitalWrite(pin, 1);
delay(250);
printf("LED Off\n");
digitalWrite(pin, 0);
delay(250);
}
return 0;
}
ထို့နောက် compile ပြုလုပ်ရန် အောက်ပါအတိုင်း ပြုလုပ်နိုင်ပါသည်။
cc -o blink blink.c -L/usr/local/lib -lwiringPi
ထိုအခါ blink အမည်ဖြင့် output ထွက်လာမည် ဖြစ်ပါသည်။ အောက်ပါအတိုင်း RUN နိုင်ပါသည်။
sudo ./blink
Button တစ်ခုကို အသုံးပြု၍ LED တစ်လုံး၏ blinking rate ကို အောက်ပါ ကုဒ်များဖြင့် ပြောင်းလဲနိုင်ပါသည်။
/*
* buttonLED.c:
* Simple test program to change the blinking rate of an LED when a button is pressed
*/
#include <wiringPi.h>
#include <stdio.h>
int main (void)
{
int pin_LED = 7; // GPIO7 / header pin 7
int pin_switch = 8; // SDA0 / header pin 3
int del = 250;
printf ("Raspberry Pi wiringPi button LED test\n") ;
if (wiringPiSetup() == -1)
exit (1);
pinMode(pin_LED, OUTPUT);
pinMode(pin_switch, INPUT);
for (;;){
if (digitalRead (8) == 0){ // button pressed
del = 100;
} else {
del = 250;
}
digitalWrite(pin_LED, 1);
delay(del);
digitalWrite(pin_LED, 0);
delay(del);
}
return 0 ;
}
နိဂုံး
ယခု အခါ Raspberry Pi ကို Embedded system အမျိုးမျိုး၊ အဝေးထိန်း စနစ်များ၊ RC car projects, Mulitcopters, RC airplane, Home Automation အစရှိသော အီလက်ထရောနစ် ပရောဂျက်မျိုးစုံတွင် တွင်ကျယ်စွာ အသုံးပြုလျက်ရှိနေပါသည်။ ထိုသို့ အသုံးပြုနိုင်ခြင်း၏ အဓိက အချက်များမှာ GPIO pin များအား ထိရောက်စွာ ပရိုဂရမ် ရေးသားနိုင်ခြင်း၊ Raspberry Pi ၏ တွက်ချက်မှု စွမ်းရည် မြင့်မားခြင်းနှင့် အရွယ်အစား သေးငယ်ခြင်း၊ ပရိုဂရမ်မင်း ဘာသာစကား အမျိုးမျိုးဖြင့် ရေးသား အသုံးပြုနိုင်ခြင်း အစရှိသော အချက်များကြောင့်ပင် ဖြစ်ပါသည်။ သို့ရာတွင် Raspberry Pi ၏ အဓိက အားနည်းချက်မှာ Analog to Digital Converter (ADC) မပါဝင်ခြင်း ဖြစ်ပါသည်။ ထို့ကြောင့် Analog to Digital conversion ပြုလုပ်နိုင်ရန် ပြင်ပမှ MICROCHIP MCP3208-BI/P Analog to Digital Converter ( 12 bit, 100 kSPS, Single, 2.7 V, 5.5 V, DIP ) ကဲ့သို့သော ADC တစ်ခုကို အသုံးပြုနိုင်ပါသည်။ ယခုဆောင်းပါးတွင် ကျွန်တော့် အနေဖြင့် လက်လှမ်းမီသမျှ နည်းလမ်းများကို တင်ပြထားခြင်းမျှသာဖြစ်ပြီး အခြား နည်းလမ်းပေါင်း များစွာ ကျန်ရှိနေပါသေးသည်။ ဤဆောင်းပါးပါ အချက်များအနေဖြင့် ပြည့်စုံလုံလောက်မှု၊ တိကျမှု မရှိပါက ကျွန်တော်၏ လိုအပ်ချက်ကြောင့်သာ ဖြစ်ကြောင်းနှင့် ထပ်မံဖြည့်စွက်လေ့လာရန် လိုအပ်ပါကြောင်း တင်ပြ လိုက်ရပါတော့သည်။
ရည်ညွှန်းကိုးကား
1. https://projects.drogon.net/raspberry-pi/wiringpi/
2. http://log.liminastudio.com/writing/tutorials/tutorial-how-to-use-your-raspberry-pi-like-an-arduino
3. http://pibrella.com/
4. https://www.raspberrypi.org/documentation/usage/gpio/
5. http://www.raspberrypi.org/blog/
6. https://www.raspberrypi.org/learning/python-quick-reaction-game/worksheet/