前言:
需求是想在通过程序动态控制显示屏显示二维码,最开始有些担心led这种点阵屏会不会对二维码显示出来后无法识别,实际测时候发现是没问题的。对于显示文字和语音播报,csdn上已经有大神有完整的代码。
海康威视道闸进出口LED屏DS-TVL224系列开发C#源码_ds-tvl224原厂程序及技术指导资料-CSDN博客
开始以为会是个很简单的事情,但实际很悲催,找不到显示二维码的资料,全网搜了很多止步在显示文字和语音播报,官网就是个渣,中文网站内容不如英文网站内容多,但也没有啥帮助。到我写这篇文章前,我找到了一个思路可以通过程序控制显示二维码,but是固定的内容,还没找到完美的解决方案。
解决问题的过程
一、设备调试工具
1. 下载地址:
不知道为什么官网竟然下载不到,可以点击下面地址下载。【免费】海康威视道闸进出口LED屏DS-TVL224系列的调试工具,程序中密码led886,管理员密码就不得而知资源-CSDN文库
2. 工具简单实用教程
线路连接很简单,网口接网线,电源直接接220v市电就可以了。
双击搜到的设备,可以在这里修改设备的IP地址,其他参数就不建议大家修改了
主界面置发送测试的文本内容,换行通过Ctrl+Enter换行,配置完成后再点击常规信息发送内容,看显示屏是否显示配置的内容
其他操作包括发送二维码显示都很简单,拿到软件配合屏幕就很快可以上手。
二、 程序控制显示的代码逻辑
代码的核心就是建立TCP客户端,按照规则发送包给屏幕的地址,端口是10000,那么难的地方就是包怎么够造了。
1. 发送文本
byte[] cmd_text_0 = { 0x55, 0xAA, 0x00, 0x00, 0x01, 0x00, 0x00, 0xDA, 0x00, 0x00 };
byte[] cmd_text_1 = { 0x3D, 0x00, 0x00, 0x00 };//包长度(数据长度+51)
byte[] cmd_text_2 = { 0x01, 0x01 };
byte[] cmd_text_3 = { 0x3D, 0x00, 0x00, 0x00 };//帧长度(数据长度+51)
byte[] cmd_text_4 = { 0x01, 0x01 };
byte[] cmd_text_5 = { 0x3C, 0x00, 0x00, 0x00 };//节目长度(数据长度+50)
byte[] cmd_text_6 = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
byte[] cmd_text_7 = { 0x24, 0x00, 0x00, 0x00 };//区域数据长度 (数据长度+26)
byte[] cmd_text_8 = { 0x0E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00 };
byte[] cmd_text_9 = { 0x02 };//颜色 01 红 02 绿
byte[] cmd_text_10 = { 0x00, 0x00, 0x01, 0xFF, 0x01, 0x01, 0x10 };
byte[] cmd_text_11 = { 0x0A, 0x00, 0x00, 0x00 };//数据长度 低位在前
byte[] cmd_text_12 = { 0xD2, 0xBB, 0xC2, 0xB7, 0xC6, 0xBD, 0xB0, 0xB2, 0x38, 0x36 };//数据内容
byte[] cmd_text_13 = { 0x00, 0x00, 0x0D, 0x0A };//帧尾
2. 发送语音:
byte[] cmd_speak_0 = { 0x55, 0xAA, 0x00, 0x00, 0x01, 0x00, 0x00, 0xDA, 0x00, 0x00 };
byte[] cmd_speak_1 = { 0x36, 0x00, 0x00, 0x00 };//包长度(数据长度+51)
byte[] cmd_speak_2 = { 0x00, 0x00 };
byte[] cmd_speak_3 = { 0x36, 0x00, 0x00, 0x00 };//帧长度(数据长度+51)
byte[] cmd_speak_4 = { 0x01, 0x01 };
byte[] cmd_speak_5 = { 0x35, 0x00, 0x00, 0x00 };//节目长度(数据长度+50)
byte[] cmd_speak_6 = { 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01 };
byte[] cmd_speak_7 = { 0x1D, 0x00, 0x00, 0x00 };//区域数据长度 (数据长度+26)
byte[] cmd_speak_8 = { 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01 };
byte[] cmd_speak_9 = { 0x03, 0x00, 0x00, 0x00 };//数据长度 低位在前
byte[] cmd_speak_10 = { 0x32, 0x33, 0x35 };//数据内容 (语音:“二百三十五”)
byte[] cmd_speak_11 = { 0x00, 0x00, 0x0D, 0x0A };//帧尾
3. 二维码:
推测如果要显示二维码,同样也是构造数据包给到屏幕就能够显示出来。但这个包该如何构造呢,我直接说出我的笨办法。
既然是通过网络推送数据,那么就请出了wireshark这个网络抓包工具了。
我发现这些数据包里面,这三条应该就是控制屏幕的数据包了。
打开其中一条,定位到数据,发现是55 aa 00 00 符合屏幕控制的包头标识
那如果我把这三条记录的数据通过程序发送给屏幕,是不是也可以控制显示出二维码,结论当然是可以的。
总结:
虽然现在的方法只能显示固定的二维码,但至少迈出了代码控制显示二维码的第一部,后面重点就是思考怎么构造数据包了。