raspberry pi 2 - web.rmutt.ac.th · จุดเชอื uมต่อของraspberry pi2 os...
Post on 23-May-2018
248 Views
Preview:
TRANSCRIPT
บอรดคอมพวเตอร 32 บตรจกและใชงาน
Raspberry Pi 2
CPU : ARM V7 quad-core 900MHz 512kb Cache
RAM : 1GByte
แรงกวาเดม
6 เทา
Raspberry Pi2 Spec
Dual Core GPU
40 ขา GPIO USB 2.0 4 ชอง
JACK AV 3.5mm
10/100 ETERNET
จดตอ HDMI
จดตอ CSI ตอกลอง
จดตอ DSI ตอจอ LCD
ไฟเลยง 5V/1.5A microUSB
จดเชอมตอของ Raspberry
Pi2
จดเชอมตอของ Raspberry
Pi2
จดเชอมตอของ Raspberry
Pi2
จดเชอมตอของ Raspberry
Pi2
OS ของ Raspberry Pi 2 จะเกบท microSD โดยมชองเสยบการดอยใตบอรด
ระบบปฏบตการส าหรบ
Raspberry Pi2
windows 10
IOT
OpenELEC (media
center)
ส าหรบ
เร มตน
UBUNTU
DESKTOP
SNAPPY
UBUNTU(media center)
ระบบปฏบต
การ
ดาวนโหลดไฟล Image จาก
Raspberrypi.org
ใชโปรแกรม win32 Disk
Image
บนทกไฟลลง micro
SDCARDเสยบเขาไปทบอรด
Raspberry Pi
การเชอมตออปกรณเบองตน
อปกรณตอพวงเบองตน ส าหรบโหมด Stand Alone
จอคอมพวเตอร / จอ TV รองรบความละเอยด 1920x1080
สาย HDMI/HDMI หรอ HDMI/DVI
อแดปเตอร 5V/1.5A
USB Mouse
USB Keyboard
บตระบบปฏบตการ Raspbian
User : piPassword : raspberry
เขาส Graphic Mode
พมพ STARTX
การเขาสระบบเครอขายและ
อนเทอรเนต
สามารถตอสาย LAN เพอตอเขาอนเทอรเนตไดทนท
sudo apt-get update ตรวจสอบการอพเดตซอฟตแวร
sudo apt-get upgrade อพเกรดซอฟตแวรทงหมดทตดตง
การอพเดตและตดต งโปรแกรม
sudo apt-get install (ชอโปรแกรม)ตดตงโปรแกรม
ตวอยาง ตดตง browsersudo apt-get install chromium-browser
ค าส งทใชงานบอย
apt-get update อพเดตเวอรชน Raspbian
apt-get upgrade อพเกรดซอฟตแวรทงหมดทตดตงclear เคลยรหนาตาง Teminaldate แสดง วนเวลา ปจจบน
find-name *.* คนหาชอไฟลทตองการในทกโฟลเดอร
ค าส งทใชงานบอย
nano xxx.txt เปดไฟลดวย Text Editor
touch xxx.txt สรางไฟลใหม
ค าส งทใชงานบอย
sudo poweroff ปดเครองแบบทนท ทนใดsudo reboot รสตารตเครองใหม
startx เปดหนาตาง GUI ของ R-Pi
startlxde เปดหนาตาง GUI ของ R-Pi (Remote)
sudo shutdown -h now ปดระบบ
ค าส งทใชงานบอย
sudo raspi-config เปดหนาตางตงคาของ R-Pi
ls List files แสดงรายชอไฟลและไดเรคทอรcp Copy files ส าเนาไฟลmv Rename files เปลยนชอไฟลrm Delete files ลบไฟลcd Change directory ยายไปยงไดเรคทอรทตองการpwd Print directory name แสดงชอไดเรคทอรปจจบนmkdir Create directory สรางไดเรคทอรใหมrmdir Delete directory ลบไดเรคทอร (ทวางเปลาเทานน)
File/Directory Basics
ค าส งทใชงานบอย
cat View files ดเนอหาของ text fileless Page trough files เลอนดเนอหาของไฟล ออกกอน Crl+Zhead View file beginning แสดงสวนตนของไฟลtail View files ending แสดงสวนทายของไฟลnl Number lines แสดงหมายเลขบรรทดod View binary files แสดงเนอหาในไฟลไบนาร
File Viewer
ค าส งทใชงานบอย
ค าส งทใชงานบอย
teeCopy stdin to file and to stdout simultaneouslyส าเนาขอความออกทางไฟลและ stdout พรอมๆ กน
echo "Hello, world" | tee hello.txt
Hello, world
การเชอมตอผาน WIFI
USB WIFI Dongle
การต งคาผานโปรแกรม WiFi
Configuration
เปด WiFi Configurationกด Scan เพอคนหาเครอขาย
เลอกเครอขายทตองการใสรหสผาน ส าหรบเครอขายทเชอมตอ
IP Address ของ Raspberry Pi
เปด Browser เพอทดสอบเชอมตออนเทอรเนต
การต งคาผานโปรแกรม WiFi
Configuration
การแบงใชอนเทอรเนตจาก
Notebook
Notebook ตออนเทอรเนตดวย WiFi แชรให RPi ดวยสาย LAN
Router หรอ มอถอ
สาย LAN
ท าใหอยในเครอขายเดยวกนและเลนอนเทอรเนตไดดวย
คลกเมาสขวาเลอก Properties ท WIFI
เลอกแชรอนเทอรเนตให LAN
ต งคา Network ท Notebook
* ถาเปน windows 8 จะใชค าวา Eternet แทน Local Area Network
ต งคา Network ท Notebook
(windows 8)
ตรวจสอบ IP Address ตวทปลอย
การคนหาต าแหนง IP จากบอรด
RPi
สาย LAN
1. เชอมตอสาย LAN กบบอรด RPi
2. ใชโปรแกรม IPSCAN
3. คนหา IP ของบอรด RPi
การ Fix ต าแหนง IP ของบอรด
RPi
1. น า SD CARD เสยบทคอมพวเตอร
2. เปดไฟล cmdline.txt ดวย nodepad
3. เพม ขอความ ตอทาย แลว SAVEip=192.168.137.10::192.168.137.1
ตรวจสอบ ip address อกคร ง
1.เชอมตอบอรด RPi อกครง
สาย LAN
2.ตรวจสอบต าแหนง ip Address อกครง
Remote ดวยโปรแกรม Remote
Desktop Connection
user : pipassword : raspberry
XRDP ตดตงบน RPi ไวแลว เพอรองรบการ Remote ผานซอฟตแวรRemote Desktop Connection ของ windows
XRDP
หนาจอ Remote Desktop
การควบคมระยะไกลดวย SSH (Moba
XTerm)SSH : Secure Shell (เขารหสขอมลกอนสง)
1.ตดตงโปรแกรม Moba Xterm
2.สราง Session แบบ SSH
3. X มมบนขวา สเขยว
(Moba XTerm)
4. ปอน password : raspberry
ขณะปอน password ขอความไมปรากฎ
5. พรอมพมพ Command
โหมด Graphic
6. พมพค าสง startlxde เพอเรยกโหมด Graphic
การต งคาหนาจอของโหมด X11
การคดลอกไฟลผาน Moba Xterm
ฝก Python 3 ผาน Command Line
พมพแลวเหนผลลพธทนท>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5
1.6
>>> 17 / 3
5.666666666666667
>>> 5 ** 2
25
ผลลพธจากการหารเปน Float
ผลลพธจากการบวกเปน int
ยกก าลงออกจากโปรแกรมใช Ctrl+D
>>> print ("inex")
inex
>>> print ('inex')
inex
>>> print ('Line1\nLine2\nLine3')
Line1
Line2
Line3
>>> x=10
>>> print ('X=',x)
X=10
รปแบบ
ค าส ง Print
ผลลพธ\'\"\n\t
'"ขนบรรทดใหมTab 1 ครง
บวก ลบ คณ หาร
>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5
1.6
>>> 17 / 3
5.666666666666667
>>> 5 ** 2
25
ผลลพธจากการหารเปน Float
ผลลพธจากการบวกเปน int
ยกก าลง
ตวแปรภายใน Pythonใชค าสง type (var) ตรวจสอบชนดตวแปร
>>> x = 400 x เปน Integer>>> y = 4.5 y เปน Float>>> Z = True Z เปน Boolean
>>> i = [1, 2, 3, 4, ’Rasp’, 5, ’Pi’] i เปน List
Python ไมใช Array ใช List แทน หลายชนดอยทเดยวกนได
>>> print (i[4])
Rasp
>>> print (i[2:6])
[3,4,'Rasp',5]
>>> S = 'Rasp' S เปน String
>>> x = 100
>>> y = 20
>>> x+y
120
เครองหมาย = ใชก าหนดตวแปร
>>> x = 3.0
>>> y = 5
>>> x*y
15.0
การก าหนดคาตวแปร
nano prog1.py
เปด editor
print ("Innovative")
เขยนโคด
print ("Experiment")
บนทก แลวออกCTRL + X
Y
ENTER
ทดสอบเขยนโปรแกรมดวย nano
Graphic Mode : Geany โปรแกรม Editor ทชวยใหการเขยน Python งายขน
sudo apt-get install geany
ตดตงโปรแกรมผานInternet
ตงใหคอมไพลดวย python3
import time
x=0
while (True) :
print (x)
time.sleep(0.5)
x=x+1
ทดสอบโปรแกรม python ผาน Geany
กด F5 RUNกด CTRL+C ออก
> มากกวา>= มากกวาหรอเทากบ<= นอยกวาหรอเทากบ< นอยกวา== เทากบ!= ไมเทากบin ตรงกบคาใน List หรอเปลา
AND จรงทงคOR จรงอนใดอนหนงNOT สลบจรงเปนเทจ
การเปรยบเทยบ
while Condition:
Statements
.....
.....
x=1
while x<5 :
print ('Less')
x=x+1
ตวอยาง
การวนท าซ า while
ออกจาก while ไดดวย break
s='0'
while s!='x' :
s = input('Press key= ')
print (s)
ตวอยาง
ค าสง input รอรบการกดคยเกบในตวแปรสตรงSTR
การวนท าซ า while
การควบคมทศทางของโปรแกรม
1. การวนท าซ า (while)2. การตดสนใจ (if )3. การจดการความผดปกตของโปรแกรม (error)
if Condition:
Statements
.....
.....
import time
x=0
while (True) :
if (x is 10) :
break
print (x)
time.sleep(0.2)
x=x+1
ตวอยาง
การตดสนใจ : IF
if Condition:
Statements
.....
.....
else:
Statements
.....
.....
การตดสนใจ : if else
ตวอยางimport time
x=1
while True :
if (x>5) :
print (x*2)
else :
print (x*5)
time.sleep(0.5)
x=x+1
การตดสนใจ : if elif else
import time
x=1
while True :
if (x<5) :
print (x*2)
elif (x>=5 and x<10) :
print (x*5)
else :
break
time.sleep(0.5)
x=x+1
ตวอยางif Condition:
Statements
.....
.....
elif Condition:
Statements
.....
.....
else:
Statements
.....
.....
การวนท าซ าดวย for
for var in range(m, n [, step = 1]):
Statements
.....
.....
for i in range(0,10) :
if i%2 == 0 :
print (i,'even')
else :
print (i,'odd')
ตวอยาง
for ต วแปร in ช ดข อม ล :ค า ส ง 1ค า ส ง 2
ฟงกชนคณตศาสตรภายใน ทส าค
ก าหนดคาชวงของตวเลขrange(start, end [,step])
range (1,6) # จะประกอบดวย 1,2,3,4,5
หาผลรวมทงหมดในชดsum(n1,n2 [,nn])
sum(1,2,3,4,5) # ผลลพธคอ 15
ก าหนดจ านวนทศนยมround(var, digits)
round(1234.56789, 2) # ผลลพธคอ 1234.57
หาคาต าสด สงสด ของเลขในชดmin(var), max(var)
min(range(5,10)) # ผลลพธคอ 5
max(range(5,10)) # ผลลพธคอ 9
แสดงคาสมบรณ (เปลยนเปนคาบวก)abs(var)
abs(-50) # ผลลพธคอ 50
การดกจบ error
try:
Standard operation
except:
Error operation
finally:
End operation
try :
x=y
except :
print ('y not set')
try:
main()
finally:
GPIO.cleanup()
print("END")
def function_name( [Argument] ):
Statement
……
[return]
def add(x,y):
return x + y
def บอกวาเปนฟงกชนfunction_name ชอฟงกชนArgument คาทสงเขาไปในฟงกชนStatement ชดค าสงreturn การคนคาของฟงกชน add(3,4)
7
การสรางฟงกชน
การนบขาของ Rpi
ต าแหนงขา GPIO ของ Rpi
GPIO 26 ขา
PWM ทกขา
I2C /UART/SPI
การระบขาแบบ BCMBOARDBCM
บอรด Rpi-I/O 40 และการเชอมตอ
การระบต าแหนงขาของ Rpi-I/O 40
รปแบบการตอวงจรกบ Rpi-I/O 40
import RPi.GPIO as GPIO
เพมไลบรารในชอ GPIO
GPIO.setmode(GPIO.BCM)
setmode ก าหนดรปแบบขา
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin,GPIO.OUT)
setup ก าหนด input/output
GPIO.setup(pin,GPIO.IN)
GPIO.output(pin,1)
output สงคาออกไปทขา
GPIO.output(pin,0)
ไลบราร RPi.GPIO
x = GPIO.input(pin)
input รบคาลอจกจากขา
GPIO.cleanup()
cleanup เคลยรคาพอรตกลบ
GPIO.PWM(pin,freq)
PWM เปดการท างาน PWMGPIO.setwarning(0)
ปดการแจงเตอน
ไฟกะพรบทขา 18import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)
while True :
GPIO.output(18,True)
time.sleep(0.3)
GPIO.output(18,False)
time.sleep(0.3)
Cleanup Port หลงเลกใช
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)
try :
while True :
GPIO.output(18,True)
time.sleep(0.3)
GPIO.output(18,False)
time.sleep(0.3)
finally :
GPIO.cleanup()
ตอวงจร LED 8 ดวง
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
try:
while (True) :
GPIO.output(18,1)
GPIO.output(27,1)
GPIO.output(22,1)
GPIO.output(23,1)
time.sleep(0.5)
GPIO.output(18,0)
GPIO.output(27,0)
GPIO.output(22,0)
GPIO.output(23,0)
time.sleep(0.5)
finally:
GPIO.cleanup()
ขบ LED ไฟกะพรบ 4 ดวง แบบท 1
in ดงคาใน pins ออกมาทละตวเกบใน X
>>> i = [1, 2, 3, 4, ’Rasp’, 5, ’Pi’]
Python ไมใช Array ใช List แทน หลายชนดอยทเดยวกนได
pins = [18,27,22,23]
ประกาศตวแปรแบบ List
pins = [18,27,22,23]
for x in pins:
GPIO.setup(x,GPIO.OUT)
ค าสง For และตวแปรแบบ List
ขบ LED ไฟกะพรบ 4 ดวง แบบท 2import RPi.GPIO as GPIO
import time
pins = [18,27,22,23]
GPIO.setmode(GPIO.BCM)
for x in pins :
GPIO.setup(x,GPIO.OUT)
try:
while (True) :
for x in pins :
GPIO.output(x,1)
time.sleep(0.5)
for x in pins :
GPIO.output(x,0)
time.sleep(0.5)
finally:
GPIO.cleanup()
ขบ LED ไฟกะพรบ 8 ดวงimport RPi.GPIO as GPIO
import time
pins = [18,27,22,23,24,10,9,25]
GPIO.setmode(GPIO.BCM)
for x in pins :
GPIO.setup(x,GPIO.OUT)
try:
while (True) :
for x in pins :
GPIO.output(x,1)
time.sleep(0.5)
for x in pins :
GPIO.output(x,0)
time.sleep(0.5)
finally:
GPIO.cleanup()
ขบ LED ไฟวงimport RPi.GPIO as GPIO
import time
pins = [18,27,22,23,24,10,9,25]
GPIO.setmode(GPIO.BCM)
for x in pins :
GPIO.setup(x,GPIO.OUT)
try:
while (True) :
for x in pins :
GPIO.output(x,1)
time.sleep(0.5)
for x in pins :
GPIO.output(x,0)
time.sleep(0.5)
finally:
GPIO.cleanup()
import random
import RPi.GPIO as GPIO
import time
pin =[18,27,22,23,24,10,9,25]
GPIO.setmode(GPIO.BCM)
for i in pin : GPIO.setup(pin,GPIO.OUT)
try:
while True :
x=random.randint(0,7)
GPIO.output(pin[x],1)
time.sleep(0.2)
for i in pin :
GPIO.output(i,0)
finally :
GPIO.cleanup()
ทดสอบค าสง Random
การอานคาอนพตจากสวตช
import RPi.GPIO as GPIO
import time
pins = [18,27,22,23,24,10,9,25]
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN)
GPIO.setup(8,GPIO.IN)
for x in pins :
GPIO.setup(x,GPIO.OUT)
for x in pins :
GPIO.output(x,0)
try:
while (True) :
if GPIO.input(11) : GPIO.output(18,1)
else : GPIO.output(18,0)
if GPIO.input(8) : GPIO.output(27,1)
else : GPIO.output(27,0)
finally:
GPIO.cleanup()
การอานคาอนพตจากสวตช
and ตองเปนจรงทงค จงจะเปนจรงor เปนจรง อนใดอนหนง เปนจรงnot สลบ จรงเปนเทจ เทจเปนจรง
if GPIO.input(11)
if not GPIO.input(11)
if GPIO.input(11) or GPIO.input(8)
การกระท าทางลอจก
if GPIO.input(11) and GPIO.input(8)
import RPi.GPIO as GPIO
import time
pins = [18,27,22,23,24,10,9,25]
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN)
GPIO.setup(8,GPIO.IN)
for x in pins :
GPIO.setup(x,GPIO.OUT)
for x in pins :
GPIO.output(x,0)
try:
while (True) :
if GPIO.input(11) and GPIO.input(8) :
GPIO.output(18,1)
else :
GPIO.output(18,0)
finally:
GPIO.cleanup()
ทดสอบกดสวตช
สง Pull up Pull Down ดวยซอฟตแวรก าหนดใหขา 20 เปนขาอนพต และมการพลอพGPIO.setup(20,GPIO.IN,pull_up_down=GPIO.PUD_UP)
ก าหนดใหขา 21 เปนขาอนพต และมการพลดาวนGPIO.setup(21,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
50 กโลโอหม พลอพ
import RPi.GPIO as GPIO
import time
pins = [18,27,22,23,24,10,9,25]
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(8,GPIO.IN,pull_up_down=GPIO.PUD_UP)
for x in pins :
GPIO.setup(x,GPIO.OUT)
for x in pins :
GPIO.output(x,0)
try:
while (True) :
if GPIO.input(11) and GPIO.input(8) :
GPIO.output(18,1)
else :
GPIO.output(18,0)
finally:
GPIO.cleanup()
ทดสอบ พลอพสวตชดวยซอฟตแวร
อานคาสวตชขอบขาขน ขอบขาลงGPIO.wait_for_edge(23, GPIO.FALLING)
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(11, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(8, GPIO.IN, pull_up_down = GPIO.PUD_UP)
try :
while True:
GPIO.wait_for_edge(11, GPIO.FALLING)
print('Button 1 Pressed')
GPIO.wait_for_edge(11, GPIO.RISING)
print('Button 1 Released')
GPIO.wait_for_edge(8, GPIO.FALLING)
print('Button 2 Pressed')
GPIO.wait_for_edge(8, GPIO.RISING)
print('Button 2 Released')
finally :
GPIO.cleanup()
GPIO.wait_for_edge(23, GPIO.RISING)
ขาลงขาขน
รปแบบการสรางฟงกชน
def add(x,y):
return x + ydef บอกวาเปนฟงกชนfunction_name ชอฟงกชนArgument คาทสงเขาไปในฟงกชนStatement ชดค าสงreturn การคนคาของฟงกชน
def function_name( [Argument] ):
Statement
……
[return]
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN)
def blink(CH,delay,cnt):
GPIO.setup(CH,GPIO.OUT)
for i in range(1,cnt):
GPIO.output(CH,1)
time.sleep(delay)
GPIO.output(CH,0)
time.sleep(delay)
try :
while GPIO.input(11):
blink(18,0.5,5)
time.sleep(2.0)
finally :
GPIO.cleanup()
ทดสอบใชงานฟงกชน
EVENTS AND CALLBACK FUNCTIONS
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(18,GPIO.OUT)
def prints(CH) :
print ('Button 1 Pressed')
try :
GPIO.add_event_detect(11,GPIO.RISING,callback=prints,bouncetime=300)
while True :
GPIO.output(18,1)
time.sleep(0.2)
GPIO.output(18,0)
time.sleep(0.2)
finally :
GPIO.cleanup()
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(8,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(7,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(5,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(18,GPIO.OUT)
def prints(CH) :
print ('Button', CH, 'Pressed')
try :
GPIO.add_event_detect(11,GPIO.RISING,callback=prints,bouncetime=300)
GPIO.add_event_detect(8,GPIO.RISING,callback=prints,bouncetime=300)
GPIO.add_event_detect(7,GPIO.RISING,callback=prints,bouncetime=300)
GPIO.add_event_detect(5,GPIO.RISING,callback=prints,bouncetime=300)
while True :
GPIO.output(18,1)
time.sleep(0.2)
GPIO.output(18,0)
time.sleep(0.2)
finally :
GPIO.cleanup() GPIO.remove_event_detect(23)
ปด Event
เพมต าแหนงขาใหเกด Event
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(8,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(7,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(5,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(18,GPIO.OUT)
def prints(CH) :
print ('Button', CH, 'Pressed')
try :
GPIO.add_event_detect(11,GPIO.RISING,callback=prints,bouncetime=300)
GPIO.add_event_detect(8,GPIO.RISING,callback=prints,bouncetime=300)
GPIO.add_event_detect(7,GPIO.RISING,callback=prints,bouncetime=300)
while True :
GPIO.output(18,1)
time.sleep(0.2)
GPIO.output(18,0)
time.sleep(0.2)
if (not GPIO.input(5)):
print ('Close Event')
GPIO.remove_event_detect(11)
GPIO.remove_event_detect(8)
GPIO.remove_event_detect(7)
finally :
GPIO.cleanup()
ทดสอบปด Event
สรางเสยงออกล าโพง
def sound(pins,freq,times):
GPIO.setup(pins,GPIO.OUT)
for i in range(0,times):
GPIO.output(pins,1)
time.sleep(0.5/freq)
GPIO.output(pins,0)
time.sleep(0.5/freq)
สรางเสยงออกล าโพง
import RPi.GPIO as GPIO
import time
def sound(pins,freq,times):
GPIO.setup(pins,GPIO.OUT)
for i in range(0,times):
GPIO.output(pins,1)
time.sleep(0.5/freq)
GPIO.output(pins,0)
time.sleep(0.5/freq)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN,pull_up_down= GPIO.PUD_UP)
try:
while(1):
if (not GPIO.input(11)) :
sound(4,1000,100)
sound(4,2000,100)
sound(4,500,100)
finally:
GPIO.cleanup()
สรางเสยงออกล าโพง
PWM : พลสวธมอดเลเตอร
p=GPIO.PWM(pin,freq)
เปดการใช PWM
p.start(%dutycycle)
เรมตน PWM
p.ChangeFrequency(freq)
เปลยนความถ PWM
p.ChangeDutyCycle(%duty)
เปลยนคาความกวางพลส
p.stop()
หยด PWM
ไฟกะพรบดวย PWM
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP)
p=GPIO.PWM(18,1)
p.start(50)
input('Press return to stop')
p.stop()
GPIO.cleanup()
1 Hz
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.OUT)
p=GPIO.PWM(18,50)
p.start(0)
try:
while True :
for x in range(0,101,5) :
p.ChangeDutyCycle(x)
time.sleep(0.1)
for x in range(100,-1,-5) :
p.ChangeDutyCycle(x)
time.sleep(0.1)
except KeyboardInterrupt:
pass
p.stop()
GPIO.cleanup()
ไฟกะพรบดวย PWM
import RPi.GPIO as GPIO
import time
pin =[18,27,22,23,24,10,9,25]
p=[0,1,2,3,4,5,6,7,8]
GPIO.setmode(GPIO.BCM)
for i in pin : GPIO.setup(i,GPIO.OUT)
for i in range(0,8) : p[i]=GPIO.PWM(pin[i],50)
for i in range(0,8) : p[i].start(0)
try:
while True :
for i in range(0,8) :
for x in range(0,101,5) :
p[i].ChangeDutyCycle(x)
time.sleep(0.01)
for i in range(0,8) :
for x in range(100,-1,-5) :
p[i].ChangeDutyCycle(x)
time.sleep(0.01)
except KeyboardInterrupt:
pass
for i in range(0,8) : p[i].stop()
GPIO.cleanup()
ไฟน าตก
import RPi.GPIO as GPIO
import time
x=2000
GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.OUT)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(8,GPIO.IN,pull_up_down=GPIO.PUD_UP)
p=GPIO.PWM(4,2000)
p.start(50)
try:
while True:
if not GPIO.input(11):
x=x+100
print (x)
p.ChangeFrequency(x)
time.sleep(0.2)
if not GPIO.input(8):
if x>100:
x=x-100
print (x)
p.ChangeFrequency(x)
time.sleep(0.2)
finally:
p.stop()
GPIO.cleanup()
การใชงานโมดลกลอง Pi-camera
ความละเอยดถง 5 ลานพกเซล เลนสแบบ Fixed-Focus ภาพขนาดสงสด 2592x1944 พกเซล ภาพเคลอนไหวคณภาพ ระดบ 1080p 30 เฟรมตอวนาท (1080p) ตดตอกบบอรด Raspberry Pi ดวย
บส CSI (Common System Interface)
เคสอะครลกปองกนตวกลอง
การประกอบเคสอะครลก
1. แกะกระดาษออกกอน
2. วางกลองลงไป 3. สอบสาย 4.ประกบเขาไป
การประกอบเคสอะครลก (ตอ)
5. ประกบชนท 5 โดยสอดสายเขาไป
6. ใชสกรขนยดใหแนน
การตดตงกลอง
ถงขาลอกขนกอน เสยบสายแพ แลวกดขาลอกใหแนน
การตงคาเพอตดตอโมดลกลอง
pi@raspberrypi ~ $ sudo raspi-config
Enable Camera > Enable
ค าสงควบคมโหมดภาพนง
raspistill เปดโมดลกลองเพอถายภาพนงo --width , -w ปรบขนาดความกวางของภาพo --height , -h ปรบขนาดความสงของภาพo --quality , -q ปรบแตงคณภาพของรปทถาย คา 0-100o --output , -o บนทกภาพในชอไฟลทก าหนด
เชน raspistill –o image.jpg
ค าสงควบคมโหมดภาพนง (ตอ)
--timeout , -t ใชก าหนดชวงเวลาเปดโมดลกลอง ปกต 5 วนาทเชน raspistill –t 10000 (สงเปดโมดลกลองนาน 10 วนาท)
--verbose , -v แสดงรายละเอยดตาง ๆ ออกมาขณะเกบภาพ
ค าสงควบคมโหมดภาพนง (ตอ)
--timelapse , -tl ใหกลองถายเปนชวง ๆ หนวยเปน millisecเชน raspistill –t 20000 -tl 2000 -o x%03d.jpg
เปดกลองนาน 20 วนาท ถายภาพนงทก ๆ 2 วนาท บนทกภาพในชอ x001.jpg - x011.jpg
--encoding , -e บบอดไฟลรปแบบอน เชน png ,bmp ,gifเชน raspistill -o x%03d.png -e png
ค าสงควบคมอนๆ
ส าหรบตอทาย raspistill o --preview , -p แสดงภาพออกจอดวยขณะถายรป (รโมตใชไมได)ก าหนดพกด x,y หนาจอ และขนาดภาพดวยเชน
raspistill -p 100,150,1000,800o --fullscreen , -f แสดงรปภาพเตมจอ เชน raspistill -fo --nopreview , -n ปดการแสดงออกหนาจอ เชน raspistill -no --opacity , -op ก าหนดความเขมของรปภาพ ชวง 0-255 255 ชดสด
ค าสงควบคมโหมดภาพเคลอนไหว
raspivid เปดโมดลกลองเพอถายภาพเคลอนไหว
o --width , -w ปรบขนาดความกวางอยในชวง 64 ถง 1920po --height , -h ปรบขนาดความสงอยในชวง 64 ถง 1080po --output , -o บนทกภาพเคลอนไหวในชอและนามสกล h264เชน raspivid –o movie1.h264o --timeout , -t ก าหนดชวงเวลาเปดกลอง ปกต 5 วนาทหรอกด Ctrl+C เพอหยดการท างานได
raspivid –t 60000 –o Clip1.h264
สงการกลองดวย Python
import time
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (1024,768)
camera.start_preview()
time.sleep(2)
camera.capture(‘Picam_P1.jpg’)
import picamera
import time
import RPi.GPIO as GPIO
GPIO.setwarnings(0)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN)
camera= picamera.PiCamera()
camera.resolution =(1024,768)
camera.start_preview()
x=0
while 1:
if(not GPIO.input(18)) :
camera.capture(str(x)+'.jpg')
time.sleep(0.5)
x=x+1
กดป ม ถายรป
camera.sharpness = 0
camera.contrast = 0
camera.brightness = 50
camera.saturation = 0
camera.ISO = 0
camera.video_stabilization = False
camera.exposure_compensation = 0
camera.exposure_mode = 'auto'
camera.meter_mode = 'average'
camera.awb_mode = 'auto'
camera.image_effect = 'none'
camera.color_effects = None
camera.rotation = 0
camera.hflip = False
camera.vflip = False
camera.crop = (0.0, 0.0, 1.0, 1.0)
import picamera
import time
import RPi.GPIO as GPIO
import datetime
GPIO.setwarnings(0)
GPIO.setmode(GPIO.BCM)
GPIO.setup(17,GPIO.IN)
namex=str(datetime.datetime.now())+".jpg"
camera= picamera.PiCamera()
camera.resolution =(1024,768)
camera.start_preview()
camera.rotation =45
while 1:
if(not GPIO.input(17)) :
camera.capture(namex)
time.sleep(0.5)
ถายรปโชววนท
Sensor
PIR DHT11
MCP9701
reolution
การอานคาAnalog
คณสมบต-แปลงส าณสงสดถง 12 บต(0-4095) -ตดตอ แบบระบบบส SPI (Serial Peripheral Interface)-8 ชองส าน(CH0-CH7)
ตงคาเปด SPI
เปดการตงคาsudo raspi-config
ตงคาเปด SPI
เลอก A6 SPI
ตงคาเปด SPI
เลอก Yes
ตงคาเปด SPI
เลอก ok
โหมดการอาคา
ซงเกลเอนด
ดฟเฟอเรนเซยล
สงค าสง-รบคากบMCP3208
สงค าสง-รบคากบMCP3208สงค าสงอานคาในหนงครงจะใชทงหมด 3 ไบต
ไบตทสดทายไบตแรก ไบตทสอง
รบคาทอานไดใช 2 ไบต
สง
รบ
คาอนาลอก
ก าหนดชอง
สงค าสงไปยงMCP3208สงค าสงอานคาในหนงครงจะใชทงหมด 3 ไบต
x x x x x บตเรม โหมด D2
D1 D0 x x x x x x
x x x x x x x x
ไบตแรก
ไบตทสอง
ไบตทสดทาย
x x x x x
ไบตทสดทายไบตแรก ไบตทสอง
สงค าสงไปยงMCP3208
x x x x x บตเรม โหมด D2
D1 D0 x x x x x x
x x x x x x x x
ไบตแรก
ไบตทสอง
ไบตทสดทาย
บตเรม มคาเทากบ 1 เสมอโหมด 0=ดฟเฟอเรนเชยล,1=ซงเกลเอนดD2 D1 D0 เลขฐานสองของชองส าณทเลอกเชน CH3=011X = เปนอะไรกได แตจะก าหนดเปน 0 เสมอ
สงค าสงไปยงMCP3208
0 0 0 0 0 1 1 0
1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
ไบตแรก
ไบตทสอง
ไบตทสดทาย
ผลลพท: 00000110 11000000 00000000 เลขฐานสอง
ตวอยาง เลอกอานส าณทชอง CH3 ในโหมดซงเกลเอนดบตเรม=1:โหมด=1:CH3=011 ดงนน D2=0,D1=1,D0=1:x=0
รบคาจากMCP3208รบคาอนาลอกจะใช 2 ไบตสดทาย
? ? ? ? ? ? ? ?
? ? ? ? B11 B10 B9 B8
B7 B6 B5 B4 B3 B2 B1 B0
ไบตแรก
ไบตทสอง
ไบตทสดทาย
x x x x x x x x x x x x
ไบตทสดทายไบตแรก ไบตทสอง
x x x x
ไบตทสอง
x x x x x x x x
ไบตทสดทายไบตแรก
x x x x
ไบตทสอง
รบคาจากMCP3208
? ? ? ? ? ? ? ?
? ? ? ? 1 0 0 1
0 1 1 1 0 0 1 1
ไบตแรก
ไบตทสอง
ไบตทสดทาย
ตวอยางคาทอานได
ใช 2 ไบตสดทายจะได ????1001 01110011
รบคาจากMCP3208
ใช 2 ไบตสดทายจะได ????1001 01110011
ไบตท 2 = ????1001ไบตท 3= 01110011
วธท า ไบตท 2 (???? 1001 AND 0000 1111) = 0000 1001(0000 1001 << 8)=00001001 00000000
แลว OR กบไบตท 3(00001001 00000000 OR 01110011)ผลลพธ 00001001 01110011 (2419)
ตอวงจร
รบคาจากMCP3208import spidevimport time analog_ch = 1spi = spidev.SpiDev()spi.open(0,0)def readADC(adcnum):
if adcnum > 7 or adcnum < 0:return -1;
r = spi.xfer2([4 | 2 | (adcnum >> 2), (adcnum & 3) << 6, 0])adcout = ((r[1] & 15) << 8) + r[2]return adcout
while True:value = readADC(analog_ch)print("analog_ch1=",value)time.sleep(0.3)
รบคาจากMCP3208
จาก : r = spi.xfer2([4 | 2 | (adcnum >> 2), (adcnum & 3) << 6, 0])ตวอยาง ตองการอานชอง CH3 โหมด ซงเกลเอนadcnum=3ไบต 1: 4|2|(3>>2)=000 0110ไบต 2: (3&3)<<6=1100 0000ไบต 3: 0000 0000ผลลพท 0000110 11000000 00000000
0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0
ไบตทสดทายไบตแรก ไบตทสองไบตทสอง ไบตทสดทายไบตแรก ไบตทสอง
0 0 0 0 0 0 0 0
รบคาจากMCP3208
จาก : adcout = ((r[1] & 15) << 8) + r[2]จากตวแปร r[2] =ไบตท 3 : r[1]=ไบตท 2 : r[0]ไบตท 1 r[1] = ???? 1001r[2]= 01110011ไบต สงสด: (????1001&00001111)<<8=00001001 00000000ไบต ต าสด:01110011ไบต สงสด+ ไบต ต าสด=00001001 01110011(2419)
? ? ? ? ? ? ? ? ? ? ? ? 1 0 0 1
ไบตทสดทายไบตทสองไบตทสอง ไบตทสดทายไบตแรก ไบตทสอง
0 1 1 1 0 0 1 1
MCP9701 ไอซวดอณหภม
MCP9701 ไอซวดอณหภม
ตอวงจร
เขยนโคด
import spidevimport timeanalog_ch = 1spi = spidev.SpiDev()spi.open(0,0)def readADC(adcnum):
if adcnum > 7 or adcnum < 0:retrun -1;
r = spi.xfer2([4|2|(adcnum >> 2), (adcnum & 3) << 6, 0])adcout = ((r[1] & 15) << 8) + r[2]return adcout
เขยนโคด(ตอ)
while True:value = readADC(analog_ch)voltage = value*3.3/4096temp = (voltage-0.5)/0.0195print(“Temperature = %2.2f*C” % temp)time.sleep(0.3)
ZX-DHT11
บอรดวดความชนสมพทธและอณหภม
ZX-DHT11
รปแบบขอมลของ DHT11ไบตท 1 ขอมลจ านวนเตมของความชนสมพทธ (%RH) 8 บตไบตท 2 ขอมลทศนยมของความชนสมพทธ (%RH) 8 บตไบตท 3 ขอมลจ านวนเตมของอณหภม (องศาเซลเซยส) 8 บตไบตท 4 ขอมลทศนยมของอณหภม (องศาเซลเซยส) 8 บตไบตท 5 ขอมลตรวจสอบผลรวม (check sum)
ZX-DHT11
เสนสด า:ชวงทRaspberryPi ก าหนดสถานะลอจกของบส
เสนสแดง:ชวงท DHT11 ก าหนดสถานะลอจกของบส
ZX-DHT11
ตอ DHT11
ทดสอบ
sudo python3import Adafruit_DHTAdafruit_DHT.read_retry(11, 4)
ทดสอบimport time
import Adafruit_DHT
Sensor = Adafruit_DHT.DHT11
GPIO = 4
while True:
humidity, temperature = Adafruit_DHT.read_retry(Sensor,GPIO)
if humidity is not None and temperature is not None:
print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature,humidity))
else:
print('Failed to get reading. Try again!')
วดความเขมแสง
คณสมบต
ไฟเลยง +3 ถง +5 V1-65535 (ลกซ)ทดตอการรบกวนจากแสงอนฟราเรด
เปดใช i2c
เปดใช i2c
เปดใช i2c
เปดใช i2c
ตอวงจร
ทดสอบการเชอมตอ
แสดงคาความเขมแสงimport time
import smbus
bus = smbus.SMBus(1)
addr = 0x23 # i2c adress
while True:
data = bus.read_i2c_block_data(addr,0x11)
lum=(data[1] + (data[0]<<8) / 1.2)
print ("Luminosity " ,lum,"lx")
time.sleep(0.5)
เตอน
PIR
PIR
PIR
วงจร
PIR
เตอนGPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(24,GPIO.OUT)
blink = GPIO.PWM(18,500)
blink.start(0)
GPIO.setup(21,GPIO.IN)
st=0
while (1):
da=datetime.now()
microsec=da.microsecond
if microsec > 700000:
blink.ChangeDutyCycle(st)
else:
blink.ChangeDutyCycle(0)
state=GPIO.input(21)
if (state==1):
st=50
else:
st=0
การตงคาใหชดค าสงเรมท างานอตโนมต
import RPi.GPIO as
GPIO
import time
GPIO.setmode(GPIO.BC
M)
ledPin=16
swPin=22
GPIO.setup(ledPin,GP
IO.OUT)
GPIO.setup(swPin,GPI
O.IN)
1.สรางชดค าสงทตองการจะรนแบบอตโนมต โดยในทนใชชดค าสง LED.py และไดมการเพมการตอสวตชไวท GPIO 22 (ตอแบบ Active low) เมอมการกดสวตชโปรแกรมกจะหยดการท างาน
try:
while
(GPIO.input(swPin)):
GPIO.output(ledPin,
0)
time.sleep(0.5)
#print("Relay=OFF")
3. เปด Terminal แลวท าการแกไขไฟล rc.local โดยพมพชดค าสง sudo nano /etc/rc.local
2.บนทกไฟลชอ LED.py แลวเลอเมน Build > Exrcute บนโปรแกรม Geanyหรอ เปดเทอมนอลแลวสงรนดวยค าสง
sudo python3 LED.py
และใหจ าต าแหนงของไดเรคทอรใด ซงในทนอยท /home/pi/Desktop/LED.py
4. จะพบชดค าสงตางๆ แลวใหพมพชดค าสง sudo python3 /home/pi/Desktop/LED.py &
กอนบรรทด exit0 ดงภาพ จากนนบนทกการแกไขไฟลโดยกด Ctrl+Xและ Y แลวตามดวย Enter
หมายเหต เครองหมาย & ตอทายค าสงเปนการบอกวาค าสงนใหท างานอยเบองหลงและถาหากไมใชงานการท างานชดค าสงแบบอตโนมตใหเขามาเพม # ทหนาชดค าสงทเพมขนน
5. เมอแกไขไฟลเสรจเรยบรอยแลวใหลองรบตใหมดวยค าสง sudo reboot
6.เมอบอรดเรมกลบมาท างานใหมกจะเหนวาหลอด LED จะกระพรบตลอดเวลาโดยทไมตองพมพค าสงใหท างานเลยหลงจากตวบอรดเรมท างาน
หมายเหต ระบบตองตงคาแบบ Console Text console, requiring login (default)ซงยงไมเขาส startx
ทดสอบการท างานชดค าสงเรมท างานอตโนมต
แตถาหากทดลองกดสวตชกจะพบวาโปรแกรมหลกจาก loop while และหยดท างาน (เปนผลมาจากการตงคาเงอนไขอานคาการกดสวตช)
วธการ Kill process ทท างานอย1. Remote เขาไปยงบอรดทท างานอย เปด Terminal ท าการคนหา Process ID ของโปรแกรมทท างานอย โดยใชค าสง
ps ax | grep {ชอไฟล}
2. จะเหนไดวาม Process ของ LED.py อย 3 ตวทท างาน ซงจะเหนเลข Process ID อยดวย
3. ใชค าสง Kill Process แลวใชการระบ Process ID ทตองการจะปด ใหใช Process ID ของตวไหนกไดทมาจากค าสง python3
(จะเปนตวทมค าสง sudo น าหนาหรอไมกได)
sudo kill 2207
4. หลงจากชดค าสงหยดท างานแลว ตรวจสอบProcess ทท างานอกครงกจะพบวาไมม Process ของชดค าสง LED.py หลงเหลออยแลว
WiringPi เขยนภาษา C บน RPiตดตง wiringPi
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build
ทดสอบผาน Terminal (สง LED ตดและดบท ขา 18)gpio -g mode 18 output
gpio -g write 18 1
gpio -g write 18 0
ทดสอบผาน Terminal (ใหขา 22 เปนอนพตพลอพ และอานคา)gpio -g mode 22 up
gpio -g read 22
ถาไมไดตองลง Make กอนsudo apt-get install Make
WiringPi เขยนภาษา C บน RPiก าหนดคาเรมตนwiringPiSetupGpio(); // ก าหนดคาเรมตนให RPi แบบบขา BCM
ก าหนดคาเรมตนpinMode(22,INPUT)
pinMode(23,OUTPUT)
pinMode(18,PWM_OUTPUT)
สงงานเอาตพตdigitalWrite(23, HIGH);
pwmWrite(18, 723);
อานคาอนพตif (digitalRead(22))
printf("Pin 22 is HIGH\n");
else
printf("Pin 22 is LOW\n");
ก าหนดขาพลอพpullUpDnControl(22, PUD_UP);
หนวงเวลาdelay(2000);
ปรบคาการคอมไพลส าหรบ WiringPi
การใช wiringpi2 กบ Python และ Rpi
wiringPi พฒนา Rpi ใหงายเหมอนเขยน Arduinoby Gordon‘Drogon’ Henderson
ตดตงผาน githubgit clone https://github.com/Gadgetoid/WiringPi2-Python.git
cd WiringPi2-Python
sudo python3 setup.py
import wiringpi2 as gpio
เพมไลบราร
gpio.wiringPiSetupGpio()
setmode ก าหนดรปแบบขา
gpio.wiringPiSetup()
gpio.pinMode(pin,1)
ก าหนดขาเปน output
gpio.digitalWrite(pin,1)
output สงคาออกไปทขา
gpio.digitalWrite(pin,0)
ไลบราร wiringPi2
gpio.digitalRead(pin)
input รบคาลอจกจากขา
gpio.pullUpDnControl(pin,2)
pull up
gpio.pinMode(pin,0)
ก าหนดขาเปน inputgpio.pullUpDnControl(pin,1)
pull down
gpio.pullUpDnControl(pin,0)
ไม pull up/down
ใชค าสง pwm ดวย wiringPi2
wiringpi.pinMode(18,2)
ก าหนดขา 18 เปน PWMwiringpi.pwmWrite(18,duty)
ก าหนดคา dutycycle
import wiringpi2 as pi
import time
leds = [18,23,24,25]
sw = [16,20,21]
pi.wiringPiSetupGpio()
pi.pinMode(16,0)
pi.pinMode(18,2)
while True:
for i in range(1025):
pi.pwmWrite(18,i)
time.sleep(0.001)
for i in range(1025,-1,-1):
pi.pwmWrite(18,i)
time.sleep(0.001)
ภาคผนวก
รปแบบการตดตอ LED ACTLinux ใชการตงคา Config ตางๆ ผาน Text ไฟลใน /etc/
การเปลยนสถานะของอปกรณระบบ ท ากบไฟลเสมอน จะถกเกบใน /sys/ และ /proc/
LED ACT บน R-Picat /sys/class/leds/led0/trigger
echo "timer"|sudo tee /sys/class/leds/led0/trigger
ปกตโชวคาการอานเขยน SD-CARD
ยายมาโชวคา Timer แทน
LED ACT กะพรบ
LED ACT บน R-Pi
สง LED ไมใหถกควบคมจากใคร
echo "none"|sudo tee /sys/class/leds/led0/trigger
echo "1" |sudo tee /sys/class/leds/led0/brightness
สง LED ตด
echo "0" |sudo tee /sys/class/leds/led0/brightness
สง LED ดบ
คนคาเดม (แสดงสถานะ อานเขยน SDCARD
echo "mmc0"|sudo tee /sys/class/leds/led0/trigger
กฤษดา ใจเยน KRITSADA JAIYENบรษท อนโนเวตฟ เอกเพอรเมนต จ ากด108 ซอยสขมวท 101/2 ถ.สขมวทแขวงบางนา เขตบางนา กรงเทพฯ 10260โทรศพท 02-7477001-4 โทรสาร 02-7477005
Email : kritsada@inex.co.th
www.inex.co.th
top related