2023年9月22日 星期五

數莓派 開關機按鈕

參考資料來源

根據大大的分享,開關機按鈕比預期的簡單。

只要在/boot/config.txt 最後加上以下段落

dtoverlay=gpio-shutdown



然後將 2pin按鈕的兩根線接上下圖GPIO3, Ground兩個Pin腳就完成了。



另外,建議用2pin無段按鈕

這開關行為是 關機(off)時按下開機(on);開機(On)時,按下 關機(off),


如果是買1/0的翹翹板開關可能會發生,1變成關,0變成開;或者要關開一次開機,在開關一次關機


--- eeprom conifg 設定

用來設定GPIO啟動參數

編輯指令:

sudo -E rpi-eeprom-config --edit


WAKE_ON_GPIO=1 (設定可以用GPIO來啟動數莓派)

POWER_OFF_ON_HALT=1 (當WAKE_ON_GPIO=0, 且此項=1時,在HALT後GPIO則不供電)


2023年6月17日 星期六

[數媒派]修改pi帳號

預設root 帳號關閉,且ssh 不允許root連線;系統只有預設PI,但有消息指出之後不會再有預設PI帳號,待確認後續OS版本。

先使用pi帳號登入,再執行以下動作:

1) 啟用root帳號

- sudo passwd root

- 輸入root帳號密碼

2) 解鎖root帳號

- sudo passwd -u root

- 解鎖後可以透過遠端連線來使用root帳號登入,但還無法使用ssh登入

3) 設定ssh連線

- sudo nano /etc/ssh/sshd_config

- 找到PermitRootLogin的位置,新增一行PermitRootLogin yes

- 儲存檔案後,重新啟動;便可使用root帳號登入

4) 以PI帳號登入,在raspberry 設定中 關閉自動以pi登入功能


變更pi帳號

再變更pi帳號前要使用root帳號登入,以root登入後執行以下動作:

-sudo usermod -l newpi pi

- 以上指令將pi改為newpi

-usermod -m -d /home/newpi newpi

以上指令修改目錄pi為newpi

- 修改後newpi這個帳號仍擁有pi帳號的權限


關閉root帳號

- sudo passwd -l root

- sudo nano /etc/ssh/sshd_config

- 找到PermitRootLogin的位置,註解掉本來增加的PermitRootLogin yes


設定autostart

- cd  .config/lxsession/LXDE-pi/

- 在此路徑中新增autostart

- autostart指令

    @command

這樣重開機後,就會用newpi 登入並自動執行程式


參考資料

參考資料

參考資料

2022年12月8日 星期四

購車心得 CC Corolla Cross 油電豪華 + 影音套件 (讓我意外的事)

新手購車,單純分享購車後讓我有點意外的地方,還有覺得購車前準備不足的地方。


時速30以上才會反應的A柱盲點偵測(BSM)

交車後開在路上就發現,怎麼旁邊機車經過盲點沒有動作?

再回廠找業務上車測試,業務也答不上來;經測試幾次整理如下:

  - 30以上才會有反應

  - 當打方向燈,偵測到有車時會快速閃爍

PS. 原廠的後視鏡BSM(尊爵、旗艦版)啟動時速應該小於30KM。停等紅綠燈時有看到CC、 RAV4幾乎到停住才消失的後視鏡BSM燈號,建議在乎BSM功能的人,千萬要買尊爵以上版本

以個人行車經驗來說,市區的低速轉彎因為機車、腳踏車,或行人在視線死角造成意外,盲點警示功能也很重要。


只亮1/3 的LED尾燈

由於現場沒車,問業務時他也只說豪華版的尾燈跟其他款一樣,只是裡面是LED燈泡,不是光條。

- 結果後來才發現只有車身左右那兩點會亮,尾門的部分不會亮。




前霧燈跟後霧燈分兩個開關,後霧燈原來只有一小格

只有旗艦版有前霧燈,其他版本只有後霧燈;所以決定加裝前霧燈。

- 但後霧燈開關在燈光控制把手上,前霧燈開關在左側冷氣口的下方面板

- 而且後霧燈是在左後尾燈組尾門上的一小格... 




購車過程回顧起來讓我覺得做錯的地方,分享給各位:

1) 沒先對報價結構做功課: 

- 購車總費用= (原車價- 空車業務折扣) + (配件價格- 業務配件折扣) + (保險 - 業務折扣) + 領牌手續費 , 有貸款的話再加上貸款息

- 一開始業務可能會說,可以折5萬、7萬... 其實都是有條件的;應該要先確認需要的項目再進行詢價跟比價

- 尤其像保險我覺得價差也蠻大的,連車買的乙式車險要四萬多再退傭幾千到1.5萬;但我自己保其他產險公司只要兩萬。


2) 應該先在網路詢價:

大多數的業務都可以跨區做生意,而且看來有些業務願意給的折扣比較多,再到門市之前應該先在網路上徵菜單詢價。

- 每區的業務報價的貸款息跟保險退傭可能有些差異,應該多問才比較能找到理想的金額


3) 優惠只到今天的話術:

今天做決定可以再折多少....

- 當有做前兩項後,再降台時聽到業務這樣說,就可以帥氣的走人了;不折其實找其他家的業務就好


4) 這個月領牌的車可以多折多少或下個月會貴多少,但這個月只有XX車... 

- 本來只想買油電尊爵,但就因為當月沒有生產尊爵版的車所以改成豪華再加影音套件

- 業務為了拚當月業績會說這種話,所以我在11月中下訂了;結果12月交車時再用幫其他人問的名義問一次價格...  還不是一樣!  那為什麼不直接等下個月初在訂想要的車款。


總之,開新車還是很開心。 

但如果功課有做足,購車過程跟拿到車使用後應該會更開心。


2022年11月14日 星期一

[Python] 透過python編輯文字檔

 import os


#清除檔案中的文字後關閉

f= open('/home/pi/Documents/test.txt', 'w').close()


#在現有檔案中寫入新文字

f=open('/home/pi/Documents/tmrtV05/test.txt','a')

testStr=('This texts for test \n'+

    'and TEST')

f.writelines(testStr)

f.close()


會寫入以下文字到/test.txt中

This texts for test 

and TEST


2022年10月14日 星期五

[Python]中文編碼轉換Unicode

透過python搜尋SSID時, 發現會變成Unicode,所以查了一下編碼跟解碼的方法。

SSID看來編碼方式是utf-8,但其實編碼方式蠻多的,就列出來可以看一下長相。

以下程式碼:

#coding:utf-8

import sys


chStr='中文字En'

print (chStr,type(chStr))

輸出: 

中文字En <class 'str'>

print ('-轉utf8------')

UTF8_chStr=chStr.encode('utf-8')

print (UTF8_chStr,type(UTF8_chStr))

UTF8_chStr_decode=chStr.encode('utf-8').decode('utf-8')

print (UTF8_chStr_decode,type(UTF8_chStr_decode))

輸出: 

-轉utf8------

b'\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97En' <class 'bytes'>

中文字En <class 'str'>


print ('-轉utf16------')

UTF16_chStr=chStr.encode('utf-16')

print (UTF16_chStr,type(UTF16_chStr))

UTF16_chStr_decode=chStr.encode('utf-16').decode('utf-16')

print (UTF16_chStr_decode,type(UTF16_chStr_decode))

輸出: 

-轉utf16------

b'\xff\xfe-N\x87eW[E\x00n\x00' <class 'bytes'>

中文字En <class 'str'>


print ('-轉gbk------')

gbk_chStr=chStr.encode('gbk')

print (gbk_chStr,type(gbk_chStr))

gbk_chStr_decode=chStr.encode('gbk').decode('gbk')

print (gbk_chStr_decode,type(UTF8_chStr_decode))

輸出: 

-轉gbk------

b'\xd6\xd0\xce\xc4\xd7\xd6En' <class 'bytes'>

中文字En <class 'str'>


print ('-unicode_escape------')

uni_chStr=chStr.encode('unicode_escape')

print (uni_chStr,type(uni_chStr))

uni_chStr_decode=chStr.encode('unicode_escape').decode('unicode_escape')

print (uni_chStr_decode,type(uni_chStr_decode))

輸出: 

-unicode_escape------

b'\\u4e2d\\u6587\\u5b57En' <class 'bytes'>

中文字En <class 'str'>


2022年9月26日 星期一

[Python]透過Python 程式連線無線網路- pywifi 使用

[pywifi參考網址]


概念是將無線網路參數加入wpa_supplicant.conf來進行連線,若不用語法控制,其實直接將網路資訊設定在wpa_supplicant.conf中也可以。

位置:

sudo nano/etc/wpa_supplicant/wpa_supplicant.conf


設定值:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=TW

#無加密網路
network={
        ssid="test"
        key_mgmt=NONE
        disabled=1
}

#有加密網路
network={
        ssid="test2"
        psk="password"
        key_mgmt=WPA-PSK
}


安裝Pywifi

pip install pywifi


連線範例程式:

import pywifi

import sys

import time

from pywifi import const


wifi=pywifi.PyWiFi()

ifaces= wifi.interfaces()[0]

profiles = ifaces.network_profiles()


ifaces.disconnect()

profile=pywifi.Profile()

profile.ssid="[無線網路名稱]"

profile.key="[無線網路密碼]"

profile.auth=const.AUTH_ALG_OPEN

profile.akm.append(const.AKM_TYPE_WPA2PSK)

profile.cipher=const.CIPHER_TYPE_CCMP

#移除舊的設定參數

ifaces.remove_all_network_profiles()

#加入新的的設定參數

new_profile=ifaces.add_network_profile(profile)

time.sleep(2)

print('add profiles.ssid:'+str(profiles[0].ssid))

print('------')

#進行連線

ifaces.connect(new_profile)

#等候連線

time.sleep(10)


測試經驗是 pywifi的狀態檢查通能不太可靠,等候連線的時間可能10秒到1分鐘以上。


相關profile參數補充如下:

# Define interface status.

IFACE_DISCONNECTED = 0

IFACE_SCANNING = 1

IFACE_INACTIVE = 2

IFACE_CONNECTING = 3

IFACE_CONNECTED = 4


# Define auth algorithms.

AUTH_ALG_OPEN = 0

AUTH_ALG_SHARED = 1


# Define auth key mgmt types.

AKM_TYPE_NONE = 0

AKM_TYPE_WPA = 1

AKM_TYPE_WPAPSK = 2

AKM_TYPE_WPA2 = 3

AKM_TYPE_WPA2PSK = 4

AKM_TYPE_UNKNOWN = 5


# Define ciphers.

CIPHER_TYPE_NONE = 0

CIPHER_TYPE_WEP = 1

CIPHER_TYPE_TKIP = 2

CIPHER_TYPE_CCMP = 3

CIPHER_TYPE_UNKNOWN = 4


KEY_TYPE_NETWORKKEY = 0

KEY_TYPE_PASSPHRASE = 1


搜尋無線網路範例程式:

wifi=pywifi.PyWiFi()#建立一個wifi物件

ifaces= wifi.interfaces()[0]#取第一個無限網絡卡

print(ifaces.name())#輸出無線網絡卡名稱

ifaces.scan()

scanResult = ifaces.scan_results()

time.sleep(10)

if scanResult is not None:

    for profile in scanResult:

        ssid = profile.ssid

        print(profile)

        print('SSID:'+profile.ssid)

        print('AUTH:'+str(profile.auth))

        print('cipher:'+str(profile.cipher))

        print('AKM:'+str(profile.akm))

else:

    print ('未找到wifi')

2022年7月5日 星期二

[JS]等候一段時間後執行 setInterval

設定延後一段時間在執行某個動作

setInterval( function(){[某個動作]},[延後毫秒]);


Sample:

setInterval(function(){

    console.log('等一下~')}, 2000);