文章目录
嗯,这算是一个帖子引发的血案。之前在逛恩山的时候,看到一个帖子,《给tp-link wr941n增加一个液晶屏,散热片和USB口》,这就跨上了改造路由器的不归路。
先秀一下最终改造结果:
需要说明的是,改造路由器加装液晶屏,只能算是一个玩票的行为,实际意义不是特别大,成本相对路由器来说,也不低,所以只推荐喜欢折腾的人玩。
另外,这篇文章只介绍怎么去加装液晶屏,不涉及到加装 USB 口。
准备材料
要改造路由器,首先就需要去准备一个路由器,一般的路由器可不行。为了能在液晶屏是显示内容,需要有程序去控制液晶屏,而一般的路由器是不能运行自己的程序的,这就需要路由器可以刷机,可以刷 dd-wrt 或者 openwrt 等等的都可以。
我用的路由器是迅捷 fw300r,实惠,京东的价格在79左右浮动,比较便宜的另外一个好处就是折腾坏了不心疼,这篇文章的内容也是以 fw300r 为基础而写。我买的 fw300r 是 v2 版本,配置为 4M Flash 和 32M RAM。
加装液晶屏,再需要的当然就是液晶屏了。我这里选择的是 12864 液晶,分辨率是 128x64。
需要注意的是,一般买到的 12864 的接口都是并行或者SPI,并不能直接连接在路由器上使用。因此,在选购液晶的时候,要注意选择带 TTL 或者 UART 支持的,要不然还得加个单片机在路由器和液晶屏之间。如果是在淘宝上购买,可以找串口支持的 12864 液晶,但是特别注意,SPI 串口不是我们这里要用的串口,最好和卖家沟通之后再买。
液晶屏的电压也需要注意,路由器的 TTL 针脚一般也带电源输出,但是电压只有 3.3v,如果选购的液晶屏驱动电压是 5v 的话,那就需要安装额外的电源了。
液晶屏建议选择小屏,路由器本身体积不大,如果选择大屏的话,有可能装不下,要把液晶屏放在外面。
另外,路由器上需要加装 TTL 针,液晶屏一般也不带针脚,这就需要有电烙铁来焊针脚。如果不是买原厂的路由器,而是在淘宝上买那些已经被卖家改装过的,那很可能就是已经装了 TTL 针脚了。如果打算这个液晶屏就只在路由器上用了,也可以不用给液晶屏焊针脚,直接把线焊上去就行了。
如果路由器和液晶屏都有针脚,那就还需要杜邦线来连接,这个可以在买液晶屏的时候叫卖家送三根。
材料和成本清单:
- 路由器 fw300r,79元
- 12864 液晶屏,不同规格价格可能会在 45-60 元之间
- 杜邦线,4根,0.8元不到,可以叫卖家送⋯⋯
- 单排针,0.2元
- 焊接设备,最初级的一套在 20 元左右
- 如果要在电脑上测试的话,USB to TTL 是不可少的,12 元左右,要选择带有 3.3v 电源输出的
- 如果可能的话,备一个万用表来测试插针是否焊接正确,以及从路由器输出的电压是否正确,一般 30 元左右
安装 TTL 针脚
fw300r 板上的 TTL 定义如下:
图中所焊的针脚只有 3 根,这是因为最上面一个针脚是 Vcc,如果只是要 TTL 刷机,是不需要电源线的,但是因为我们要加装液晶屏,又不想另外安装电源,就可以直接从这里取电,因此也需要把4根针都焊全。
fw300r 直接焊好 TTL 针脚后,输出的数据会有干扰,导致没办法正确操作 12864 液晶屏,这个时候需要把一个电容给短接,就是在上图中所标识 C496,它旁边的文字是 C503。
路由器面板和液晶屏合体
嗯,其实这个可以放到最后做,先在电脑上测试液晶屏是否工作。
因为我没有更好的设置来在路由器面板上切割出一个洞来放液晶屏,就只好用电烙铁来烫出来边缘,然后再用刀修整。
当然如果液晶屏不需要直接整合在路由器面板,也不用做这些,只需要把 TTL 线引出来就行了。
在割出来洞来之前,先把液晶屏放在路由器面板上比划一下,用笔划出边缘,而且要注意液晶屏装上去之后,不能压到路由器主板上的元器件。
在用电烙铁烫的时候,要小一圈来烫,然后来用美工刀来慢慢修整。
我这个开口没做好,之后装了液晶屏会压到路由器主板上的一颗电容。
上面就是装好液晶屏的样子了。
连接路由器和液晶屏
为了折装方便,我直接用杜邦线来连接液晶屏和路由器。
要注意把路由器上的 TXD 连接到液晶屏的 RXD 上,Vcc 和 GND 都要接正确,路由器上的 RXD 可以不连,我连接了之后液晶屏控制会有问题。
插针和杜邦线的插座连接上之后,会超过路由器的内部空间的高度,把它们掰弯就行了。
合上盖子的样子:
编写程序
光有硬件不行,还得有个软件来控制液晶屏的显示内容,比如要显示流量、路由器的负载等。
TTL 口在 dd-wrt 里,就是设置 /dev/ttyS0,可以通过串口编程来操作液晶屏。
需要注意的是,不同液晶屏的操作命令格式是不一样的,这需要去查你所购买的液晶屏的 datasheet。
因为程序要放到路由器上去运行,而 dd-wrt 或者 openwrt 都是 Linux,因此建议使用 Mac OS X 或者 Linux 来做为开发平台。而且 dd-wrt 和 openwrt 的 toolchain 也只有 Linux 版本,因此一个 Linux 环境是必须的。
因为路由器的内存比较小,一般不会带 python 或者 ruby 这样的运行时,因此写液晶屏控制程序最好用 C 来写。当然如果你买是的卖家改造过的路由器,可能 Flash 比较大,会已经带了 python 运行时,那么也可以选择用 python 来写。
在 Linux 里面,对串口操作可以当作一个普通文件来读写,字节流就是按照液晶屏的命令格式说明进行输出。
在一开始的时候,可以用 USB to TTL 在电脑上进行调试,要不然每次编译之后都需要上传到路由器,并且在路由器上执行程序测试。
在编写程序之前,需要先根据液晶屏的特性规划一下显示的内容,如果液晶屏支持较小的字体,那就可以显示多一些内容,如果只能用 8x16 或者 16x16 的字体,那就只能显示少一点内容了。
当然如果你够有耐心,也可以直接在程序里把字库包含进去,然后自己控制液晶屏用画图的方式来绘出文字。
交叉编译环境
要编译给 dd-wrt 或者 openwrt 用的程序,需要搭建交叉编译环境,直接使用 gcc 是不行的,因为路由器的架构是 mips 的。需要注意的是,不同的路由器的 CPU 架构可能会不一样,在下载 toolchain 时要注意选择版本。
可以在以下位置下载到相关的 toolchain:
- dd-wrt:
- openwrt atheros:
因为我是在 dd-wrt 上部署路由器液晶屏控制程序,所以下载了 dd-wrt toolchain,使用其中的 mips 版本。
dd-wrt 的 toolchain 是 64 位的可执行文件,因此在安装 Linux 的时候需要选择 64 位版本。
特来膜拜