วันอังคารที่ 4 พฤศจิกายน พ.ศ. 2557

format sd-card

สวัสดีครัช พี่น้อง
หายกันไปนานเบย(อีกแล้ว) คราวนี้มาบอกเกร็ดเล็กเกร็ดน้อยครับ

เมื่อเรานำ sd-card ไปลง image rasbian แล้ว เมื่อเราถอด sd-card ไปเสียบที่เครื่อง pc เราจะเห็นพื้นที่เหลืออยู่นิดเดียว ซึ่งถ้าเราต้องการ format ทั้งหมดเพื่อนำไปใช้อย่างอื่นต่อ จะมีวิธีการดังต่อไปนี้ครับ

1. download โปรแกรม SD Formatter ก่อน ถ้าเราใช้เครื่อง pc windows ก็เลือกของ windows ถ้าเราใช้เครื่อง pc mac ก็เลือกของ mac


รูปที่ 1 download โปรแกรม SD Formatter

2. install SD Formatter
3. เปิดโปรแกรม SD Formatter แล้วเลือก drive ที่เสียบ SD Card ไว้


รูปที่ 2 โปรแกรม SD Formatter

4. เลือก option
5. เลือก format size adjustment เป็น on แล้วกด ok


รูปที่ 3 size adjustment


6. คลิก format และ ok


รูปที่ 4 หลังจาก Format เรียบร้อยแล้ว

size ของ sd card ก็จะกลับมาใหญ่เหมือนเดิม

วันจันทร์ที่ 13 ตุลาคม พ.ศ. 2557

การตั้งวันที่ เวลา ให้ raspberry pi

การตั้งวันที่

sudo date mmddHHMMCCYY

mm = เดือน
dd = วันที่
HH = ชั่วโมง
MM = นาที
CCYY = ปี เช่น 2014

ยกตัวอย่างเช่น เดือน 10 วันที่ 13 15.50 น. ปี 2014
sudo date 101315502014

แล้วลองใช้คำสั่ง date ดูครับ เวลาควรจะเปลี่ยนตามที่เราได้ตั้งไว้

ที่มา
http://spalinux.com/2012/04/change-linux-date-time-using-command-date




ข้อความด้านล่างนี้ ผู้เขียนได้ลองแล้ว แต่ไม่ได้ผล อาจจะเพราะ ทำไม่ถูกเอง หรือ ไม่ได้ผลจริงๆ ก็ไม่แน่ใจเหมือนกัน ใครทำได้ ลองช่วยมาแชร์ให้หน่อยก็ดีครับ จะขอบคุณอย่างยิ่ง


แต่หลังจากตั้งวันที่ให้ Rpi แล้ว เราก็จะเกิดปัญหาใหม่ คือ เมื่อเราปิดไฟหรือ shutdown ไปแล้ว แล้วมาเปิดเครื่องใหม่ เวลาของ Rpi จะไม่ update
ดังนั้นเราต้องมี script ไว้สำหรับ update time เมื่อฟื้นขึ้นมาใหม่ แต่วิธีนี้ก็มีเงื่อนไขอยู่ตรงที่ว่าต้องต่อ internet ด้วย


Before you use the script, you'll need to install ntplib. The download link and installation instructions are here:https://pypi.python.org/pypi/ntplib/.
Copy the the contents of the code below to a file (I named mine "synctime.py"). Then, after the network is running, execute the script (e.g. "python synctime.py"). You will need to do this using elevated (root) privileges for this to work properly.

import time
import os

try:
    import ntplib
    client = ntplib.NTPClient()
    response = client.request('pool.ntp.org')
    os.system('date ' + time.strftime('%m%d%H%M%Y.%S',time.localtime(response.tx_time)))
except:
    print('Could not sync with time server.')

print('Done.')

ที่มา
http://stackoverflow.com/questions/5222951/easy-way-to-get-the-correct-time-in-python



วันนี้ 06/12/2559 ผมมีโอกาสได้ลองใหม่ ดังนี้
sudo apt-get udpate
sudo apt-get install ntpdate
sudo raspi-config
เข้าไปตั้งค่า time zone ให้เป็น asia/bangkok
เรียบร้อย


วันศุกร์ที่ 10 ตุลาคม พ.ศ. 2557

ทำ printer ธรรมดาให้เป็น wireless printer

เดี๋ยวผมจะลองทำดู ตามนี้เลย http://www.instructables.com/id/Turn-any-printer-into-a-wireless-printer-with-a-Ra/
หรือว่าใครทำแล้ว ลองมา update ให้ดูกันหน่อยก็ได้นะครับ

วันพุธที่ 1 ตุลาคม พ.ศ. 2557

python รับค่าจาก keyboard, อ่านค่าเวลา, การเปิดไฟล์ ปิดไฟล์ อ่านไฟล์ เขียนไฟล์, ออกจากโปรแกรม, keyboard interrupt, การหาบรรทัดล่างสุดของไฟล์, การแยก text ด้วย split

สวัสดีครัชพี่น้อง

วันนี้เป็นเกล็ดเล็กเกล็ดน้อย เกี่ยวกับการเขียนโปรแกรม python script บน RPi ครับ

การรับค่าจาก keyboard
ก็ง่ายๆครับ ตามนี้เลย
number = input("please input your choice : ")
ที่มา
https://sites.google.com/site/dotpython/input-and-output/2-2-list



การอ่านค่าเวลา
import time
my_time = time.time()
ที่มา
http://tutor0x.blogspot.com/2011/11/python_19.html

การ เปิด, write, close file
example_file = open('your_file_name.txt', 'w')
example_file .write("hello world\n")
example_file .close()
ที่มา
http://citecclub.org/forum/python-articles-59/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%9B%E0%B8%B4%E0%B8%94%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B9%84%E0%B8%9E%E0%B8%98%E0%B8%AD%E0%B8%99-1151/

http://www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B9%80%E0%B8%A3%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B8%AD%E0%B8%AD%E0%B8%99%E0%B9%84%E0%B8%A5%E0%B8%99%E0%B9%8C/83-python/2676-%E0%B8%9F%E0%B8%B1%E0%B8%87%E0%B8%81%E0%B9%8C%E0%B8%8A%E0%B8%B1%E0%B9%88%E0%B8%99%E0%B9%80%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%A7%E0%B8%81%E0%B8%B1%E0%B8%9A-%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C--python.html

http://stackoverflow.com/questions/4488570/how-do-i-write-a-tab-in-python


การออกจากโปรแกรม
import sys
sys.exit()


keyboard interrupt

To solve the exception problem, add a separate except-clause that catches theKeyboardInterrupt exception, and raises it again:
for record in database:
    try:
        process(record)
        if changed:
            update(record)
    except KeyboardInterrupt:
        raise
    except:
        # report error and proceed
or, even better:

for record in database:
    try:
        process(record)
        if changed:
            update(record)
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        # report error and proceed



การหาบรรทัดล่างสุด


  f = open('file.txt', "r")
  firstLine = f.readline()
  f.seek(-2,2)
  while f.read(1) != "\n":
    f.seek(-2,1)
  last = f.readline()

  print "Last Line: %s" %(last)

ที่มา
http://stackoverflow.com/questions/3346430/most-efficient-way-to-get-first-and-last-line-of-file-python


การแยก text ด้วย split

จากตัวอย่าง "การหาบรรทัดล่างสุด" เราได้ตัวแปรที่ชื่อว่า last ที่เก็บข้อมูลของบรรทัดสุดท้ายอยู่
โดยเมื่อเราใช้ method "split" เราก็จะได้ข้อมูลใหม่ ที่เป็น array ออกมา
มีวิธีการใช้ ดังตัวอย่างต่อไปนี้

สมมติว่าใน ตัวแปร last มีข้อมูล "1\t2\n" import array


a = last.split("\t",1) ======================== (1)

print str(a[0]) ========================(2)
print str(a[1]) ========================(3)

(1) แยกข้อมูลโดยใช้ \t เป็นจุดแยกข้อมูล จากตัวแปร last แล้วเก็บไว้ในตัวแปร array a
(2) สั่ง print ค่าที่อยู่ในตัวแปร array a ตัวที่ 0 ซึ่งผลลัพธ์ออกมาคือ "1"
(3) สั่ง print ค่าที่อยู่ในตัวแปร array a ตัวที่ 1 ซึ่งผลลัพธ์ออกมาคือ "2"

วันจันทร์ที่ 29 กันยายน พ.ศ. 2557

python print จากข้อมูลที่เป็น int ให้เป็น string

ถ้าเราต้องการจะ 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

การต่อพ่วงอุปกรณ์หลายๆตัวบน 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 ดูนะครับ :)

วันอังคารที่ 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

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")

ให้ผลที่ต่างกัน เราสามารถเลือกใช้ให้เหมาะสมกับงานของเราได้ครัช

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 แล้ว
จบ... :)

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
เราก็จะได้ประหยัดเวลาขึ้นอีกหน่อย :)

วันอังคารที่ 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.run script install.sh ที่ download มาจากทางเจ้าของผลิตภัณฑ์
โดยพิมพ์ bash install.sh ที่อยู่ใน folder Drivers/Linux and Mac Os/ (ในคู่มือบอกว่า sudo sh install.sh ซึ่งใช้ไม่ได้กับ RPi)


จากนั้นให้เสียบ RFIDReader R502-CL เข้ากับ RPi แล้วพิมพ์ pcscd -adf เพื่อทดสอบดูว่าอุปกรณ์เราใช้ได้หรือไม่

จากนั้นให้นำบัตร RFID มาใกล้ๆกับตัวอ่าน จะเห็นภาพดังรูป


ถึงตอนนี้เรา install ได้แล้ว ต่อไปจะเป็นการเขียนโปรแกรมเพื่อพัฒนาต่อไป
 
 
 



วันศุกร์ที่ 29 สิงหาคม พ.ศ. 2557

extract file.tar.bz2

เมื่อเราต้องการ extract file ให้ทำดังนี้
เปิด Terminal แล้วพิมพ์
tar xvjf filename.tar.bz2

 Which will untar it to the current directory. Normally (99% of the time) it will create it's own subdirectory so you don't need to worry about that.
Just so you know:
tar - Tape ARchiver
And the options:
x - extract
v - verbose output (lists all files as they are extracted)
j - deal with bzipped file
f - read from a file, rather than a tape device

"tar --help" will give you more options and info

การมองหารายละเอียดของอุปกรณ์ที่เสียบเขามาใหม่

หลายๆครั้ง ที่เราต้องการทราบรายละเอียดว่าอุปกรณ์ที่เราเพิ่งเสียบเข้ามาทาง usb port เราจะงงว่าทำอย่างไรจึงจะเห็นรายละเอียดเหล่านั้นได้ ซึ่งมีวิธีง่ายๆก็คือ ให้พิมพ์
sudo tail -f /var/log/messages
ใน terminal

จบ....

วันศุกร์ที่ 15 สิงหาคม พ.ศ. 2557

mount flash drive

โดยปกติแล้วที่บอร์ด Raspberry Pi จะมี USB port สำหรับต่อกับ Device ต่างๆ อยู่ 2 port ด้วยกัน หากทั้งสอง Port นี้ว่างอยู่ เราสามารถหาอุปกรณ์อย่างอื่นมาต่อได้ ในตอนนี้ เราจะมาเพิ่มพื้นที่หน่วยความจำให้กับเจ้า Raspberry Pi ด้วยการเพิ่ม USB Flash Drive

ขั้นตอนไม่ยากครับ ง่ายๆ
เพื่อให้มั่นใจว่าระบบมองเห็น USB Flash Drive ที่เสียบเข้ามาจริง เราจะทำการเช็คที่ /var/log/message โดยที่โฟลเดอร์นี้ จะทำการเก็บข้อความ (log message) ระบบที่เกิดขึ้น ซึ่งประกอบไปด้วยข้อความแจ้งว่ามีการส่งเมล์ออกไป, ข้อความแสดงการทำงานของ Cron service , ข้อความของ Kern , ข้อความแสดงการล๊อกอินจาก user อื่นๆ และข้อความแจ้งเตือนว่ามีอุปกรณ์อย่างอื่นพ่วงต่อเข้ามา ซึ่งนั่นเป็นสิ่งที่เรากำลังมองหาอยู่
โดยทั่วไป Linux จะมองเห็น USB Flash Drive เป็น sda1  ที่นี้ เราก็จะมองหา sda1 ที่ /var/log/message โดยใช้คำสั่ง tail เพื่อของดูเนื้อหาตอนท้ายๆ ของไฟล์ message (เนื่องจากไฟล์นี้จะถูกเขียนลงไปเรื่อยๆ ที่บรรทัดสุดท้าย หากมี message จากจุดต่างๆ ของระบบส่งเข้ามา)
ใช้คำสั่ง เพื่อดู message ที่เข้ามาล่าสุดใน /var/log/message ด้วยคำสั่ง
sudo tail -f /var/log/messages



ทำการเสียบเจ้า USB Flash Drive ของเราเข้ากับช่อง USB ของบอร์ด Raspberry Pi สังเกตที่หน้าจอ terminal นี้ จะพบว่า message มีการเปลี่ยนแปลง และถ้า USB Flash Drive เราไม่เสีย จะพบว่า Raspberry Pi มองเห็นเจ้า USB Flash Drive ของเราแล้ว ให้กด Ctrl+C เพื่อหยุดการดู message ได้ครับ
ต่อไปเราจะต้องทำการสร้าง directory เปล่าๆ ขึ้นมา เพื่อทำการ mount ให้เจ้า USB Flash Drive ของเราเข้ากับ Directory นั้น พูดง่ายๆ ก็คือ ทำให้ Directory นั้นกลายเป็น USB Flash Drive นั่นเอง
ใช้คำสั่ง สร้าง directory ที่ชื่อ usbdisk (หรือจะชื่ออื่นๆ ก็ได้นะครับ) ขึ้นมา ในที่นี้ผมจะเก็บไว้ภายใต้โฟลเดอร์ /media นะครับ
sudo mkdir /media/usbdisk
เสร็จแล้ว เราจะทำการ mount hardware คือ เจ้า USB Flash Drive เข้ากับโฟวเดอร์นี้ ด้วยคำสั่ง
sudo mount -t vfat -o uid=pi,gid=pi /dev/sda1 /media/usbdisk/
ตอนนี้ เราจะได้โฟวเดอร์ usbdisk เป็นที่เก็บทุกอย่างเท่าที่ USB Flash Drive มี ลองเข้าไปดูครับ จะเจอไฟล์ที่เราเก็บไว้ที่ USB Flash Drive



เราก็จะได้พื้นที่เพิ่มเติม นอกเหนือจาก SD-Card ที่เรามี แต่เป็นพื้นที่ที่สามารถเคลื่อนย้ายได้ มีอย่างหนึ่งที่ต้องบอกไว้ก็คือ ทุกครั้งที่เราจะทำการ ถอด USB Flash Drive ออกจากบอร์ด Raspberry Pi เราจะต้องทำตรงกันข้ามกับคำสั่ง mount นั่นคือคำสั่ง umount
ก่อนถอด USB Flash Drive เราจะใช้คำสั่ง umount ไปที่ Directory ที่เรา mount ไว้
sudo umount /media/usbdisk



จากนั้น เราจะทำการลบ usbdisk ด้วยก็ได้ หรือจะปล่อยไว้แบบนี้ก็ได้ ครับ ไม่มีปัญหา เพราะเราได้ umount ออกไปแล้ว
เพื่อนๆ อาจจะนำไปประยุกต์ใช้ในการเก็บข้อมูลอีกรูปแบบหนึ่งก็ได้ นอกเหนือจากการเก็บข้อมูลไว้ที่ Database

วันจันทร์ที่ 21 กรกฎาคม พ.ศ. 2557

raspberry pi model B+

สวัสดีครัช ผู้ชื่นชอบ Raspberry Pi

หายไปนาน(อีกแล้ว) งานยุ่งๆบวกกับบ้าออกกำลังกาย ก็เลยไม่ค่อยได้มาเขียนเท่าไหร่

หลังจากปล่อย Raspberry Pi model B ออกมาได้ 2 ปี
ตอนนี้เค้าก็มี Version ใหม่ออกมา ให้เราได้ชื่นชมกันอีก นั่นก็คือ medel b+
ซึ่งก็มี feature ที่เพิ่มขึ้นมากกว่าเก่า เพื่อให้รองรับตามคำเรียกร้องของผู้ใช้งาน
ที่น่ายินดีอีกเรื่องก็คือ "ยังราคาเท่าเดิม" 35$ คูณ 35 ก็ตกราวๆ 1,225 บาท

ใน Model B+ นี้ยังคงใช้ BCM2835 อยู่เหมือนเดิม RAM ก็ยัง 512MB เหมือนเดิม แต่เพิ่มอย่างอื่นขึ้นมาเพียบเลย
1. GPIO มากกว่าเดิม จากเดิม 26 pins เพิ่มเป็น 40 pins
2. USB มากกว่าเดิม จากเดิม 2 ports เพิ่มเป็น 4 ports
3. Micro SD จากเดิมใส่ตามปกติ เปลี่ยนเป็นช่องแบบ push-push คือ กดเพื่อใส่เข้าไป และกดเพื่อให้ออกมาอีกที
4. มีการใช้พลังงานที่น้อยกว่าเดิม โดยเปลี่ยนจาก linear regulator เป็น switching regulator ทำให้ลดพลังงานไปได้ 0.5W - 1W
5. audio ที่ดีกว่าเดิม เพิ่มวงจร low-noise power supply


จากรูปด้านบน จะมีขาที่ชื่อว่า ID_SD และ ID_SC
2 ขานี้ใช้ต่อกับ EEPROM เพื่อ setup gpio ถ้าเราไม่ใช้ EEPROM ก็ห้ามต่อใช้อย่างอื่นนะครัช

ถึงแม้ว่าเขาจะผลิต Model B+ ขึ้นมา เราก็ไม่ต้องกลัวว่าผลงานที่เราทำไปแล้ว จะไม่มีให้ซื้อใช้ เพราะว่าเขายังผลิต Model B อยู่เหมือนเดิมครัช(ถ้ายังมีคนสั่งอยู่)


ที่มา
http://www.raspberrypi.org/introducing-raspberry-pi-model-b-plus/

http://pi.gadgetoid.com/pinout

วันจันทร์ที่ 2 มิถุนายน พ.ศ. 2557

kill process

หายไปนานเลยเรา วันนี้มีเกล็ดเล็กเกร็ดน้อยมาฝากครับ
ถ้าหากเราเปิดโปรแกรมอะไรขึ้นมาสักอย่าง แล้วต้องการหยุดโปรแกรมนั้นๆ เราสามารถใช้คำสั่ง "top" เพื่อดูหมายเลขประจำโปรแกรมนั้นๆ หลังจากที่เราพิมพ์ top ใน command line แล้ว เราจะเห็นรายละเอียดของโปรแกรมต่างๆที่เราเปิดอยู่ในขณะนั้น



ก็ให้เราดูที่ช่องแรก PID คือหมายเลขของโปรแกรมที่เปิดอยู่ ส่วนช่องขวาสุด จะเป็นชื่อของโปรแกรมที่เราเปิด
สมมติว่าเราต้องการปิดโปรแกรม iceweasel ก็ให้เราพิมพ์ "kill 3772" แเค่นี้โปรแกรมก็จะถูกปิดลงครับ

ปล.
ในที่นี้ผมใช้ linux debian ในการแสดงคัวอย่าง แต่ใน linux ทั่วๆไปรวมถึง rpi ก็เป็นแบบเดียวกันครับ

วันอังคารที่ 6 พฤษภาคม พ.ศ. 2557

raspberry pi 7-segment with 74hc595

สวัสดีครับเพื่อนๆทุกท่าน แม้ว่าจะมีไม่มาก :)

ต่อจากบทก่อนหน้านี้  ได้ศึกษากันไปแล้ว ในการใช้ python ควบคุมการทำงานของ LED หลอดเล็กๆ
ในตอนนี้ ผมได้ทำการต่อ raspberry pi เข้ากับ LED บอร์ดใหญ่ที่ใช้ไฟ 12 โวลต์(ซื้อจากฟิวเจอร์คิท)
                                  รูปแผง LED 4 หลัก ใช้ไฟเลี้ยง 12 โวลต์

ซึ่ง Raspberry pi อย่างที่ทราบกันแล้วว่าใช้ไฟแค่ 5 โวลต์ และ gpio มีไฟแค่ 3.3 โวลต์ ก็เลยจำเป็นต้องหา buffer มาคั่นกลาง เพื่อให้สามารถขับ LED แผงนี้ได้
โดยผมใช้ IC เบอร์ 7407 เป็น buffer ดังที่เคยเขียนไปในตอนก่อนหน้านี้แล้ว




 และเพื่อให้สามารถใช้ gpio ที่มีอยู่ได้อย่างพอเพียง จึงได้ใช้ IC เบอร์ 74hc595 ที่ทำให้เราใช้ gpio เพียง 5 ขาในการขับ LED ทั้ง 4 หลักนี้



โดยจากขา gpio ของ raspberry pi ต่อเข้ากับ 74hc595 ตรงๆก่อน แล้วต่อขา output ของ 74hc595(Q0-Q7) ต่อเข้ากับ input ของ 7407 (1A-6A)

แล้วนำ 1Y-6Y ต่อกับ LED ของเรา โดยที่มี r 4.7k pull up ไว้



เมื่อบัดกรีวงจรเสร็จเรียบร้อยแล้ว ก็เป็นอย่างที่เห็นคับ

แล้วผมก็ลองเขียน code โดยใช้ python ดู เพื่อลองขับ LED ก็สามารถใช้งานได้ครับ
โดยเราต้องนำ file ของเรา ไปวางไว้ที่ raspberry pi ก่อน
แล้วทำให้สามารถ run ได้โดยคำสั่ง chmod +x my_file.py
แล้วใช้คำสั่ง python my_file.py เพื่อ run โปรแกรม




ตัวอย่าง code ครับ
#! /usr/bin/python

import RPi.GPIO as GPIO
import time

#Data Pins needed on the RPi
DATAIN=11 #DS
LATCH=13  #STCP
CLOCK=15  #SHCP
CLEAR=22  #MR Low
OE=23     #Output Enable Low

#GPIO definition
def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.cleanup()
    GPIO.setup(DATAIN,GPIO.OUT)
    GPIO.setup(CLOCK,GPIO.OUT)
    GPIO.setup(LATCH,GPIO.OUT)
    GPIO.setup(CLEAR,GPIO.OUT)
    GPIO.setup(OE,GPIO.OUT)

    GPIO.output(LATCH,False) #Latch is used to output the saved data
    GPIO.output(CLEAR,True)  #Clear must always be true. False clears registers
    GPIO.output(OE,False)    #Output Enable speaks for itself. Must be False to display
    GPIO.output(CLOCK,False) #Used to shift the value of DATAIN to the register
    GPIO.output(DATAIN,False)#Databit to be shifted into the register
def clean():
    GPIO.output(CLEAR,False)
    GPIO.output(CLEAR,True)
    GPIO.output(LATCH,True)
    GPIO.output(LATCH,False)

setup()
clean()
x=0

while 1:
 if x > 32:
  x=0
  clean()

 GPIO.output(DATAIN,True)
 GPIO.output(CLOCK,True)
 GPIO.output(CLOCK,False)

 GPIO.output(LATCH,True)
 GPIO.output(LATCH,False)
 time.sleep(0.06)
 x = x+1


ผมอาจจะอธิบายไม่ค่อยละเอียดนะครับ ถ้าหากมีข้อสงสัยก็ถามกันได้ ที่ niran@flowco.co.th ครับ

ที่มา
http://www.sysstem.at/2013/09/7-segment-display-with-74hc595-shift-register-and-raspberry-pi/



ตัวอย่างเพิ่มเติม

#! /usr/bin/python

import RPi.GPIO as GPIO
import time

#Data Pins needed on the RPi
DATAIN=11 #DS
LATCH=13  #STCP
CLOCK=15  #SHCP
CLEAR=22  #MR Low
OE=23     #Output Enable Low


#GPIO definition
def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.cleanup()
    GPIO.setup(DATAIN,GPIO.OUT)
    GPIO.setup(CLOCK,GPIO.OUT)
    GPIO.setup(LATCH,GPIO.OUT)
    GPIO.setup(CLEAR,GPIO.OUT)
    GPIO.setup(OE,GPIO.OUT)

    GPIO.output(LATCH,False) #Latch is used to output the saved data
    GPIO.output(CLEAR,True)  #Clear must always be true. False clears registers
    GPIO.output(OE,False)    #Output Enable speaks for itself. Must be False to display
    GPIO.output(CLOCK,False) #Used to shift the value of DATAIN to the register
    GPIO.output(DATAIN,False)#Databit to be shifted into the register
#Clean up display
def clean():
    GPIO.output(CLEAR,False)
    GPIO.output(CLEAR,True)
    GPIO.output(LATCH,True)
    GPIO.output(LATCH,False)

#Shift data
def shift(BitOut):
  if BitOut == 1:
       BitOut=True
  else:
       BitOut=False
  GPIO.output(DATAIN,BitOut)
  GPIO.output(CLOCK,True)
  GPIO.output(CLOCK,False)

#Push Data to display
def WriteOut():
  GPIO.output(LATCH,True)
  GPIO.output(LATCH,False)

#write number
def WriteNum(num):
  for i in range(0,8):
    shift((num>>i)%2)

from array import *
number_array = array('i',[0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6])

setup()
clean()
x=0

for i in range(0,9999):
    x = i/1000
    WriteNum(number_array[x])
    x = (i%1000)/100
    WriteNum(number_array[x])
    x = (i%100)/10
    WriteNum(number_array[x])
    x = i%10
    WriteNum(number_array[x])
    WriteOut()   
    time.sleep(1)
    clean()




 

วันจันทร์ที่ 28 เมษายน พ.ศ. 2557

auto run your application

auto run your application


บทความวันนี้จะเกี่ยวกับเรื่อง auto run application
หลังจากที่เราเขียน application ตัวหนึ่งเสร็จแล้ว ขั้นตอนต่อไปก็คงต้องเป็นการตั้งค่าให้ Rpi run application ทันที หลังจากที่ boot เครื่องใหม่ (auto run)

ซึ่งก็ทำได้ไม่ยากครับ ดังนี้



แก้ไข rc.local
sudo nano /etc/rc.local
โดยเพิ่มบรรทัดนี้เข้าไป ในบรรทัดก่อนสุดท้าย (เหนือ exit 0)
sudo python /home/pi/my_project.py

หรือถ้าเป็น application อย่างอื่น ก็ลองแบบนี้ครับ
cd /home/pi/any_folder_u_define
sudo ./your_application

กด CTRL+X, "Y" และ Enter เพื่อออกและ save

ทดสอบด้วยการ reboot แล้วรอดูผลกันครับ :)

ที่มา
http://www.raspberry-projects.com/pi/pi-operating-systems/raspbian/scripts
http://stackoverflow.com/questions/22353134/raspberry-pi-auto-starting-a-program

วันศุกร์ที่ 25 เมษายน พ.ศ. 2557

เตรียมเครื่อง Linux PC ไว้สำหรับเล่น raspberry pi

1. have linux pc (ubuntu11)
2. sudo apt-get update
3. sudo apt-get install build-essential git
4. mkdir rpi in home directory
5. cd rpi
6. sudo git clone git://github.com/raspberrypi/tools.git คำสั่งนี้จะ clone raspbian's official cross compile นานหน่อย
7. cd ~/
8. nano .bashrc
9. insert "export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin" on the last line off file.
10. type source .bashrc for update path.
11. type "arm-linux-gnueabihf-gcc -v" for check it work or not.

12. install java runtime "sudo apt-get install openjdk-7-jre"
14. typically “~/Downloads/”)then type: “tar -xvzf eclipse-cpp-kepler-R-linux-gtk.tar.gz -C ~/
15. now u can use eclipse in "~/eclipse/eclipse &"
16. start new c++ project
17. next,next then In the “Cross compiler prefix” field type: “arm-linux-gnueabihf-”.
18. In the “Cross compiler path” field type the full path to the toolchain: “/home/kong/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/”
19. after adding source code, build all
20. Lets go there via a console window with cd “cd ~/workspace/HelloRPiWorld/Debug/“. Type in “ls -al” the “HelloRPiWorld” Binary file is highlighted in green.
21. in eclipse program, To deploy the binary on the Raspberry Pi, make sure that the RPi board is powered and connected to your network. The next step is click on “Window->Show View->Other”. This will open a show view window. In this window select the “Remote Systems” folder and then select “Remote Systems Details” and press OK
22. If the “Remote Systems Details” shows up in the bottom of the workspace, drag it such that its tab shares  the same region as the project explorer tab
23. Now right click in the “Remote Systems Detail” area and click on “New Connection”. In the “Select Remote System Type” window, select “SSH only” then click “Next”
24. In the “Remote SSH Only System Connection” (Figure 9) type in the IP address of the RPi in the “Host name” field and give the connection a valid name in the “Connection name” field. I typed “Raspberry Pi”.  Then click “Finish”.
25. At this point a second device (Raspberry Pi) shows up in the “Remote Systems Detail” tab (Figure 10). Right click on the Raspberry Pi resource and click connect. You will be prompted to enter the username and password. Make sure that you utilize “username:pi” and “password:raspberry” (if you haven’t changed the default password). You may get a warning windows asking you if you are sure that you want to accept this connection. Affirm that you want to proceed with the connection. At this point you should be connected to your RPi from Eclipse.
26. Right click on the Raspberry Pi resource again  in the “Remote Systems Detail” tab and click on the “Show in Remote Systems View”. This will open a “Remote Systems” tab in the same region of the workspace. In this tab, one can navigate the root file systems of both the Local Linux OS and that of the Raspbian/Raspberry Pi.
27. Locate the HelloWorld Binary file on our local desktop PC and drag it to the home directory on the Raspberry Pi (You could also right click on the binary and click on “Copy” and then right click on the home folder in the Raspberry Pi and click “Paste”. This effectively copies the binary file to the home directory of the Raspberry Pi.
28. Now right click on the SSH terminal icon under the Raspberry Pi icon (Figure 11) in the  “Remote Systems” and select “Launch Terminal” . This should launch a terminal window in the bottom of the Eclipse workspace (Figure 12). This is basically a console / terminal window connected to the Raspberry Pi via SSH.
29. In the terminal window type “ls -al” to confirm that the “HelloWorld” binary indeed got copied into the home directory of the Raspberry Pi’s root file system. Then change the “HelloWorld” binary’s permission to make it executable: “chmod +x HelloWorld

ที่มา
http://www.lab4inf.fh-muenster.de/lab4inf/docs/Embedded-Software/Eclipse_Cross_Development.pdf

วันเสาร์ที่ 19 เมษายน พ.ศ. 2557

blog ดีๆ เกี่ยวกับ Raspberry Pi

http://www.together.in.th/

http://www.makeuseof.com/tag/7-operating-systems-you-can-run-with-raspberry-pi/

http://xmodulo.com/2014/04/lightweight-web-server-raspberry-pi.html

www.intelliadmin.com/index.php/2013/07/sprinkler-system-controlled-by-a-raspberry-pi/

http://www.raspberrypi-spy.co.uk/2014/04/how-to-change-the-command-line-font-size/

http://www.youtube.com/watch?v=OYXXvaypUKQ&feature=share

http://www.raspberrypi-spy.co.uk/2014/04/hdmipi-raspberry-pi-hd-lcd-screen-beta/

http://www.raspberrypthai.com

http://www.davidhunt.ie/blog/

http://www.together.in.th/

วันเสาร์ที่ 12 เมษายน พ.ศ. 2557

Rpi configure wifi

ถ้าต้องการใช้ wifi ให้ทำดังนี้ครับ

ต่อ wifi adaptor เข้ากับบอร์ด Rpi
USB Wifi Dongle with Case (IEEE 802.11g - 54 Mb) Chip Set RT2070 
                                                              ภาพที่ 1

ทำการ remote desktop

เปิด wpa_gui ตามภาพที่ 2

                                                       ภาพที่ 2

กด scan
                                                        ภาพที่ 3

กด scan
                                                      ภาพที่ 4

จะเห็นรายชื่อ wifi network ขึ้นมา ให้ double click ที่รายชื่อที่เราต้องการเชื่อมต่อ
ในช่อง PSK ให้เราใส่ password แล้วกด add

                                                    ภาพที่ 5
กด connect

                                                        ภาพที่ 6

configure เพิ่มนิดหน่อยเพื่อให้ auto connect หลังจาก boot ใหม่ ดังนี้
ที่บอร์ด Rpi
nano /etc/wpa_supplicant/wpa_supplicant.conf
กด ctrl+x เพื่อออกและ save


nano /etc/network/interfaces
กด ctrl+x เพื่อออกและ save

sudo reboot
แล้วใช้ nmap ลองหา ip ของ wireless lan ของ Rpi ดู

ถ้าต้องการให้เป็น static ip
nano /etc/network/interfaces
auto lo

iface lo inet loopback
iface eth0 inet dhcp

#allow-hotplug wlan0
auto wlan0
iface wlan0 inet static
        wireless-essid <myssid>
        address 192.168.0.100
        netmask 255.255.255.0
        gateway 192.168.0.1
        network 192.168.0.0
        broadcast 192.168.0.255
        pre-up wpa_supplicant -B w -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
        post-down killall -q wpa_supplicant
iface default inet manual

หากต้องการให้เป็น dhcp ให้แก้ไขเป็นดังนี้
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

วันนี่ได้เอา wifi ตัวนี้มาต่อกับ rpi2 แต่ใช้ไม่ได้ พบวิธีแก้ไขดังนี้
sudo apt-get install rpi-update เสร็จแล้ว reboot

ที่มา
https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
http://www.raspyfi.com/wi-fi-on-raspberry-pi-a-simple-guide/
http://www.suntimebox.com/raspberry-pi-tutorial-course/week-3/day2-1-wireless-network-setup/
http://www.raspberrypi.org/forums/viewtopic.php?t=26795
http://www.raspberrypi.org/forums/viewtopic.php?t=11517
http://www.unzeen.com/article/2598/

ทำ Rpi ให้เป็น static ip

ในบางครั้งเรามีความจำเป็นที่จะต้องทำให้บอร์ดของเราเป็น static ip เพื่อเหตุผลบางประการ
ยกตัวอย่างเช่นเขียนโปรแกรมที่ต้องใช้ ip เดิมๆในการติดต่อ

ให้เราทำการ ssh เข้าไปที่บอร์ด Rpi แล้วพิมพ์

nano /etc/network/interfaces

auto lo
iface lo inet loopback
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.6
netmask 255.255.255.0
gateway 192.168.0.1
network 192.168.0.0
broadcast 192.168.0.255

การใส่เครื่องหมาย # เป็นการ comment หรือการไม่นำมารวมอยู่ใน code ของเรา

แค่นี้เองครับ เราก็ได้ Rpi ที่เป็น static ip แล้ว

หรือมีอีกวิธีนึง คือ
เข้าไปที่ sudo nano /etc/dhcpcd.conf
แล้วพิมพ์เพิ่มเติม ที่บรรทัดสุดท้าย ดังนี้

# Custom static IP address for eth0.
interface eth0
static ip_address=192.168.0.200/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

ที่มา
http://sizious.com/2015/08/28/setting-a-static-ip-on-raspberry-pi-on-raspbian-20150505/

remote desktop ด้วย tight vnc

บทความตอนนี้จะอธิบายถึงการ remote desktop ทั้งจาก windows และจาก Linux

ที่บอร์ด Rpi

sudo apt-get install  tightvncserver รอจนเสร็จ
vncserver :1 -geometry 1280x800 -depth 16 -pixelformat rgb565



ที่ windows pc
download UltraVnc : http://www.uvnc.com/downloads/ultravnc.html
เปิดโปรแกรม ultravnc แล้วใส่ ip:1

กด connect แล้วใส่ password


ที่ Linux PC
sudo apt-get install xtightvncviewer
เมื่อเสร็จแล้ว ก็ run คำสั่ง xtightvncviewer xxx.xxx.xxx.xxx:1
ที่ต้องใส่ :1 เพราะว่า vnc server ของเราเปิด port 1 อยู่นั่นเอง


ที่มา
http://raspberry-pi-th.blogspot.com/2012/09/tightvncserver-raspberry-pi-x-window.html
http://marc-abramowitz.com/archives/2006/02/17/tightvnc-on-ubuntu/

โคลน Raspberry Pi SD Card

สวัสดีครับทุกท่าน

หยุดยาวสงกรานต์ หวังว่าทุกท่านคงมีความสุขกันถ้วนหน้า ได้ไปเที่ยวพักผ่อนตามชายทะเลบ้าง ขึ้นเขาเข้าป่าบ้าง กลับบ้านไปเจอญาติพี่น้องบ้าง ตามประสาคนทำงาน พักสมอง พักใจ

วันนี้ผมเพิ่งได้ Rpi ตัวใหม่มา ตอนแรกก็คิดว่าจะโหลด image มาใหม่ เริ่มทำใหม่ตั้งแต่แรก (ในบทก่อนหน้านี้) แต่คิดไปคิดมา อ้าว วันนี้เราไม่มีจอ HDMI หรือ TV ธรรมดาเลยนี่หว่า ทำยังไงดี
ก็เลยนึกขึ้นได้ว่ายังมีอีกวิธีหนึ่งที่รวดเร็วว่องไว ในการ setup Rpi ขึ้นมาใหม่ นั่นก็คือวิธี "โคลน SD Card"

เลยนั่งหาวิธีจากอาจารย์กู๋อยู่ครู่เดียว ก็ได้วิธีมา ซึ่งทำได้ง่ายมากๆ เลยลองทำตามดูเลย ซึ่งก็สามารถใช้งาน Rpi ตัวใหม่ได้ทันที เหมือนกับที่เราทำไว้ก่อนหน้าแบบเป๊ะๆ โดยมีวิธีทำดังนี้
1. เปิดโปรแกรม Win32DiskImager
2. ใส่ SD Card ที่เราต้องการโคลน
3. ในช่อง Image File ให้ตั้งชื่อที่เราต้องการ
4. ในช่อง Device ให้เลือก SD Card ของเรา
5. กด Read แล้วรอจนเสร็จ

ในตอนนี้เราก็จะได้ Image ต้นฉบับของเรามาแล้ว
จากนั้นก็ Eject SD Card ต้นฉบับของเราออกไป แล้วเอา SD Card ตัวใหม่มาใส่แทน และทำตามขั้นตอนต่อไป
1. format SD Card ด้วยการคลิกขวาที่ SD Card ของเราแล้วเลือก format ให้ติ๊กที่ quick format ด้วย จะได้ไม่เสียเวลามาก
2. เปิดโปรแกรม Win32DiskImager อีกครั้ง
3. เลือก Image ที่เรา save ไว้ในตอนแรก
4. เลือก Device ของเรา
5. กด write รอจนเสร็จ
6. Eject SD Card


เท่านี้ก็ได้ SD Card อันใหม่ ที่เหมือนต้นฉบับของเรา 100% มาใช้แล้ว


How to Clone Your Raspberry Pi SD Card for Super Easy Reinstallations

ที่มา
http://lifehacker.com/how-to-clone-your-raspberry-pi-sd-card-for-super-easy-r-1261113524

วันเสาร์ที่ 5 เมษายน พ.ศ. 2557

project raspberry pi

เปลี่ยนบรรยากาศกันหน่อยครับ หลังจากที่มีแต่ howto กันมาตลอด

http://imgur.com/gallery/Nb5kX

http://www.cmprogrammers.com/RaspberryPi/pir.php

http://www.xodustech.com/projects/raspberry-pi-gameboy-pocket

http://williamknowles.co.uk/?p=16

http://www.raspberrypthai.com/2014/06/01/%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-ap-%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%8A%E0%B9%88%E0%B8%A7%E0%B8%A2%E0%B8%95%E0%B9%88%E0%B8%AD-openvpn-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-raspberry-pi/

http://usualpanic.com/2013/05/raspberry-pi-plate-internet-radio/
ที่มา https://www.facebook.com/RaspberryPi66

http://www.devicehive.com/blog/hardware-discovery-platforms
ที่มา https://www.facebook.com/thepizone?ref=stream

http://readwrite.com/2014/04/10/raspberry-pi-vpn-tutorial-server-secure-web-browsing#awesm=~oB7YHfT4YibdgT

http://www.open-electronics.org/raspberry-pi-as-an-audiomedia-center-the-best-linux-distros/

http://www.youtube.com/watch?v=e0wkVVVLvR8

http://www.youtube.com/watch?v=p2abZ90-eU0

http://www.youtube.com/watch?v=dRT39e3PQrk

http://www.ofbrooklyn.com/2014/01/2/building-photo-frame-raspberry-pi-motion-detector/

http://makezine.com/projects/lego-bookreader-digitize-books-with-mindstorms-and-raspberry-pi/

http://hackaday.com/2014/04/09/create-your-own-j-a-r-v-i-s-using-jasper/

https://medium.com/raspberry-pi/875c73a5339

https://www.indiegogo.com/projects/microups-for-raspberry-beaglebone-cubieboard#home

http://www.wired.com/2014/04/coversnitch-eavesdropping-lightbulb/

http://raspberrypi-nerd.tumblr.com/post/84125759449/pi-clock

วันศุกร์ที่ 28 กุมภาพันธ์ พ.ศ. 2557

mirror ในไทย

คุณ @trestest ได้ทำ mirror สำหรับ raspbian เรียบร้อยแล้ว ในไทย 2 ที่

ได้แก่
มหาวิยาลัยเกษตรศาสตร์ mirror1.ku.ac.th/raspbian
มหาวิยาลัยสงขลานครินทร์ mirrors.psu.ac.th/raspbian

ทำได้โดย
nano /etc/apt/source.list

แล้วแก้ไขบรรทัดต่างๆให้อยู่ใน format ดังนี้


deb http://MIRROR.LOCATION/raspbian wheezy main blah blah blah

เสร็จแล้ว apt-get update ครับ

วันอาทิตย์ที่ 16 กุมภาพันธ์ พ.ศ. 2557

วงจร input/output ที่ใช้ได้กับ gpio ของ rpi

สำหรับวงจรง่ายๆที่สามารถใช้ร่วมกับบอร์ด rpi ได้ สามารถดูได้ที่ http://elinux.org/RPi_GPIO_Interface_Circuits โดยได้อธิบายไว้ดังนี้


วงจรสำหรับรับค่า input (Input circuit)

วงจรปุ่มกด switch input (push button)
วงจร switch ง่ายๆ ที่เอาไว้ใช้ต่อกับ gpio ของ rpi
เมื่อกด switch (วงจรปิด) ค่าที่ rpi ได้รับก็คือ "0"
และเมื่อปล่อย switch (วงจรเปิด) ค่าที่ rpi ได้รับก็คือ "1"
จากรูป R1 เราเรียกว่า pull-up resistor ซึ่งมีไว้ "ดึง" gpio ให้มีค่าเป็น 3.3 โวลต์ในขณะที่ปล่อย switch

วงจร voltage divider
ใช้สำหรับรับสัญญาณ digital 5V ของอุปกรณ์หนึ่งๆ ต่อเข้ากับ gpio port ของบอร์ด rpi ซึ่งต้องการ สัญญาณเพียง 3.3 โวลต์ ส่วน 0 โวลต์ในรูป ให้ต่อเข้ากับ ground จุดใดจุดหนึ่งของบอร์ด rpi และต่อเข้ากับ ground ของอุปกรณ์ที่ปล่อยสัญญาณเข้ามาที่บอร์ด rpi
และสิ่งที่สำคัญที่สุด สำหรับวงจรนี้ก็คือ ค่า resistor R1 และ R2 โดยที่ R1 จะต้องมีค่ามากกว่าครึ่งหนึ่งของ R2 เล็กน้อย ซึ่งจะทำให้สัญญาณ 5 โวลต์ลดลงเหลือ 3.3 โวลต์ ซึ่งผู้อ่านสามารถใช้ค่าที่แสดงในรูปได้ทันที เหมาะสำหรับการใช้งานทุกกรณี


วงจร output (output circuit)
gpio port ของบอร์ด rpi ได้ต่อโดยตรงกับ ic BCM2835 ซึ่งเป็น ic ที่ทำงานที่ 3.3 โวลต์เท่านั้น ทำให้มีพลังในการจ่ายไฟค่อนข้างน้อย และที่สำคัญ ถ้าหากใช้ไม่ถูกวิธี ก็จะสร้างความเสียหายให้ port ได้ (ไม่สามารถเปลี่ยน หรือ ซ่อมแซมได้)
ดังนั้น ถ้าหากผู้อ่านจะต่อใช้งานที่นอกเหนือจาก LED ท่านควรจะใช้วงจรเพิ่มเติมเพื่อเพิ่ม โวลต์/กระแส

ใช้ npn transistor
วงจรถูกๆ ที่ใช้ NPN transistor เพื่อ เปิด/ปิด อุปกรณ์ที่มาต่อ (Load)
เมื่อ gpio มีค่าเป็น "1" อุปกรณ์ที่มาต่อ ก็จะทำงาน
เมื่อ gpio มีค่าเป็น "0" อุปกรณ์ที่ต่อ ก็จะปิด
จากรูปภาพ ใช้ transistor เบอร์ 2N3904 ซึ่งสามารถทนแรงดันได้ถึง 40โวลต์ (Vce)/ 100mA
 สำหรับอุปกรณ์ที่ต้องการใช้กระแสที่มากกว่า ก็ต้องใช้ transistor ที่ให้โวลต์(Vce)/กระแส ที่มากกว่านี้ โดยสังเกตได้ที่ค่า hfe ใน datasheet
note : ในวงจรที่ต้องการใช้กำลังไฟมากๆ ควรใช้ heat sink เพื่อระบายความร้อนด้วย

ใช้ FET
Field-effect transistor (FET) ก็เป็นอีกทางเลือกหนึ่งนอกเหนือจาก bipolar transistor
จากรูป ถ้า gpio มีค่าเป็น "1"  อุปกรณ์ทำงาน
แต่ถ้า gpio มีค่าเป็น "0" อุปกรณ์ไม่ทำงาน
การเลือกใช้ R1 100K เนื่องจากต้องการความปลอดภัย ถ้าหากเราเผลอกำหนดค่า gpio เป็น input
transistor 2N7000 สามารถใช้ได้กับแหล่งจ่ายไฟ 60โวลต์/100mA
ถ้า หากต้องการใช้กับ Load ที่ใช้พลังงานมากกว่านี้ วิธีดู datasheet จะไม่เหมือนกับ transistor ให้ดูที่ "threshold" voltage. ที่เริ่มต้นที่ 3โวลต์

ใช้ Relay

วงจร Level shifter
MOSFET level shifter
วงจรนี้นิยมใช้กับ I2C

วงจร simple diode circuit
 เป็นวงจรที่ง่ายและใช้ได้ผลเสมอ ไว้ใช้ต่อกับ serial port 5Volt ATMega328 processor


IC SN7407
เป็น IC oprn-collector ซึ่งสามารถนำไปใช้ได้หลากหลาย


ถ้า gpio มีค่าเป็น "0"output ก็จะเป็น "0" ด้วย

แต่ถ้า gpio มีค่าเป็น "1"IC จะไม่ทำงาน ส่งผลให้ R1 ดึงให้วงจรที่ต่อพ่วงอยู่มีค่าเป็น high.
ซึ่งวงจรนี้สามารถรองรับได้ถึง 30โวลต์/30mA

สรุป
วงจร input มี 2 วงจร ได้แก่ push button และ voltage divider
วงจร output มีให้เลือกหลากหลาย ได้แก่ npn transistor, FET, Relay, Level shifter มี 3 วงจร
1. Mosfet level shifter
2. simple diode
3. IC 7407