YourbrowserdoesnotseemtosupportJavaScript.Asaresult,yourviewingexperiencewillbediminished,andyouhavebeenplacedinread-onlymode.
PleasedownloadabrowserthatsupportsJavaScript,orenableitifit'sdisabled(i.e.NoScript).
该参赛作品基于全志V853芯片设计了SCB单板,使用了V853的音视频接口和丰富的外设接口,并外接AXP电源管理芯片。
在SCB单板上包含了一路千兆网口、一路UART、一路MIPICSI、一路MIPIDSI、一路USBOTG、板载WiFi/蓝牙以及15个GPIO管脚输出。
该参赛作品基于全志V853芯片设计了一个服务器的管理设备,实现服务器管理及协处理卡功能,对服务器进行管理和检测,实时反馈信息,通过物联网接入网络,可以远程在线管理。
开发板集成了1路百兆管理网口,1路UART调试功能,1路VGA显示功能,1路音频输出,1路USB功能,主板电压检测功能,1路视频检测功能,WIFI功能。
该参赛作品基于全志V853芯片设计了一块开发板,分为核心板和底板两个部分,引用了V853所支持的大部分功能引脚,是名副其实的“全功能”开发板。
核心板采用BTB设计,并板载了eMMC、DDR、AXP电源芯片,最大支持1GDDR332GBeMMC存储;核心板背面采用了3x60pin排针设计,支持自贴NANDFLASH。
底板上引出了绝大部分资源,具体包括两个百兆网口、RGB888及MIPIDSI显示接口、USBOTG、MIPICSI摄像头、MIC、TF卡接口等其它接口。
目前开发板功能还在验证中,验证没有问题后,会公开底板配套的原理图、尺寸图、使用文档,配套的视频以及嵌入式AI开发等所有资源。
该参赛作品基于全志V853芯片设计了一款开发板,引出console调试串口和端子外接4G+GPS模块,并集成SDCARD,千兆以太网,百兆以太网,WiFi,音频输入输出,MIPICSI,MIPIDSI,按键,LED,G-SENSOR,USB及USBHUB,引出console调试串口,ADC引脚引出,2.54端子引出一路串口,两路PWM及GPIO。
开源硬件设计大赛
本次大赛由华秋电子联合全志在线共同举办,感谢合一智联对比赛的赞助。
资料获取
M33核
DPLL1输出时钟的频率已经确定为1920M,因此要修改M33核的时钟,则只需要修改这2个分频器的分频值即可。
由于SDK中默认将第一个分频器的分频值定为5(此分频器的分频值取值范围为4-8),也即ck1_m33时钟频率为1920/5=384M,而第二个分频器的分频值取值范围为1-16,因此如果要修改的M33核时钟频率在24M到384M之间且可以被384M整除,则只需要修改第2个分频器的分频值,例如将M33核默认运行频率修改为128M,则只需修改宏AR200A_FREQ即可,如下所示:
diff--gita/arch/arm/armv8m/sun20iw2p1/sun20i.cb/arch/arm/armv8m/sun20iw2p1/sun20i.cindex9b8c1cb1..c09444fc100755---a/arch/arm/armv8m/sun20iw2p1/sun20i.c+++b/arch/arm/armv8m/sun20iw2p1/sun20i.c@@-445,7+445,7@@staticvoidrcosc_init(void)#defineDPLL1_FREQ(1920000000)#defineDPLL2_FREQ(1920000000)#defineDPLL3_FREQ(1600000000)-#defineAR200A_FREQ(192000000)+#defineAR200A_FREQ(128000000)#defineDEVICE_FREQ(192000000)staticintsys_clk_init(void){若要修改的M33核时钟频率不满足上述条件,则需要同时修改函数ar200a_clk_set里设置ck1_m33时钟频率的地方,例如修改ck1_m33时钟为240M(1920/8=240M):
DPLL1输出时钟的频率已经确定为1920M,因此要修改C906核的时钟,则只需要修改这2个分频器的分频值即可,第一个分频器的分频值可取2、2.5、3、4、7,第二个分频器的分频值可取1、2、4、8。
例如将C906核默认运行频率修改为320M,需要修改sun20i_boot_c906函数中2处设置频率的地方,:
diff--gita/arch/arm/armv8m/sun20iw2p1/sun20i.cb/arch/arm/armv8m/sun20iw2p1/sun20i.cindex9b8c1cb1..5798657b100755---a/arch/arm/armv8m/sun20iw2p1/sun20i.c+++b/arch/arm/armv8m/sun20iw2p1/sun20i.c@@-596,7+596,7@@intsun20i_boot_c906(void)//setclk_ck1_c906clkto480M//sr32(CCMU_AON_BASE+0xa4,4,3,0x1);-ret=hal_clk_set_rate(clk_ck1_c906,480000000);+ret=hal_clk_set_rate(clk_ck1_c906,640000000);if(HAL_CLK_STATUS_OK!=ret){ret=-1;gotoerr2;@@-632,7+632,7@@intsun20i_boot_c906(void)//setclk_ck_c906_divto480000000;//sr32(CCMU_BASE+0x064,0,2,0x0);clk_c906_div=hal_clock_get(HAL_SUNXI_CCU,CLK_RISCV_DIV);-ret=hal_clk_set_rate(clk_c906_div,480000000);+ret=hal_clk_set_rate(clk_c906_div,320000000);if(HAL_CLK_STATUS_OK!=ret){ret=-1;gotoerr6;PS:由于第一个分频器无法输出320M时钟,故先配置第一个分频器输出640M的ck1_c906时钟,然后由第二个分频器再进行2分频,从而得到320M的C906核时钟。
DPLL3输出时钟的频率已经确定为1600M,因此要修改DSP核的时钟,则只需要修改这2个分频器的分频值即可,第一个分频器的分频值可取3、4、5、6、7,第二个分频器的分频值可取1、2、4、8。
例如将DSP核默认运行频率修改为320M,只需修改宏DSP_CORE_CLOCK_FREQ即可,:
diff--gita/arch/arm/armv8m/sun20iw2p1/sun20i.cb/arch/arm/armv8m/sun20iw2p1/sun20i.cindex9b8c1cb1..97d03ad7100755---a/arch/arm/armv8m/sun20iw2p1/sun20i.c+++b/arch/arm/armv8m/sun20iw2p1/sun20i.c@@-703,7+703,7@@err1:#ifdefined(CONFIG_ARCH_ARMV8M_DEFAULT_BOOT_DSP)||defined(CONFIG_COMMAND_BOOT_DSP)\||defined(CONFIG_PM_SUBSYS_DSP_SUPPORT)-#defineDSP_CORE_CLOCK_FREQ(400000000)+#defineDSP_CORE_CLOCK_FREQ(320000000)#defineDSP_LDO_WORK_VOLT(1200)//400M@1.2V,274M@1.1Vint__sun20i_boot_dsp_with_start_addr(uint32_tdsp_start_addr){另外目前SDK代码中第一个分频器和第二个分频都配置成了相同的频率,若第一个分频器无法直接输出想要设置的频率,则需要分别将2个分频器配置成不同的输出频率。例如将DSP核默认运行频率修改为200M,第一个分频器最低输出时钟频率为1600/7=228.57M,无法直接输出200M,因此需要先配置第一个分频器输出400M的ck3_hifi5时钟,然后由第二个分频器进行2分频从而得到200M的dsp_sys_clk时钟,主要修改如下所示:
diff--gita/arch/arm/armv8m/sun20iw2p1/sun20i.cb/arch/arm/armv8m/sun20iw2p1/sun20i.cindex9b8c1cb1..53f6828a100755---a/arch/arm/armv8m/sun20iw2p1/sun20i.c+++b/arch/arm/armv8m/sun20iw2p1/sun20i.c@@-703,7+703,7@@err1:#ifdefined(CONFIG_ARCH_ARMV8M_DEFAULT_BOOT_DSP)||defined(CONFIG_COMMAND_BOOT_DSP)\||defined(CONFIG_PM_SUBSYS_DSP_SUPPORT)-#defineDSP_CORE_CLOCK_FREQ(400000000)+#defineDSP_CORE_CLOCK_FREQ(200000000)#defineDSP_LDO_WORK_VOLT(1200)//400M@1.2V,274M@1.1Vint__sun20i_boot_dsp_with_start_addr(uint32_tdsp_start_addr){@@-752,7+752,7@@int__sun20i_boot_dsp_with_start_addr(uint32_tdsp_start_addr)//setclk_ck3_hifi5clkto400M//sr32(CCMU_AON_BASE+0xa8,8,3,0x3);-ret=hal_clk_set_rate(clk_ck3_hifi5,DSP_CORE_CLOCK_FREQ);+ret=hal_clk_set_rate(clk_ck3_hifi5,400000000);if(HAL_CLK_STATUS_OK!=ret){ret=-1;gotoerr2;修改完成后重新编译M33核固件,因为R128中各CPU核的默认运行频率是M33核上的代码配置的。可先执行lunch_rtos选择对应方案的M33核,然后再执行mrtos编译以及执行pack命令打包固件。
下图是修改M33核频率为128M、C906核频率为320M、DSP核频率为320M后的效果:
DeviceDrivers--->Graphicssupport--->FramebufferDevices--->Videosupportforsunxi--->[*]SupportPQdriverAllwinner--->Display---><*>pqd..................................................................pqd3.2具体表现下位机程序abort退出,结果如图所示。
Basesystem--->[*]Useexternaltoolchain--->-*-libc...........................................................ClibraryConfiguration--->(./lib/ld{-*.so,-linux*.so.*}./lib/lib{anl,c,gomp,cidn,crypt,dl,m,nsl,nss_dns,nss_files,resolv,util,ssp,asan}{-*.so,.so.*})libcsharedlibraryfiles(usewildcards)再通过ioctl写入物理寄存器,但是malloc的长度PEAK_REG_NUM只有6,因此这里会发生写越界。同时如下代码处也要改过来
寄存器数量配置错误,导致写内存越界,破坏了链表结构LTI_REG_NUM
修改platform/allwinner/display/pqd/hardwares/de20x/de20x.c中de20x_set_lti和de20x_get_lti函数malloc的大小为LTI_REG_NUM,具体方式可参考如下补丁。
通过两条报错可以猜测,不允许操作,不能写入,以及报ubivol等问题。
可以在设备端确认当前介质,执行lldev/by-name确认(例:当前为emmc介质,为mmc*,如果为nandubi介质为ubi*或nand*)
升级包的中文件的介质与当前板子的介质不对应,不能操作分区。
请下载附件的编译系统,并放到linux上运行。执行./build.sh既可以编译。每个目录下都有个REAMD说明,请查看。
README:
本编译系统是一个演示全志V系多媒体mppsample脱离TianSDK编译的并编译后放到rootfs下重新做固件的一个demo
1.本编译系统目录结构介绍
├──aw_pack_src#这个目录是V系列TinaSDK编译打包后输出的目录,里面包含了库和分区文件├──build.sh#编译脚本├──Makefile#编译Makefile,可作为自己工程的参考├──output#编译后的应用和中间产物├──sample#sample放置的目录├──share_lib#需要依赖的动态库(设备端rootfs也有)├──mk_firmware#制作全志固件的脚本└──toolchain#编译工具链2.使用方法:①将V系列多媒体sample拷贝到./sample目前下。阅读./sample/README了解详情;②将TinaSDK新输出的文件夹aw_pack_src重新替换当前的./aw_pack_src()③执行./build.sh进行编译④编译成功后。在./out可看到sample和strip后的sample
3.TinaSDK如何生成新的aw_pack_src(库和头文件)来替换?
4.重新替换了个sample,但编译出错怎么解决?
grep-rn"AW_MPI_SYS_Init"Binaryfile./aw_pack_src/lib_aw/lib/eyesee-mpp/libaw_mpp.amatches搜到AW_MPI_SYS_Init结果在libaw_mpp.a库里面。这时候在Makefile里面加入-law_mpp即可。
如果在本目录搜不到,则可以去TinaSDK目录搜索:
OLED屏幕状态显示
除此之外本项目还将使用本地WIFI/有线网络通过MQTT协议连接腾讯云物联网服务,用户可以查看本地状态信息并依据光照强度、室内外温湿度、下雨自动关窗户,云端/本地控制窗帘或窗户,此操作于手机APP(腾讯云提供)服务上完成。
APP控制
南通大学“孤勇队”队员:The_Qiang
试用申请通过邮件发送到:lizexi@allwinnertech.com
邮件应包括以下内容:
全志T507-H可达到车规级处理器的标准,在理论工作温度为-40℃~85℃的环境下,经过米尔电子低温运行、高温运行、高低温循环测试、低温通断电、高温通断电、低温存储、高温存储等苛刻条件下的环境测试,完全满足工业级实际应用的使用需求。
T507H芯片还是符合AEC-Q100认证的一款处理器,即可以满足汽车使用的标准,可以说是进一步认证了**“车规级”**的title。国外电子爱好者网站CNX在报到时更是将该认证标准作为题目,表达了对这款抗冻车规级芯片的青睐。
MYC-YT507H核心板,板载全志T507-H、PMIC电源管理芯片、LPDDR4、eMMC。全志T507-H集成了四核Cortex-A53的CPU和G31MP2的GPU,拥有十分强大的图像处理功能以及多路视频输入和输出的接口,这一特点也在MYC-YT507H开发板上得以体现。T507-H还支持4K@60fpsH.265解码,4K@25fpsH.264编码,以及绝大部分当前比较流行的视频及图片的解码格式。
MYC-YT507核心板采用邮票孔+LGA设计,为方便开发者进行进一步的功能评估和开发预研,配套的MYD-YT507底板采用12V/2A直流供电,搭载了1路4GMiniPCIE接口、1路数字DVP摄像头输入、1路MIPICSI、2路LVDS显示接口(支持单/双通道)、1路HDMI、1路TV显示输出、1路耳机输出、1路SPDIF音频输出、1路千兆以太网接口、1路百兆以太网、2路USBHOSTTypeA、1路USBType-CDRP、1路MicroSD、1路树莓派等外设接口。
风光互补发电监测系统由风光互补充电控制器、风力发电机、太阳能电池板、储能电池、逆变器、RS458-WiFi网关构成。电站利用太阳能和风能发电,并将电能存储在储能电池中,可以为交流和直流负载供电。
为了实现对电站的智能监测,项目使用D1-HDockPro开发板设计开发一款专用网关,实时采集电池控制器、气象环境传感器等其它传感器的数据,并通过无线通信方式(WiFi)以HTTP协议或MQTT协议将传感器数据上传至物联网后台。
智能硬件终端(分布式风光储一体小型电站、智能开关)产生的数据和控制信号通过WiFi上传至物联网和区块链后台系统。后台系统构主要包括MQTTBroker、RESTAPI服务、Web服务和区块链服务。
智能开关用于能源消费端,实现对能源消费者(电器负载)的供电控制、电能消费数据的采集和传输等功能。该智能开关基于D1-HDockPro开发板进行设计开发,通过开发板的I/O口控制继电器、UART接收电能计量模块的数据。设计一个扩展电路板与开发板配合使用,扩展电路板集成电能计量模块、继电器等。本文设计的智慧开关的功能主要是控制电器开关与计量电器用电参数以及环境参数并上传到云端服务器。
华东师范大学“萌新队”指导老师:左少华、吴幸成员:龚丹妮、万海缘、李丽莹
sun50iw10p1-pinctrlpio:pinPH0alreadyrequestedbytwi0;cannotclaimforgmac0sun50iw10p1-pinctrlpio:pin-224(gmac0)status-22sun50iw10p1-pinctrlpio:couldnotrequestpin224(PH0)fromgroupPH0ondevicepiosunxi-gmacgmac0:Errorapplyingsetting,reversethingsbacksunxi-gmac:probeofgmac0failedwitherror-224.【解决办法】4.1GPIO冲突(1)首先,结合内核启动log定位与哪个模块存在GPIO冲突,有如下类似打印:
sun50iw10p1-pinctrlpio:pinPH0alreadyrequestedbytwi0;cannotclaimforgmac0(2)然后,确认该模块GPIO配置是否有误或者是否可以关闭该模块。
4.2以太网配置未生效(1)首先,确认内核menuconfig以太网模块配置是否打开,路径及截图如下:
menuconfig->DeviceDrivers->Networkdevicesupport->Ethernetdriversupport
(2)然后,确认board.dts/sys_config.fex中GMAC模块是否打开,board.dts配置示例如下:
gmac0:eth@05020000{phy-mode="rgmii";use_ephy25m=<1>;tx-delay=<7>;rx-delay=<0>;status="okay";};注:
还有最后一条
好吧我承认,看到这条我犹豫了
树莓派的价格一年多来直线起飞,树莓派曾经让“大多数家庭都买得起”的时代一去不复返了。
必趣科技就是其中一个“受害者”。
必趣科技是深圳的一家做打印机的厂商,早年的打印机上多半使用树莓派作为控制主板,控制打印头、机械臂啥的。但是树莓派价格暴涨,令其不得不寻找新的替代方案。
“这么贵我们为什么不自己做呢?还能自己拿来卖~”
“好像是一个发财的好机会,就差一个工程师实现了”
这说起来就巧了,作为一家走在时代风口浪尖上的科技公司,必趣科技不止有一个工程师,还有一支完善的软硬件工程师团队。
于是乎,一块和树莓派CM4长得差不多,但是价格只要1/4的DIY板子——BIGTREETECHCB1就做出来了。
这板子,不能说毫不相干,只能说一模一样……
CB1是遵循树莓派CM4的外形尺寸以及资源配置的全志H616四核ArmCortex-A53SBC。很快,这块板子就被国外的极客们发现并广泛使用了起来。知名电子爱好者网站CNX也对这块板子进行了报道。
BIGTREETECHCB1配备1GBRAM、HDMI输出接口、2.4GHzWiFi和100Mbps以太网。对比来看,CB1比CM4具有更好的多媒体能力。CB1支持4Kp60H.265/H.264视频解码和1080p60H.264视频编码,而CM4只能处理4Kp60H.265和1080p60H.264视频解码和1080p30H.264视频编码。不足的地方是,CB1的模块上缺少CSI和DSI接口以及只提供一个HDMI视频输出接口,而RaspberryPiCM4模块提供CSI和DSI接口并兼具两个HDMI视频输出接口。
BIGTREETECHCB1规格:
CB1设计了与树莓派CM4相同的BTB座子,方便用于与底板PI4B的连接。CB1配置的40-pinGPIO接口,兼容树莓派生态,PI4B底板预留5V风扇接口、千兆以太网接口、CSI,DSI接口、MicroSD插槽以及4个USB接口等可拓展功能接口。
当PI4B搭配CB1使用时,性能将接近树莓派3B,并且兼容很多树莓派4的配件。当然,PI4B板框与接口大小与树莓派4B和CM4的连接无异,所以你也可以将树莓派CM4接到PI4B上,以达到与树莓派4B一样的使用效果。
虽然两者性能相仿,但CB1与CM4两者的价格却天差地别。与动辄¥600+才能买到的CM4相比,CB1的价格就十分美丽了,核心板CB1单板仅需¥138,加上与底板的套装也不过¥228。将近四倍的差价,配置却不相上下,解码方面甚至更强一些,有了CB1,还要什么自行车?
不输CM4的优异性能以及实惠的价格,搭配上树莓派硬件兼容画龙点睛般的设计,不少已经上手CB1的工程师也对这块板子发出了称赞。其中提及最多的优点就是与其他号称树莓派替代品相比,CB1对系统的适配有着充分的支持。
BIGTREETECH为CB1提供DebianLinux,其他操作系统也在开发中,操作系统镜像和Linux内核源代码可以在GitHub上找到:
目前,必趣科技的官方淘宝店已经上线了这块板子,售价138元。
☆报名方式1)扫码加入大赛活动群报名
☆作品评审
menuconfig选上CONFIG_DEBUG_FS、CONFIG_DYNAMIC_DEBUG1.echo8>/proc/sys/kernel/printk调整printk打印等级为7以上2.cat/sys/kernel/debug/dynamic_debug/control|grepbluetooth查看目前能控制的打印3.echo'filehci_core.c+p'>/sys/kernel/debug/dynamic_debug/control指将hci_core.c文件的打印打开4.echo'filehci_core.c-p'>/sys/kernel/debug/dynamic_debug/control指将hci_core.c文件的打印关闭5.echo"filenet/bluetooth/rfcomm/core.cline1603+p">/sys/kernel/debug/dynamic_debug/control指将文件net/bluetooth/rfcomm/core.c的第1603行的打印打开6.echo'module$mod_name+p'>/sys/kernel/debug/dynaminc_debug/control指将某个模块的打印打开。按照上面的方法配置好后,打开蓝牙调试就可以了,默认会输出到终端上或dmesg方式查看。
|boot0|boot_package|mbr|boot|rootfs|env|…3.解决办法
Usage:D:\我的文档\桌面\sunxi-tester.exe[options]commandarguments…[command…]-h,--helpPrintthisusagesummaryandexit-v,--verboseVerboselogging-p,--progress“write”transfersshowaprogressbar-l,--listEnumerateall(USB)FELdevicesandexitspiflash-readaddrlengthfileWriteSPIflashcontentsintofilespiflash-writeaddrfileStorefilecontentsintoSPIflash注意:此工具sunxi-tester.exe只能操作spinorflash前面16M空间。超过16M无法进行读写。
CONFIG_SUPPORT_ISP_TDM=yCONFIG_TDM_LBC_EN=y3、mppmiddleware
首先,确保mpp配置中选中了gc2053sensor。检查方法:makemenuconfig,依次进入配置项:
Allwinner--->eyesee-mpp--->[*]selectsensor[*]usesensorgc2053然后,在ISP效果文件中,为第二个sensor添加效果文件配置。位置:external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp_cfg/isp_ini_parse.c修改:将原来的两组gc2053_mipi配置分别拷贝一份,然后修改名字为gc2053_mipi_2即可,其他参数不用修改。
structisp_cfg_arraycfg_arr[]={...#ifdefSENSOR_GC2053 {"gc2053_mipi","gc2053_mipi_isp600_20220511_164617_vlc4_day",1920,1088,20,0,0,&gc2053_mipi_v853_isp_cfg}, {"gc2053_mipi","gc2053_mipi_isp600_20220415_144837_ir",1920,1088,20,0,1,&gc2053_mipi_ir_isp_cfg}, {"gc2053_mipi_2","gc2053_mipi_isp600_20220511_164617_vlc4_day",1920,1088,20,0,0,&gc2053_mipi_v853_isp_cfg}, {"gc2053_mipi_2","gc2053_mipi_isp600_20220415_144837_ir",1920,1088,20,0,1,&gc2053_mipi_ir_isp_cfg},#endif...}按以上步骤修改完成后,需重新编译mpp和固件,命令如下:
cleanmpp&&mkmpp&&mp二、双目GC2053验证支持验证双目GC2053的mppsample有:sample_rtsp(支持双目采集+编码+RTSP)、sample_smartIPC_demo(支持双目采集+编码+RTSP+人形检测)、sample_smartPreview_demo(支持双目采集+预览)如果不需要RTSP功能,注释掉代码中的宏#defineSUPPORT_RTSP_TEST即可。
硬件连接方式
硬件连接好后,在PC命令行(Win+R,输入cmd)中,通过ipconfig命令可以查看新加网卡的IP地址和子网掩码(后面配置小机端IP和netmask时需要用到)。
3.2具体表现
软件环境
按前面的硬件环境配置好后,在小机端(开发板)通过命令ifconfig查看IP地址发现没有分配。此时,可以临时用ifconfig命令配置一下(重启后会失效,需要重配)。
注意:
ifconfigeth0169.254.234.222netmask255.255.0.0另外,通过修改网络配置文件(/etc/sysconfig/network-scripts/ifcfg-xxx)的方式可以永久修改IP,但是当前客户方案不支持这样修改,所以只能采用临时修改的方式。别的方案上可以自行尝试。
通过adb将测试demo(支持RTSP)push到小机端。
adbpush.\sample_rtsp\sample_rtsp/tmpadbpush.\sample_rtsp\sample_rtsp.conf/tmp在小机端串口上,执行demo开启测试。
cd/tmpchmod+xsample_rtsp./sample_rtsp-pathsample_rtsp.conf此时,在串口上可以看到RTSP的URL提示,根据当前测试情况选择对应的URL。比如:rtsp://169.254.34.222:8554/ch0,可以保存一下,后面使用VLC播放时要用到。
在PC主机上开启软件VLC(或者PotPlayer),输入RTSP的URL即可实时播放。
保存mp4文件在VLC播放时,还可以实时保存接收的测试流为mp4文件。
通过前面的介绍,可以快速了解RTSP环境搭建的步骤。按照步骤一步一步可以顺利搭建RTSP测试环境,方便测试和调试。
XR806开发板负责完成环境参数采集、光照控制、水泵控制,涉及技术内容:
XR806主控的系统由传感器采集部分、电源部分和控制部分组成。传感器部分负责采集环境信息,电源部分主控供电,控制部分则根据系统的信息对特定的环境参数(LED灯,水泵)进行控制。
因为电池的电压会随着点亮的变化会有一定幅度的改变,所以需要将其稳定下来才能使用。电源部分就是使用了一个AMS1117芯片,将锂电池输出的不稳定电压稳定到3.3V,给XR806开发板及传感器供电。AMS1117是一个正向低压降的线性稳压器,压降较小。其内部集成了过热保护功能与限流电路,能有效地保护电路的正常运行,是便携式设备稳压器的理想选择。
补水部分主要配合土壤湿度传感器来进行工作。土壤湿度传感器获取到土壤湿度数据后,XR806中会进行一个判断,如果ADC采集到的电压大于一定的阈值,则启动继电器,驱动水泵进行工作,将水抽到花盆中。而显示屏上,就可以看到土壤上是处于湿润还是干燥的状态。
温湿度、光照、土壤传感器均连接在XR806上,这里取三组传感器的采集数据与标准仪器采集的数据进行比对,由两个测试点作为对照,测量出两组光照强度。对比可以看出,总体误差不大,满足了装置的要求。
TCP服务器的设计主要是能够保证D1-H与XR806稳定地进行连接,并在XR806断开后还能够继续等待XR806的重新连接。这边借鉴了github上的一个开源的socket服务器代码,它使用了多线程的技术,并能够承受住较大的服务器压力,非常适合本装置的使用。
调试的基本过程如下,首先使用D1-H开发板连接上一个WiFi,然后用XR806也连接上同一个WiFi,在D1-H上启动服务器的代码,然后,启动XR806作为客户端进行连接。经过多次测试,D1-H开发板这边服务器运行非常稳定,下位机断开后会重新等待连接,在下位机重新启动后能非常迅速的进行重连。并且,在Linux下,可以使用system(wifi_info)函数来调用命令行,只需要将命令作为一个字符数组保持,就可以在程序中使用命令行操作,非常方便。本装置中连接WiFi的部分就是用这个方法,调用命令行来连接WiFi的。
D1-H主控的服务端软件设计根据项目所需要的功能分为三大部分。第一部分是图形界面的设计,采用的是LVGL,主要用于显示温度、湿度等数据;第二部分是TCP服务器的设计(已于上一部分介绍),用于上下位机之间的数据传输与通信;第三部分是图像处理部分,使用了YOLOV5+NCNN。
图形界面使用的是LVGL。LVGL的作者是来自匈牙利的GaborKiss-Vamosikisvegabor,LVGL用C语言编写,具有很强的兼容性(并且与C++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,成为广大开发者在选择GUI时的第一选择。
根据系统的需求,图形界面需要能够显示下位机传上来的数据,而LVGL中可以使用文本控件进行数据的显示。显示图片可以使用一个图像控件配合PNG解码器进行显示。首先,需要创建两个基本控件对象,一个用于停靠采集处理后图像的图像控件,一个是停靠数据显示子控件的控件。在图像控件上,停靠了一个图像,即采集处理后的图像;在数据显示区上,放置了一系列的控件来展示环境参数信息;上边还有用于控制光照强度和水泵的开关。
图像处理部分主要是YOLOV5的使用。使用之前,首先要训练针对特定场景的模型。首先需要创建自己的数据集,数据集分为两个部分,图像文件和标签文件。图像文件就是包含了待检测目标部分的图片和不带待检测目标的图像,分别作为正负样本进行训练。标签文件包含了检测目标的信息,标签文件的形式如下表4.2所示。一行数据代表了图像中的一个目标,若文件中含有多行数据,则表明图像中有多个目标。标签文件需要自己对需要检测的目标做标注。
有一个比较特别的是,YOLOV5的标签格式是txt后缀的,不是我们常见的xml格式后缀的,需要自己编写代码进行转换。准备好了图像和标签后,还需要保证每个标签与图像的名称一致。准备就绪后,就可以调用train.py文件进行训练。在训练的时候,需要指定一些参数,如下图所示
启动训练后,电脑会自动开始训练。训练完成后,我们可以看到目标训练结果保存的位置,有一个pt格式的文件。然后可以用detect.py文件来做一个测试,将加载的权重文件换成刚刚训练结束生成的权重文件。detect程序会使用这个文件进行检测,最后会输出一张结果图。从结果图中就可以看出目标检测的结果。
步骤
amixercsetname='MIC1Switch'1但是如果在编译固件时没有编译alsa-utils,那么固件中没有amixer,就不能使用这种方式了。
pcm.CaptureMic{typehooksslave.pcm"hw:0,0"hooks.0{typectl_elemshook_args[{name"MIC1Switch"preservetrueoptionaltruevalue1}]}}如上代码,如果app打开的节点是pcm.CaptureMic,那么在asound.conf中定义它为hooks类型,然后把需要配置的amixer控件作为参数写进结构体中。这样在这个node被打开时,就调用一些hook函数,配置hooks里面指定的amixer控件。
除了通过试用活动获取全志V853开发板,您也可以通过在全志在线论坛开源个人项目的原理图与PCB来申请免费的V853样片,或自行购买我们的V853样片和开发板,购买方式如下。
1
与全志在线开发者论坛的连接断开,我们正在尝试重连,请耐心等待