Bruceou 发表于 2024-4-13 22:05

【米尔-瑞萨RZ/G2UL开发板-试用评测】基于MYD-YG2UL智能家居系统(二)

<div class='showpostmsg'><div>&nbsp;</div>

<h1>5 具体部署</h1>

<h2>5.1 ZigBee无线传感监控子系统</h2>

<h3>IAR编译</h3>

<div>打开工程\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Utilities\SerialApp\CC2530DB\下的SerialApp.eww。</div>

<div></div>

<div>Figure 5-1 编译固件</div>

<div>编译完后单击下载按钮。</div>

<div></div>

<div>Figure 5-2 编译完成</div>

<h3>固件烧写</h3>

<div>使用SmartRF Flash Programmer烧写Hex固件到ZigBee节点,将Coordinator.hex和EndDevice 1-4.hex分别下载到协调器和终端。</div>

<div>注意:如果没有那么多板子的话,只要下载 Cocodinator.hex和 EndDevice1.hex就可以了。</div>

<div></div>

<div>Figure 5-3 下载方法</div>

<h3>上位机调试</h3>

<div>一定要给协调器先上电,因为使用的USB转串口,程序自动识别串口。笔者提供免安装和安装版本,在这里使用免安装版本,双击ZigBee.exe。笔者这里这是为自动刷新数据。笔者使用了一个终端,可看到如下图所示的信息。</div>

<div></div>

<div>Figure 5-4 上位机软件</div>

<h3>手机控制</h3>

<div>如果想手机也控制则需要有无线路由器,手机打开 wifi 并连接好后,先点网络设置,输入电脑 IP 地址后点连接,手机显示连接成功后,会自动刷新数据。如下图所示。</div>

<div></div>

<div>Figure 5-5 手机网路设置及控制</div>

<div>&nbsp;</div>

<h2>5.2 网关/监控子系统</h2>

<div>网关子系统可以使用Yocto或者Openwrt系统,其中有几个关键组件,下面一一讲解。</div>

<h3>OpenWrt系统编译</h3>

<h4>安装相关工具和库</h4>

<div>先更新源:</div>

<div>$sudo apt-get update</div>

<div>安装git工具</div>

<div>$sudo apt-get install git</div>

<div>安装依赖的库文件</div>

<div>$sudo apt-get install gcc g++ binutils patch bzip2 flex bison cmake make autoconf gettext texinfo unzip sharutils ncurses-term zlib1g-dev libncurses5-dev gawk</div>

<div>$ sudo apt-get install gawk grep libc-dev libz-dev perl rsync subversion</div>

<div>$ sudo apt install build-essential ccache device-tree-compiler gettext gperf intltool libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev libncurses5-dev libssl-dev libreadline-dev libtool wget nano patch pkgconf python3 python3-pyelftools zlib1g-dev swig texinfo ack xxd</div>

<h4>OpenWrt源码获取</h4>

<div>米尔科技针对MYD-YG2UL开发板提供两种获取源码的方式,一种是直接从米尔光盘镜像中获取压缩包,另外一种是使用 git获取位于 github 上实时更新的源码进行构建。</div>

<div>笔者这里直接从光盘镜像获取源码压缩包并将其拷贝到用户目录并解压。</div>

<div>$ tar -xvf myir-renesas-openwrt.tar.bz2</div>

<div>其解压目录如下所示。</div>

<div></div>

<div>当然也可以从github拉取代码:</div>

<div>$ git clone <a href="https://github.com/MYiR-Dev/myir-renesas-openwrt.git" target="_blank">https://github.com/MYiR-Dev/myir-renesas-openwrt.git</a> -b develop-rzg2ul-openwrt22</div>

<div>编译OpenWrt系统还需要依赖linux内核,因此需要将myir-renesas-linux.tar.bz2 内核源码解压到 openwrt 源码下的 Linux 目录下。</div>

<div>$ tar -xvf myir-renesas-linux.tar.bz2 -C linux/</div>

<h4>配置OpenWrt</h4>

<div>下载完OpenWrt的源码后,为了使OpenWrt支持更多的软件,需要更新和安装其它源上面的软件。</div>

<div>$./scripts/feeds update -a</div>

<div>$./scripts/feeds install -a</div>

<div>一切就绪,接下来就可以开始编译了。</div>

<div>在编译OpenWrt系统之前,我们首先要对它进行配置。</div>

<div>$ make defconfig &amp;&amp; make menuconfig</div>

<div>我们就可以通过方向键来选择配置选项,通过空格键来选择配置状态。当执行完上命令后,便会弹出如图。</div>

<div></div>

<div>为了让OpenWrt系统能成功的在我们的开发板上运行起来,我们需要做如下配置。</div>

<ol>
        <li>.选择CPU型号<br />
        Target System (Renesas) ---&gt;</li>
        <li>.选择CPU子型号<br />
        Subtarget (RZ/G2X MPU soc evk boards (64 bit) ---&gt;</li>
        <li>.选择具体路由器型号</li>
</ol>

<div>Target Profile (myir rzg2ul) ---&gt;</div>

<div>Target Image 配置如下。</div>

<div></div>

<div>Advanced configuration options 配置,使用外部的内核源码。</div>

<div></div>

<div>使能 OpenWrt SDK。</div>

<div></div>

<div>当然还可以使能 Toolchain,用于应用开发。</div>

<div></div>

<div>还可以配置Image configuration ,比如版本信息。</div>

<div></div>

<div>PPP 设置,取消勾选PPP选项,不然会报错。</div>

<div></div>

<div>如果勾选PPP选项,报错信息如下。</div>

<div></div>

<div>然后保存退出,这样就配置完成了。</div>

<h4>编译OpenWrt</h4>

<div>最后执行make V=99,开始漫长的编译,编译时间由电脑配置决定,由于编译时,需要的软件是从网络上面下载,所以这里要求电脑必须能够上网。V=99意思显示所有信息。</div>

<div>$make V=99</div>

<div>在编译前,可是用以下命令将源码先下载:</div>

<div>$ make -j8 download V=s</div>

<div>第一次编译大概需要4、5个小时,以后再次编译,则分分钟搞定。编译出来的镜像位于bin/targets/renesas/armv8目录下面。</div>

<div>$ls bin/targets/renesas/armv8</div>

<div></div>

<div>其中openwrt-renesas-armv8-myir_rzg2ul-xxx.gz就是我们要的镜像。烧写到板子上面即可启动。这样最简单OpenWrt就可以启动了,不过好多功能都没有,一步一步来,不断深入。</div>

<div>这样最简单OpenWrt就可以启动了,其他的功能在此基础上累加就可以了。</div>

<div>当然也可使用build_dir/target-aarch64_generic_musl/linux-renesas_armv8目录下的root.ext4文件系统及内核等文件。</div>

<h3>基于ser2net的数据传输</h3>

<div>ser2net(Serial to Network Proxy)给用户提供了一种网络与串口相互连接的软件,它可以将串口数据通过网络传输到远程设备上。</div>

<div>ser2net是一种基于TCP协议的串口服务器,它通过将串口数据转换成网络数据包,实现了串口数据的远程传输。ser2net的工作原理可以分为以下几个步骤:</div>

<div>1.配置串口参数:首先需要对sr2net进行配置,包括串口的波特率、数据位、停止位等参数,以及网络相关的配置,如IP地址、端口号等。</div>

<div>2.建立TCP连接:ser2net在启动后会监听指定的端口,当有客户端请求建立TCP连接时,ser2net会接受连接请求,并与客户端建立起TCP连接。</div>

<div>3.串口数据转发:一旦TCP连接建立成功,ser2net会开始监听串口上的数据。当有数据到达时,ser2net会将数据通过TCP连接发送给客户端。同时,ser2nt会监听客户端发送的数据,并将其转发到串口上。</div>

<div>4.数据处理:ser2nt还支持对数据进行处理和转换。例如,可以对接收到的数据进行校验、解析或加工,然后再将其发送给客户端。</div>

<h4>添加 ser2net 应用程序</h4>

<div>首先进入 OpenWrt 系统源码,然后运行 make menuconfig 命令进行配置。</div>

<div># make menuconfig</div>

<div>在弹出的配置菜单中,配置如下。</div>

<div>Network --&gt;</div>

<div>&lt;*&gt;ser2net</div>

<div>然后选中 ser2net 这个选项,如图所示。</div>

<div></div>

<div>最后退出保存,再编译。</div>

<div># make V=99</div>

<h4>配置 Wi-Fi 串口</h4>

<div>既然是 Wi-Fi 串口, 那么我们就可以理解为它由两部分组成,一部分是网络编程器的 TCP服务器,用于接收客户端通过 Wi-Fi 传来的数据;另一部分就是串口,用于将 TCP 服务器接收到的数据通过串口发送出去。</div>

<div>既然是 TCP 服务器,那么我们需要设置它的 IP 地址和端口号。既然是串口,那么我们需要设置它的波特率等参数。那么,这些参数,我们怎么来设置呢?通过修改 ser2net.conf 这个配置文件来实现,位于开发板上的/etc 目录下。</div>

<div>将上面编译出来的固件,重新烧写到开发板上面,然后上电启动,进入/etc 目录。</div>

<div># cd /etc</div>

<div># vi ser2net.conf</div>

<div>只需要在 ser2net.conf这个配置中的最后面添加一行以下内容即可。</div>

<div>33333:raw:0:/dev/ttySC4:115200</div>

<div>最后保存退出,然后重启开发板,即可。</div>

<div>接下来就需要修改配置文件。</div>

<div>$ vim ser2net.conf</div>

<div>33333:raw:600:/dev/ttySC4:115200 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCT</div>

<div>ser2net工具安装完后,可执行文件放在:/sbin/ser2net,新建配置文件ser2net.conf</div>

<div>启动ser2net.。</div>

<div>$ /sbin/ser2net -C ser2net.conf</div>

<div>当然也可直接使用命令。</div>

<div>$ /sbin/ser2net -C &quot;33333:raw:600:/dev/ttySC4:115200 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS&quot;</div>

<div>然后查看ser2net运行状态。</div>

<div>$ ps -elf | grep ser2net</div>

<div></div>

<div>ZigBee的数据就通过ser2net进行数据传输的。</div>

<div>如果是OpenWrt直接将ser2net配置进入系统即可。</div>

<h4>Yocto系统移植ser2net</h4>

<div>如果是Yocto系统,需要移植ser2net。</div>

<div><strong>1.</strong><strong>下载源码</strong></div>

<div>ser2net的官网为://<a href="http://ser2net.sourceforge.net" target="_blank">http://ser2net.sourceforge.net</a>/,在页面中可以找到下载链接。笔者的版本为3.5.1。可以通过页面中的下载链接进行下载,也可以通过下面的命令行进行下载。</div>

<div>wget <a href="https://udomain.dl.sourceforge.net/project/ser2net/ser2net/ser2net-3.5.1.tar.gz" target="_blank">https://udomain.dl.sourceforge.net/project/ser2net/ser2net/ser2net-3.5.1.tar.gz</a></div>

<div><strong>2</strong><strong>.</strong><strong>解压源码</strong></div>

<div>$ tar -xvf ser2net-3.5.1.tar.gz</div>

<div>$ cd ser2net-3.5.1/</div>

<div><strong>3.</strong><strong>配置</strong></div>

<div>./configure --host=aarch64-poky-linux</div>

<ul>
        <li>&ldquo;arm-linux&rdquo;是交叉编译工具的前缀,根据自己的实际情况进行修改。</li>
</ul>

<div><strong>3.</strong><strong>编译并安装</strong></div>

<div>设置环境变量:</div>

<div>$ source /opt/poky/3.1.21/environment-setup-aarch64-poky-linux</div>

<div>编译</div>

<div>$ make</div>

<div>最后将程序下载到开发板,修改用户权限后即可运行。</div>

<h3>基于mipg-streamer视频监控</h3>

<h4>配置 OpenWrt 支持 usb 摄像头</h4>

<div>要支持摄像头,就必须配置上摄像头的驱动,因为是免驱的 USB 摄像头,因此我们必须配置上 UVC 驱动,具体如图所示。首先,我们选中内核模块进行配置。</div>

<div>Kernel modules ---&gt;</div>

<div>Video Support ---&gt;</div>

<div>&lt;*&gt; kmod-video-core</div>

<div>&lt;*&gt; kmod-video-uvc</div>

<div>-*- kmod-video-videobuf2</div>

<div></div>

<div>编译。</div>

<div>$make V=99</div>

<div>将固件烧写到板子中,插入USB摄像头,接口查看是否有video0这个设备节点了。</div>

<h4>配置 OpenWrt 支持 mipg-streamer 软件</h4>

<div>mipg-streamer 就是一款用于视频数据采集、视频数据格式转换、视频数据传输的软件,服务器。因此为了让 openwrt 系统支持该软件,我们需要将它配置进去。</div>

<div>Multimedia ---&gt;</div>

<div>&lt;*&gt; mjpg-streamer</div>

<div></div>

<div>就这样我们就让 openwrt 系统支持无线监控,按前面的方法配置好后,保存退出,然后 make V=99,最后将编译出来的固件烧写到我们的开发板上面。然后启动系统。启动完成,插入我们的摄像头,就会看到/dev/video0 这个设备节点。usb 摄像头接入开发板后提示如下:</div>

<div></div>

<div></div>

<div>如果插上提示不对,请先做上一章,再重新生成固件即可。然后运行 mipg-streamer 软件:</div>

<div>#mjpg_streamer -i &quot;input_uvc.so -d /dev/video0&quot; -o &quot;output_http.so&quot;</div>

<div>其中: -i 表示指定输入,这里输入为:input_uvc.so 即 uvc(usb video),-d 是设备位置,我们摄像头的设备位置在:/dev/video0,-y 用于区分一般摄像头和支持 MJPEG 的摄像头,-o 指定输出,这里输出到 output_ http.so 即 http(可以理解为输出到网页上),-w指定 web 服务器为 www。运行命令后,可以得到如下图的信息:</div>

<div></div>

<div>好的,电脑上必须用火狐浏览器才能看到时视频哦,我们打开网页输入:</div>

<div><a href="http://192.168" target="_blank">http://192.168</a>.2.1:8080/?action=stream</div>

<div>其中 192.168.2.1 是开发板的 ip 地址,8080 是 http tcp 的端口,action表示某个动作,这里表示: stream。通过这个输入我们就可以从网页完成视频的监控了!</div>

<h1>6 总结</h1>

<div>由于此项目中涉及到的知识非常的多,如:</div>

<ul>
        <li>Linux开发,包括系统移植,驱动开发等</li>
        <li>电脑端C#程序,包括串口、界面开发等;</li>
        <li>搭建安卓开发环境,学习安卓界面开发,安卓的socket通讯;</li>
        <li>ZigBee组网实验,多终端通讯,对于简单项目在我们上面修改一下就可做成自己的产品;</li>
        <li>项目中使用的通讯协议是基本Modbus协议修改而来的,结构相同只是命令码不同,更标准、更完善。</li>
</ul>

<p>&nbsp;</p>

<p></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Honghuzaitian 发表于 2024-4-15 08:46

挺好的应用演示,楼主开发功底还是不错的。

lugl4313820 发表于 2024-4-17 07:42

历害了呀,这编译sdk花了不少时间呀,大佬的linux太牛了!得向您多多学习。

beyond_笑谈 发表于 2024-5-12 09:57

<p>楼主的linux水平真高,分享过程也很详细,佩服~~</p>
页: [1]
查看完整版本: 【米尔-瑞萨RZ/G2UL开发板-试用评测】基于MYD-YG2UL智能家居系统(二)