2015年1月30日 星期五

Raspberry pi USB listening






https://pyudev.readthedocs.org/en/v0.16/api/pyudev.wx.html


$ sudo apt-get install python-pyudev
$ sudo apt-get install python-gtk2
$ sudo apt-get install python-gtk2-dev


import glib

from pyudev import Context, Monitor

try:
    from pyudev.glib import MonitorObserver

    def device_event(observer, device):
        print 'event {0} on device {1}'.format(device.action, device)
except:
    from pyudev.glib import GUDevMonitorObserver as MonitorObserver

    def device_event(observer, action, device):
        print 'event {0} on device {1}'.format(action, device)

context = Context()
monitor = Monitor.from_netlink(context)

monitor.filter_by(subsystem='usb')
observer = MonitorObserver(monitor)

observer.connect('device-event', device_event)
monitor.start()

glib.MainLoop().run()





Raspberry pi 取消USB automount通知視窗



把下面這個通知視窗取消掉


隨便一個資料夾視窗Edir → Preference,把要取消的選項uncheck即可



2015年1月29日 星期四

Raspberry Pi mount USB




先把USB插上Pi,鍵入下列command看是否有偵測到
$ sudo fdisk -l

如果有的話會看到 /dev/sda1 並可知道系統是 NTFS還是FAT32



如果系統是NTFS,則需要在另外下載配件
sudo apt-get install ntfs-3g

插入的資料夾會在 /media 下看到
在其下建立資料夾,並把使用者改成pi,也可以改成其他名稱
$ sudo mkdir /media/usb
$ sudo chown pi:pi /media/usb

接下來mount USB
如果是FAT32 則需使用 -t vfat

$ sudo mount -t ntfs-3g -o uid=pi,gid=pi /dev/sda1 /media/usb

我做到這時,出現了一個error


這時先umountmount 一次就可以了,umount如下
$ sudo umount /dev/sda1

注意要umount /dev/sda1 而不是/media/usb


如果想要系統每次開機時auto mount
$ sudo leafpad /etc/fstab &



使用完畢後要記得umount USB,如果沒有umount usb的話,再插一次USB就會變成mount
/dev/sdb1的位置(因為sda1被占領了),沒有umount也可能會造成資料的損毀


python中可以使用os來判斷是否mount
import os
os.path.ismount('/media/usb')




2015年1月27日 星期二

Raspberry pi 開機自動執行script


$sudo nano /etc/xdg/lxsession/LXDE/autostart

在最後加入
@sh /home/pi/xxx/.../xxxx/xxx.sh
Ctrl + X + Enter

如果是python
@python /home/pi/xxx/.../xxxx/xxx.py
或是
@/usr/bin/python /home/pi/xxx/.../xxxx/xxx.py


2015年1月20日 星期二

MCP3201 communicates with raspberry pi

MCP3201 communicates with raspberry pi
Reference:



依照下面的block diagram來看
CLK CSinput,raspberry pi 送入
Dout則由MCP3201根據送入的CLK,送出暫存器中的資料
用另外的miso_test大致模仿送入的情形
已經測試過沒問題




python
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

sclk = 11
miso = 9
miso_test = 21
ce = 8

GPIO.setup(sclk,GPIO.OUT)
GPIO.setup(miso,GPIO.IN)
GPIO.setup(miso_test,GPIO.OUT)
GPIO.setup(ce,GPIO.OUT)

### mode(1,1) sclk,ce idles high
GPIO.output(sclk,True)
GPIO.output(ce,True)
GPIO.output(miso_test,False)
Vref = 3.3

while True:
## read enable
GPIO.output(ce,False)
rcv_data = str()
for cnt in range(16): ## generate 16 clock cycle
GPIO.output(sclk,False)

if GPIO.input(miso):
   rcv_data += '1'
else:
   rcv_data += '0'

print ("cnt : %d" %cnt)
print ("rcv_data : %s" %rcv_data)
#### miso test (1V:010011011001)####
if cnt == 3:
GPIO.output(miso_test,True)
elif cnt == 6:
GPIO.output(miso_test,True)
elif cnt == 7:
GPIO.output(miso_test,True)
elif cnt == 9:
GPIO.output(miso_test,True)
elif cnt == 10:
GPIO.output(miso_test,True)
elif cnt == 13:
GPIO.output(miso_test,True)
else:
GPIO.output(miso_test,False)
###################
GPIO.output(sclk,True)

#capture data B11-B0
cal_data = rcv_data[3:15]
print ("cal_data bits : %s" %cal_data)

#transfer bin to dez
#implement formular on spec p.17
cal_data = int(cal_data,2)*(Vref/4096)
print ("voltage : %f" %cal_data)
## read disable
GPIO.output(ce,True)
time.sleep(0.1)


再擷取字串的資料的時候需要注意
字串只會取至右邊界前一個字元,並不包含右邊界
cal_data = rcv_data[3:15] ,所以需要取到第15bit


command line上驗證一下




mosi test 要在前一個bit先拉high





另一種聰明很多的方法 = =

import RPi.GPIO as GPIO
import time
import spidev


GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

Vref = 3.3
spi = spidev.SpiDev()
spi.open(0, 0)

def adc_mcp3201():
    rcv01 = spi.xfer2([0x00,0x00])
    adcout01 = ((rcv01[0] & 31) << 7) + ((rcv01[1] >> 1 )
    print ("adcout01 adc01: %d" %adcout01)
    voltage01 = adcout01*(Vref/4096)
    print ("voltage01 adc01: %0.4f" %voltage01)

while True:
adc_mcp3201()

time.sleep(0.5)




2015年1月16日 星期五

Install SPI on raspberry pi

之前做過的事情,沒有做筆記,參考的網站也已經不支道淹沒到哪裡去了
害我明明半小時可以搞定的事情,搞了一整個早上!!!! !!!!

Reference

先更新在重開機
sudo apt-get update
sudo apt-get upgrade
sudo reboot

下載python dev
sudo apt-get install python-dev

打開raspi-blacklist.conf,spi從黑名單中除去,再重開機
sudo nano /etc/modprobe.d/raspi-blacklist.conf
sudo reboot

鍵入指令lsmod,看看spi_bcm2708在不在
lsmod

下載python spidev
mkdir python-spi
cd python-spi
wget https://raw.github.com/doceme/py-spidev/master/setup.py
wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c
sudo python setup.py install



可以用下面程式測試來看接腳sclkmosi是否有波形出來
#!/usr/bin/python
import spidev
import time
spi = spidev.SpiDev()
spi.open(0,1)
try:
while True:
resp = spi.xfer2([0x01])
time.sleep(0.1)
except KeyboardInterrupt:
spi.close()


之前用舊版的pi,在跑程式前還需要設定這兩樣東西,看看試了,新版的b+好像不用了?????
Sudo modprobe spi-bcm2708
sudo chmod 666 /dev/spidev0.1


PIC ERROR PK3Err0045


    if shows error messages „PK3Err0045: You must connect to a target device to use PICkit“,it means the power of PIC doesnt turn on yet
    Solution : Programmer-> Settings-> Power-> check Power target circuit from PICkit3
    ,Voltage 3.250





Install I2C on raspberry pi

Reference:


鍵入指令
sudo nano /etc/modprobe.d/raspi-blacklist.conf

blacklist i2c-bcm2708前加入#
Ctrl+X → Y → enter


sudo nano /etc/modules
新增i2c-dev 在最後一行
Ctrl+X → Y → enter

下載i2c
sudo apt-get update
sudo apt-get install i2c-tools

增加使用者
sudo adduser pi i2c

重新開機
sudo shutdown -r now


測試I2C
sudo i2cdetect -y 1


2015年1月8日 星期四

Disable Raspberry pi screen sleep

一開始先試了下面的方法,結果不知道哪裡弄錯了
重開機以後,就在也進不了主畫面(悲劇阿....)

# 輸入指令
Disable Raspberry pi screen sleep
# [SeatDefaults] 區域加入下面這行
# don't sleep the screen
xserver-command=X -s 0 dpms

後來找到另一個方法可以成功關掉睡眠
# 輸入指令
sudo apt-get update 
# 下載 xscreensaver  
sudo apt-get install xscreensaver  

Preferences打開Screensaver


Mode 設定成Disable Screen Saver





2015年1月3日 星期六

Partizip Attribute

Reference:
Mittelpunkt C1

Partizip I (Partizip Präsens)
Beschreibt einen Vorgang im Aktiv, der gleichzeitig mit einem anderen Geschehen stattfinden bzw. stattgefunden hat.

Der Abteilungsleiter, der das Vorstellungsgespräch leitete, wurde später vom Personalchef kritisiert.
Der das Vorstellungsgespräch leitende Abteilungsleiter wurde später vom Personalchef kritisiert.

Partizip II (Partizip Perfekt)
Beschreibt meist passivische Vorgänge oder Zustände.

Urlaub, der nicht rechtzeitig genommen wird, verfällt am 31.März des Folgejahres.

Nicht rechtzeitig genommener Urlaub verfällt am 31.März des Folgejahres.



Gerundiv ( zu + Partizip I )

Reference:
Mittelpunkt C1
http://deutsch-im-duett.de/mediapool/98/986879/data/Aspekte3/Aspekte3_L7_Gerundivum.pdf

通常用在書寫上,用來縮短Nebensatz,表示還需要,應該或是還可以做的事情
(Man verwendet das Gerundiv vor allem im formellen schriftlichen Gebrauch, um einen Relativsatz zu verkürzen, es bedeutet, dass man etwas machen muss, soll oder kann

Zu + Partizip I + Endung(形容詞字尾變化)

 Dies sind Daten, die man auswendig lernen sollte.
  Dies sind auswendig zu lernende Daten.
 Situationen, die noch mehrfach durchgespielt werden sollten.
  Noch mehrfach durchzuspielende Situationen.(可分離動詞,zu要放中間)


Aktiv:                Das ist ein Fernseher, den man nicht mehr reparieren kann.
Passiv:             Das ist ein Fernseher, der nicht mehr repariert werden kann.
sein + zu:         Das ist ein Fernseher, der nicht mehr zu reparieren ist.
Gerundivum:  Das ist ein nicht mehr zu reparierender Fernseher.