Hikvision DS-TVL224-4-5Y Python 顯示部分驅(qū)動(dòng)代碼
import socket
from threading import Thread
thread_lock = False
"""
對(duì)接海康威視 DS-TVL224-4-5Y 64*64
4行,每行可以顯示4個(gè)漢字
"""
def receive_thread(s: socket):
while thread_lock:
# get the socket send buffer size and receive buffer size
# s_send_buffer_size = s.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
s_receive_buffer_size = s.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
# print("client TCP send buffer size is %d" % s_send_buffer_size)
print("client TCP receive buffer size is %d" % s_receive_buffer_size)
if 0 != s_receive_buffer_size:
msg = s.recv(s_receive_buffer_size)
print("received data: %s", msg.decode('utf-8'))
# print("recv len is : [%d]" % len(msg))
def close_socket(s: socket):
global thread_lock
thread_lock = False
s.close()
print("socket closed!")
def start_tcp_client(ip: str, port: int):
global thread_lock
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
print("start connect to server...")
s.connect((ip, port))
thread_lock = True
send_data_to_screen(s, "測(cè)試數(shù)據(jù)", 1)
except socket.error:
print("fail to connect to server进胯!")
return s
def list_split(items, n):
"""
每隔指定位數(shù)切割字符串,返回子字符串?dāng)?shù)組
:param items: 字符串
:param n: 間隔位數(shù)
:return: 切割后的字符串列表
"""
return [items[i:i + n] for i in range(0, len(items), n)]
def get_length_4list(x_len: int):
"""
輸入數(shù)字沫换,輸出四位長(zhǎng)度的大端列表
:param x_len: 數(shù)字
:return: 四位長(zhǎng)度的大端列表
"""
xx = '{:08x}'.format(x_len)
after_split = list_split(xx, 2)
after_split.reverse()
return [int(x, 16) for x in after_split]
def send_data_to_screen(s: socket, data: str, color: int = 1):
cmd_text = list()
cmd_text.append([0x55, 0xAA, 0x00, 0x00, 0x01, 0x00, 0x00, 0xDA, 0x00, 0x00]) # 數(shù)據(jù)頭
cmd_text.append([0x3D, 0x00, 0x00, 0x00]) # 1 包長(zhǎng)度(數(shù)據(jù)長(zhǎng)度 + 51)
cmd_text.append([0x01, 0x01])
cmd_text.append([0x3D, 0x00, 0x00, 0x00]) # 3 幀長(zhǎng)度(數(shù)據(jù)長(zhǎng)度 + 51)
cmd_text.append([0x01, 0x01])
cmd_text.append([0x3C, 0x00, 0x00, 0x00]) # 5 節(jié)目長(zhǎng)度(數(shù)據(jù)長(zhǎng)度 + 50)
cmd_text.append([0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01])
cmd_text.append([0x24, 0x00, 0x00, 0x00]) # 7 區(qū)域數(shù)據(jù)長(zhǎng)度 (數(shù)據(jù)長(zhǎng)度 + 26)
cmd_text.append([0x0E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00])
cmd_text.append([color]) # 9 顏色 01紅 02綠 03黃
cmd_text.append([0x00, 0x00, 0x01, 0xFF, 0x01, 0x01, 0x10])
cmd_text.append([0x0A, 0x00, 0x00, 0x00]) # 11 數(shù)據(jù)長(zhǎng)度 低位在前
cmd_text.append([0xD2, 0xBB, 0xC2, 0xB7, 0xC6, 0xBD, 0xB0, 0xB2, 0x38, 0x36]) # 數(shù)據(jù)內(nèi)容
cmd_text.append([0x00, 0x00, 0x0D, 0x0A]) # 13 幀尾
cmd_text[12] = list(bytes(data.encode('GB2312')))
text_length = len(cmd_text[12])
cmd_text[11] = get_length_4list(text_length)
cmd_text[7] = get_length_4list(text_length + 26)
cmd_text[5] = get_length_4list(text_length + 50)
cmd_text[1] = cmd_text[3] = get_length_4list(text_length + 51)
cmd_data = list()
for index, item in enumerate(cmd_text):
cmd_data.extend(item)
s.send(bytes(cmd_data))
if __name__ == '__main__':
x_socket = start_tcp_client('192.168.8.174', 10000)
# t = Thread(target=receive_thread, args=(x_socket,))
# t.start()
# t.join()