วันศุกร์ที่ 30 ธันวาคม พ.ศ. 2554

การเขียนไพธอนบนแอนดรอย ตอน การเล่นเพลงMp3

สวัสดีครับ วันนี้เราทำการเขียนโปรแกรมเพื่อเล่นเพลง mp3 บนแอนดรอยโดยใช้ภาษาไพธอน มีใจความสำคัญดังนี้


import android
import time
droid = android.Android()
droid.mediaPlay("/mnt/sdcard/nteacher.mp3")
time.sleep(3600)

คำอธิบาย

1. บรรทัด import android ประกาศขอใช้งานไลบรารี่ android
2. บรรทัด import time ประกาศขอใช้โมดูล time
3. บรรทัด droid = android.Android() ประกาศ droid เป็นอ็อบเจ็คที่เกิดจากคลาส Android()
4. บรรทัด droid.mediaPlay("/mnt/sdcard/nteacher.mp3") เล่นเพลง mp3 ที่ชื่อ /nteacher.mp3
5. บรรทัด time.sleep(3600) หน่วงเวลา 6 นาที เพื่อรอให้เพลงเล่นจนจบ แต่ยังมีวิธีการที่ช่วยให้ทำงานอยู่เบื้องหลังได้ แต่ขอกล่าวถึงหลักการและคำสั่งที่เกี่ยวข้องเพื่อทำให้เข้าใจได้โดยเร็วเท่านั้น

ท่านจะเห็นว่าไพธอนเป็นภาษาที่เคลียส์ ไม่แปลกใจทำไม google ใช้ภาษาไพธอน ในการพัฒนาระบบ สำหรับวันนี้ พบกันแค่นี้ครับ สวัสดี

เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอนบนแอนดรอย

สวัสดีครับ สุดยอดของความรู้ด้านเน็ตเวร์คสำหรับโปรแกรมเมอร์คือ การเข้าใจหลักการของแม่ข่าย และวิธีการในการรับส่งข้อมูลได้ วันนี้ผมจะเอาหัวใจของการรับและส่งข้อมูลระหว่างแม่ข่ายและลูกข่ายมาเล่าให้ฟัง มีใจความดังนี้

พิจารณาโค๊ดแม่ข่ายต่อไปนี้

import socket
PORT = 8037

service = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
service.bind(("", PORT))
service.listen(1)

print "listening on port", PORT

while 1:
channel, info = service.accept()
print "connection from", info
channel.send("Hello")
channel.close()


พิจารณาโค๊ดจากลูกข่ายต่อไปนี้

import socket

# ระบุหมายเลข IP และหมายเลขพอร์ตของเครื่อง Server
Host = "127.0.0.1"
Port = 8037

# สร้างการเชื่้อมต่อไปยังเครื่อง Server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((Host, Port))

# อ่านข้อมูลจากเครื่อง Server จำนวน 5 ตัวอักษร(ไบต์)
t = s.recv(5)
s.close()

# แสดงข้อมูลที่รับมาจากเครื่อง Server ให้ปรากฎที่จอภาพ
print "Received : ",t , " Len : ", len(t)

คำอธิบาย

การทำงานพอเป็นสังเขป :
1. ให้เครื่อง Server รันสคริปต์ทิ้งเอาไว้ในตัวอย่างนี้จะให้เครื่องแอนดรอยทำงานเป็นแม่ข่าย (server)
2. เมื่อไรที่ Client เข้ามาที่เครื่องของเซอร์เวอร์ให้ทำงานตามเงื่อนไข
3. รันโปรแกรมเครื่องแม่ข่ายเอาไว้
4. เครื่อง Client รันโปรแกรมฝั่งลูกข่ายจะได้ผลลัพธ์คือ Received : Hello Len : 5

อธิบายโค๊ดฝั่งแม่ข่าย

1. บรรทัด import socket ขอใช้โมดูล socket
2. บรรทัด PORT = 8037 กำหนดหมายเลขพอร์ทในการสื่อสารระหว่างลูกข่ายและแม่ข่าย
3. service = socket.socket(socket.AF_INET, socket.SOCK_STREAM) อาร์กิวเมนต์ของการสร้างคลาส socket คือ socket.AF_INET และ socket.SOCK_STREAM เป็นการกำหนดข้อตกลงในการเชื่อมต่อแบบสตรีม

4. บรรทัด service.bind(("", PORT)) การผูกหมายเลขพอร์ท

5. บรรทัด service.listen(1) ให้แม่ข่ายคอยฟังว่ามีใครสื่อสารเข้ามามั้ย

6. บรรทัด print "listening on port", PORT แสดงข้อความและหมายเลขพอร์ท

7. บรรทัด while 1:  ทำการวนรอบไม่สิ้นสุด
       channel, info = service.accept()  หากมีการติดต่อเข้ามาให้รับการติดต่อจากลูกข่าย ขณะที่กำลังรอการติดต่อระหว่างเครื่องลูกข่าย อ็อบเจ็ค service จะเรียกฟังก์ชั่น accept() ซึ่งจะคืนค่าเป็นลีสต์ 2 อัน อันแรกคือ ช่องทางการเชื่อมต่อ ผู้เขียนให้เก็บไว้ในตัวแปร channel ในขณะที่ลีสต์อีกตัวหนึ่งสำหรับข้อมูลจากเครื่องลูกข่าย ผู้เขียนกำหนดไว้ในตัวแปร info เมื่อมีการร้องขอจากลูกข่ายจะแสดงคำว่า "connection from" , info ซึ่งตัวแปร info จะเก็บหมายเลข IP และพอร์ทที่ใช้เชื่อมต่อจากลูกข่าย

       print "connection from", info  จากนั้นแสดงข้อความบนแม่ข่ายว่ามีการติดต่อสื่อสารเข้ามา
       channel.send("Hello")  ส่งข้อมูลไปหาลูกข่าย ออกไปยังช่องทางที่ได้รับการเชื่่อมต่อจากแม่ข่ายและลูกข่าย
       channel.close()  เมื่อส่งข้อความเสร็จเรียบร้อย ให้ปิดช่องทางการสื่อสาร




พิจารณาที่ฝั่งลูกข่าย เมื่อเรียกคำสั่ง python client.py ไพธอนจะแปลความดังรายละเอียดต่อไปนี้
ตัวแปร Host ใช้เก็บหมายเลข IP Address ของเครื่องแม่ข่าย (ค่า default คือ 127.0.0.1 สำหรับเครื่องที่จำลองการเชื่อมต่อเน็ตเวอร์ค)

ตัวแปร Port กำหนดให้ตรงกันกับพอร์ทที่แม่ข่ายกำหนดไว้ จากนั้น สร้างอินสแตนท์ของคลาส socket.socket() โดยผู้เขียนให้ชื่ออ็อบเจ็ค s การสร้างอินสแตนท์ทำเหมือนสคริปต์ฝั่งแม่ข่าย

จากนั้นเรียกใช้คำสั่ง connect() ภายในอ็อบเจ็ค s โดยระบุอาร์กิวเมนต์แรกคือหมายเลข IP Address ของเครื่องแม่ข่าย และอาร์กิวเมนต์ที่สองคือหมายเลขพอร์ทที่ใช้เชื่อมต่อกับแม่ข่าย

ลำดับถัดมาทำการอ่านข้อมูลออกมาจากเครื่องแม่ข่ายเป็นจำนวน 5 ไบต์ ด้วยคำสั่ง recv() และเก็บไว้ภายในตัวแปร t จากนั้นปิดคอนเน็คชั่นด้วยคำสั่ง close()

ผลลัพธ์ที่เก็บไว้ในตัวแปร t สามารถนำไปใช้งานต่อไปได้ ในตัวอย่างนี้แสดงให้ปรากฎบนจอภาพคอมพิวเตอร์ และแสดงจำนวนความยาวของตัวแปร t ซึ่งมีค่า 5 ไบต์

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

การเขียนไพธอนบนแอนดรอย ตอน การบันทึกวิดีโอเก็บเป็น MP4

สวัสดีครับ วันนี้นำท่านบันทึกวิดีโอและจัดเก็บเป็นไฟล์ mp4 ด้วยภาษาไพธอนทำงานบนแอนดรอย ใจความสำคัญดังนี้

พิจารณาโค๊ดต่อไปนี้
import android
from time import sleep
import android
droid = android.Android()
droid.recorderCaptureVideo("/mnt/sdcard/video1.mp4")
sleep(10)

คำอธิบาย

1. คำสั่ง import android ประกาศขอใช้ไลบรารี่ android
2. คำสั่ง from time import sleep ขอใช้คำสั่ง sleep ในโมดูล time
3. คำสั่ง droid = android.Android() ประกาศอ็อบเจ็ค droid ชนิด Android()
4. คำสั่ง droid.recorderCaptureVideo("/mnt/sdcard/video1.mp4") บันทึกวิดีโอและเก็บไว้ในไฟล์ video1.mp4 ในขณะที่กำลังรันโปรแกรมท่านต้องหันกล้องไปยังตำแหน่งที่ต้องการบันทึก
5. คำสั่ง sleep(10) กำหนดให้บันทึก 10 วินาทีจากนั้นเก็บวิดีโอไฟล์ลงพื้นที่เก็บข้อมูล

เป็นอย่างไรบ้างครับ เล่นกับไพธอนสำหรับแอนดรอยแล้วรู้สึกสนุกบ้างมั้ยครับ ? หวังว่าจะเป็นประโยชน์กับท่านผู้อ่านไม่มากก็น้อยครับ พบกันโอกาสหน้าสวัสดีครับ

แหล่งอ้างอิง

http://code.google.com/android/
http://www.google.com/mobile/android/

การเขียนไพธอนบนแอนดรอย ตอน การบันทึกเสียงเก็บเป็นไฟล์ WAV

สวัสดีครับ จะดีมั้ยหากท่านสามารถเขียนโปรแกรมบันทึกเสียงสนทนา หรือเสียงรอบข้างจากนั้นบันทึกลงไฟล์ WAV ใน SDcard สำหรับวันนี้ท่านจะเห็นพลังของไพธอนบนแอนดรอยครับ

พิจารณาโค๊ดต่อไปนี้
import android
from time import sleep
droid = android.Android()
droid.recorderStartMicrophone("/mnt/sdcard/record1.wav")
sleep(5)
droid.recorderStop()

อธิบายโค๊ด

1. คำสั่ง import android ประกาศขอใช้ไลบรารี่ android
2.  คำสั่ง from time import sleep ขอใช้คำสั่ง sleep ในโมดูล time
3.  คำสั่ง droid = android.Android() ประกาศตัวแปร droid เป็นอ็อบเจ็คของคลาส Android()
4.  คำสั่ง droid.recorderStartMicrophone("/mnt/sdcard/record1.wav") เริ่มต้นบันทึกเีสียง
5.  คำสั่ง sleep(5) รอเวลา 5 วินาที
6.  คำสั่ง droid.recorderStop() หยุดการบันทึกเสียงและบันทึกลงไฟล์ /mnt/sdcard/record1.wav

หวังว่าเนื้อหาจะเห็นประโยชน์และทำให้ท่านสนใจไพธอนสำหรับแอนดรอยขึ้นมาได้ครับ สวัสดี


แหล่งอ้างอิง

http://code.google.com/android/
http://www.google.com/mobile/android/

การเขียนไพธอนบนแอนดรอย ตอน การส่ง SMS

สวัสดีครับ การส่ง SMS (Short Message) หากท่านเขียนส่งด้วยระดับไมโครคอนโทรลเลอร์ต้องศึกษาการใช้คำสั่ง AT-Command แต่สำหรับวันนี้ นำท่านส่ง SMS ง่าย ผ่านระบบแอนดรอย ควบคุมด้วยภาษาไพธอน มีใจความสำคัญดังนี้

import android
droid = android.Android()
droid.smsSend("0836041155","สวัสดีชาวโลก")


อธิบายคำสั่ง
1. คำสั่ง import android ประกาศขอใช้ัไลบรารี่ android

2. คำสั่ง droid = android.Android() สร้างอ็อบเจ็คหรือินสแตนท์จากคลาส Android()

3. คำสั่ง droid.smsSend("0836041155","สวัสดีชาวโลก") ส่งข้อความไปยังหมายเลขปลายทาง

คำสั่ง smsSend(เบอร์โทร, ข้ัอความ) ท่านสามารถส่งข้อความไปหาเพื่อนในรายการ หากต้องการส่งข้อความไปยังรายการ 1000 รายการด้วยข้อความที่ต่างกันหรือที่จัดเตรียมเอาไว้แล้ว ท่านสามารถเขียนโปรแกรมส่งได้ครับ หวังว่าเนื้อหาจะเป็นประโยชน์ต่อท่านทั้งหลาย พบกันโอกาสต่อไปครับ สวัสดี


อ้างอิง
http://code.google.com/android/

การเขียนไพธอนบนแอนดรอย ตอน การอ่านรหัส 2d barcode

สวัสดีครับ บาร์โค๊ด 2 มิติ (QR code) อนุญาตให้ท่านสามารถเก็บข้อความไว้ได้ มีข้อดีคือ เมื่อถอดรหัสออกมาจะได้ข้อความ และจำนวนอักขระเก็บได้มากกว่าบาร์โค๊ด 1 มิติที่ใช้กันทั่วไป อย่างที่เคยกล่าวไว้ โลกเปลี่ยนแปลงเร็วมาก เครืองอ่าน 2d barcode ขายเครื่องละ 2-3 หมื่นบาท ใช้วินโดวส์ซีอี ต่อไปท่านเหล่านั้นคงต้องลดราคาลงไป เพราะ android อ่านออกมาได้และเขียนโปรแกรมควบคุมได้ ทำงานได้เร็ว อีกทั้งยังอ่านบาร์โค๊ด 1 มิติได้อีกด้วย ที่สำคัญ ฟรี

เครื่องมือ
Android SDK
2d Barcode Library
Python for Android และ SL4A

พิจารณาคำสั่งต่อไปนี้
import android
droid = android.Android()
code = droid.scanBarcode()
data= code.result.get('extras').get('SCAN_RESULT')
values = {'item': data }
print values['item'].encode('utf-8')

คำอธิบาย

1. คำสั่ง code = droid.scanBarcode() เป็นการสร้างอ็อบเจ็ค code จากคลาส scanBarcode() ภายในอ็อบเจ็ค droid

2. คำสั่ง data = code.result.get('extras').get('SCAN_RESULT') เป็นการอ่านรหัสบาร์โค๊ดสองมิติ ในขั้นตอนนี้เครื่องแอนดรอยจะเปิดกล้อง ท่านต้องเลื่อนกล้องไปบริเวณภาพบาร์โค๊ดสองมิติ

3. คำสั่ง values = {'item':data} สำหรับอ่านค่าข้อมูลออกมาจากตัวแปร data

4. คำสั่ง print values['item'].encode('utf-8') แสดงข้อมูลภายในรหัสบาร์โค๊ดสองมิติ

หากท่านนำความรู้ที่ได้ไปทำเครื่องเช็คสต็อคสินค้า ก็ทำได้ครับ เพราะระบบเปิดครับ พวกเราจึงสามารถใช้ประสิทธิภาพของซีพียูได้เต็มที่ สำหรับวันนี้หวังว่าท่านจะสนุกกับการพัฒนาแอพลิเคชั่นบนแอนดรอยด้วยภาษาไพธอน พบกันใหม่โอกาสหน้า ครับ

แหล่งอ้างอิง
http://code.google.com/p/zxing/

การเขียนไพธอนบนแอนดรอย ตอน สั่งถ่ายภาพและบันทึกลง sdcard

สวัสดีครับ รู้สึกดีใจครับ ที่ได้มาเรียนรู้การใช้งานระบบเปิดที่เก่งและดี เป็นของฟรี เพราะผมคิดว่า กลุ่มโอเพ่นซอร์สครับที่มีส่วนผลักดันเทคโนโลยี สำหรับวันนี้ นำท่านถ่ายภาพและบันทึกลง sdcard มีใจความดัีงนี้

เครื่องมือ
Android SDK
Python for android
SL4A

โค๊ดโปรแกรมแสดงได้ดังนี้

import android
droid = android.Android()
droid.cameraCapturePicture('/sdcard/mypicture.jpg')

คำสั่ง cameraCapturePicture() เป็นการสั่งให้ถ่ายภาพส่วนพารามิเตอร์ที่ส่งเข้าไปให้ฟังก์ชั่นนี้ คือ ชื่อไฟล์ ผมตั้งชื่อว่า mypicture.jpg และบันทึกไว้ใน sdcard ครับ ขอให้เช็คด้วยครับเพราะบางระบบใช้ /mnt/sdcard

หวังว่าท่านจะสนุกกับการพัฒนาแอพลิเคชั่นบนแอนดรอยด้วยภาษาไพธอนครับ สวัสดี