ถ้าเราต้องการจะ print ข้อมูลที่รับมาเป็น int โดยให้แสดงผลในรูปของตัวอักษร (string)
ให้ใช้ chr(x) นะครัช
(งงอยู่เป็นชั่วโมง เฮ้ออออ)
def WaitResponseVR(DataNum):
rcv = port1.read(DataNum)
if rcv != '':
return ord(rcv) ============== แปลง character ตัวเดี่ยวๆ เป็นค่า integer.
else:
return ''"
for y in range (0,72):
ans = WaitResponse(1)
if ans == "":
print "No response"
else:
Data += chr(ans) ================== แปลงจาก int เป็น string
print Data
blog นี้จะกล่าวถึง Raspberry Pi Raspbian เป็นหลัก โดยจะอธิบายทั้งการใช้ windows และ Linux ในการเชื่อมต่อ วิธีอ่าน : ให้เริ่มอ่านตั้งแต่หัวข้อแรกๆขึ้นมา(ให้ดูที่ "คลังบทความ" ทางด้านขวามือ จะมี วัน-เวลา ไล่เรียงอยู่) ไม่งั้นอาจจะงงได้ สำหรับมือใหม่ หรือท่านใดที่ไม่เข้าใจ สามารถ mail มาถามกันได้ครับ ที่ kongimi1980@gmail.com หรือที่ line : 0814282425
วันจันทร์ที่ 29 กันยายน พ.ศ. 2557
การต่อพ่วงอุปกรณ์หลายๆตัวบน Rpi
บางครั้งเราอาจจำเป็นต้องต่ออุปกรณ์หลายๆอย่างเข้ากับ Rpi ซึ่งอาจจะเป็นสาเหตุทำให้อุปกรณ์ของเราทำงานไม่สมบูรณ์ หรือ ไม่ทำงานเลย เนื่องจากกำลังไฟของ Rpi มีค่อนข้างจำกัด
วันนี้ผู้เขียนได้ต่อ usb to serial จำนวน 2 ตัวเข้ากับ Rpi
ตอนแรกก็ลองเขียน code ดู คิดว่าใช้ไฟแค่นี้ไม่น่าจะเป็นปัญหา แต่ทดลองไปทดลองมา ทำยังไง้ ก็ไม่มีอะไรส่งออกมาจาก serial เลย
เลยเอะใจ ไหนลองต่อ usb hub แล้วทดสอบดูใหม่ซิ
ออกเฉย!!!
work ซะงั้น
import serial
import time
port = serial.Serial("/dev/ttyUSB0", baudrate=19200, timeout=1.0)
port = serial.Serial("/dev/ttyUSB1", baudrate=19200, timeout=1.0)
while 1:
port.write(chr(0x01))
time.sleep(1)
เวลาท่านใดทำโปรเจคด้วย Rpi แล้วมีอุปกรณ์ต่อพ่วงเยอะหน่อย แต่ทำแล้วไม่ work ก็ลองใช้ usb hub ดูนะครับ :)
วันนี้ผู้เขียนได้ต่อ usb to serial จำนวน 2 ตัวเข้ากับ Rpi
ตอนแรกก็ลองเขียน code ดู คิดว่าใช้ไฟแค่นี้ไม่น่าจะเป็นปัญหา แต่ทดลองไปทดลองมา ทำยังไง้ ก็ไม่มีอะไรส่งออกมาจาก serial เลย
เลยเอะใจ ไหนลองต่อ usb hub แล้วทดสอบดูใหม่ซิ
ออกเฉย!!!
work ซะงั้น
import serial
import time
port = serial.Serial("/dev/ttyUSB0", baudrate=19200, timeout=1.0)
port = serial.Serial("/dev/ttyUSB1", baudrate=19200, timeout=1.0)
while 1:
port.write(chr(0x01))
time.sleep(1)
เวลาท่านใดทำโปรเจคด้วย Rpi แล้วมีอุปกรณ์ต่อพ่วงเยอะหน่อย แต่ทำแล้วไม่ work ก็ลองใช้ usb hub ดูนะครับ :)
วันอังคารที่ 23 กันยายน พ.ศ. 2557
python serial read
วันนี้ได้เขียนหลายเรื่องเลย งานเร่งด่วนมาก
ตอนนี้จะเกี่ยวกับการอ่านค่า ที่ได้รับจาก serial port
ตัวอย่าง code
#! /usr/bin/python
import time
import serial
port = serial.Serial("/dev/ttyUSB0", baudrate=19200, timeout=1.0)
i = 1
while 1:
port.write(chr(i))
rcv = port.read(1) ================== (1)
if rcv != '':================== (2)
ans = ord(rcv) ================== (3)
if ans == 0x61:
print "Status Ready"
else:
print rcv
else: ================== (4)
print "Loss communication"
(1) คืออ่านค่าจาก serial port ใส่ในตัวแปร rcv
(2) ตรวจสอบว่าค่า rcv ที่อ่านมา มีค่าอะไรอยู่หรือไม่ ถ้ามีก็ทำต่อไป ถ้าไม่มีก็กระโดดไปที่ (4)
(3) เปลี่ยนตัวแปร rcv ที่เป็น string ให้เป็น int เพื่อที่เราจะสามารถเปรียบเทียบค่ากับ hex ที่เราต้องการได้
ที่มา http://stackoverflow.com/questions/12929593/how-to-test-for-hexidecimal-output-on-serial-port-in-python
ตอนนี้จะเกี่ยวกับการอ่านค่า ที่ได้รับจาก serial port
ตัวอย่าง code
#! /usr/bin/python
import time
import serial
port = serial.Serial("/dev/ttyUSB0", baudrate=19200, timeout=1.0)
i = 1
while 1:
port.write(chr(i))
rcv = port.read(1) ================== (1)
if rcv != '':================== (2)
ans = ord(rcv) ================== (3)
if ans == 0x61:
print "Status Ready"
else:
print rcv
else: ================== (4)
print "Loss communication"
(1) คืออ่านค่าจาก serial port ใส่ในตัวแปร rcv
(2) ตรวจสอบว่าค่า rcv ที่อ่านมา มีค่าอะไรอยู่หรือไม่ ถ้ามีก็ทำต่อไป ถ้าไม่มีก็กระโดดไปที่ (4)
(3) เปลี่ยนตัวแปร rcv ที่เป็น string ให้เป็น int เพื่อที่เราจะสามารถเปรียบเทียบค่ากับ hex ที่เราต้องการได้
ที่มา http://stackoverflow.com/questions/12929593/how-to-test-for-hexidecimal-output-on-serial-port-in-python
python port.write
ในการเขียน python ให้ส่งออกข้อมูลผ่าน serial port มีอยู่ 2-3 แบบ ที่ผู้เขียนเจอมา
โดยมีตัวอย่าง code ดังต่อไปนี้
import serial
import time
port = serial.Serial("/dev/ttyUSB0", baudrate=19200, timeout=1.0)
while 1:
port.write(chr(0x01))
time.sleep(1)
โดยที่เห็นใน code ด้านบน จะส่งออกมาเป็น 0x01 ฐาน16 จริงๆ
แต่ถ้าเราเปลี่ยน code เป็น port.write("1") เราจะเห็นข้อมูลต่างออกไป คือ 0x31
แต่ถ้าเราเปลี่ยน code เป็น port.write("0x01")
สิ่งที่ RPi ส่งออกมาจะเป็น 0x30 0x78 0x30 0x31 ซึ่งถ้าเปลี่ยนเป็น ascii เราจะเห็นเป็น 0x01
สรุป
การส่งข้อมูล serial
port.write(chr(0x01))
port.write("1")
port.write("0x01")
ให้ผลที่ต่างกัน เราสามารถเลือกใช้ให้เหมาะสมกับงานของเราได้ครัช
โดยมีตัวอย่าง code ดังต่อไปนี้
import serial
import time
port = serial.Serial("/dev/ttyUSB0", baudrate=19200, timeout=1.0)
while 1:
port.write(chr(0x01))
time.sleep(1)
โดยที่เห็นใน code ด้านบน จะส่งออกมาเป็น 0x01 ฐาน16 จริงๆ
แต่ถ้าเราเปลี่ยน code เป็น port.write("1") เราจะเห็นข้อมูลต่างออกไป คือ 0x31
แต่ถ้าเราเปลี่ยน code เป็น port.write("0x01")
สิ่งที่ RPi ส่งออกมาจะเป็น 0x30 0x78 0x30 0x31 ซึ่งถ้าเปลี่ยนเป็น ascii เราจะเห็นเป็น 0x01
สรุป
การส่งข้อมูล serial
port.write(chr(0x01))
port.write("1")
port.write("0x01")
ให้ผลที่ต่างกัน เราสามารถเลือกใช้ให้เหมาะสมกับงานของเราได้ครัช
python serial
สวัสดีครับพี่น้อง
วันนี้ได้ทำโปรเจคเกี่ยวกับ serial port ก็เลยต้องขอบันทึกไว้ก่อน กันลืม
เริ่มด้วย ที่บอร์ด RPi ให้พิมพ์
sudo apt-get install python-serial
ผู้เขียนได้ซื้อ USB to Serial มา และได้เสียบเข้ากับ RPi
ในตอนแรก RPi มองไม่เห็น USB to Serial ก็ได้ถอดแล้วเสียบใหม่ และถอดสาย power ออก แล้วเสียบสาย power ใหม่, RPi เลยมองเห็นเป็น ttyUSB0 โดยเราสามารถดูได้โดยใช้คำสั่ง ls /dev/
ต่อไปเราจะเริ่มเขียน code กัน
ให้สร้าง file ขึ้มาใหม่ด้วยคำสั่ง nano SerialExample.py
เขียน code ดังต่อไปนี้
import serial
port = serial.Serial("/dev/ttyUSB0", baudrate=115200, timeout=3.0)
while True:
port.write("\r\nSay something:")
rcv = port.read(10)
port.write("\r\nYou sent:" + repr(rcv))
กด control+x กด Y กด Enter เพื่อ save และออกจากโปรแกรม
จากนั้นให้เราต่อสาย USB to Serial เข้ากับ computer ของเรา ดังรูป
ที่ computer ของเรา ให้เปิดโปรแกรมที่สามารถรับข้อมูลจาก comport รอไว้ โดยตั้งค่าให้ baudrate ตรงกันกับที่เราเขียนโปรแกรม python ไว้ คือ 115200
จากนั้นที่บอร์ด RPi ให้พิมพ์ sudo python SerialExample.py เพื่อ run program
เราจะเห็นได้ว่าที่ computer ของเรา โปรแกรมที่เปิดรอไว้ จะมีอักษรขึ้นมา ดังรูป
แล้วเราก็ลองกดส่งข้อมูลดู ให้ครบ 10 ตัว โปรแกรม python ที่เราเขียนไว้ ก็จะส่งข้อมูลเดิมกลับออกมาให้เราเห็น
เป็นอันว่าเราสำเร็จในการรับ-ส่งข้อมูลผ่าน USB to Serial แล้ว
จบ... :)
วันนี้ได้ทำโปรเจคเกี่ยวกับ serial port ก็เลยต้องขอบันทึกไว้ก่อน กันลืม
เริ่มด้วย ที่บอร์ด RPi ให้พิมพ์
sudo apt-get install python-serial
ผู้เขียนได้ซื้อ USB to Serial มา และได้เสียบเข้ากับ RPi
ในตอนแรก RPi มองไม่เห็น USB to Serial ก็ได้ถอดแล้วเสียบใหม่ และถอดสาย power ออก แล้วเสียบสาย power ใหม่, RPi เลยมองเห็นเป็น ttyUSB0 โดยเราสามารถดูได้โดยใช้คำสั่ง ls /dev/
ต่อไปเราจะเริ่มเขียน code กัน
ให้สร้าง file ขึ้มาใหม่ด้วยคำสั่ง nano SerialExample.py
เขียน code ดังต่อไปนี้
import serial
port = serial.Serial("/dev/ttyUSB0", baudrate=115200, timeout=3.0)
while True:
port.write("\r\nSay something:")
rcv = port.read(10)
port.write("\r\nYou sent:" + repr(rcv))
กด control+x กด Y กด Enter เพื่อ save และออกจากโปรแกรม
จากนั้นให้เราต่อสาย USB to Serial เข้ากับ computer ของเรา ดังรูป
ที่ computer ของเรา ให้เปิดโปรแกรมที่สามารถรับข้อมูลจาก comport รอไว้ โดยตั้งค่าให้ baudrate ตรงกันกับที่เราเขียนโปรแกรม python ไว้ คือ 115200
จากนั้นที่บอร์ด RPi ให้พิมพ์ sudo python SerialExample.py เพื่อ run program
เราจะเห็นได้ว่าที่ computer ของเรา โปรแกรมที่เปิดรอไว้ จะมีอักษรขึ้นมา ดังรูป
แล้วเราก็ลองกดส่งข้อมูลดู ให้ครบ 10 ตัว โปรแกรม python ที่เราเขียนไว้ ก็จะส่งข้อมูลเดิมกลับออกมาให้เราเห็น
เป็นอันว่าเราสำเร็จในการรับ-ส่งข้อมูลผ่าน USB to Serial แล้ว
จบ... :)
bitvise ssh client โปรแกรมสำหรับ ssh และ sftp
สวัสดีครับพี่น้อง
วันนี้ได้มีโอกาสลง putty ใหม่ ก็กำลังจะโหลด putty แต่พอดีเห็นว่ามีโปรแกรมอื่นให้โหลดด้วย เห็นว่าเป็น gui และก็น่าจะลองของใหม่ดู เลยลองโหลดมาใช้งานดู
เริ่มต้นด้วยไปที่ www.putty.org
ให้คลิกที่ download tunelier here จะเจอหน้าถัดไป
ให้คลิกที่ bitvise ssh client installer เพื่อ download
เมื่อโหลดมาเสร็จแล้วก็ทำการ install ต่อไป
พอลงเสร็จแล้ว เปิดโปรแกรมขึ้นมาจะเห็นหน้าตาแบบนี้
ให้เราใส่ ip ของ rpi ลงไป รวมถึง username และ password แล้วกด login
จะมีหน้าจอเด้งขึ้นมา 2 หน้าจอ โดยหน้าจอนึงเป็น ssh และอีกหน้าจอนึงเป็น sftp
ซึ่งดูแล้วก็น่าใช้ดี สะดวกดีด้วย link ทีเดียวได้ทั้ง ssh และ sftp
เราก็จะได้ประหยัดเวลาขึ้นอีกหน่อย :)
วันนี้ได้มีโอกาสลง putty ใหม่ ก็กำลังจะโหลด putty แต่พอดีเห็นว่ามีโปรแกรมอื่นให้โหลดด้วย เห็นว่าเป็น gui และก็น่าจะลองของใหม่ดู เลยลองโหลดมาใช้งานดู
เริ่มต้นด้วยไปที่ www.putty.org
ให้คลิกที่ download tunelier here จะเจอหน้าถัดไป
ให้คลิกที่ bitvise ssh client installer เพื่อ download
เมื่อโหลดมาเสร็จแล้วก็ทำการ install ต่อไป
พอลงเสร็จแล้ว เปิดโปรแกรมขึ้นมาจะเห็นหน้าตาแบบนี้
ให้เราใส่ ip ของ rpi ลงไป รวมถึง username และ password แล้วกด login
จะมีหน้าจอเด้งขึ้นมา 2 หน้าจอ โดยหน้าจอนึงเป็น ssh และอีกหน้าจอนึงเป็น sftp
ซึ่งดูแล้วก็น่าใช้ดี สะดวกดีด้วย link ทีเดียวได้ทั้ง ssh และ sftp
เราก็จะได้ประหยัดเวลาขึ้นอีกหน่อย :)
วันอังคารที่ 2 กันยายน พ.ศ. 2557
install RFID card reader R502-CL
ต่อไปนี้จะเป็นการติดตั้ง RF-ID smart card reader รุ่น R502-CL ของ Feitian
1. sudo apt-get update
2. Open a root terminal window; you need to have administrator rights.
Get and install the libusb library with the apt-get command: apt-get install libusb-dev libusb++-0.1-4c2 Check the installation: You shall find the library libusb.so under the directory /usr/lib/
3. Download and install the libccid package: apt-get install libccid
4. Download and install the pcsc-lite package: apt-get install pcscd
5. Check that the pcscd service is running:
In the terminal console, run the command ps –A.
You should find a "pcscd" process running in the list displayed
Run pcscd in terminal
6.Download and install libpcsclite1: apt-get install libpcsclite1
7. Download and install libpcsclite-dev: apt-get install libpcsclite-dev
8. Check whether the R502 reader is detected: your_system_name:/tmp# lsusb
Bus 001 Device 002: ID 096e:0608
9. Use root to run “install script”: $ wget http://download.ftsafe.com/files/reader/product/R502/install.sh $ sh install.sh or $ bash install.sh
10. After run “install script”, then insert reader and start “pcscd” service.
Run “pcsctest” command to do test
Like below: pcscd –adf //run pcscd service, for parameter, you can using “man pcscd” to get more helps pcsctest
จากนั้นให้เสียบ RFIDReader R502-CL เข้ากับ RPi แล้วพิมพ์ pcscd -adf เพื่อทดสอบดูว่าอุปกรณ์เราใช้ได้หรือไม่
จากนั้นให้นำบัตร RFID มาใกล้ๆกับตัวอ่าน จะเห็นภาพดังรูป
1. sudo apt-get update
2. Open a root terminal window; you need to have administrator rights.
Get and install the libusb library with the apt-get command: apt-get install libusb-dev libusb++-0.1-4c2 Check the installation: You shall find the library libusb.so under the directory /usr/lib/
3. Download and install the libccid package: apt-get install libccid
4. Download and install the pcsc-lite package: apt-get install pcscd
5. Check that the pcscd service is running:
In the terminal console, run the command ps –A.
You should find a "pcscd" process running in the list displayed
Run pcscd in terminal
6.Download and install libpcsclite1: apt-get install libpcsclite1
7. Download and install libpcsclite-dev: apt-get install libpcsclite-dev
8. Check whether the R502 reader is detected: your_system_name:/tmp# lsusb
Bus 001 Device 002: ID 096e:0608
9. Use root to run “install script”: $ wget http://download.ftsafe.com/files/reader/product/R502/install.sh $ sh install.sh or $ bash install.sh
10. After run “install script”, then insert reader and start “pcscd” service.
Run “pcsctest” command to do test
Like below: pcscd –adf //run pcscd service, for parameter, you can using “man pcscd” to get more helps pcsctest
จากนั้นให้เสียบ RFIDReader R502-CL เข้ากับ RPi แล้วพิมพ์ pcscd -adf เพื่อทดสอบดูว่าอุปกรณ์เราใช้ได้หรือไม่
จากนั้นให้นำบัตร RFID มาใกล้ๆกับตัวอ่าน จะเห็นภาพดังรูป
สมัครสมาชิก:
บทความ (Atom)