Hướng dẫn tự lắp đặt hệ thống nghe nhạc lossless và xem phim HD trên ô tô

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
import serial
import time
import requests
import json
import urllib

# Thiet lap ket noi JSON-PRC
#Required header for XBMC JSON-RPC calls, otherwise you'll get a
#415 HTTP response code - Unsupported media type
headers = {'content-type': 'application/json'}

#Host name where XBMC is running, leave as localhost if on this PC
#Make sure "Allow control of XBMC via HTTP" is set to ON in Settings ->
#Services -> Webserver
xbmc_host = 'localhost'

#Configured in Settings -> Services -> Webserver -> Port
xbmc_port = 8888
#Base URL of the json RPC calls. For GET calls we append a "request" URI
#parameter. For POSTs, we add the payload as JSON the the HTTP request body
xbmc_json_rpc_url = "http://" + xbmc_host + ":" + str(xbmc_port) + "/jsonrpc"

#//Thiet lap ket noi JSON-PRC

# Gan cac nut tren vo lang
up='3DA2'
down= '3DA1'
right='3DA2'
left='3DA3'
select='3DA4'
back='3DA5'
play_pause='3DA6'
home='3DA7'
shuthdown='3DA8'
# //Gan cac nut tren vo lang

def readlineCR(port):
rv = ""
while True:
ch = port.read()
rv += ch
if ch=='\r' or ch=='':
return rv

port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0)

# Kiem tra xem da co ket noi chua, neu chua cho 5s sau kiem tra lai
while (port.isOpen() == False):
print("serial is not connected!")
time.sleep(5)


# Gui lenh dump CANBUS

port.write("ATL1\r")
port.write("ATH1\r")
port.write("ATSP0\r")
port.write("ATS1\r")
port.write("ATAL\r")
port.write("ATMA\r")

#if port.isOpen():
#print("serial is open!")

while True:
rcv = readlineCR(port)
if (rcv == play_pause):
#Payload for the method to get the currently playing / paused video or audio
payload = {"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": 1}
url_param = urllib.urlencode({'request': json.dumps(payload)})

response = requests.get(xbmc_json_rpc_url + '?' + url_param, headers=headers)

#response.text will look like this if something is playing
#{"id":1,"jsonrpc":"2.0","result":[{"playerid":1,"type":"video"}]}
#and if nothing is playing:
#{"id":1,"jsonrpc":"2.0","result":[]}

data = json.loads(response.text)
#result is an empty list if nothing is playing or paused.
if data['result']:
#We need the specific "playerid" of the currently playing file in order
#to pause it
player_id = data['result'][0]["playerid"]

payload = {"jsonrpc": "2.0", "method": "Player.PlayPause","params": {"playerid": player_id }, "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)

#response.text will look like this if we're successful:
#{"id":1,"jsonrpc":"2.0","result":{"speed":0}}

if (rcv == up):
payload = {"jsonrpc": "2.0", "method": "Input.Up", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)


if (rcv == down):
payload = {"jsonrpc": "2.0", "method": "Input.Down", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)

if (rcv == right):
payload = {"jsonrpc": "2.0", "method": "Input.Right", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)

if (rcv == left):
payload = {"jsonrpc": "2.0", "method": "Input.Left", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)

if (rcv == select):
payload = {"jsonrpc": "2.0", "method": "Input.Select", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)

if (rcv == back):
payload = {"jsonrpc": "2.0", "method": "Input.Back", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)

if (rcv == home):
payload = {"jsonrpc": "2.0", "method": "Input.Home", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)

if (rcv == shuthdown):
payload = {"jsonrpc": "2.0", "method": "System.Shutdown ", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
 

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
Cụ [@TVPL;118299] ơi, cụ đọc cái quyển này cháu viết cũng khá nhiều rồi.

Xem mục 2. và mục 6.3 để đẩy nhanh tiến độ điều khiển vô lăng ạ. Cháu nghiên cứu mục 6.3 mới là lý thuyết, chưa kiểm nghiệm được nên ko biết nó có chạy được không. Có gì cụ check giúp cháu xem mã code có vấn đề gì không với.

http://tranhchuthap.vn/bai-viet/canbus/Hack-CAN-BUS-Dieu-khien-volang.pdf

Có thể nó chưa chạy nhưng cháu nghĩ chúng ta đã tiến rất gần đến đích rồi
 
Chỉnh sửa cuối:

TVPL

Xe container
Biển số
OF-118299
Ngày cấp bằng
26/10/11
Số km
6,741
Động cơ
-3,241 Mã lực
Cụ [@TVPL;118299] ơi, cụ đọc cái quyển này cháu viết cũng khá nhiều rồi.

Xem mục 2. và mục 6.3 để đẩy nhanh tiến độ điều khiển vô lăng ạ. Cháu nghiên cứu mục 6.3 mới là lý thuyết, chưa kiểm nghiệm được nên ko biết nó có chạy được không. Có gì cụ check giúp cháu xem mã code có vấn đề gì không với.

http://www.mediafire.com/view/7yyyr9rxybyxyof/Hack_CAN-BUS-Dieu_khien_volang.pdf

Có thể nó chưa chạy nhưng cháu nghĩ chúng ta đã tiến rất gần đến đích rồi
Vâng cụ để em tranh thủ check nhé, (b)
 

tubon

Xe tải
Biển số
OF-367491
Ngày cấp bằng
20/5/15
Số km
395
Động cơ
257,922 Mã lực
Nơi ở
Hà Nội
bài dài ý nghĩa. cố gắng nghiên cứu thêm :3
 

phuochalan

Xe tải
Biển số
OF-352785
Ngày cấp bằng
29/1/15
Số km
283
Động cơ
269,370 Mã lực
Cố lên các cụ. Em nóng nòng nắm rồi
 

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
Cố lên các cụ. Em nóng nòng nắm rồi
nóng "nòng" là nóng "cò" nhé, còn nóng "lòng" là sốt ruột ạ o:-)
Cụ chiến đi, có gì cháu trao đổi thêm, còn để cháu vào cuộc thì phải đến lúc cháu về. Dạo này luận án đang đến hồi cuối, bận quá với lại ở bên này cháu ko có xe để thử
 

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
Vâng cụ để em tranh thủ check nhé, (b)
Cháu còn phát hiện được không chỉ dùng các nút trên vô lăng mà hầu như các nút trên xe nếu có để điều khiển nếu con xe đó nó hòa mạng cả các nút này. Ví dụ nút khóa kính, nút nâng hạ kính, công tắc đóng mở đèn, xi nhan.... nó đều gửi một mã lệnh nhất định vào mạng CANBUS .
 

TVPL

Xe container
Biển số
OF-118299
Ngày cấp bằng
26/10/11
Số km
6,741
Động cơ
-3,241 Mã lực
Cháu còn phát hiện được không chỉ dùng các nút trên vô lăng mà hầu như các nút trên xe nếu có để điều khiển nếu con xe đó nó hòa mạng cả các nút này. Ví dụ nút khóa kính, nút nâng hạ kính, công tắc đóng mở đèn, xi nhan.... nó đều gửi một mã lệnh nhất định vào mạng CANBUS .
Hì, em tính bắt thêm và cảnh báo lỗi luôn và ngay, đặt cảnh báo tốc độ... nữa cơ, cái này hơi kỳ công thêm tí :)
 

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
Hì, em tính bắt thêm và cảnh báo lỗi luôn và ngay, đặt cảnh báo tốc độ... nữa cơ, cái này hơi kỳ công thêm tí :)
Đặt cảnh báo thì dễ, cháu cũng có thể lập trình cho nó kêu khi đạt tốc độ nào đó, nhưng vấn đề là tốc độ thay đổi theo cung đường và có nhiều mức tốc độ thì cũng chưa nghĩ cách nào cho nó bớt bất tiện hơn. Giả sử thay đổi mức cảnh báo bằng cách nào nhanh nhất và tiện nhất lúc đang lái xe mà mình nhìn thấy biển báo hạn chế tốc độ thì có thể set ngay lập tức.
Cụ có kinh nghiệm làm addon thì làm cái addon này là tiện nhất. Cháu mới chỉ biết tý python thôi

Cháu nghĩ rằng với chút kiến thức lập trình, cộng thêm đọc kỹ cái quyển này http://elmelectronics.com/DSheets/ELM327DS.pdf và quyển cháu đã biên soạn là có thể hack rất sâu vào hệ thống được rồi. Nếu biết lập trình trên di động thậm chí có thể khởi động xe bằng điện thoại. Bật điều hòa và khởi động xe trước khi mình ra xe từ xa cho nó mát trước chả hạn, hay trường hợp quên chìa khóa thông minh trong xe mà cửa bị khóa khi mình ở bên ngoài vẫn còn điện thoại làm chìa dự phòng chẳng hạn..... biết về CAN BUS có thể làm rất nhiều thứ với cái xe và các thứ liên kết với nó.
 
Chỉnh sửa cuối:

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
Bác Chủ Thớt ơi, cái này đã ok chưa cho Em số để em alo và thiết kế giúp em một bộ nha.
Thiết kế cái gì cơ? cụ mua về cắm vào xe như cắm đầu đĩa VCD ở nhà vào tivi chứ có gì mà thiết kế. Cụ đang Spam đấy phỏng, nhìn 3km nghi lắm
 

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
Cụ [@TVPL;118299] Mã Python điều khiển từ xa đã hoạt động, mã nhận tín hiệu trả về từ odbii cũng đã nhận!

Việc còn lại duy nhất đến lúc hoàn thành cái điều khiển vô lăng là tìm giá trị của từng nút là gì/
Ngoài ra còn việc nữa là lập trình để tích hợp nhiều tính năng vào một nút tùy hoàn cảnh. Ví dụ khi đang nghe nhạc hoặc xem video thì nút Up là tăng âm lượng, Down là giảm âm lượng, Right là tua tới, Left là tua lùi ; OK là Play/Pause. Còn khi không play cái gì thì chúng là các nút điều hướng và select. Cái này thì không khó

Đoạn trong file hôm trước còn sửa một chút từ đoạn while true

while True:
rcv = readlineCR(port)
#rcv1 = input('Nhap lenh:')
#rcv=""+rcv1+""
if (rcv == up):
payload = {"jsonrpc": "2.0", "method": "Input.Up", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == down):
payload = {"jsonrpc": "2.0", "method": "Input.Down", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == right):
payload = {"jsonrpc": "2.0", "method": "Input.Right", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == left):
payload = {"jsonrpc": "2.0", "method": "Input.Left", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == select):
payload = {"jsonrpc": "2.0", "method": "Input.Select", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == back):
payload = {"jsonrpc": "2.0", "method": "Input.Back", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == home):
payload = {"jsonrpc": "2.0", "method": "Input.Home", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == shuthdown):
payload = {"jsonrpc": "2.0", "method": "System.Shutdown", "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == volup):
payload = {"jsonrpc": "2.0", "method": "Application.SetVolume", "params": { "volume": "increment" }, "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == voldown):
payload = {"jsonrpc": "2.0", "method": "Application.SetVolume", "params": { "volume": "decrement" }, "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
elif (rcv == play):
#Payload for the method to get the currently playing / paused video or audio
payload = {"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": 1}
url_param = urllib.urlencode({'request': json.dumps(payload)})
response = requests.get(xbmc_json_rpc_url + '?' + url_param, headers=headers)
#response.text will look like this if something is playing
#{"id":1,"jsonrpc":"2.0","result":[{"playerid":1,"type":"video"}]}
#and if nothing is playing:
#{"id":1,"jsonrpc":"2.0","result":[]}
data = json.loads(response.text)
#result is an empty list if nothing is playing or paused.
if data['result']:
#We need the specific "playerid" of the currently playing file in order
#to pause it
player_id = data['result'][0]["playerid"]
payload = {"jsonrpc": "2.0", "method": "Player.PlayPause","params": {"playerid": player_id }, "id": 1}
response = requests.post(xbmc_json_rpc_url, data=json.dumps(payload),headers=headers)
#response.text will look like this if we're successful:
#{"id":1,"jsonrpc":"2.0","result":{"speed":0}}
else:
time.sleep(0.1)
 

mr.blueboy

Xe đạp
Biển số
OF-357577
Ngày cấp bằng
10/3/15
Số km
20
Động cơ
261,500 Mã lực
Nơi ở
561 Điện Biên Phủ, phường 1, quận 3, HCM
Chỉ cần mua một cáp chia tín hiệu để dẫn hình đến tất cả các màn hình trên xe. Tiếng thì cho ra loa trên xe qua cổng AUX

Tham khảo mô hình lắp đặt: http://makezine.com/projects/raspberry-pi-car-computer-2/

+. Màn hình cho hàng ghế sau:
- Loại mua sẵn với tựa đầu: http://vietnamese.alibaba.com/product-gs/7-inch-headrest-dvd-car-tft-lcd-monitor-for-back-seat-entertainment-60107315259.html
- Loại tự chế vào tựa đầu hiện tại (có thể dùng màn hình như mục 2.2.2 để chế vào đây):
Video phần 1: http://www.youtube.com/watch?v=HCn6C9YmzpA
Video phần 2: http://www.youtube.com/watch?v=bxJeJ7kExqI
Video phần 3: http://www.youtube.com/watch?v=Zq0Cu_KS7t8

+. Màn hình lắp phía trước xe (có thể dùng màn hình như mục 2.2.2 để chế vào đây)

- Vài Video chế:

http://www.youtube.com/watch?v=VIfWcU0jQr8&feature=youtu.be

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

- Loại mua sẵn: http://vietnamese.alibaba.com/product-gs/7-inch-tft-lcd-color-monitor-with-3-video-input-60082363203.html
- Loại phải tự chế thêm: http://www.buydisplay.com/default/7-inch-lcd-screen-tft-display-module-wvga-800x480-at070tn90-at070tn92

+. Card âm thanh chất lượng cao DAC cho ra cả đường cổng quang
http://www.hifiberry.com/digiplus/

+. Bàn phím + chuột tất cả trong 1 rất đẹp (dùng cái này rồi thì không cần điều khiển từ xa nữa)
http://www.amazon.com/Rii-Wireless-Touchpad-Keyboard-Android/dp/B00JO80LUI

2.4. Thay đổi toàn bộ kết cấu hệ thống âm thanh trên xe với Pi

Cái này khá khó làm với những cụ mợ không rành về kỹ thuật điện tử nên các cụ mợ ngó qua xem người ra có thể làm gì với Pi là chính. Ai đam mê thì nghiên cứu.
- Bài thứ 1 tại đây:
http://www.engineering-diy.blogspot.ro/2013/08/car-pc-projectaugust-2013-update.html
- Bài thứ 2 tại đây:
http://www.engineering-diy.blogspot.ro/2014/04/raspberry-pi-carpc-april-2014-updates.html
- Bài cập nhật tháng 11/2014
http://www.engineering-diy.blogspot.ro/
Cụ chủ cho hỏi cái, hiện taịem đã setup thành công pi 2 cho đầu dvd pioneer 8750bt dẫn hình và tiếng qua HDMI. Nhưng đang bị cái trường hợp là hình ra phía sau (Màn hình gối đầu phía sau) ko được. Mặc dù các nguồn USB, SD, DVD tất cả đã OK, cụ hướng dẫn em làm sao để out ra phía sau của PI 2 vậy cụ?
Và thấy cụ có gắn thêm soundcard cho PI, cụ chủ mua ở đâu chỉ cho em được ko ạ?

Xin hầu rượu cụ!
 

ngochoangimsat

Xe tăng
Biển số
OF-201349
Ngày cấp bằng
9/7/13
Số km
1,983
Động cơ
342,040 Mã lực
Cụ chủ cho hỏi cái, hiện taịem đã setup thành công pi 2 cho đầu dvd pioneer 8750bt dẫn hình và tiếng qua HDMI. Nhưng đang bị cái trường hợp là hình ra phía sau (Màn hình gối đầu phía sau) ko được. Mặc dù các nguồn USB, SD, DVD tất cả đã OK, cụ hướng dẫn em làm sao để out ra phía sau của PI 2 vậy cụ?
Và thấy cụ có gắn thêm soundcard cho PI, cụ chủ mua ở đâu chỉ cho em được ko ạ?

Xin hầu rượu cụ!
Cụ dùng pioneer có đường vào hdmi thì cụ tìm card âm thanh làm gì cụ ơi? Cụ cần hiểu về tác dụng của nó chứ ạ.
Màn phía sau nếu cụ xem bình thường trên dvd pioneer thì cái màn gối sau có lên hình ko ạ? Nếu ko thì chúng ko có liên hệ về điện thì cần nối đường video out trên dvd ra chúng nó. Còn nên bình thiờng chỉ là ko lên với rpi thì cụ xem lại setting thôi
Tại vì tùy theo thợ lắp, có thể.màn gối ko liên quan gì đến màn phía trước hoặc cũng có thể liên quan. Nếu ko liên qua thì cần dẫn dây hình về cho nó
 
Chỉnh sửa cuối:

đii bộ

[Tịch thu bằng lái]
Biển số
OF-367607
Ngày cấp bằng
21/5/15
Số km
83
Động cơ
254,930 Mã lực
bài viết rất bổ ích, e mún nhờ cụ chủ làm hộ e một bộ được kô ạ.có gì cụ inbox cho e với ạ
 

kuty

Xe tải
Biển số
OF-20290
Ngày cấp bằng
23/8/08
Số km
222
Động cơ
502,520 Mã lực
E lắp xong va thay dây chống nhiễu rồi nhưng tín hiệu âm thanh ra vẫn loet xoẹt đặc biệt khi ga to lên nó sẽ kêu to ,vậy có nên mua cạc âm thanh ko nhờ cac cụ tư vấn giúp
 

mobilecare

Xe máy
Biển số
OF-370196
Ngày cấp bằng
12/6/15
Số km
59
Động cơ
252,500 Mã lực
Cháu cũng đam mê khoa học! Cháu thấy mấy thớt của cụ cháu đều theo dõi. Có gì cháu sẽ cần cụ chỉ bảo thêm đấy
 

thinhglam

Xe tải
Biển số
OF-36273
Ngày cấp bằng
28/5/09
Số km
267
Động cơ
475,170 Mã lực
Cụ xem lỗi có giống em ở đây ko http://www.otofun.net/threads/785478-huong-dan-tu-lap-dat-he-thong-nghe-nhac-lossless-va-xem-phim-hd-tren-o-to/page118
nếu giống thì cụ vào chỗ cài đặt add-on playback ấy, config thay đường dẫn lưu sang chỗ khác là đc. Có hai lý do xảy ra như cụ TVPL đã nói ấy :
- Do cắt điện đột ngột đúng vào lúc cái add-on đang ghi giá trị để lưu, làm hỏng file và ghi đè lại lần sau ko đc nếu như cùng 1 thư mục --> đổi thư mục lưu là đc.
- Do cập nhật bản XBMC, nó thêm bảo mật quyền đọc/ghi nên ko thể toàn quyền ghi lên thư mục đã định của cái add-on. --> đổi sang lưu file ở đĩa cứng, USB thủ xem.
Cần giản tần suất ghi file ( mặc định là 5s) lên cao hơn 30, 60s... để xác suất bị hỏng file khi cúp điện đột ngột giảm xuống. Chỉ có điều sau khi bật lại Pi thì ghe lại khoảng xa hơn 1 chút mà thôi.
Cái tự phát lại sau một hồi lại lỗi rồi cụ ạ.

Từ ngày nó không chạy, em lại lười nghe nhạc. Toàn 91MHZ Vov giao thông.
 

TVPL

Xe container
Biển số
OF-118299
Ngày cấp bằng
26/10/11
Số km
6,741
Động cơ
-3,241 Mã lực
Cụ vẫn phải Check lại cái add on tự phát lại giúp e cái.
Của em chạy toàn lỗi. Từ lúc lỗi, toàn nghe 91MHz thôi.
Ểu nhỉ, em chạy cái bản v1.1 ấy từ hồi đó đến giờ :((
- cụ đổi path log ra ngoài thẻ SD chưa ?
- cụ đang chạy RaspBMC hay OSMC ? Em đang chạy OSMC RC3 for Pi 1.
- Thuý Nga sản xuất video không kịp cho em xem, dạo này toàn convert M4A Plus để nghe trên xe :)
 
Thông tin thớt
Đang tải

Bài viết mới

Top