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