Thingino介绍
Thingino这个名字有点怪,很拗口,是一句话缩写而来,其中的ing
取自君正Ingenic,Thing
意为That Hacked Ingenic,加上ino
全称为That Hacked Ingenic is not OpenIPC
。怎么读我也不确定,thing~e~know
?
主要的两个开发人员之前是另一个更有名气的开源摄像头固件OpenIPC的主要参与者之一,因为OpenIPC的核心majestic
并不开源,包括对上述两位开发者, 观念上的不和导致这两位另起炉灶从头开始,创建了这个完全开源更加开放的通用摄像头固件项目。
和OpenIPC不同,Thingino既然名字里包含了Ingenic,那肯定只支持君正的主控了。其到目前为止支持君正从T10到T31全系列的SoC,最新的T40和T41系列还不支持。只专注一个平台的好处就是开发速度很快,功能可以做得更完善,不用浪费时间和精力考虑兼容其他平台。Thingino只用了半年不到的时间就把固件做到了比OpenIPC更好用的程度,反观OpenIPC,现在似乎只做FPV相关的完善,几乎放弃了安防摄像头的功能更新,已经背离了初衷。
主要功能
- 双码流 H264/H265 RTSP流支持
- 较完善的ONVIF协议支持
- 云台支持,可以通过shell、webui和ONVIF客户端控制云台
- MQTT、WenHook等集成
- 自动日夜切换,850nm、940nm红外补光灯和外光灯控制
- 详细的图像质量设置
- 扬声器
- OSD
- 摄像头按键功能
- WireGuard等
如何适配一台新的摄像头
一台设备主要由三个文件控制
thingino-firmware/environment/
下uenv.txt
结尾的文件,定义了摄像头硬件的所有GPIO设置,云台电机的步进长度,WiFi模块型号。此文件非必需,这些信息在固件编译完成并安装到摄像头后也可以再设置thingino-firmware/configs/modules
下形如soc_sensor_wifi的文件,定义了个一个硬件最基础的三要素,SoC型号、CMOS型号和网络类型(Ethernet或WiFi芯片型号),是一个能完整工作的固件的最基本参数。一个module可以被很多不同型号的camera共用thingino-firmware/configs/cameras
这里的配置就是一台摄像头最核心的参数,定义了除基础三要素外的所有其他功能和设置,比如是否支持内存卡,是否支持USB接口等。这里需要调用上述基础module模块和environment里的自定义GPIO配置
完善上述三个文件后就可以在Thingino的根目录下运行make,选择摄像头型号开始编译了。剩下所有过程全部自动完成,大概20-30分钟后就会在~/output
下对应型号的目录内得到完整的固件文件,8MB或16MB完整闪存备份,可以直接用编程器写入闪存
国产WiFi6双频模块AIC8800D40和AIC8800D80
现在市面上的摄像头内置WiFi模块基本都只支持2.4GHz频段,这对住地广人稀大别墅的人来说不是问题,绝对够用了,但对于住混凝土森林的我来说2.4G几乎已经到了没法使用的地步,干扰非常严重,即使测速能勉强跑到20-30Mbps,观看2Mbps码率的摄像头视频还是会不停卡顿。迫切需要将所有物联网设备的WiFi工作频率迁移到5GHz上来。
AIC8800D40和AIC8800D80是国产厂家爱科微推出的WiFi6双频+蓝牙5.4芯片,可以工作在2.4GHz和5GHz下,前者支持40MHz带宽,后者支持到80MHz带宽。成品模块有USB2.0和SDIO接口可供选择,可以方便替换现有摄像头主板上的WiFi模块,关键价格分别只需要9元和15元一片,比一些2.4G的WiFi4模块还便宜。需要注意芯片型号后不带D40和D80的并不支持5GHz,虽然也是WiFi6
阿里巴巴上购入了10片40MHz带宽AIC8800D40 USB2.0接口的模块,SDIO还没那个手艺替换。拿了一台无型号小米400万像素摇头机做实验,使用热风枪替换下本身的2.4G模块ATBM6012B,换上全新的WiFi6模块
移植驱动
跟厂家要到了最新的驱动源码,不需要做任何修改。Thingino内添加一个驱动包,配置好参数,顺利完成编译
测速
使用小米摇头机内原本的板载2.4GHz天线,iwconfig
显示协商速率在200Mbps,使用iperf3测速实际能跑到120Mbps,已经大于传统有线摄像头的百兆网口速率。对于一台摄像头来说最大速率倒不是很重要了,关键是要稳定没干扰。路由器ping摄像头稳定保持在1ms延迟无丢包,很好,9块钱的快乐
root@ing ~# iwconfig wlan0
wlan0 IEEE 802.11ac ESSID:"XXXXXXX_5GHz" Nickname:"AIC@8800"
Mode:Auto Frequency:5.745 GHz Access Point: XXXXXXXXX
Bit Rate:200 Mb/s
Encryption key:off
Link Quality=0/100 Signal level=-39 dBm Noise level=0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
蓝牙功能
用不上,没折腾测试
又购买了80MHz带宽的AIC8800D80模块,看能不能有惊喜
AIC8800D80测速
80MHz带宽,USB2.0接口。在T31X上测试,协商速率433Mbps,但实际速度最高150Mbps左右,可能是T31的性能上限了
[ 5] local 192.168.2.115 port 40919 connected to 192.168.2.1 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 18.5 MBytes 155 Mbits/sec
[ 5] 1.00-2.00 sec 17.1 MBytes 143 Mbits/sec
[ 5] 2.00-3.00 sec 18.8 MBytes 157 Mbits/sec
[ 5] 3.00-4.00 sec 17.0 MBytes 142 Mbits/sec
[ 5] 4.00-5.00 sec 17.9 MBytes 150 Mbits/sec
[ 5] 5.00-6.00 sec 18.4 MBytes 155 Mbits/sec
[ 5] 6.00-7.00 sec 17.2 MBytes 144 Mbits/sec
[ 5] 7.00-8.00 sec 16.8 MBytes 141 Mbits/sec
[ 5] 8.00-9.00 sec 17.9 MBytes 150 Mbits/sec
[ 5] 9.00-10.00 sec 16.7 MBytes 140 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.09 sec 178 MBytes 148 Mbits/sec 66 sender
[ 5] 0.00-10.00 sec 176 MBytes 148 Mbits/sec receiver
iperf Done.
root@ing-aic8800--2412 ~# iwconfig wlan0
wlan0 IEEE 802.11ac ESSID:"Linksysxxxxxx" Nickname:"AIC@8800"
Mode:Auto Frequency:5.745 GHz Access Point: zzzzzzzz
Bit Rate:433 Mb/s
Encryption key:off
Link Quality=0/100 Signal level=-43 dBm Noise level=0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0