打开主菜单

Wiki-Orange Pi β

更改

Orange Pi Zero 3

添加19,615字节, 2023年7月19日 (三) 10:04
缩小TF卡中rootfs分区容量的方法
|-
| WIFI+蓝牙
| • AW859A芯片、支持IEEE 5622芯片、支持IEEE 802.11 a/b/g/n/ac、BT5.0
|-
| 视频输出
<big>'''顶层视图:'''</big><br>
[[File:media/image3zero3-img3-1.png|390x329px]]
<big>'''底层视图:'''</big><br>
[[File:media/image4zero3-img4-1.png|494x292px]]
<span id="orange-pi-zero-3的接口详情图"></span>
== Orange Pi Zero 3的接口详情图 ==
[[File:media/image5zero3-img5-1.png|576x782px800px]]
[[File:media/image6zero3-img6.png|575x227px800px]]
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<ol style="list-style-type: decimal;">
<li><p>TF卡,最小8GB容量的'''class10'''级或以上的高速闪迪卡</p>
<p>[[File:media/image7zero3-img7.png|124x96px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''使用其他品牌的TF卡(非闪迪的TF卡),如下图所示(包含但不仅限这些卡),已经有朋友反馈系统启动过程中会出现问题,比如系统启动到一半卡住不动,或者reboot命令无法正常使用,最后都是换了闪迪牌的TF卡后才解决的。所以如果您使用的是非闪迪牌的TF卡发现系统启动或者使用过程有问题,请更换闪迪牌的TF卡后再测试。'''</p></big>
<p>[[File:media/image8zero3-img8-1.png|103x85px180px]][[File:media/image9zero3-img9-1.png|112x85px195px]][[File:media/image10zero3-img10-1.png|114x85px198px]][[File:media/image11zero3-img11-1.png|86x109px190px]]</p><pstyle="text-align: center;">'''目前反馈在Orange Pi Zero 3上启动有问题的部分TF卡'''</p>
<big><p>'''另外,在其他型号的开发板上能正常使用的TF卡并不能保证在Orange Pi Zero 3上也一定能正常启动,这点请特别注意。'''</p></big>
|}
</li>
<li><p>TF卡读卡器,用于读写TF卡</p>
<p>[[File:media/image12zero3-img12.png|139x96px]]</p></li>
<li><p>Micro HDMI转HDMI连接线,用于将开发板连接到HDMI显示器或者电视进行显示</p>
<div class="figure">
[[File:media/image13zero3-img13.jpeg|209x209px|IMG_6109(20211221-181051)png]]
</div>
|
<big><p>'''注意,请不要使用下图所示的这种比较宽的Micro HDMI转接头,由于开发板的Micro HDMI接口和Type-C电源接口之间的间距比较小,可能会导致两者无法同时插入到开发板。'''</p></big>
<p>[[File:zero3-img14.png|center]]</p>
|}
<p>[[File:media/image14.png|151x120px]]</p></li>
<li><p>电源,如果有5V/2A或5V/3A的电源头那就只需要准备一根下面左边图片所示的USB转Type C接口的数据线,另外也可以使用类似下面右边图片所示的线和电源头一体的5V/2A或者5V/3A的高品质USB Typc C接口电源适配器。</p>
<p>[[File:media/image15zero3-img15.jpegpng|172x172px|IMG_4194(20201104-125502)600px]] [[File:media/image16zero3-img16.jpegpng|173x173px|IMG_6179(20220116-151727)600px]]</p></li>
<li><p>13pin扩展板</p>
<ol style="list-style-type: lower-alpha;">
<li><p>扩展板实物如下所示</p>
<p>[[File:media/image17zero3-img17.png|285x166px]]</p></li>
<li><p>扩展板插入开发板的方式如下所示,切记不要插反了</p>
<p>[[File:media/image18zero3-img18.png|246x162px]]</p></li>
<li><p>Orange Pi Zero 3开发板上的13pin排针可以接上扩展板来扩展开发板上没有的功能,扩展板可以使用的功能有</p>
<ol start="4" style="list-style-type: lower-alpha;">
<li><p>Orange Pi Zero 3开发板13pin排针的原理图如下所示</p>
<p>[[File:media/image19zero3-img19.png|264x142px]]</p></li></ol>
</ol>
<!-- -->
<li><p>USB接口的鼠标和键盘,只要是标准USB接口的鼠标和键盘都可以,鼠标和键盘可以用来控制Orange Pi开发板</p></li>
<li><p>红外遥控器,主要用于控制安卓TV系统</p>
<p>[[File:media/image20zero3-img20.png|209x196px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<li><p>百兆或者千兆网线,用于将开发板连接到因特网</p></li>
<li><p>AV视频线,如果希望通过AV接口而不是HDMI接口来显示视频,那么就需要通过AV视频线将开发板连接到电视</p>
<p>[[File:media/image21zero3-img21.png|200x177px]]</p></li>
<li><p>散热片,如果担心开发板的温度过高,可以加个散热片,散热片贴在H618芯片上即可</p>
<p>[[File:media/image22zero3-img22.png|171x140px]] [[File:media/image23zero3-img23-1.png|151x147px]]</p></li>
<li><p>5V的散热风扇,如下图所示,开发板的26pin和13pin接口上都有5V和GND引脚可以接散热风扇,26pin和13pin排针的间距为'''2.54mm''',散热风扇的电源接口参照这个规格去购买即可。</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<big><p>'''注意,开发板插上电源后5V引脚就可以直接使用,无需其他设置,另外5V引脚输出的电压是无法通过软件调节和关闭的。'''</p></big>
|}
<p>[[File:media/image24zero3-img24-1.png|212x226px]]</p></li>
<li><p>配套外壳'''(待添加图片)'''</p></li>
<li><p>USB转TTL模块和杜邦线,使用串口调试功能时,需要USB转TTL模块和杜邦线来连接开发板和电脑</p>
<p>[[File:media/image25zero3-img25.png|176x145px]] [[File:media/image26zero3-img26.png|305x110px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<ol start="5" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:media/image27zero3-img27.png|456x219px]]</p></li>
<li><p>然后可以选择下载balenaEtcher的Portable版本的软件,Portable版本无需安装,双击打开就可以使用</p>
<p>[[File:media/image28zero3-img28.png|468x173px]]</p></li>
<li><p>如果下载的是需要安装版本的balenaEtcher,请先安装再使用。如果下载的Portable版本balenaEtcher,直接双击打开即可,打开后的balenaEtcher界面如下图所示</p>
<p>[[File:media/image29zero3-img29.png|335x211px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<big>'''打开balenaEtcher时如果提示下面的错误:'''</big>
[[File:media/image30zero3-img30.png|206x162pxcenter]]
<big>'''请选择balenaEtcher后点击右键,然后选择以管理员身份运行。'''</big>
[[File:media/image31zero3-img31.png|114x37pxcenter]]
|}
</li></ol>
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:media/image32zero3-img32.png|501x281px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:media/image33zero3-img33.png|506x317px]]</p></li>
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:media/image34zero3-img34.png|519x325px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:media/image35zero3-img35.png|523x324px]]</p></li></ol>
<span id="使用win32diskimager烧录linux镜像的方法"></span>
<div class="figure">
[[File:media/image36zero3-img36.png|209x228px|选区_199]]
</div></li>
<li><p>然后点击”'''Format'''”,格式化前会弹出一个警告框,选择”'''是(Y)'''”后就会开始格式化</p></li>
[[File:media/image37zero3-img37.png|304x147px]]
</ol>
<ol start="5" style="list-style-type: lower-alpha;">
<li><p>格式化完TF卡后会弹出下图所示的信息,点击确定即可</p>
<p>[[File:media/image38zero3-img38.png|186x149px]]</p></li></ol>
</li></ol>
<!-- -->
<li><p>b) 然后确认下TF卡的盘符和”'''设备'''”一栏中显示的一致</p></li>
<li><p>c) 最后点击”'''写入'''”即可开始烧录</p>
<p>[[File:media/image39zero3-img39.png|297x206px]]</p></li></ol>
</li>
<li><p>镜像写入完成后,点击”'''退出'''”按钮退出即可,然后就可以拔出TF卡插到开发板中启动</p></li></ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>进入balenaEtcher下载页面后,点击绿色的下载按钮会跳到软件下载的地方</p>
<p>[[File:media/image27zero3-img27.png|489x235px]]</p></li>
<li><p>然后选择下载Linux版本的软件即可</p>
<p>[[File:media/image40zero3-img40.png|485x184px]]</p></li>
<li><p>从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-3.html '''Orange Pi的资料下载页面''']下载想要烧录的Linux操作系统镜像文件压缩包,然后使用解压软件解压,解压后的文件中,以”'''.img'''”结尾的文件就是操作系统的镜像文件,大小一般都在1GB以上。7z结尾的压缩包的解压命令如下所示:</p>
{| class="wikitable" style="width:800px;"
</li>
<li><p>然后在Ubuntu PC的图形界面双击'''balenaEtcher-1.14.3-x64.AppImage'''即可打开balenaEtcher('''无需安装'''),balenaEtcher打开后的界面显示如下图所示</p>
<p>[[File:media/image41zero3-img41.png|423x251px]]</p></li>
<li><p>使用balenaEtcher烧录Linux镜像的具体步骤如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>然后选择TF卡的盘符</p></li>
<li><p>最后点击Flash就会开始烧录Linux镜像到TF卡中</p>
<p>[[File:media/image42zero3-img42.png|431x278px]]</p></li></ol>
</li>
<li><p>balenaEtcher烧录Linux镜像的过程显示的界面如下图所示,另外进度条显示紫色表示正在烧录Linux镜像到TF卡中</p>
<p>[[File:media/image43zero3-img43.png|576x247px]]</p></li></ol>
<!-- -->
<ol start="11" style="list-style-type: decimal;">
<li><p>Linux镜像烧录完后,balenaEtcher默认还会对烧录到TF卡中的镜像进行校验,确保烧录过程没有出问题。如下图所示,显示绿色的进度条就表示镜像已经烧录完成,balenaEtcher正在对烧录完成的镜像进行校验</p>
<p>[[File:media/image44zero3-img44.png|576x252px]]</p></li>
<li><p>成功烧录完成后balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,然后拔出TF卡插入到开发板的TF卡槽中使用了</p>
<p>[[File:media/image45zero3-img45.png|576x340px]]</p></li></ol>
<span id="烧写android镜像到tf卡的方法"></span>
|-
|
<big>'''开发板的Android镜像只能在Windows平台下使用PhoenixCard软件烧录到TF卡中,PhoenixCard软件的版本必须为PhonixCard开发板的Android镜像只能在Windows平台下使用<span style="color:#FF0000">PhoenixCard</span>软件烧录到TF卡中,PhoenixCard软件的版本必须为<span style="color:#FF0000">PhonixCard-4.2.8。8</span>。'''
'''请不要用烧录Linux镜像的软件,如Win32Diskimager或者balenaEtcher来烧录安卓镜像。'''
<ol style="list-style-type: decimal;">
<li><p>首先请确保Windows系统已经安装了'''Microsoft Visual C++ 2008 Redistrbutable - x86'''</p>
<p>[[File:media/image46zero3-img46.png|449x293px]]</p></li>
<li><p>如果没有安装'''Microsoft Visual C++ 2008 Redistrbutable - x86''',使用'''PhoenixCard'''格式化TF卡或者烧录Android镜像会提示下面的错误</p>
<div class="figure">
[[File:media/image47zero3-img47.png|522x395px|NUQB$Q%(){1CV6M6WK4N`5J]]
</div></li>
<li><p>'''Microsoft Visual C++ 2008 Redistrbutable - x86'''的安装包可以从Orange Pi Zero 3的[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-3.html '''官方工具''']中下载到,也可以去[https://www.microsoft.com/zh-cn/download/details.aspx?id=26368 '''微软官网''']下载</p>
<p>[[File:media/image48zero3-img48.png|240x93px]] [[File:media/image49zero3-img49.png|200x95px]]</p></li>
<li><p>然后准备一张8GB或更大容量的TF卡,TF卡的传输速度必须为'''class10'''级或'''class10'''级以上,建议使用闪迪等品牌的TF卡</p></li>
<li><p>然后使用读卡器把TF卡插入电脑</p></li>
<li><p>从[http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-3.html '''Orange Pi的资料下载页面''']下载Android镜像和PhoenixCard烧写工具,请确保PhonenixCrad工具的版本为'''<span style="color:#FF0000">PhonixCard-4.2.8,请不要用低于4.2.8版本的PhonixCard软件来烧录Android镜像,</span>'''低于这个版本的PhonixCard工具烧写的Android镜像可能会有问题</p>
<p>[[File:media/image50zero3-img50.png|575x169px]]</p></li>
<li><p>然后使用解压软件解压下载的Android镜像的压缩包,解压后的文件中,以”'''.img'''” 结尾的文件就是Android镜像文件,大小在1GB以上。如果不知道怎么解压Android镜像的压缩包,可以安装一个[https://yasuo.360.cn/ '''360压缩软件''']来解压镜像。</p>
<p>[[File:media/image51zero3-img51.png|438x158px]]</p></li>
<li><p>然后使用解压软件解压'''PhonixCard4.2.8.zip''',此软件无需安装,在解压后的文件夹中找到PhoenixCard打开即可</p>
<p>[[File:media/image52zero3-img52.png|576x113px]]</p></li>
<li><p>打开PhoenixCard后,如果TF卡识别正常,会在中间的列表中显示TF卡的盘符和容量,'''<span style="color:#FF0000">请务必确认显示的盘符和你想烧录的TF卡的盘符是一致的</span>''',如果没有显示可以尝试拔插下TF卡,或者点击PhoenixCard中的”'''刷新盘符'''”按钮</p></li>
[[File:media/image53zero3-img53-1.png|575x137px]]
</ol>
<ol start="10" style="list-style-type: decimal;">
<li><p>确认完盘符后,先格式化TF卡,点击PhoenixCard中”'''恢复卡'''”按钮即可(如果”'''恢复卡'''”按钮为灰色的无法按下,可以先点击下”'''刷新盘符'''”按钮)</p>
<p>[[File:media/image54zero3-img54-1.png|575x316px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<li><p>在”'''制作卡的种类'''”中选择”'''启动卡'''”</p></li>
<li><p>然后点击”'''烧卡'''”按钮就会开始烧录</p>
<p>[[File:media/image55zero3-img55-1.png|576x402px]]</p></li></ol>
</li>
<li><p>烧录完后PhoenixCard的显示如下图所示,此时点击”'''关闭'''”按钮即可退出PhoenixCard,然后就可以把TF卡从电脑中拔出来插到开发板中启动了</p>
<p>[[File:media/image56zero3-img56-1.png|575x354px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''烧录完Android系统后在Windows中TF卡只能看到一个128 MB的分区,显示的分区如下图所示(有些电脑可能会弹出二十几个磁盘分区,但也只能打开128 MB的那个分区),请注意,这是正常的,请不要以为TF卡烧坏了。之所以这样,是因为安卓系统总共有二十几个分区,但大部分分区在Windows系统中是无法正常识别的。此时,请放心的拔下TF卡然后插入开发板中启动即可。'''</p></big>
<p>[[File:media/image57zero3-img57.png|193x45pxcenter]]</p>
<big><p>'''安卓系统启动后,使用下面的命令可以看到TF卡中的这二十几个分区:'''</p></big>
<p>[[File:media/image58zero3-img58.png|368x131pxcenter]]</p>
<big><p>'''使用df -h命令可以看到16GB的TF卡烧录完安卓系统后大概还有11 GB的空间可以用使用(二十几个分区并不会都挂载到安卓系统中,重点关注这些能看到的分区即可)。'''</p></big>
<p>[[File:media/image59zero3-img59.png|391x220pxcenter]]</p>
|}
</li></ol>
开发板上有一个16MB大小的SPI Flash,其所在位置如下图所示:
[[File:media/image60zero3-img60-1.png|285x185px]]
SPI Flash中默认烧录有一个微型的linux系统,此系统主要用于证明开发板是能正常启动的。当拿到开发板后,不用烧录系统到TF卡中,只需要给开发板接上Type-C电源就能启动SPI Flash中的微型linux系统。此系统的主要功能有:
<ol style="list-style-type: decimal;">
<li><p>首先需要准备一个'''3.3v'''的USB转TTL模块,然后将USB转TTL模块的USB接口一端插入到电脑的USB接口中</p>
<p>[[File:media/image61zero3-img61.png|575x245px]]</p></li>
<li><p>开发板的调试串口GND、TX和RX引脚的对应关系如下图所示</p>
<p>[[File:media/image62zero3-img62-1.png|328x185px]]</p></li>
<li><p>USB转TTL模块GND、TX和RX引脚需要通过杜邦线连接到开发板的调试串口上</p>
<ol style="list-style-type: lower-alpha;">
</li>
<li><p>USB转TTL模块连接电脑和Orange Pi开发板的示意图如下所示</p>
<p>[[File:media/image63zero3-img63.png|576x208px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>执行putty命令后会弹出下面的界面</p>
<p>[[File:media/image64zero3-img64.png|332x290px]]</p></li>
<li><p>首先选择串口的设置界面</p>
<p>[[File:media/image65zero3-img65.png|337x297px]]</p></li>
<li><p>然后设置串口的参数</p>
<ol style="list-style-type: lower-alpha;">
<li><p>设置'''Speed(baud)'''为'''115200'''(串口的波特率)</p></li>
<li><p>设置'''Flow control'''为'''None'''</p>
<p>[[File:media/image66zero3-img66.png|398x352px]]</p></li></ol>
</li>
<li><p>在串口的设置界面设置完后,再回到Session界面</p>
<li><p>首先选择'''Connection type'''为'''Serial'''</p></li>
<li><p>然后点击'''Open'''按钮连接串口</p>
<p>[[File:media/image67zero3-img67.png|375x332px]]</p></li></ol>
</li>
<li><p>然后启动开发板,就能从打开的串口终端中看到系统输出的Log信息了</p>
<p>[[File:media/image68zero3-img68.png|376x249px]]</p></li></ol>
<span id="windows平台调试串口的使用方法"></span>
</li>
<li><p>进入MobaXterm下载网页后点击'''GET XOBATERM NOW!'''</p>
<p>[[File:media/image69zero3-img69.png|382x233px]]</p></li>
<li><p>然后选择下载Home版本</p>
<p>[[File:media/image70zero3-img70.png|353x231px]]</p></li>
<li><p>然后选择Portable便携式版本,下载完后无需安装,直接打开就可以使用</p>
<div class="figure">
[[File:media/image71zero3-img71.png|322x175px|选区_232]]
</div></li></ol>
</li>
<li><p>下载完后使用解压缩软件解压下载的压缩包,即可得到MobaXterm的可执软件,然后双击打开</p>
<p>[[File:media/image72zero3-img72.png|576x83px]]</p></li>
<li><p>打开软件后,设置串口连接的步骤如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>最后点击”'''OK'''”按钮完成设置</p></li>
[[File:media/image73zero3-img73.png|575x291px1400px]]</ol>
</li></ol>
<ol start="4" style="list-style-type: decimal;">
<li><p>点击”'''OK'''”按钮后会进入下面的界面,此时启动开发板就能看到串口的输出信息了</p>
<p>[[File:media/image74zero3-img74.png|575x291px1400px]]</p></li></ol>
== 使用开发板26pin或13pin接口中的5v引脚供电说明 ==
<div class="figure">
[[File:media/image75zero3-img75.jpeg|216x154px|4ff86e49b6624616f9498fe44c366f29png]]
</div>
<li><p>使用26pin或者13pin接口中的5V引脚来给开发板供电,电源线的接法如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>上图所示的电源线USB &gt; A口需要插到5V/2A或者5V/3A的电源适配器接头上('''不建议插到电脑的USB接口来供电,如果开发板接的外设过多,使用会不稳定''')</p></li>
<li><p>红色的杜邦线需要插到开发板26pin或者13pin接口的5V引脚上</p></li>
<li><p>黑色的杜邦线需要插到26pin或者13pin接口的GND引脚上</p></li>
<li><p>26pin和13pin接口5V引脚和GND引脚在开发板中的位置如下图所示,'''<span style="color:#FF0000">切记不要接反了</span>'''</p>
<p>[[File:media/image24zero3-img24-1.png|163x174px]]</p></li></ol>
</li></ol>
<ol style="list-style-type: decimal;">
<li><p>如果有购买Orange Pi的13pin扩展板,将扩展板插入开发板的13pin接口中,就可以扩展2个USB接口</p>
<p>[[File:media/image18zero3-img18.png|246x162px]]</p></li>
<li><p>如果没有13pin扩展板,可以使用4pin 2.54mm杜邦转USB2.0母头的线来扩展USB接口,具体方法如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先需要准备一根4pin 2.54mm杜邦转USB2.0母头的线(这种线在淘宝可以买到,请自行搜索购买),如下图所示:</p>
<p>[[File:media/image76zero3-img76.png|208x162px]] [[File:media/image77zero3-img77.png|237x165px]]</p></li>
<li><p>13pin接口的原理图如下所示</p>
<p>[[File:media/image19zero3-img19.png|265x142px]] [[File:media/image78zero3-img78.png|245x133px]]</p></li>
<li><p>USB2的接线如下所示</p>
<p>[[File:media/image79zero3-img79.png|256x189px]]</p></li>
<li><p>USB3的接线如下所示</p>
<p>[[File:media/image80zero3-img80.png|255x195px]]</p></li>
<li><p>如果需要在13pin接口上同时接两个USB设备,会发现13pin接口上的5V和GND引脚不够用,此时其中一个USB设备可以使用26pin接口中的5V和GND引脚,位置如下图所示:</p>
<p>[[File:media/image24zero3-img24-1.png|243x260px]]</p></li></ol>
</li></ol>
| style="text-align: left;"| '''支持'''
|-
| style="text-align: left;"| '''Ubuntu 22.04 - Focal<span style="color:#FF0000">Jammy</span>'''
| style="text-align: left;"| '''Linux5.4'''
| style="text-align: left;"| '''支持'''
<div class="figure">
[[File:media/image81zero3-img81.png|236x108px|659B0DE6-F15C-4005-A5F9-DFF881EE647B]]
</div>
<ol style="list-style-type: decimal;">
<li><p>linux系统默认就是自动登录终端的,默认登录的用户名是'''orangepi'''</p>
<p>[[File:media/image82zero3-img82.png|475x240px]]</p></li>
<li><p>使用下面的命令可以设置root用户自动登录终端</p>
{| class="wikitable" style="width:800px;"
<div class="figure">
[[File:media/image83zero3-img83.png|576x324px|1]]
</div></li>
<div class="figure">
[[File:media/image84zero3-img84.png|569x320px|IMG_256]]
</div>
</li>
<li><p>然后重启系统,就会自动使用root用户登录桌面了</p>
<p>[[File:media/image85zero3-img85.png|294x123px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
</li>
<li><p>然后选择'''System'''</p>
<p>[[File:media/image86zero3-img86.png|398x194px]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:media/image87zero3-img87.png|393x202px]]</p></li>
<li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''disable-leds'''</p>
<p>[[File:media/image88zero3-img88.png|397x35px]]</p></li>
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image89zero3-img89.png|397x92px]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image90zero3-img90.png|395x91px]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image91zero3-img91.png|374x187px]]</p></li>
<li><p>重启后完全进入系统就可以看到开发板上的两个LED灯都不会亮了</p></li></ol>
</li></ol>
</li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:media/image92zero3-img92.png|575x210px]]</p></li>
<li><p>上图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p></li></ol>
</li>
<ol start="4" style="list-style-type: decimal;">
<li><p>第一次启动完Linux系统后,我们还可以将TF卡从开发板中取下来重新插入'''<span style="color:#FF0000">Ubuntu电脑</span>''',然后再次使用gparted查看下TF卡的情况,如下图所示,rootfs分区(/dev/sdc1)的容量已经扩展到了14.69GiB了</p>
<p>[[File:media/image93zero3-img93.png|575x211px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
</li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况。下图显示的是烧录完Linux桌面版系统后TF卡的情况,可以看到,虽然TF卡的总容量是16GB的(在GParted中显示为14.84GiB),但是rootfs分区(/dev/sdc1)实际只分配了4.05GiB,还剩下10.79GiB未分配</p>
<p>[[File:media/image92zero3-img92.png|575x210px]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:media/image94zero3-img94.png|575x211px]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:media/image95zero3-img95.png|436x298px]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始扩容rootfs分区的大小</p>
<p>[[File:media/image96zero3-img96.png|444x302px]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:media/image97zero3-img97.png|315x193px]]</p></li><li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New siezesize(MiB)'''中的数字来设置rootfs分区的大小</p><p>[[File:media/image98zero3-img98.png|320x191px]]</p></li>
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:media/image99zero3-img99.png|327x196px]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色 <span style="color:green">√</span>'''</p>
<p>[[File:media/image100zero3-img100.png|392x270px]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:media/image101zero3-img101.png|399x116px]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:media/image102zero3-img102.png|399x172px]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明手动扩容成功</p>
{| class="wikitable" style="width:800px;"
</li>
<li><p>打开gparted后在右上角可以选择TF卡,然后就可以看到TF卡容量的使用情况</p>
<p>[[File:media/image103zero3-img103.png|575x217px]]</p></li>
<li><p>然后选中rootfs分区(/dev/sdc1)</p>
<p>[[File:media/image104zero3-img104.png|575x217px]]</p></li>
<li><p>再点击鼠标右键就可以看到下图所示的操作选项,如果TF卡已经挂载了,首先需要Umount掉TF卡的rootfs分区</p>
<p>[[File:media/image105zero3-img105.png|400x274px]]</p></li>
<li><p>然后再次选中rootfs分区,再点击鼠标右键,然后选择'''Resize/Move'''开始设置rootfs分区的大小</p>
<p>[[File:media/image106zero3-img106.png|399x273px]]</p></li>
<li><p>'''Resize/Move'''选项打开后会弹出下面的设置界面</p>
<p>[[File:media/image107zero3-img107.png|315x188px]]</p></li><li><p>然后可以直接拖动下图所示的位置来设置容量的大小,也可以通过设置'''New siezesize(MiB)'''中的数字来设置rootfs分区的大小</p><p>[[File:media/image98zero3-img98.png|318x190px]]</p></li></ol>
<!-- -->
<ol start="18" style="list-style-type: decimal;">
<li><p>设置好容量后,再点击右下角的'''Resize/Move'''即可</p>
<p>[[File:media/image99zero3-img99.png|327x196px]]</p></li>
<li><p>最后确认无误后,再点击下图所示的'''绿色 <span style="color:green">√</span>'''</p>
<p>[[File:media/image100zero3-img100.png|392x270px]]</p></li>
<li><p>然后选择'''Apply''',就会正式开始扩容rootfs分区的容量</p>
<p>[[File:media/image101zero3-img101.png|365x106px]]</p></li>
<li><p>扩容完成后点击'''Close'''关闭即可</p>
<p>[[File:media/image102zero3-img102.png|379x164px]]</p></li>
<li><p>然后就可以把TF卡拔下来,再插到开发板中启动,进入开发板的Linux系统中后如果使用'''df -h'''命令可以看到rootfs分区的大小和前面设置的大小一致的话就说明缩小容量成功</p>
{| class="wikitable" style="width:800px;"
|-
|
<big><p>'''下面的命令请不要照抄,比如debian12中的网络节点名为end0,下面的命令就需要修改为ping www.baidu.com -I end0。end0。(这里是大写的字母I,不是小写的字母L)'''</p></big>
|}
{| class="wikitable" style="width:800px;"
<li><p>先登录linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li>如果开发板连接了网线,可以通过[[Orange Pi Zero 3#Ubuntu下SSH远程登录开发板|'''ssh远程登录linux系统''']]</li></ol>
<!-- -->
<div class="figure">
[[File:media/image108zero3-img108.png|575x250px|选区_011]]
</div></li>
|-
|
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0&nbsp;&nbsp;&nbsp;(这里是大写的字母I,不是小写的字母L)'''</p>
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms</p>
<li><p>先登录linux系统,有下面三种方式</p>
<ol style="list-style-type: lower-alpha;">
<li><p>如果开发板连接了网线,可以通过[[Orange Pi Zero 3#Ubuntu下SSH远程登录开发板|'''ssh远程登录linux系统''']]</p></li>
<li><p>如果开发板连接好了调试串口,可以使用串口终端登录linux系统(串口软件请使用MobaXterm,使用minicom无法显示图形界面)</p></li>
<li><p>如果连接了开发板到HDMI显示器,可以通过HDMI显示的终端登录到linux系统</p></li></ol>
</li>
<li><p>输入nmtui命令打开的界面如下所示</p>
<p>[[File:media/image109zero3-img109.png|345x215px]]</p></li>
<li><p>选择'''Activate a connect'''后回车</p>
<p>[[File:media/image110zero3-img110.png|349x216px]]</p></li>
<li><p>然后就能看到所有搜索到的WIFI热点</p>
<p>[[File:media/image111zero3-img111.png|360x229px]]</p></li>
<li><p>选择想要连接的WIFI热点后再使用Tab键将光标定位到'''Activate'''后回车</p>
<p>[[File:media/image112zero3-img112.png|366x230px]]</p></li>
<li><p>然后会弹出输入密码的对话框,在'''Pssword'''内输入对应的密码然后回车就会开始连接WIFI</p>
<p>[[File:media/image113zero3-img113.png|352x225px]]</p></li>
<li><p>WIFI连接成功后会在已连接的WIFI名称前显示一个”*”</p>
<p>[[File:media/image114zero3-img114.png|349x223px]]</p></li>
<li><p>通过'''ip a s wlan0'''命令可以查看wifi的IP地址</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''ping www.orangepi.org -I wlan0&nbsp;&nbsp;&nbsp;(这里是大写的字母I,不是小写的字母L)'''</p>
<p>PING www.orangepi.org (182.92.236.130) from 192.168.1.49 wlan0: 56(84) bytes of data.</p>
<p>64 bytes from 182.92.236.130 (182.92.236.130): icmp_seq=1 ttl=52 time=43.5 ms</p>
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的网络配置图标(测试WIFI时请不要连接网线)</p>
<p>[[File:media/image115zero3-img115.png|275x121px]]</p></li>
<li><p>在弹出的下拉框中点击'''More networks'''可以看到所有扫描到的WIFI热点,然后选择想要连接的WIFI热点</p>
<p>[[File:media/image116zero3-img116.png|576x353px]]</p></li>
<li><p>然后输入WIFI热点的密码,再点击'''Connect'''就会开始连接WIFI</p>
<p>[[File:media/image117zero3-img117.png|288x147px]]</p></li>
<li><p>连接好WIFI后,可以打开浏览器查看是否能上网,浏览器的入口如下图所示</p>
<p>[[File:media/image118zero3-img118.png|465x249px]]</p></li>
<li><p>打开浏览器后如果能打开其他网页说明WIFI连接正常</p>
<div class="figure">
[[File:media/image119zero3-img119.png|576x273px|5]]
</div></li></ol>
</li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击 '''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:media/image120zero3-img120.png|230x183px]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:media/image121zero3-img121.png|233x111px]]</p></li>
<li><p>在NAT模式下,连接到开发板热点的无线设备是向开发板的DHCP服务请求IP地址的,所以会有两个不同的网段,如这里开发板的IP是192.168.1.X</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|}
<p>而开发板的DHCP服务默认会给接入热点的设备分配'''192.168.12.0/24'''的IP地址,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址是'''192.168.12.X'''。</p>
<p>[[File:media/image121zero3-img121.png|271x129px]]</p><p>[[File:media/image122zero3-img122-1.png|274x155px]]</p></li>
<li><p>如果想要为接入的设备指定不同的网段,可以通过-g参数指定,如通过-g参数指定接入点AP的网段为192.168.2.1</p>
此时通过手机连接到热点后,点击已经连接的WIFI热点'''orangepi''',然后可以看到手机的IP地址是'''192.168.2.X'''。
[[File:media/image121zero3-img121.png|286x137px]]
[[File:media/image123zero3-img123.png|302x174px]]
</li></ol>
<ol start="7" style="list-style-type: decimal;">
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:media/image124zero3-img124.png|237x198px]]
</li></ol>
<span id="create_ap以bridge模式创建wifi热点的方法"></span>
</li>
<li><p>此时拿出手机,在搜索到的WIFI列表中就能找到开发板创建的名为'''orangepi'''的WIFI热点,然后可以点击'''orangepi'''连接热点,密码就是上面设置的'''orangepi'''</p>
<p>[[File:media/image120zero3-img120.png|265x211px]]</p></li>
<li><p>连接成功后的显示如下图所示</p>
<p>[[File:media/image121zero3-img121.png|273x130px]]</p></li>
<li><p>在bridge模式下,连接到开发板热点的无线设备也是向主路由(开发板连接的路由器)的DHCP服务请求IP地址的,如这里开发板的IP是'''192.168.1.X'''</p>
{| class="wikitable" style="width:800px;"
|}
<p>而接入WIFI热点的设备的IP也是由主路由分配的,所以连接WIFI热点的手机和开发板处于相同的网段,这时点击已经连接的WIFI热点'''orangepi''',然后就可以看到手机的IP地址也是'''192.168.1.X'''。</p>
<p>[[File:media/image121zero3-img121.png|284x136px]]</p><p>[[File:media/image125zero3-img125.png|282x159px]]</p></li>
<li><p>在不指定'''--freq-band'''参数的情况下,默认创建的热点是2.4G频段的,如果想要创建5G频段的热点可以通过'''--freq-band 5'''参数指定,具体命令如下</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
此时手机是搜索不到WIFI热点的,需要手动指定WIFI热点名称,并输入密码来连接WIFI热点
[[File:media/image124zero3-img124.png|228x191px]]
</li></ol>
<span id="设置静态ip地址的方法"></span>
</li>
<li><p>然后选择'''Edit a connection'''并按下回车键</p>
<p>[[File:media/image126zero3-img126.png|227x247px]]</p></li>
<li><p>然后选择需要设置静态IP地址的网络接口,比如设置'''Ethernet'''接口的静态IP地址选择'''Wired connection 1'''就可以了</p>
<p>[[File:media/image127zero3-img127.png|310x149px]]</p></li>
<li><p>然后通过'''Tab'''键选择'''Edit'''并按下回车键</p>
<p>[[File:media/image128zero3-img128.png|316x144px]]</p></li>
<li><p>然后通过Tab键将光标移动到下图所示的'''&lt;Automatic&gt;'''位置进行IPv4的配置</p>
<p>[[File:media/image129zero3-img129.png|575x240px]]</p></li>
<li><p>然后回车,通过上下方向键选择'''Manual''',然后回车确定</p>
<p>[[File:media/image130zero3-img130.png|576x237px]]</p></li>
<li><p>选择完后的显示如下图所示</p>
<p>[[File:media/image131zero3-img131.png|575x240px]]</p></li>
<li><p>然后通过Tab键将光标移动到'''&lt;Show&gt;'''</p>
<p>[[File:media/image132zero3-img132.png|576x241px]]</p></li>
<li><p>然后回车,回车后会弹出下面的设置界面</p>
<p>[[File:media/image133zero3-img133.png|575x450px]]</p></li>
<li><p>然后就可以在下图所示的位置设置IP地址(Addresses)、网关(Gateway)和DNS服务器的地址(里面还有很多其他设置选项,请自行探索),'''<span style="color:#FF0000">请根据自己的具体需求来设置,下图中设置的值只是一个示例</span>'''</p>
<p>[[File:media/image134zero3-img134-1.png|576x233px]]</p></li>
<li><p>设置完后将光标移动到右下角的'''&lt;OK&gt;''',然后回车确认</p>
<p>[[File:media/image135zero3-img135.png|576x116px]]</p></li>
<li><p>然后点击'''&lt;Back&gt;'''回退到上一级选择界面</p>
<p>[[File:media/image136zero3-img136.png|330x325px]]</p></li>
<li><p>然后选择'''Activate a connection''',再将光标移动到'''&lt;OK&gt;''',最后点击回车</p>
<p>[[File:media/image137zero3-img137.png|331x248px]]</p></li>
<li><p>然后选择需要设置的网络接口,比如'''Wired connection 1''',然后将光标移动到'''&lt;Deactivate&gt;''',再按下回车键禁用'''Wired connection 1'''</p>
<p>[[File:media/image138zero3-img138.png|576x224px]]</p></li>
<li><p>然后请不要移动光标,再按下回车键重新使能'''Wired connection 1''',这样前面设置的静态IP地址就会生效了</p>
<p>[[File:media/image139zero3-img139.png|576x224px]]</p></li>
<li><p>然后通过'''&lt;Back&gt;'''和'''Quit'''按钮就可以退出nmtui</p>
<p>[[File:media/image140zero3-img140.png|300x253px]] [[File:media/image141zero3-img141.png|227x252px]]</p></li>
<li><p>然后通过'''ip a s eth0'''就能看到网口的IP地址已经变成前面设置的静态IP地址了</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
<span id="使用nmcli命令来设置静态ip地址"></span>
 
==== 使用nmcli命令来设置静态IP地址 ====
<ol start="3" style="list-style-type: decimal;">
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:media/image142zero3-img142.png|575x273px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<li><p>然后在'''Specify username'''中输入linux系统的用户名'''root'''或'''orangepi'''</p></li>
<li><p>最后点击'''OK'''即可</p>
<p>[[File:media/image143zero3-img143.png|576x292px]]</p></li></ol>
</li>
<li><p>然后会提示输入密码,默认root和orangepi用户的密码都为orangepi</p>
<big><p>'''注意,输入密码的时候,<span style="color:#FF0000">屏幕上是不会显示输入的密码的具体内容的</span>,请不要以为是有什么故障,输入完后直接回车即可。'''</p></big>
|}
<p>[[File:media/image144zero3-img144.png|575x157px]]</p></li>
<li><p>成功登录系统后的显示如下图所示</p>
<p>[[File:media/image145zero3-img145.png|559x388px]]</p></li></ol>
<span id="hdmi测试"></span>
<div class="figure">
[[File:media/image13zero3-img13.jpeg|151x151px|IMG_6109(20211221-181051)png]]
</div></li>
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器</p>
<p>[[File:media/image146zero3-img146.png|155x104px]]</p></li>
<li><p>一根VGA线和一根Micro HDMI公转HDMI母转接线</p>
<p>[[File:media/image147zero3-img147.png|148x133px400px]] [[File:media/image148zero3-img148.jpegpng|157x139px|IMG_6140(20220104-134930)400px]]</p></li>
<li><p>一个支持VGA接口的显示器或者电视</p></li></ol>
</li>
<li><p>HDMI转VGA显示测试如下所示</p>
<p>[[File:media/image149zero3-img149.png|574x336px]]</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
<p>orangepi@orangepi:~$ '''sudo cat /sys/class/disp/disp/attr/sys'''</p>
|}
<p>[[File:media/image150zero3-img150.png|575x84px]]</p></li></ol>
<span id="linux5.4系统framebuffer宽度和高度的修改方法"></span>
<ol style="list-style-type: decimal;">
<li><p>点击桌面右上角的蓝牙图标</p>
<p>[[File:media/image151zero3-img151.png|314x122px]]</p></li>
<li><p>然后选择适配器</p>
<p>[[File:media/image152zero3-img152.png|318x140px]]</p></li>
<li><p>如果有提示下面的界面,请选择'''Yes'''</p>
<p>[[File:media/image153zero3-img153.png|248x85px]]</p></li>
<li><p>然后在蓝牙的适配器设置界面中设置'''Visibility Setting'''为'''Always visible''',然后关闭即可</p>
<p>[[File:media/image154zero3-img154.png|196x183px]]</p></li>
<li><p>然后打开蓝牙设备的配置界面</p>
<p>[[File:media/image155zero3-img155.png|438x179px]]</p></li>
<li><p>点击'''Search'''即可开始扫描周围的蓝牙设备</p>
<p>[[File:media/image156zero3-img156.png|311x210px]]</p></li>
<li><p>然后选择想要连接的蓝牙设备,再点击鼠标右键就会弹出对此蓝牙设备的操作界面,选择'''Pair'''即可开始配对,这里演示的是和Android手机配对</p>
<p>[[File:media/image157zero3-img157.png|311x242px]]</p></li>
<li><p>配对时,桌面的右上角会弹出配对确认框,选择'''Confirm'''确认即可,此时手机上也同样需要进行确认</p>
<p>[[File:media/image158zero3-img158.png|411x150px]]</p></li>
<li><p>和手机配对完后,可以选择已配对的蓝牙设备,然后右键选择'''Send a File'''即可开始给手机发送一张图片</p>
<p>[[File:media/image159zero3-img159.png|405x239px]]</p></li>
<li><p>发送图片的界面如下所示</p>
<p>[[File:media/image160zero3-img160.png|399x231px]]</p></li></ol>
=== 服务器版镜像的使用方法 ===
</li>
<li><p>配对成功后,手机蓝牙界面的显示如下所示</p>
<p>[[File:media/image161zero3-img161.png|189x167px]]</p></li>
<li><p>连接蓝牙设备需要安装 '''pulseaudio-module-bluetooth'''软件包,然后再启动'''pulseaudio''' 服务</p>
{| class="wikitable" style="width:800px;"
<p>orangepi@orangepi:~$ '''sudo bluetoothctl'''</p>
<p>Agent registered</p>
<p>[bluetooth]# '''paired-devices &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #查看已配对的蓝牙设备的MAC地址'''</p>
<p>Device DC:72:9B:4C:F4:CF orangepi</p>
<p>[bluetooth]# '''connect DC:72:9B:4C:F4:CF &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #使用MAC地址连接蓝牙设备'''</p>
<p>Attempting to connect to DC:72:9B:4C:F4:CF</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF Connected: yes</p>
<p>[CHG] Device DC:72:9B:4C:F4:CF ServicesResolved: yes</p>
<p>[CHG] Controller 10:11:12:13:14:15 Discoverable: no</p>
<p>'''[orangepi]# &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #出现这个提示符说明连接成功'''</p>
|}
</li>
<div class="figure">
[[File:media/image162zero3-img162.jpeg|223x232px|Screenshot_20201205_142413png]]
</div></li></ol>
<div class="figure">
[[File:media/image163zero3-img163.png|575x279px|选区_021]]
</div></li></ol>
<div class="figure">
[[File:media/image164zero3-img164.jpeg|126x125px|IMG_256png]]
</div></li>
<ol style="list-style-type: decimal;">
<li><p>首先打开文件管理器</p>
<p>[[File:media/image165zero3-img165.png|257x126px]]</p></li>
<li><p>然后找到下面这个文件(如果系统中没有这个音频文件,可以自己上传一个音频文件到系统中)</p>
<p>[[File:media/image166zero3-img166.png|238x189px]]</p></li>
<li><p>然后选中audio.wav文件,右键选择使用vlc打开就可以开始播放</p>
<p>[[File:media/image167zero3-img167.png|241x195px]]</p></li>
<li><p>切换HDMI播放和耳机播放等不同音频设备的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先打开音量控制界面</p>
<p>[[File:media/image168zero3-img168.png|294x161px]]</p></li>
<li><p>播放音频的时候,在'''Playback'''中会显示播放软件可以使用的音频设备选项,如下图所示,在这里可以设置需要播放到哪个音频设备</p>
<div class="figure">
[[File:media/image169zero3-img169.png|576x324px|4]]
</div></li></ol>
<div class="figure">
[[File:media/image164zero3-img164.jpeg|164x163px|IMG_256png]]
</div></li>
<div class="figure">
[[File:media/image170zero3-img170.jpeg|140x131px|IMG_256png]]
</div></li>
== 温度传感器 ==
=== linux5.4系统查看温度的方法 ===
# H618总共有4个温度传感器,查看温度的命令如下所示:
<ol style="list-style-type: lower-alpha;">
<li>sensor0:CPU的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</li></ol>
{| class="wikitable" style="width:800px;"
'''57734'''
|}
</ol>
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>sensor1:DDR的温度传感器,第一条命令用于查看温度传感器的类型,第二条命令用于查看温度传感器的数值</p>
</li></ol>
<!-- --><ol start="2" style="list-style-type: decimal;"><li>Linux6= linux6.1内核的系统还可以使用'''sensors'''命令查看系统当前温度</li></ol>1系统查看温度的方法 ===
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''sensors'''
Adapter: Virtual device
temp1: &nbsp;&nbsp;&nbsp;&nbsp; +'''<span style="color:#FF0000">47.4°C</span>''' &nbsp;&nbsp; (crit = +110.0°C)
gpu_thermal-virtual-0
Adapter: Virtual device
temp1: &nbsp;&nbsp;&nbsp;&nbsp; +'''<span style="color:#FF0000">48.7°C</span>''' &nbsp;&nbsp; (crit = +110.0°C)
ddr_thermal-virtual-0
Adapter: Virtual device
temp1: &nbsp;&nbsp;&nbsp;&nbsp; +'''<span style="color:#FF0000">47.8°C</span>''' &nbsp;&nbsp; (crit = +110.0°C)
ve_thermal-virtual-0
Adapter: Virtual device
temp1: &nbsp;&nbsp;&nbsp;&nbsp; +'''<span style="color:#FF0000">47.2°C</span>''' &nbsp;&nbsp; (crit = +110.0°C)|}
<span id="pin扩展板接口引脚说明"></span>
<ol style="list-style-type: decimal;">
<li><p>开发板13 pin扩展板接口引脚的顺序请参考下图</p>
<p>[[File:media/image78zero3-img78.png|245x133px]]</p></li>
<li><p>开发板13pin接口的原理图如下所示</p>
<p>[[File:media/image19zero3-img19.png|359x193px]]</p></li>
<li><p>开发板13 pin扩展板接口引脚的功能说明如下</p>
<ol style="list-style-type: lower-alpha;">
<li><p>13pin引脚接扩展板时,可以额外提供</p>
<ol style="list-style-type: lower-alphanone;"><li><p>a) 2个USB 2.0 Host</p></li><li><p>b) 耳机左右声道音频输出</p></li><li><p>c) TV-OUT视频输出</p></li><li><p>d) 红外接收功能</p></li><li><p>e) 接了扩展板后13pin接口的10、11和12号引脚就无法使用了</p></li><li><p>'''f) 另外需要注意13pin扩展板上的MIC在Orange Pi Zero 3上是无法使用的3上是<span style="color:#FF0000">无法</span>使用的'''</p></li></ol>
</li>
<li><p>13pin引脚不接扩展板时,10、11、12和13号引脚可当作普通GPIO口来使用</p></li></ol></li></ol>
{| class="wikitable" style="width:800px;"
|-
| style="text-align: left;"| '''GPIO序号'''
| style="text-align: left;"| '''9'''
|-
| style="text-align: left;"| '''<span style="color:#FF0000">65</span>'''| style="text-align: left;"| '''<span style="color:#FF0000">PC1</span>'''| style="text-align: left;"| '''<span style="color:#FF0000">10</span>'''
|-
| style="text-align: left;"| '''<span style="color:#FF0000">272</span>'''| style="text-align: left;"| '''<span style="color:#FF0000">PI16</span>'''| style="text-align: left;"| '''<span style="color:#FF0000">11</span>'''
|-
| style="text-align: left;"| '''<span style="color:#FF0000">262</span>'''| style="text-align: left;"| '''<span style="color:#FF0000">PI6</span>'''| style="text-align: left;"| '''<span style="color:#FF0000">12</span>'''
|-
| style="text-align: left;"| '''<span style="color:#FF0000">234</span>'''| style="text-align: left;"| '''IR-RX/<span style="color:#FF0000">PH10</span>'''| style="text-align: left;"| '''<span style="color:#FF0000">13</span>'''
|}
</ol>
</li></ol>
<span id="pin接口引脚说明"></span>
 
== 26 Pin接口引脚说明 ==
<ol style="list-style-type: decimal;">
<li><p>Orange Pi Zero 3开发板26 pin接口引脚的顺序请参开发板上的丝印图</p>
<p>[[File:media/image171zero3-img171-1.png|389x125px]]</p></li><li><p>开发板26 pin接口引脚的功能如下表所示</p></li></ol>
<div style="display: flex;">{| class="wikitable" style="width:300px;margin-right: 20px"
|-
| style="text-align: left;"| '''GPIO序号'''
| style="text-align: left;"| '''功能'''
| style="text-align: left;"| '''引脚'''
|
| style="text-align: left;"| '''引脚'''
| style="text-align: left;"| '''功能'''
| style="text-align: left;"| '''GPIO'''
| style="text-align: left;"| '''GPIO序号'''
|-
| style="text-align: left;"|
| style="text-align: left;"| '''3.3V'''
| style="text-align: left;"| '''1'''
|
| style="text-align: left;"| '''2'''
| style="text-align: left;"| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''229'''
| style="text-align: left;"| '''TWI3-SDA'''
| style="text-align: left;"| '''3'''
|
| style="text-align: left;"| '''4'''
| style="text-align: left;"| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''228'''
| style="text-align: left;"| '''TWI3-SCK'''
| style="text-align: left;"| '''5'''
|
| style="text-align: left;"| '''6'''
| style="text-align: left;"| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''73'''
| style="text-align: left;"| '''PC9'''
| style="text-align: left;"| '''7'''
|
| style="text-align: left;"| '''8'''
| style="text-align: left;"| '''UART5_TX'''
| style="text-align: left;"| '''PH2'''
| style="text-align: left;"| '''226'''
|-
| style="text-align: left;"|
| style="text-align: left;"| '''GND'''
| style="text-align: left;"| '''9'''
|| style="text-align: left;"| '''10'''| style="text-align: left;"| '''UART5_RX'''| style="text-align: left;"| '''PH3'''| style="text-align: left;"| '''227'''|-| style="text-align: left;"| '''70'''
| style="text-align: left;"| '''PC6'''
| style="text-align: left;"| '''PC6'''
| style="text-align: left;"| '''11'''
|
| style="text-align: left;"| '''12'''
| style="text-align: left;"| '''PC11'''
| style="text-align: left;"| '''PC11'''
| style="text-align: left;"| '''75'''
|-
| style="text-align: left;"| '''69'''
| style="text-align: left;"| '''PC5'''
| style="text-align: left;"| '''13'''
|
| style="text-align: left;"| '''14'''
| style="text-align: left;"| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''72'''
| style="text-align: left;"| '''PC8'''
| style="text-align: left;"| '''15'''
|
| style="text-align: left;"| '''16'''
| style="text-align: left;"| '''PC15'''
| style="text-align: left;"| '''PC15'''
| style="text-align: left;"| '''79'''
|-
| style="text-align: left;"|
| style="text-align: left;"| '''3.3V'''
| style="text-align: left;"| '''17'''
|
| style="text-align: left;"| '''18'''
| style="text-align: left;"| '''PC14'''
| style="text-align: left;"| '''PC14'''
| style="text-align: left;"| '''78'''
|-
| style="text-align: left;"| '''231'''
| style="text-align: left;"| '''SPI1_MOSI'''
| style="text-align: left;"| '''19'''
|
| style="text-align: left;"| '''20'''
| style="text-align: left;"| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''232'''
| style="text-align: left;"| '''SPI1_MISO'''
| style="text-align: left;"| '''21'''
|
| style="text-align: left;"| '''22'''
| style="text-align: left;"| '''PC7'''
| style="text-align: left;"| '''PC7'''
| style="text-align: left;"| '''71'''
|-
| style="text-align: left;"| '''230'''
| style="text-align: left;"| '''SPI1_CLK'''
| style="text-align: left;"| '''23'''
|
| style="text-align: left;"| '''24'''
| style="text-align: left;"| '''SPI1_CS'''
| style="text-align: left;"| '''PH9'''
| style="text-align: left;"| '''233'''
|-
| style="text-align: left;"|
| style="text-align: left;"| '''GND'''
| style="text-align: left;"| '''25'''
|
| style="text-align: left;"| '''26'''
| style="text-align: left;"| '''PC10'''
| style="text-align: left;"| '''PC10'''
| style="text-align: left;"| '''74'''
|}
{| class="wikitable" style="width:300px;"
|-
| style="text-align: left;"| '''引脚'''
| style="text-align: left;"| '''功能'''
| style="text-align: left;"| '''GPIO'''
| style="text-align: left;"| '''GPIO序号'''
|-
| style="text-align: left;"| '''2'''
| style="text-align: left;"| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''4'''
| style="text-align: left;"| '''5V'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''6'''
| style="text-align: left;"| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''8'''
| style="text-align: left;"| '''UART5_TX'''
| style="text-align: left;"| '''PH2'''
| style="text-align: left;"| '''226'''
|-
| style="text-align: left;"| '''10'''
| style="text-align: left;"| '''UART5_RX'''
| style="text-align: left;"| '''PH3'''
| style="text-align: left;"| '''227'''
|-
| style="text-align: left;"| '''12'''
| style="text-align: left;"| '''PC11'''
| style="text-align: left;"| '''PC11'''
| style="text-align: left;"| '''75'''
|-
| style="text-align: left;"| '''14'''
| style="text-align: left;"| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''16'''
| style="text-align: left;"| '''PC15'''
| style="text-align: left;"| '''PC15'''
| style="text-align: left;"| '''79'''
|-
| style="text-align: left;"| '''18'''
| style="text-align: left;"| '''PC14'''
| style="text-align: left;"| '''PC14'''
| style="text-align: left;"| '''78'''
|-
| style="text-align: left;"| '''20'''
| style="text-align: left;"| '''GND'''
| style="text-align: left;"|
| style="text-align: left;"|
|-
| style="text-align: left;"| '''22'''
| style="text-align: left;"| '''PC7'''
| style="text-align: left;"| '''PC7'''
| style="text-align: left;"| '''71'''
|-
| style="text-align: left;"| '''24'''
| style="text-align: left;"| '''SPI1_CS'''
| style="text-align: left;"| '''PH9'''
| style="text-align: left;"| '''233'''
|-
| style="text-align: left;"| '''26'''
| style="text-align: left;"| '''PC10'''
| style="text-align: left;"| '''PC10'''
| style="text-align: left;"| '''74'''
|}
</div>
</ol>
<ol start="3" style="list-style-type: decimal;">
<li>26pin接口中总共有'''17'''个GPIO口,所有GPIO口的电压都是'''<span style="color:#FF0000">3.3v</span>'''</li></ol>
<ol start="3" style="list-style-type: decimal;"><li>26pin接口中总共有'''17'''个GPIO口,所有GPIO口的电压都是'''3.3v'''</li></ol> <span id="安装wiringop的方法"></span>== 安装wiringOP的方法 == '''注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。''' '''编译好的wiringOP的deb包在orangepi-build中的存放路径为:''' '''orangepi-build/external/cache/debs/arm64/wiringpi_x.xx.deb''' '''进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。''' [[File:media/image172.png|575x365px]] '''wiringOP目前主要适配了设置GPIO口输入输出,设置GPIO口输出高低电平以及设置上下拉电阻的功能,像硬件PWM这样的功能是用不了的。''' <ol style="list-style-type: decimal;"><li><p>下载wiringOP的代码</p><p>orangepi@orangepi:~$ '''sudo apt update'''</p><p>orangepi@orangepi:~$ '''sudo apt install -y git'''</p><p>orangepi@orangepi:~$ '''git clone https://github.com/orangepi-xunlong/wiringOP.git -b next'''</p><p>'''注意,源码需要下载wiringOP next分支的代码,请别漏了-b next这个参数。'''</p><p>'''如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/usr/src/wiringOP。'''</p></li><li><p>编译安装wiringOP</p><p>orangepi@orangepi:~$ '''cd wiringOP'''</p><p>orangepi@orangepi:~/wiringOP$ '''sudo ./build clean'''</p><p>orangepi@orangepi:~/wiringOP$ '''sudo ./build'''</p></li><li><p>测试gpio readall命令的输出如下</p><ol style="list-style-type: lower-alpha;"><li><p>其中1到26号引脚与开发板上的26 Pin引脚是一一对应的</p></li><li><p>27号引脚对应开发板上13pin的10号引脚</p></li><li><p>29号引脚对应开发板上13pin的11号引脚</p></li><li><p>31号引脚对应开发板上13pin的12号引脚</p></li><li><p>33号引脚对应开发板上13pin的13号引脚</p></li><li><p>'''28、30、32、34号引脚为空,请直接忽略'''</p><p>[[File:media/image172.png|575x365px]]</p></li></ol></li></ol> <span id="pin接口gpioi2cuartspi和pwm测试"></span>== 26pin接口GPIO、I2C、UART、SPI和PWM测试 ==
<span id== 安装wiringOP的方法 == {| class="wikitable" style="pinbackground-gpio口测试color:#ffffdc;width:800px;">|-| </spanbig>'''注意,Orange Pi发布的linux镜像中已经预装了wiringOP,除非wiringOP的代码有更新,否则无需重新下载编译安装,直接使用即可。''' === 26pin GPIO口测试 ==='''编译好的wiringOP的deb包在orangepi-build中的存放路径为:'''
'''<ol span style="list-style-typecolor: decimal;blue"><li><p>下面以7号引脚——对应GPIO为PC9——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:media/image173.png|576x128px]]</p></li><li><p>首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号</p><p>root@orangepi:~-build/wiringOP# '''gpio mode 2 out'''<external/p><cache/li><li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功<debs/p><p>root@orangepi:~arm64/wiringOP# '''gpio write 2 0'''</p><p>使用gpio readall可以看到7号引脚的值(V)变为了0</p><p>[[File:media/image174wiringpi_x.png|575x128px]]</p></li><li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3xx.3v,说明设置高电平成功deb</p><pspan>root@orangepi:~/wiringOP# '''gpio write 2 1'''</p><p>使用gpio readall可以看到7号引脚的值(V)变为了1</p><p>[[File:media/image175.png|575x130px]]</p></li><li><p>其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可</p></li></ol>
<span id="pin-gpio口上下拉电阻的设置方法"></span>=== 26 pin GPIO口上下拉电阻的设置方法 ==='''进入系统后可以运行下gpio readall命令,如果能看到下面的输出,说明wiringOP已经预装并且能正常使用。'''
<ol style="list-style-type: decimal;"><li><p>下面以7号引脚——对应GPIO为PC9——对应wPi序号为2——为例演示如何设置GPIO口的上下拉电阻</p><p>[[File:media/image173zero3-img172.png|576x128px]]</p></li><li><p>首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号</p><p>root@orangepi:~/wiringOP# '''gpio mode 2 in'''</p></li><li><p>设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式</p><p>root@orangepi:~/wiringOP# '''gpio mode 2 up'''</p></li><li><p>然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功</p><p>root@orangepi:~/wiringOP# '''gpio read 2'''</p><p>'''1'''</p></li><li><p>然后执行下面的命令可以设置GPIO口为下拉模式</p><p>root@orangepi:~/wiringOP# '''gpio mode 2 down'''</p></li><li><p>然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功</p><p>root@orangepi:~/wiringOP# '''gpio read 2'''</p><p>'''0'''</p></li></ol>
<span id="pin-spi测试">'''wiringOP目前主要适配了设置GPIO口输入输出,设置GPIO口输出高低电平以及设置上下拉电阻的功能,像硬件PWM这样的功能是用不了的。'''</spanbig>=== 26pin SPI测试 ===|}
<ol style="list-style-type: decimal;">
<li><p>由26pin接口的原理图可知,可用的spi为spi1下载wiringOP的代码</p><p>[[File:media/image176.png{|565x209px]]</p></li><li><p>Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li>|-| <p>首先运行下'''orangepi-config''',普通用户记得加@orangepi:~$ '''sudoapt update'''权限</p><p>orangepi@orangepi:~$ '''sudo orangepiapt install -configy git'''</p></li><li><p>然后选择orangepi@orangepi:~$ '''System'''<git clone https:/p><p>[[File:media/image86github.png|398x194px]]<com/p><orangepi-xunlong/li><li><p>然后选择'''HardwarewiringOP.git -b next'''</p><p>[[File:media/image87.png|393x202px]]</p></li>} <li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''spi1{| class="wikitable" style="background-cs1color:#ffffdc;width:800px;" |-spidev'''</p><p>[[File:media/image177.png|392x57px]]</p></li><libig><p>然后选择'''&lt;Save&gt;注意,源码需要下载wiringOP next分支的代码,请别漏了-b next这个参数。'''保存</p><p>[[File:media/image89.png|397x92px]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP源码,存放位置为:/image90.png|395x91px]]<usr/p><src/li><li><p>然后选择'''&lt;Reboot&gt;wiringOP。'''重启系统使配置生效</p><p/big>[[File:media/image91.png|374x187px]]</p></li></ol>}
</li>
<li><p>然后查看下linux系统中是否存在'''spidev1.1'''的设备节点,如果存在,说明SPI1的配置已经生效了编译安装wiringOP</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /dev/spidev1*cd wiringOP'''</p><p>orangepi@orangepi:~/dev/spidev1wiringOP$ '''sudo .1</p></li><li><p>先不短接SPI1的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致build clean'''</p><p>orangepi@orangepi:~/wiringOP$ '''sudo spidev_test -v -D ./dev/spidev1.1build'''</p>|}</li><li><p>spi mode: 0x0测试gpio readall命令的输出如下</p><p>bits per wordol style="list-style-type: 8</plower-alpha;"><pli>max speed: 500000 Hz (500 KHz)</p>其中1到26号引脚与开发板上的26 Pin引脚是一一对应的</p>TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</pli><li><p>RX | FF FF FF FF FF FF '''FF FF FF FF FF FF''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….27号引脚对应开发板上13pin的10号引脚</p></li><li><p>然后短接SPI1的mosi(26pin接口中的第19号引脚)和miso(26pin接口中的第21号引脚)两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样29号引脚对应开发板上13pin的11号引脚</p></li><pli>orangepi@orangepi:~$ '''sudo spidev_test -v -D /dev/spidev1.1'''</p>31号引脚对应开发板上13pin的12号引脚</p>spi mode: 0x0</pli><pli>bits per word: 8</p>33号引脚对应开发板上13pin的13号引脚</p>max speed: 500000 Hz (500 KHz)</pli><li><p>TX | FF FF FF FF FF FF '''40 00 00 00 00 95<span style="color:#FF0000">28、30、32、34号引脚为空,请直接忽略</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</p><p>RX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒[[File:zero3-img172.png]]</p></li></ol></li></ol> <span id="pin接口gpioi2cuartspi和pwm测试"></span> == 26pin接口GPIO、I2C、UART、SPI和PWM测试 ==
<span id="pin-i2c测试gpio口测试"></span>=== 26pin I2C测试 GPIO口测试 ===
<ol style="list-style-type: decimal;">
<li><p>由26pin的原理图可知,可用的i2c为i2c3下面以7号引脚——对应GPIO为PC9——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:media/image178zero3-img173.png|575x204px]]</p></li><li><p>Linux系统中i2c3默认是关闭的,需要手动打开才能使用。打开步骤如下所示:首先设置GPIO口为输出模式,其中第三个参数需要输入引脚对应的wPi的序号</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>首先运行下'''orangepi|-config''',普通用户记得加'''sudo'''权限</p>| <p>orangepiroot@orangepi:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''SystemwiringOP# '''gpio mode </p><p>[[Filespan style="color:media/image86.png|390x190px]]</p#FF0000">2</lispan><li><p>然后选择'''Hardwareout'''</p><p>[[File:media/image87.png|393x202px]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''ph-i2c3'''</p><p>[[File:media/image179.png|392x57px]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:media/image89.png|395x91px]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image90.png|395x91px]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image91.png|374x187px]]</p></li></ol>}
</li>
<li><p>启动linux系统后,先确认下/dev下存在i2c3的设备节点</p><p>orangepi@orangepi:~$ '''ls /dev/i2c-3'''然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p><p>'''/dev/i2c-3'''</p></li><li><p>然后开始测试i2c,首先安装i2c-tools</p><p>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''sudo apt-get install -y i2c-tools'''</p></li><li><p>然后在26pin接头的i2c3引脚上接一个i2c设备</p><p>'''5V和3.3V引脚请根据具体的i2c设备进行选择,不同的i2c设备需要的电压值可能不同。'''</p></li></ol> {| class="wikitable" style="width:800px;"
|-
| <p>root@orangepi:~/wiringOP# '''gpio write 2 <span style="text-aligncolor: left;#FF0000"| '''sda引脚>0</span>'''</p>|}<p>使用gpio readall可以看到7号引脚的值(V)变为了0</p><p>[[File:zero3-img174.png]]</p></li><li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>{| class="wikitable" style="text-alignwidth: left800px;"| '''对应26pin中3号引脚'''
|-
| style="text-align: left;"| '''sck引脚'''| style="text-align<p>root@orangepi: left;"| ~/wiringOP# '''对应26pin中5号引脚'''|-| gpio write 2 <span style="text-aligncolor: left;#FF0000"| '''5v引脚'''| style="text-align: left;"| '''对应26pin中2号引脚'''|-| style="text-align: left;"| '''3.3v引脚'''| style="text-align: left;"| '''对应26pin中1号引脚'''|-| style="text-align: left;"| '''gnd引脚'''| style="text-align: left;"| '''对应26pin中6号引脚>1</span>'''</p>
|}
<p>使用gpio readall可以看到7号引脚的值(V)变为了1</p>
<p>[[File:zero3-img175.png]]</p></li>
<li><p>其他引脚的设置方法类似,只需修改wPi的序号为引脚对应的序号即可</p></li></ol>
<ol startspan id="6" style="listpin-style-type: decimal;gpio口上下拉电阻的设置方法"><li><p>然后使用'''i2cdetect -y 3'''命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用</p><p>'''不同的i2c设备地址是不同的,下图0x50地址只是一个示例。请以实际看到的为准。'''</p><div class="figure"span>
[[File:media/image180.png|383x151px|选区_460]] </div></li></ol> <span id="pin的uart测试"></span>=== 26pin的UART测试 26 pin GPIO口上下拉电阻的设置方法 ===
<ol style="list-style-type: decimal;">
<li><p>由26pin接口的原理图可知,可用的uart为uart5下面以7号引脚——对应GPIO为PC9——对应wPi序号为2——为例演示如何设置GPIO口的上下拉电阻</p><p>[[File:media/image181zero3-img173.png|575x203px]]</p></li><li><p>Linux系统中uart5默认是关闭的,需要手动打开才能使用。打开步骤如下所示:首先需要设置GPIO口为输入模式,其中第三个参数需要输入引脚对应的wPi的序号</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>首先运行下'''orangepi|-config''',普通用户记得加'''sudo'''权限</p>| <p>orangepiroot@orangepi:~$ '''sudo orangepi-config/wiringOP# '''gpio mode </pspan style="color:#FF0000">2</li><li><pspan>然后选择'''Systemin'''</p><p>[[File:media/image86.png|398x194px]]</p>}</li><li><p>然后选择'''Hardware'''设置为输入模式后,执行下面的命令可以设置GPIO口为上拉模式</p><p>[[File{| class="wikitable" style="width:media/image87.png800px;" |393x202px]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''ph-uart5'''</p><p>[[File:media/image182.png|400x60px]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[Fileroot@orangepi:media~/image89.png|397x92px]]</p></li><li><p>然后选择'''&lt;Back&gt;wiringOP# '''gpio mode </p><p>[[Filespan style="color:media/image90.png|395x91px]]</p#FF0000">2</lispan><li><p>然后选择up'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image91.png|374x187px]]</p></li></ol>}
</li>
<li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart5的设备节点</p><p>'''注意,linux5.4系统为/dev/ttyAS5。'''</p><p>orangepi@orangepi:~$ '''ls /dev/ttyS5'''</p><p>/dev/ttyS5</p></li><li><p>然后开始测试uart5接口,先使用杜邦线短接要测试的uart5接口的rx和tx然后输入下面的命令读取GPIO口的电平,如果电平为1,说明上拉模式设置成功</p></li></ol> {| class="wikitable" style="width:800px;"
|-
|<p>root@orangepi:~/wiringOP# '''gpio read <span style="color:#FF0000">2</span>'''</p><p>'''1'''</p>| }</li><li><p>然后执行下面的命令可以设置GPIO口为下拉模式</p>{| class="wikitable" style="text-alignwidth: left800px;"| uart5
|-
| tx引脚<p>root@orangepi:~/wiringOP# '''gpio mode <span style="color:#FF0000">2</span> down'''</p>| }</li><li><p>然后输入下面的命令读取GPIO口的电平,如果电平为0,说明下拉模式设置成功</p>{| class="wikitable" style="text-alignwidth: left800px;"| 对应26pin的8号引脚
|-
| rx引脚| <p>root@orangepi:~/wiringOP# '''gpio read <span style="text-aligncolor: left;#FF0000"| 对应26pin的10号引脚>2</span>'''</p><p>'''0'''</p>
|}
</li></ol>
<ol startspan id="5" style="listpin-style-type: decimal;spi测试"><li><p>使用wiringOP中的'''gpio'''命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常</p><p>orangepi@orangepi:~$ '''gpio serial /dev/ttyS5 # linux-6.1测试命令'''</p><p>orangepi@orangepi:~$ '''gpio serial /dev/ttyAS5 # linux-5.4测试命令'''</p><p>Out: 0: -&gt; 0</p><p>Out: 1: -&gt; 1</p><p>Out: 2: -&gt; 2</p><p>Out: 3: -&gt; 3^C</p></li></olspan>
<span id="pwm的测试方法"></span>==26pin SPI测试 = PWM的测试方法 === '''开发板最多可以使用4通道PWM,它们所在引脚的位置如下图所示:''' [[File:media/image183.png|388x180px]]
<ol style="list-style-type: decimal;">
<li><p>Linux系统中pwm默认是关闭的,需要手动打开才能使用。打开步骤如下所示:由26pin接口的原理图可知,可用的spi为spi1</p><p>[[File:zero3-img176.png]]</p></li><li><p>Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>
{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li>
<li><p>然后选择'''System'''</p>
<p>[[File:media/image86zero3-img86.png|398x194px]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:media/image87zero3-img87.png|393x202px]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中pwm对应的配置</p><p>'''由于PWM1、PWM2和26pin接口中UART5的RX、TX引脚是复用的,所以打开PWM1和PWM2(需要选择ph-pwm12)时请确保没有选择UART5的配置(不要勾选ph-uart5)。'''</p><p>选中'''PWM3、PWM4和调试串口中的TX、RX引脚是复用的,所以使用PWM3和PWM4(需要选择phspi1-pwm34)时请将UART0的配置关掉(需要选择disablecs1-uart0),关掉UART0后调试串口就无法使用了。spidev'''</p><p>[[File:media/image184zero3-img177.png|402x156px]]</p></li>
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image89zero3-img89.png|397x92px]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image90zero3-img90.png|395x91px]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image91zero3-img91.png|374x187px]]</p></li></ol></li><li><p>然后查看下linux系统中是否存在'''spidev1.1'''的设备节点,如果存在,说明SPI1的配置已经生效了</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ls /dev/spidev1*'''</p><p>/dev/spidev1.1</p>|}
</li>
<li><p>重启后就可以开始PWM的测试先不短接SPI1的mosi和miso两个引脚,运行spidev_test的输出结果如下所示,可以看到TX和RX的数据不一致</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''下面的命令请在root用户下执行。sudo spidev_test -v -D /dev/spidev1.1'''</p><ol style="list-style-typep>spi mode: lower-alpha;"0x0</p><lip>bits per word: 8</p><p>在命令行中输入下面的命令可以让pwm1输出一个50Hz的矩形波max speed: 500000 Hz (500 KHz)</p><p>root@orangepi:~# TX | FF FF FF FF FF FF '''echo 1 &gt; <span style="color:#FF0000">40 00 00 00 00 95</sys/class/pwm/pwmchip0/exportspan>'''FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</p><p>root@orangepiRX | FF FF FF FF FF FF '''<span style="color:~# FF0000">FF FF FF FF FF FF</span>'''echo 20000000 &gt; FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ............................….</sysp>|}</class/pwm/pwmchip0/pwm1/period'''li><li><p>然后短接SPI1的mosi(26pin接口中的第19号引脚)和miso(26pin接口中的第21号引脚)两个引脚再运行spidev_test的输出如下,可以看到发送和接收的数据一样</p>{| class="wikitable" style="width:800px;" |-| <p>rootorangepi@orangepi:~# $ '''echo 1000000 &gt; sudo spidev_test -v -D /sysdev/class/pwm/pwmchip0/pwm1/duty_cyclespidev1.1'''</p><p>root@orangepispi mode:~# '''echo 1 &gt; 0x0</sysp><p>bits per word: 8</classp><p>max speed: 500000 Hz (500 KHz)</pwm/pwmchip0/pwm1/enablep><p>TX | FF FF FF FF FF FF '''<span style="color:#FF0000">40 00 00 00 00 95</pspan>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</lip><li><p>在命令行中输入下面的命令可以让pwm2输出一个50Hz的方波RX | FF FF FF FF FF FF '''</pspan style="color:#FF0000">40 00 00 00 00 95</lispan>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@.…▒..................▒.</olp>|}
</li></ol>
root@orangepi:~# '''echo 2 &gt; <span id="pin-i2c测试"></sys/class/pwm/pwmchip0/export'''span>
root@orangepi:~# '''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm2/period'''=== 26pin I2C测试 ===
root@orangepi<ol style="list-style-type:~# '''echo 1000000 &gtdecimal; "><li><p>由26pin的原理图可知,可用的i2c为i2c3</sys/class/pwm/pwmchip0/pwm2/duty_cycle'''p> root@orangepi<p>[[File:~# '''echo 1 &gt; zero3-img178.png]]</sysp></classli><li><p>Linux系统中i2c3默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</pwm/pwmchip0/pwm2/enable'''p><ol start="3" style="list-style-type: lower-alpha;"><li>在命令行中输入下面的命令可以让pwm3输出一个50Hz的矩形波</lip>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</olp>{| class="wikitable" style="width:800px;" root|-| <p>orangepi@orangepi:~# $ '''sudo orangepi-config'''echo 3 &gt; </sysp>|}</classli><li><p>然后选择'''System'''</pwmp><p>[[File:zero3-img86.png]]</pwmchip0p></exportli><li><p>然后选择'''Hardware'''</p><p>[[File:zero3-img87.png]]</p></li>root@orangepi<li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''ph-i2c3'''</p><p>[[File:~# zero3-img179.png]]</p></li><li><p>然后选择'''echo 20000000 &lt;Save&gt; /sys/class/pwm/pwmchip0/pwm3/period'''保存</p><p>[[File:zero3-img89.png]]</p></li>root@orangepi:~# <li><p>然后选择'''echo 1000000 &lt;Back&gt; /sys/class/pwm/pwmchip0/pwm3/duty_cycle'''</p><p>[[File:zero3-img90.png]]</p></li>root@orangepi:~# <li><p>然后选择'''echo 1 &lt;Reboot&gt; /sys/class/pwm/pwmchip0/pwm3/enable'''重启系统使配置生效</p><ol start="4" style="list-style-typep>[[File: lowerzero3-alpha;"img91.png]]</p></li></ol></li>在命令行中输入下面的命令可以让pwm4输出一个50Hz的方波</li><p>启动linux系统后,先确认下/dev下存在i2c3的设备节点</olp>{| class="wikitable" style="width:800px;" |-| root<p>orangepi@orangepi:~# $ '''echo 4 &gt; ls /sysdev/classi2c-3'''</pwmp><p>'''/pwmchip0dev/exporti2c-3'''</p>|}root</li><li><p>然后开始测试i2c,首先安装i2c-tools</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~# $ '''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm4/periodsudo apt-get update'''</p> root<p>orangepi@orangepi:~# $ '''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm4/duty_cyclesudo apt-get install -y i2c-tools'''</p>|}</li>root@orangepi<li><p>然后在26pin接头的i2c3引脚上接一个i2c设备</p>{| class="wikitable" style="background-color:~# ffffdc;width:800px;" |-| <big><p>'''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm4/enable5V和3.3V引脚请根据具体的i2c设备进行选择,不同的i2c设备需要的电压值可能不同。'''</p></big>|}
{| class="wikitable" style="width:800px;"
|-
| style="text-align: left;"| '''sda引脚'''
| style="text-align: left;"| '''对应26pin中3号引脚'''
|-
| style="text-align: left;"| '''sck引脚'''
| style="text-align: left;"| '''对应26pin中5号引脚'''
|-
| style="text-align: left;"| '''5v引脚'''
| style="text-align: left;"| '''对应26pin中2号引脚'''
|-
| style="text-align: left;"| '''3.3v引脚'''
| style="text-align: left;"| '''对应26pin中1号引脚'''
|-
| style="text-align: left;"| '''gnd引脚'''
| style="text-align: left;"| '''对应26pin中6号引脚'''
|}
</li></ol>
<ol start="6" style="list-style-type: decimal;">
<li><p>然后使用'''i2cdetect -y 3'''命令如果能检测到连接的i2c设备的地址,就说明i2c能正常使用</p>
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big><p>'''不同的i2c设备地址是不同的,下图0x50地址只是一个示例。请以实际看到的为准。'''</p></big>
|}
<div class="figure">
[[File:media/image185zero3-img180.jpeg|574x344px|69D96433378187B10005CDD2A52881B0png]]
</div><span id="wiringop-python的安装使用方法"/li></spanol>== wiringOP-Python的安装使用方法 ==
'''wiringOP-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。'''<span id="pin的uart测试"></span>
'''另外请注意下面所有的命令都是在root用户下操作的。''' <span id="wiringop-python的安装方法"></span>=== wiringOP-Python的安装方法 26pin的UART测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先安装依赖包由26pin接口的原理图可知,可用的uart为uart5</p><p>root@[[File:zero3-img181.png]]</p></li><li><p>Linux系统中uart5默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi:~# -config''',普通用户记得加'''sudo apt-get update'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>rootorangepi@orangepi:~# $ '''sudo apt-get -y install git swig python3orangepi-dev python3-setuptoolsconfig'''</p>|}</li><li><p>然后使用下面的命令下载wiringOP然后选择'''System'''</p><p>[[File:zero3-Python的源码img86.png]]</p></li><li><p>然后选择'''Hardware'''</olp><p>[[File:zero3-img87.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''注意,下面的git clone空格'''选中'''ph-uart5'''</p><p>[[File:zero3-recursive命令会自动下载wiringOP的源码,因为wiringOPimg182.png]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:zero3-Python是依赖wiringOP的。请确保下载过程没有因为网络问题而报错。img89.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:zero3-img90.png]]</p></li><li><p>然后选择'''如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero3-Python源码,存放位置为:img91.png]]</usrp></srcli></wiringOP-Pythonol></li><li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart5的设备节点</p> root@orangepi{| class="wikitable" style="background-color:~# ffffdc;width:800px;" |-| <big><p>'''git clone --recursive https://github注意,linux5.com4系统为/orangepi-xunlongdev/wiringOP-Python -b nextttyAS5。'''</p></big>|}{| class="wikitable" style="width:800px;" |-| root<p>orangepi@orangepi:~# $ '''cd wiringOP-Pythonls /dev/ttyS5'''</p><p>/dev/ttyS5</p>|}</li><li><p>然后开始测试uart5接口,先使用杜邦线短接要测试的uart5接口的rx和tx</p></li>
root{| class="wikitable" style="width:500px;"|-|| style="text-align: left;"| uart5|-| tx引脚| style="text-align: left;"| 对应26pin的8号引脚|-| rx引脚| style="text-align: left;"| 对应26pin的10号引脚|}</ol><ol start="5" style="list-style-type: decimal;"><li><p>使用wiringOP中的'''gpio'''命令测试串口的回环功能如下所示,如果能看到下面的打印,说明串口通信正常</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''gpio serial /wiringOPdev/ttyS5 # linux-Python# 6.1测试命令'''</p><p>orangepi@orangepi:~$ '''git submodule update gpio serial /dev/ttyAS5 # linux--init --remote5.4测试命令'''</p>
<ol start="3" style="list-style-type: decimal;">
<li><p>然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中</p>
<p>root@orangepi:~# '''cd wiringOP-Python'''</p>
<p>root@orangepi:~/wiringOP-Python# '''python3 generate-bindings.py &gt; bindings.i'''</p>
<p>root@orangepi:~/wiringOP-Python# '''sudo python3 setup.py install'''</p></li>
<li><p>然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下'''q'''键可以退出帮助信息的界面</p></li></ol>
root@orangepi<p>Out:~0: -&gt; 0</wiringOPp><p>Out: 1: -Python# '''python3 &gt; 1</p><p>Out: 2: -c &quotgt;import wiringpi; help(wiringpi)2</p><p>Out: 3: -&quotgt;'''3^C</p>|}</li></ol>
Help on module wiringpi:<span id="pwm的测试方法"></span>
NAME=== PWM的测试方法 ===
wiringpi{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''开发板最多可以使用4通道PWM,它们所在引脚的位置如下图所示:'''</big>
DESCRIPTION[[File:zero3-img183.png|center]]|}
<ol style="list-style-type: decimal;"><li><p>Linux系统中pwm默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li><li><p>然后选择'''System'''</p><p>[[File:zero3-img86.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:zero3-img87.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中pwm对应的配置</p>{| class="wikitable" style="background-color:# This file was automatically generated by SWIG (httpffffdc;width:800px;" |-| <big><p>'''由于PWM1、PWM2和26pin接口中UART5的RX、TX引脚是复用的,所以打开PWM1和PWM2(需要选择ph-pwm12)时请确保没有选择UART5的配置(不要勾选ph-uart5)。'''</p><p>'''PWM3、PWM4和调试串口中的TX、RX引脚是复用的,所以使用PWM3和PWM4(需要选择ph-pwm34)时请将UART0的配置关掉(需要选择disable-uart0),关掉UART0后调试串口就无法使用了。'''</wwwp></big>|}<p>[[File:zero3-img184.swigpng]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:zero3-img89.org)png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:zero3-img90.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero3-img91.png]]</p></li></ol></li><li><p>重启后就可以开始PWM的测试</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''下面的命令请在root用户下执行。'''</p></big>|}<ol style="list-style-type: lower-alpha;"><li><p>在命令行中输入下面的命令可以让pwm1输出一个50Hz的方波</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/export'''</p><p>root@orangepi:~# '''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm1/period'''</p><p>root@orangepi:~# '''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm1/duty_cycle'''</p><p>root@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm1/enable'''</p>|}</li><li><p>在命令行中输入下面的命令可以让pwm2输出一个50Hz的方波</p></li>
{| class="wikitable" style="width:800px;" |-| root@orangepi:~# Version 4.0.'''echo 2&gt; /sys/class/pwm/pwmchip0/export'''
root@orangepi:~#'''echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm2/period'''
root@orangepi:~# Do not make changes to this file unless you know what you are doing--modify'''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm2/duty_cycle'''
root@orangepi:~# the SWIG interface file instead.'''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm2/enable'''|}</ol><ol start="3" style="list-style-type: lower-alpha;"><li>在命令行中输入下面的命令可以让pwm3输出一个50Hz的方波</li>
<ol start{| class="5wikitable" style="list-style-typewidth: decimal800px;"><li><p>在python命令行下测试wiringOP|-Python是否安装成功的步骤如下所示:</p><ol style="list-style-type| root@orangepi: lower-alpha~# '''echo 3 &gt;"><li>首先使用python3命令进入python3的命令行模式</li><sys/class/ol><pwm/li><pwmchip0/ol>export'''
root@orangepi:~# '''python3echo 20000000 &gt; /sys/class/pwm/pwmchip0/pwm3/period'''
<ol start="2" style="list-style-typeroot@orangepi: lower-alpha~# '''echo 1000000 &gt;"><li>然后导入wiringpi的python模块</li><sys/ol>class/pwm/pwmchip0/pwm3/duty_cycle'''
root@orangepi:~# '''echo 1 &gt;&gt;&gt; /sys/class/pwm/pwmchip0/pwm3/enable'''import wiringpi|}</ol><ol start="4" style="list-style-type: lower-alpha;'''"><li>在命令行中输入下面的命令可以让pwm4输出一个50Hz的方波</li>
<ol start{| class="3wikitable" style="list-style-typewidth: lower-alpha800px;"><li>最后输入下面的命令可以查看下wiringOP|-Python的帮助信息,按下| root@orangepi:~# '''qecho 4 &gt; /sys/class/pwm/pwmchip0/export'''键可以退出帮助信息的界面</li></ol>
root@orangepi:~# '''echo 20000000 &gt;&gt;&gt; '''help(wiringpi)/sys/class/pwm/pwmchip0/pwm4/period'''
Help on module wiringpiroot@orangepi:~# '''echo 1000000 &gt; /sys/class/pwm/pwmchip0/pwm4/duty_cycle'''
NAMEroot@orangepi:~# '''echo 1 &gt; /sys/class/pwm/pwmchip0/pwm4/enable'''|}
wiringpi<div class="figure">
DESCRIPTION[[File:zero3-img185.png]]
# This file was automatically generated by SWIG (http:</div></www.swig.org).ol></li></ol><span id="wiringop-python的安装使用方法"></span>
# Version 4.0.2== wiringOP-Python的安装使用方法 ==
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''wiringOP-Python是wiringOP的Python语言版本的库,用于在Python程序中操作开发板的GPIO、I2C、SPI和UART等硬件资源。'''
# Do not make changes to this file unless you know what you are doing--modify
'''另外请注意下面所有的命令都是在<span style="color:# the SWIG interface file instead.FF0000">root</span>用户下操作的。'''</big>|}
CLASSES<span id="wiringop-python的安装方法"></span>=== wiringOP-Python的安装方法 ===
builtins.object<ol style="list-style-type: decimal;"><li><p>首先安装依赖包</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''sudo apt-get update'''</p><p>root@orangepi:~# '''sudo apt-get -y install git swig python3-dev python3-setuptools'''</p>|}</li><li><p>然后使用下面的命令下载wiringOP-Python的源码</p></li>
GPIO{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,下面的git clone--recursive命令会自动下载wiringOP的源码,因为wiringOP-Python是依赖wiringOP的。请确保下载过程没有因为网络问题而报错。'''
I2C
Serial'''如果从GitHub下载代码有问题,可以直接使用Linux镜像中自带的wiringOP-Python源码,存放位置为:/usr/src/wiringOP-Python'''。</big>|}
nes{| class="wikitable" style="width:800px;" |-| root@orangepi:~# '''git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next''' root@orangepi:~# '''cd wiringOP-Python'''
root@orangepi:~/wiringOP-Python# '''git submodule update --init --remote'''|}</ol><ol start="3" style="list-style-type: decimal;"><li><p>然后使用下面的命令编译wiringOP-Python并将其安装到开发板的Linux系统中</p>{| class GPIO(builtins="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''cd wiringOP-Python'''</p><p>root@orangepi:~/wiringOP-Python# '''python3 generate-bindings.object)py &gt; bindings.i'''</p><p>root@orangepi:~/wiringOP-Python# '''sudo python3 setup.py install'''</p>|}</li><li><p>然后输入下面的命令,如果有帮助信息输出,说明wiringOP-Python安装成功,按下'''q'''键可以退出帮助信息的界面</p></li>
{| GPIOclass="wikitable" style="width:800px;" |-| root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; help(pinmode=0wiringpi)&quot;'''
|Help on module wiringpi:  NAME :wiringpi  DESCRIPTION
&gt;&gt;&gt;: # This file was automatically generated by SWIG (http://www.swig.org).
<span id="pin-gpio口测试-1"></span>=== 26pin GPIO口测试 ===: # Version 4.0.2
'''wiringOP-Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP-Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。''': #
[[File:media/image172.png|575x365px]]# Do not make changes to this file unless you know what you are doing--modify
: # the SWIG interface file instead.|}</ol ><ol start="5" style="list-style-type: decimal;"><li><p>下面以7号引脚——对应GPIO为PC9 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:media/image173.png|576x128px]]</p></li><li><p>直接用命令测试的步骤如下所示:在python命令行下测试wiringOP-Python是否安装成功的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p><p>root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''</p><p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \'''</p><p>'''wiringpi.pinMode(2, GPIO.OUTPUT) ; &quot;'''</p>首先使用python3命令进入python3的命令行模式</li><li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p><p>root@orangepi{| class="wikitable" style="width:~/wiringOP-Python# '''python3 -c &quot800px;import wiringpi; \'''</p>" <p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p><p>'''wiringpi.digitalWrite(2, GPIO.LOW)&quot;'''</p></li>|-<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>| <p>root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''</p><p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p>|}<p>'''wiringpi.digitalWrite(2, GPIO.HIGH)&quot;'''</p></li></ol></li><li><p>在python3的命令行中测试的步骤如下所示:</p><ol start="2" style="list-style-type: lower-alpha;"><li><p>首先使用python3命令进入python3的命令行模式然后导入wiringpi的python模块</pli><p>root@orangepi{| class="wikitable" style="width:~# '''python3'''</p></li>800px;" |-<li><p>然后导入wiringpi的python模块</p>| <p>&gt;&gt;&gt; '''import wiringpi;'''</p><p>&gt;&gt;&gt; '''from wiringpi import GPIO'''</p></li>|}<li><p>然后设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</pol><p>&gtol start="3" style="list-style-type: lower-alpha;&gt;&gt; '''wiringpi.wiringPiSetup()'''</p"><pli>0</p><p>&gt;&gt;&gt; 最后输入下面的命令可以查看下wiringOP-Python的帮助信息,按下'''wiringpi.pinMode(2, GPIO.OUTPUT)q'''</p>键可以退出帮助信息的界面</li><li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p><p>&gt{| class="wikitable" style="width:800px;&gt;&gt; '''wiringpi.digitalWrite(2, GPIO.LOW)'''</p></li>" |-<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>| <p>&gt;&gt;&gt; '''help(wiringpi.digitalWrite(2, GPIO.HIGH)'''</p></li></ol></li><li><p>wiringOP-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的'''blink.py'''测试程序,'''blink.py'''测试程序会设置开发板26 pin中所有的GPIO口的电压不断的高低变化</p><p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''ls blink.py'''</p><p>'''blink.py'''</p><p>root@orangepiHelp on module wiringpi:~/wiringOP-Python/examples'''# python3 blink.py'''</p></li></ol>
<span id="pin-spi测试-1"></span>
=== 26pin SPI测试 ===
<ol style="list-style-type: decimal;"><li><p>由26pin接口的原理图可知,可用的spi为spi1</p><p>[[File:media/image176.png|565x209px]]</p></li><li><p>Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p><p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li><li><p>然后选择'''System'''</p><p>[[File:media/image86.png|398x194px]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:media/image87.png|393x202px]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''spi1-cs1-spidev'''</p><p>[[File:media/image177.png|392x57px]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:media/image89.png|397x92px]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image90.png|395x91px]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image91.png|374x187px]]</p></li></ol>NAME</li><li><p>然后查看下linux系统中是否存在'''spidev1.1'''的设备节点,如果存在,说明SPI1的配置已经生效了</p><p>orangepi@orangepi:~$ '''ls /dev/spidev1*'''</p>wiringpi<p>/dev/spidev1.1</p></li><li><p>然后可以使用examples中的'''spidev_test.py'''程序测试下SPI的回环功能,'''spidev_test.py'''程序需要指定下面的两个参数:</p><ol style="list-style-type: lower-alpha;"><li><p>'''--channel''':指定SPI的通道号</p></li><li><p>'''--port''':指定SPI的端口号</p></li></ol></li><li><p>先不短接 SPI1 的 mosi 和 miso 两个引脚,运行spidev_test.py的输出结果如下所示,可以看到 TX 和 RX 的数据不一致</p><p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p></li></ol>DESCRIPTION
root@orangepi:~# This file was automatically generated by SWIG (http:/wiringOP-Python/examples# '''python3 spidev_testwww.swig.org).py \'''
'''--channel 1 --port 1''': # Version 4.0.2
spi mode: 0x0#
max speed: 500000 Hz (500 KHz)# Do not make changes to this file unless you know what you are doing--modify
Opening device /dev/spidev1: # the SWIG interface file instead.1
TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
RX | FF FF FF FF FF FF '''FF FF FF FF FF FF''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….|CLASSES
<ol start="6" style="list-style-type: decimal;"><li><p>然后使用杜邦线短接SPI1的txd(26pin接口中的第19号引脚)和rxd(26pin接口中的第21号引脚)两个引脚再运行spidev_testbuiltins.py的输出如下,可以看到发送和接收的数据一样,说明SPI1回环测试正常</p><p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p></li></ol>object
root@orangepi:~/wiringOP-Python/examples# '''python3 spidev_test.py \''':GPIO
'''--channel 1 --port 1'''::I2C
spi mode: 0x0:Serial
max speed: 500000 Hz (500 KHz):nes
Opening device /dev/spidev1.1
TX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |:class GPIO(builtins......@.......…|object)
RX | FF FF FF FF FF FF '''40 00 00 00 00 95''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…:|GPIO(pinmode=0)
<span id="pin-i2c测试-1"></span>=== 26pin I2C测试 ===:|
<ol style="list-style-type: decimal;">
<li><p>由26pin的原理图可知,可用的i2c为i2c3</p>
<p>[[File:media/image178.png|575x204px]]</p></li>
<li><p>Linux系统中i2c3默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>
<p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p></li>
<li><p>然后选择'''System'''</p>
<p>[[File:media/image86.png|398x194px]]</p></li>
<li><p>然后选择'''Hardware'''</p>
<p>[[File:media/image87.png|393x202px]]</p></li>
<li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''ph-i2c3'''</p>
<p>[[File:media/image179.png|401x59px]]</p></li>
<li><p>然后选择'''&lt;Save&gt;'''保存</p>
<p>[[File:media/image89.png|397x92px]]</p></li>
<li><p>然后选择'''&lt;Back&gt;'''</p>
<p>[[File:media/image90.png|395x91px]]</p></li>
<li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p>
<p>[[File:media/image91.png|374x187px]]</p></li></ol>
</li>
<li><p>启动linux系统后,先确认下/dev下存在i2c3的设备节点</p>
<p>orangepi@orangepi:~$ '''ls /dev/i2c-3'''</p>
<p>'''/dev/i2c-3'''</p></li>
<li><p>然后开始测试i2c,首先安装下i2c-tools</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo''' '''apt-get install -y i2c-tools'''</p></li>
<li><p>然后在26pin接头的i2c3引脚上接一个i2c设备,这里以DS1307 RTC模块为例</p>
<p>[[File:media/image186.png|180x153px]]</p></li></ol>
{| class="wikitable"|-| style="text-align: left&gt;"| '''RTC模块的引脚'''| style="text-align: left&gt;"| '''开发板26pin对应的引脚'''|-| style="text-align: left&gt;"| '''5V'''| style="text-align: left;"| '''2号引脚'''|-| style="text-align: left;"| '''GND'''| style="text-align: left;"| '''6号引脚'''|-| style="text-align: left;"| '''SDA'''| style="text-align: left;"| '''3号引脚'''|-| style="text-align: left;"| '''SCL'''| style="text-align: left;"| '''5号引脚'''
|}
</ol>
</li></ol>
<ol startspan id="6" style="listpin-stylegpio口测试-type: decimal;1"><li>然后使用'''i2cdetect -y 3'''命令如果能检测到连接的i2c设备的地址,就说明i2c设备连接正确</li></olspan>
[[File:media/image187.png|388x203px]]=== 26pin GPIO口测试 ===
<ol start{| class="7wikitable" style="listbackground-style-typecolor:#ffffdc;width: decimal800px;"><li><p>然后可以运行'''examples'''中的'''ds1307.py'''测试程序读取RTC的时间</p>|-| <pbig>root@orangepi:~/wiringOP-Python# '''cd examples'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''python3 ds1307.py Python跟wiringOP一样,也是可以通过指定wPi号来确定操作哪一个GPIO引脚,因为wiringOP--device \'Python中没有查看wPi号的命令,所以只能通过wiringOP中的gpio命令来查看板子wPi号与物理引脚的对应关系。''</p><p>'''&quot;/dev/i2c-3&quot;'''</p><p>Thu 2022-06-16 04:35:46</p><p>Thu 2022-06-16 04:35:47</p><p>Thu 2022-06-16 04:35:48</p><p>^C</p><p>exit</p></li></olbig>
<span id="pin的uart测试[[File:zero3-1"></span>img172.png]]=== 26pin的UART测试 ===|}
<ol style="list-style-type: decimal;">
<li><p>由26pin接口的原理图可知,可用的uart为uart5下面以7号引脚——对应GPIO为PC9 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平</p><p>[[File:media/image181zero3-img173.png|575x203px]]</p></li><li><p>Linux系统中uart5默认是关闭的,需要手动打开才能使用。打开步骤如下所示:直接用命令测试的步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先运行下首先设置GPIO口为输出模式,其中'''orangepi-config''pinMode',普通用户记得加'''sudo'''权限函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p>{| class="wikitable" style="width:800px;" |-| <p>orangepiroot@orangepi:~$ /wiringOP-Python# '''sudo orangepipython3 -configc &quot;import wiringpi; \'''</p></li><li><p>然后选择'''Systemfrom wiringpi import GPIO; wiringpi.wiringPiSetup() ; \'''</p><p>[[File:media/image86'''wiringpi.png|398x194px]]pinMode(</pspan style="color:#FF0000">2, GPIO.OUTPUT</lispan><li><p>然后选择'''Hardware) ; &quot;'''</p><p>[[File:media/image87.png|393x202px]]</p>}</li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''ph-uart5'''然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p><p>[[File{| class="wikitable" style="width:media/image182.png800px;" |-|400x60px]]</p><root@orangepi:~/li><li><p>然后选择wiringOP-Python# '''python3 -c &ltquot;Save&gtimport wiringpi;\'''保存</p><p>[[File:media/image89.png|397x92px]]</p></li><li><p>然后选择'''&ltfrom wiringpi import GPIO;Back&gtwiringpi.wiringPiSetup() ;\'''</p><p>[[File:media/image90'''wiringpi.png|395x91px]]digitalWrite(2, </pspan style="color:#FF0000">GPIO.LOW</lispan><li><p>然后选择'''&lt;Reboot)&gtquot;'''重启系统使配置生效</p><p>[[File:media/image91.png|374x187px]]</p></li></ol>}
</li>
<li><p>进入linux系统后,先确认下'''/dev'''下是否存在uart5的设备节点</p><p>'''注意,linux5然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.4系统为/dev/ttyAS5。'''</p><p>orangepi@orangepi:~$ '''ls /dev/ttyS5'''</p><p>/dev/ttyS5</p></li><li><p>然后开始测试uart5接口,先使用杜邦线短接要测试的uart5接口的rx和tx3v,说明设置高电平成功</p></li></ol> {| class="wikitable" style="width:800px;"
|-
|<p>root@orangepi:~/wiringOP-Python# '''python3 -c &quot;import wiringpi; \'''</p><p>'''from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\'''</p><p>'''wiringpi.digitalWrite(2, <span style="color:#FF0000">GPIO.HIGH</span>)&quot;'''</p>| }</li></ol></li><li><p>在python3的命令行中测试的步骤如下所示:</p><ol style="textlist-style-aligntype: leftlower-alpha;"><li><p>首先使用python3命令进入python3的命令行模式</p>{| '''uart5'''class="wikitable" style="width:800px;"
|-
| <p>root@orangepi:~# '''tx引脚python3'''</p>|}</li><li><p>然后导入wiringpi的python模块</p>{| class="wikitable" style="text-alignwidth: left800px;"| '''对应26pin中的8号引脚'''
|-
| <p>&gt;&gt;&gt; '''rx引脚import wiringpi'''</p>| style="text-align: left<p>&gt;&gt;&gt;"| '''对应26pin中的10号引脚from wiringpi import GPIO'''</p>
|}
</li>
<li><p>然后设置GPIO口为输出模式,其中'''pinMode'''函数的第一个参数是引脚对应的wPi的序号,第二个参数是GPIO的模式</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>&gt;&gt;&gt; '''wiringpi.wiringPiSetup()'''</p>
<p>0</p>
<p>&gt;&gt;&gt; '''wiringpi.pinMode(<span style="color:#FF0000">2, GPIO.OUTPUT</span>)'''</p>
|}
</li>
<li><p>然后设置GPIO口输出低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为0v,说明设置低电平成功</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>&gt;&gt;&gt; '''wiringpi.digitalWrite(2, <span style="color:#FF0000">GPIO.LOW</span>)'''</p>
|}
</li>
<li><p>然后设置GPIO口输出高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为3.3v,说明设置高电平成功</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>&gt;&gt;&gt; '''wiringpi.digitalWrite(2, <span style="color:#FF0000">GPIO.HIGH</span>)'''</p>
|}
</li></ol>
</li>
<li><p>wiringOP-Python在python代码中设置GPIO高低电平的方法可以参考下examples中的'''blink.py'''测试程序,'''blink.py'''测试程序会设置开发板26 pin中所有的GPIO口的电压不断的高低变化</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p>
<p>root@orangepi:~/wiringOP-Python/examples# '''ls blink.py'''</p>
<p>'''blink.py'''</p>
<p>root@orangepi:~/wiringOP-Python/examples'''# python3 blink.py'''</p>
|}
</li></ol>
<ol startspan id="5" style="listpin-stylespi测试-type: decimal;1"><li><p>最后可以运行examples中的'''serialTest.py'''程序来测试下串口的回环功能,如果能看到下面的打印,说明串口回环测试正常</p><p>root@orangepi:~/wiringOP-Python# '''cd examples'''</pspan><p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device &quot;/dev/ttyS5&quot; # linux6.1使用'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''python3 serialTest.py --device &quot;/dev/ttyAS5&quot; # linux5.4使用'''</p><p>Out: 0: -&gt; 0</p><p>Out: 1: -&gt; 1</p><p>Out: 2: -&gt; 2</p><p>Out: 3: -&gt; 3</p><p>Out: 4:^C</p><p>exit</p></li></ol> == 硬件看门狗测试 == Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。
运行watchdog_test程序的方法如下所示:=== 26pin SPI测试 ===
<ol style="list-style-type: decimal;">
<li><p>由26pin接口的原理图可知,可用的spi为spi1</p>
<p>[[File:zero3-img176.png]]</p></li>
<li><p>Linux系统中spi1默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p>
<ol style="list-style-type: lower-alpha;">
<li><p>第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li><li><p>我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功然后选择'''System'''</p><p>orangepi@orangepi[[File:~$ zero3-img86.png]]</p></li><li><p>然后选择'''sudo watchdog_test 10Hardware'''</p><p>open success[[File:zero3-img87.png]]</p></li><li><p>options is 33152,identity is sunxi然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''spi1-wdtcs1-spidev'''</p><p>put_usr return,if 0,success[[File:0zero3-img177.png]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>The old reset time is[[File: 16zero3-img89.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>return ENOTTY,if [[File:zero3-1,successimg90.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:0zero3-img91.png]]</p></li></ol></li><li><p>return ENOTTY,if -然后查看下linux系统中是否存在'''spidev1.1,success:0'''的设备节点,如果存在,说明SPI1的配置已经生效了</p>{| class="wikitable" style="width:800px;" |-| <p>put_user return,if 0,successorangepi@orangepi:0~$ '''ls /dev/spidev1*'''</p><p>put_usr return,if 0,success:0/dev/spidev1.1</p>|}</li><li><p>keep alive然后可以使用examples中的'''spidev_test.py'''程序测试下SPI的回环功能,'''spidev_test.py'''程序需要指定下面的两个参数:</p><ol style="list-style-type: lower-alpha;"><li><p>keep alive'''--channel''':指定SPI的通道号</p></li><li><p>keep alive'''--port''':指定SPI的端口号</p></li></ol></li><li><p>先不短接 SPI1 的 mosi 和 miso 两个引脚,运行spidev_test.py的输出结果如下所示,可以看到 TX 和 RX 的数据不一致</p>{| class="wikitable" style="width:800px;" |-| root@orangepi:~/wiringOP-Python# '''cd examples'''
<span id="查看h618芯片的chipid"><root@orangepi:~/span>== 查看H618芯片的chipid ==wiringOP-Python/examples# '''python3 spidev_test.py \'''
查看H618芯片chipid的命令如下所示,每个芯片的chipid都是不同的,所以可以使用chipid来区分多个开发板。'''--channel 1 --port 1'''
orangepi@orangepispi mode:~$ '''cat /sys/class/sunxi_info/sys_info | grep &quot;chipid&quot;'''0x0
sunxi_chipid max speed: 338020004c0048080147478824681ed1500000 Hz (500 KHz)
<span id="python相关说明"><Opening device /span>== Python相关说明 ==dev/spidev1.1
TX | FF FF FF FF FF FF '''<span idstyle="python源码编译安装的方法color:#FF0000">40 00 00 00 00 95</span>=== Python源码编译安装的方法 ===''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
RX | FF FF FF FF FF FF '''如果使用的Ubuntu或者Debian系统软件仓库中的Python版本不符合开发的要求,想要使用最新版本的Python,可以使用下面的方法下载Python的源码包来编译安装最新版本的Python。<span style="color:#FF0000">FF FF FF FF FF FF</span>''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |.............….||}</li></ol><ol start="6" style="list-style-type: decimal;"><li><p>然后使用杜邦线短接SPI1的txd(26pin接口中的第19号引脚)和rxd(26pin接口中的第21号引脚)两个引脚再运行spidev_test.py的输出如下,可以看到发送和接收的数据一样,说明SPI1回环测试正常</p>{| class="wikitable" style="width:800px;" |-| root@orangepi:~/wiringOP-Python# '''cd examples'''
root@orangepi:~/wiringOP-Python/examples# '''下面演示的是编译安装Python3python3 spidev_test.9的最新版本,如果要编译安装其他的版本的Python,方法也是一样的(需要下载想要安装的Python对应的源码)。py \'''
<ol style="list-style-type: decimal;"><li><p>首先安装编译Python需要的依赖包</p><p>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''sudo apt-get install -y build-essential zlib1g-dev \'''</p><p>'''libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \'''</p><p>'''libreadline-dev libffi-dev curl libbz2-dev'''</p></li><li><p>然后下载最新版本的Python3.9源码并解压</p><p>orangepi@orangepi:~$ '''wget \'''</p><p>[https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz '''https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz''']</p><p>orangepi@orangepi:~$ '''tar xvf Python-3.9.10.tgz'''</p></li><li><p>然后运行配置命令</p><p>orangepi@orangepi:~$ '''cd Python-3.9.10'''</p><p>orangepi@orangepi:~$ '''./configure --enable-optimizations'''</p></li><li><p>然后编译安装Python3.9,编译时间大概需要半个小时左右</p><p>orangepi@orangepi:~$ '''make -j4'''</p><p>orangepi@orangepi:~$ '''sudo make altinstall'''</p></li><li><p>安装完后可以使用下面的命令查看下刚安装的Python的版本号</p><p>orangepi@orangepi:~$ '''python3.9 --version'''</p><p>'''Python 3.9.10'''</p></li><li><p>然后更新下pip</p><p>orangepi@orangepi:~$ '''/usr/local/bin/python3.9 -m pip install channel 1 --upgrade pipport 1'''</p></li></ol>
<span id="python更换pip源的方法"></span>=== Python更换pip源的方法 ===spi mode: 0x0
'''Linux系统pip默认使用的源为Python官方的源,但是国内访问Python官方的源速度是很慢的,并且经常会由于网络原因导致Python软件包安装失败。所以在使用pip安装Python库时,请记得更换下pip源。'''max speed: 500000 Hz (500 KHz)
<ol style="list-style-type: decimal;"><li><p>首先安装下'''python3-pip'''<Opening device /p><p>orangepi@orangepi:~$ '''sudo apt-get update'''<dev/p><p>orangepi@orangepi:~$ '''sudo apt-get install -y python3-pip'''</p></li><li><p>Linux下永久更换pip源的方法</p><ol style="list-style-type: lower-alpha;"><li><p>先新建'''~/.pip'''目录,然后添加'''pip.conf'''配置文件,并在其中设置pip的源为清华源</p><p>orangepi@orangepi:~$ '''mkdir -p ~/.pip'''</p><p>orangepi@orangepi:~$ '''cat &lt;&lt;EOF &gt; ~/.pip/pipspidev1.conf'''</p><p>'''[global]'''</p><p>'''timeout = 6000'''</p><p>'''index-url = https://pypi.tuna.tsinghua.edu.cn/simple'''</p><p>'''trusted-host = pypi.tuna.tsinghua.edu.cn'''</p><p>'''EOF'''</p></li><li><p>然后使用pip3安装Python库速度就会很快了</p></li></ol></li><li><p>Linux下临时更换pip源的方法,其中的'''&lt;packagename&gt;'''需要替换为具体的包名</p><p>orangepi@orangepi:~$ '''pip3 install &lt;packagename&gt; -i \'''</p><p>'''https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn'''</p></li></ol>1
TX | FF FF FF FF FF FF '''<span idstyle="安装docker的方法color:#FF0000">40 00 00 00 00 95</span>== 安装Docker的方法 ==''' FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…|
Orange Pi提供的linux镜像已经预装了Docker,只是Docker服务默认没有打开。使用RX | FF FF FF FF FF FF '''enable_docker.sh<span style="color:#FF0000">40 00 00 00 00 95</span>'''脚本可以使能docker服务,然后就可以开始使用docker命令了,并且在下次启动系统时也会自动启动docker服务。FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D |......@.......…||}</li></ol>
orangepi@orangepi:~$ '''enable_docker.sh'''<span id="pin-i2c测试-1"></span>
可以使用下面的命令测试下docker,如果能运行'''hello-world'''说明docker能正常使用了。=== 26pin I2C测试 ===
<ol style="list-style-type: decimal;"><li><p>由26pin的原理图可知,可用的i2c为i2c3</p><p>[[File:zero3-img178.png]]</p></li><li><p>Linux系统中i2c3默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先运行下'''orangepi-config''',普通用户记得加'''sudo'''权限</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo orangepi-config'''</p>|}</li><li><p>然后选择'''System'''</p><p>[[File:zero3-img86.png]]</p></li><li><p>然后选择'''Hardware'''</p><p>[[File:zero3-img87.png]]</p></li><li><p>然后使用键盘的方向键定位到下图所示的位置,再使用'''空格'''选中'''ph-i2c3'''</p><p>[[File:zero3-img179.png]]</p></li><li><p>然后选择'''&lt;Save&gt;'''保存</p><p>[[File:zero3-img89.png]]</p></li><li><p>然后选择'''&lt;Back&gt;'''</p><p>[[File:zero3-img90.png]]</p></li><li><p>然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:zero3-img91.png]]</p></li></ol></li><li><p>启动linux系统后,先确认下/dev下存在i2c3的设备节点</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''docker run hellols /dev/i2c-world3'''</p><p>'''/dev/i2c-3'''</p>Unable to find image |}</li><li><p>然后开始测试i2c,首先安装下i2c-tools</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''hellosudo apt-worldget update'''</p><p>orangepi@orangepi:latest~$ '''sudo''' '''apt-get install -y i2c-tools'' locally'</p>|}</li><li><p>然后在26pin接头的i2c3引脚上接一个i2c设备,这里以DS1307 RTC模块为例</p><p>[[File:zero3-img186.png]]</p></li>
latest{| class="wikitable" style="width: Pulling from library800px;" |-| style="text-align: left;"| '''RTC模块的引脚'''| style="text-align: left;"| '''开发板26pin对应的引脚'''|-| style="text-align: left;"| '''5V'''| style="text-align: left;"| '''2号引脚'''|-| style="text-align: left;"| '''GND'''| style="text-align: left;"| '''6号引脚'''|-| style="text-align: left;"| '''SDA'''| style="text-align: left;"| '''3号引脚'''|-| style="text-align: left;"| '''SCL'''| style="text-align: left;"| '''5号引脚'''|}</hellool><ol start="6" style="list-worldstyle-type: decimal;"><li>然后使用'''i2cdetect -y 3'''命令如果能检测到连接的i2c设备的地址,就说明i2c设备连接正确</li>
256ab8fe8778[[File: Pull completezero3-img187.png]]</ol><ol start="7" style="list-style-type: decimal;"><li><p>然后可以运行'''examples'''中的'''ds1307.py'''测试程序读取RTC的时间</p>{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~/wiringOP-Python# '''cd examples'''</p><p>root@orangepi:~/wiringOP-Python/examples# '''python3 ds1307.py --device \'''</p><p>'''&quot;/dev/i2c-3&quot;'''</p><p>Thu 2022-06-16 04:35:46</p><p>Thu 2022-06-16 04:35:47</p><p>Thu 2022-06-16 04:35:48</p><p>^C</p><p>exit</p>|}</li></ol>
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449ef11e0941a1fd0bf4a8e6c9408b2600777c5<span id="pin的uart测试-1"></span>
Status: Downloaded newer image for hello-world:latest '''Hello from Docker!''' '''This message shows that your installation appears to be working correctly.''' '''.….''' 使用docker命令时,如果提示'''permission denied''',请将当前用户加入到docker用户组,这样不需要sudo就能运行docker命令了。 orangepi@orangepi:~$ '''sudo usermod -aG docker $USER''' '''注意:需要退出重新登录系统才能生效,重启系统也可以。''' <span id="home-assistant的安装方法"></span>== Home Assistant的安装方法 == '''注意,这里只会提供在Ubuntu或者Debian系统中安装Home Assistant的方法,Home Assistant详细的使用方法请参考官方文档或者相应的书籍。''' === 通过docker安装 26pin的UART测试 ===
<ol style="list-style-type: decimal;">
<li><p>首先请安装好docker,并确保docker能正常运行。docker的安装步骤请参考[[\l|'''安装Docker的方法''']]一节的说明。由26pin接口的原理图可知,可用的uart为uart5</p></li><li><p>然后可以搜索下Home Assistant的docker镜像</p><p>orangepi@orangepi[[File:~$ '''docker search homeassistant'''zero3-img181.png]]</p></li><li><p>然后使用下面的命令下载Home Assistant的docker镜像到本地,镜像大小大概有1GB多,下载时间会比较长,请耐心等待下载完成Linux系统中uart5默认是关闭的,需要手动打开才能使用。打开步骤如下所示:</p><p>orangepi@orangepi:~$ '''docker pull homeassistant/homeol style="list-style-assistant'''</p><p>Using default tagtype: latest</p><p>latest: Pulling from homeassistant/homelower-assistant</palpha;"><pli>be307f383ecc: Downloading</p><p>5fbc4c07ac88: Download complete</p><p>首先运行下'''...... (省略部分输出)orangepi-config'''</p><p>3cc6a1510c9f: Pull complete</p><p>7a4e4d5b979f: Pull complete</p><p>Digest: sha256:81d381f5008c082a37da97d8b08dd8b358dae7ecf49e62ce3ef1eeaefc4381bb</p><p>Status: Downloaded newer image for homeassistant/home-assistant:latest</p><p>docker.io/homeassistant/home-assistant:latest</p></li><li><p>然后可以使用下面的命令查看下刚下载的Home Assistant的docker镜像</p><p>orangepi@orangepi:~$ ,普通用户记得加'''docker images homeassistant/home-assistantsudo'''权限</p><p>REPOSITORY TAG IMAGE ID CREATED SIZE</p>{| class="wikitable" style="width:800px;" <p>homeassistant/home|-assistant latest bfa0ab9e1cf5 2 months ago '''1.17GB'''</p></li><li><p>此时就可以运行Home Assistant的docker容器了</p>| <p>orangepi@orangepi:~$ '''docker run sudo orangepi-d \config'''</p><p>'''--name homeassistant \'''</p>|}<p>'''--privileged \'''</pli><pli>'''--restart=unless-stopped \'''</p><p>然后选择'''-e TZ=Asia/Shanghai \System'''</p><p>'''-v /home/orangepi/home-assistant[[File:/config \'''</p><p>'''zero3--network=host \'''</p><p>'''homeassistant/home-assistant:latest'''img86.png]]</p></li><li><p>然后在浏览器中输入【开发板的IP地址:8123】就能看到Home Assistant的界面</p><p>然后选择'''Home Assistant容器的启动需要一段时间,如果下面的界面没有正常显示,请等待几秒钟再刷新。如果等待一分钟以上还没有正常显示下面的界面说明Home Assistant安装有问题,此时需要去检查前面的安装设置过程是否有问题了。Hardware'''</p><p>[[File:media/image188zero3-img87.png|576x209px]]</p></li><li><p>然后输入然后使用键盘的方向键定位到下图所示的位置,再使用'''姓名、用户名空格'''选中'''密码'''再点击'''创建账号ph-uart5'''</p><p>[[File:media/image189zero3-img182.png|220x279px]]</p></li><li><p>然后按照界面提示根据自己的喜好设置,再点击下一步然后选择'''&lt;Save&gt;'''保存</p><p>[[File:media/image190zero3-img89.png|575x297px]]</p></li><li><p>然后点击下一步然后选择'''&lt;Back&gt;'''</p><p>[[File:media/image191zero3-img90.png|576x185px]]</p></li><li><p>然后点击完成然后选择'''&lt;Reboot&gt;'''重启系统使配置生效</p><p>[[File:media/image192zero3-img91.png|576x117px]]</p></li><li><p>Home Assistant最终显示的主界面如下图所示</pol><p>[[File:media/image193.png|574x294px]]</p></li><li><p>停止Home Assistant容器的方法进入linux系统后,先确认下'''/dev'''下是否存在uart5的设备节点</p><ol {| class="wikitable" style="listbackground-style-typecolor:#ffffdc;width: lower-alpha800px;">|-| <li><pbig>查看docker容器的命令如下所示</p><p>orangepi@orangepi:~$ '''docker ps -a注意,linux5.4系统为/dev/ttyAS5。'''</p></libig><li><p>停止Home Assistant容器的命令如下所示</p>|}{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''docker stop homeassistantls /dev/ttyS5'''</p></li><li><p>删除Home Assistant容器的命令如下所示/dev/ttyS5</p><p>orangepi@orangepi:~$ '''docker rm homeassistant'''|}</pli></li></olp>然后开始测试uart5接口,先使用杜邦线短接要测试的uart5接口的rx和tx</lip></olli>
{| class="wikitable" style== 通过python安装 ==="width:800px;" |-'''安装前请先更换下pip的源为国内源,加快Python包的安装速度,配置方法见[[\l|Python更换pip源的方法]]一节的说明。''' <ol | style="list-styletext-typealign: decimalleft;"><li><p>首先安装依赖包</p><p>orangepi@orangepi:~$ | '''sudo apt-get updateuart5'''</p><p>orangepi@orangepi:~$ |-| '''sudo apt-get install -y python3 python3-dev python3-venv \tx引脚'''</p><p>| style="text-align: left;"| '''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \对应26pin中的8号引脚'''</p><p>'''libopenjp2-7 libtiff5 libturbojpeg0|-dev tzdata'''</p><p>| '''如果是debian12请使用下面的命令:rx引脚'''</p><p>orangepi@orangepi| style="text-align:~$ left;"| '''sudo apt-get update对应26pin中的10号引脚'''</p><p>orangepi@orangepi:~$ '''sudo apt-get install -y python3 python3-dev python3-venv \'''</p>|}<p>'''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</pol><p>'''libopenjp2ol start="5" style="list-7 libturbojpeg0style-dev tzdata'''</p></litype: decimal;"><li><p>然后需要编译安装Python3.9,方法请参考[[\l|'''Python源码编译安装的方法最后可以运行examples中的''']]一节</p><p>'''Debian Bullseye默认的Python版本就是Python3serialTest.9,所以无需编译安装。py'''程序来测试下串口的回环功能,如果能看到下面的打印,说明串口回环测试正常</p><p>'''Ubuntu Jammy默认的Python版本就是Python3.10,所以也无需编译安装。'''</p>{| class="wikitable" style="width:800px;" <p>'''Debian Bookworm默认的Python版本就是Python3.11,所以也无需编译安装。'''</p></li>|-<li><p>然后创建Python虚拟环境</p><p>'''Debian Bookworm中是python3.11,请记得替换对应的命令。'''</p>| <p>orangepiroot@orangepi:~$ /wiringOP-Python# '''sudo mkdir /srv/homeassistantcd examples'''</p><p>orangepiroot@orangepi:~$ /wiringOP-Python/examples# '''sudo chown orangepi:orangepi python3 serialTest.py --device &quot;/srvdev/homeassistantttyS5&quot; # linux6.1使用'''</p><p>orangepiroot@orangepi:~$ '''cd /srvwiringOP-Python/homeassistant'''</p><p>orangepi@orangepi:~$ examples# '''python3serialTest.9 py --m venv .'''<device &quot;/p><p>orangepi@orangepi:~$ '''source bindev/activatettyAS5&quot; # linux5.4使用'''</p><p>(homeassistant) orangepi@orangepi:/srv/homeassistant$</p></li><li><p>然后安装需要的Python包</p><p>(homeassistant) orangepi@orangepiOut: 0:/srv/homeassistant$ '''python3 -m pip install wheel'''&gt; 0</p></li><li><p>然后就可以安装Home Assistant CoreOut: 1: -&gt; 1</p><p>(homeassistant) orangepi@orangepiOut: 2:/srv/homeassistant$ '''pip3 install homeassistant'''-&gt; 2</p></li><li><p>然后输入下面的命令就可以运行Home Assistant CoreOut: 3: -&gt; 3</p><p>(homeassistant) orangepi@orangepiOut:/srv/homeassistant$ '''hass'''</p></li><li><p>然后在浏览器中输入【'''开发板的IP地址4:8123'''】就能看到Home Assistant的界面^C</p><p>'''第一次运行hass命令时,会下载安装和缓存一些运行必须的库和依赖包。这个过程可能会花费几分钟的时间。注意,此时在浏览器中是无法看到Home Assistant的界面的,请等待一段时间后再刷新下。'''exit</p><p>[[File:media/image194.png|576x203px]]</p>}</li></ol>
<span id="opencv的安装方法"></span>== OpenCV的安装方法 硬件看门狗测试 ==
<span id="使用apt来安装opencv"></span>Orange Pi发布的linux系统中预装了watchdog_test程序,可以直接测试。=== 使用apt来安装OpenCV ===运行watchdog_test程序的方法如下所示:
<ol style="list-style-type: decimal;">
<li><p>安装命令如下所示</p>
<p>orangepi@orangepi:~$ '''sudo apt-get update'''</p>
<p>orangepi@orangepi:~$ '''sudo apt-get install -y libopencv-dev python3-opencv'''</p></li>
<li><p>然后使用下面的命令打印OpenCV的版本号输出正常,说明OpenCV安装成功</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Ubuntu22.04中OpenCV的版本如下所示:第二个参数10表示看门狗的计数时间,如果这个时间内没有喂狗,系统会重启</p></li><li><p>我们可以通过按下键盘上的任意键(ESC除外)来喂狗,喂狗后,程序会打印一行keep alive表示喂狗成功</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;sudo watchdog_test 10'''</p><p>'''4.5.4'''open success</p></li><li><p>Ubuntu20.04中OpenCV的版本如下所示:options is 33152,identity is sunxi-wdt</p><p>orangepi@orangepiput_usr return,if 0,success:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''0</p><p>'''4.2.0'''The old reset time is: 16</p></li><li><p>Debian11中OpenCV的版本如下所示:return ENOTTY,if -1,success:0</p><p>orangepi@orangepireturn ENOTTY,if -1,success:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''0</p><p>'''4.5.1'''put_user return,if 0,success:0</p></li><li><p>Debian12中OpenCV的版本如下所示:put_usr return,if 0,success:0</p><p>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''keep alive</p><p>'''4.6.0'''keep alive</p></lip>keep alive</olp>|}
</li></ol>
<span id="宝塔linux面板的安装方法查看h618芯片的chipid"></span> == 宝塔Linux面板的安装方法 查看H618芯片的chipid == 查看H618芯片chipid的命令如下所示,每个芯片的chipid都是不同的,所以可以使用chipid来区分多个开发板。 {| class="wikitable" style="width:800px;" |-| orangepi@orangepi:~$ '''cat /sys/class/sunxi_info/sys_info | grep &quot;chipid&quot;'''
'''宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能(摘抄自[httpssunxi_chipid ://www.bt.cn/ 宝塔官网])'''338020004c0048080147478824681ed1|}
<ol stylespan id="list-style-type: decimal;python相关说明"><li><p>首先需要扩展下'''/tmp'''空间的大小,设置完后需要'''重启下开发板的linux系统''',命令如下所示:</p><p>orangepi@orangepi:~$ '''sudo sed -i 's/nosuid/&amp;,size=2G/' /etc/fstab'''</p><p>orangepi@orangepi:~$ '''sudo reboot'''</p></li><li><p>重启后,可以看到'''/tmp'''空间的大小变为2G了</p><p>orangepi@orangepi:~$ '''df -h | grep &quot;/tmp&quot;'''</p><p>tmpfs 2.0G 12K '''2.0G''' 1% /tmp</p></li><li><p>然后在linux系统中输入下面的命令就可以开始宝塔的安装</p><p>orangepi@orangepi:~$ '''sudo install_bt_panel.sh'''</p></li><li><p>然后宝塔安装程序会提醒是否安装'''Bt-Panel'''到'''/www'''文件夹,此时输入'''y'''即可</p><p>+----------------------------------------------------------------------</p><p>| Bt-WebPanel FOR CentOS/Ubuntu/Debian</p><p>+----------------------------------------------------------------------</p><p>| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.</p><p>+----------------------------------------------------------------------</p><p>| The WebPanel URL will be http://SERVER_IP:8888 when installed.</p><p>+----------------------------------------------------------------------</p><p>Do you want to install Bt-Panel to the /www directory now?(y/n): '''y'''</p></li><li><p>然后要做的就是耐心等待,当看到终端输出下面的打印信息时,说明宝塔已经安装完成,整个安装过程大约耗时34分钟,根据网络速度的不同可能会有一些差别</p><p>[[File:media/image195.png|576x233px]]</p></li><li><p>此时在浏览器中输入上面显示的'''面板地址'''就可以打开宝塔Linux面板的登录界面,然后在对应的位置输入上图显示的'''username'''和'''password'''就可以登录进宝塔<br />[[File:media/image196.png|575x281px]]</p></li><li><p>成功登录宝塔后的会弹出下面的欢迎界面,首先请将中间的用户须知阅读完拖到最下面,然后就可以选择”我已同意并阅读《用户协议》“,接着点击”进入面板”就可以进入宝塔了</p><p>[[File:media/image197.png|575x317px]]</p></li><li><p>进入宝塔后首先会提示需要绑定宝塔官网的账号,如果没有账号可以去宝塔的官网('''https://www.bt.cn''')注册一个</p><p>[[File:media/image198.png|576x300px]]</p></li><li><p>最终显示的界面如下图所示,可以很直观的看到开发板Linux系统的一些状态信息,比如负载状态、CPU的使用率、内存使用率和存储空间的使用情况等</p><p>[[File:media/image199.png|575x306px]]</p></li><li><p>宝塔的更多功能可以参考下面资料自行探索</p><p>使用手册:[http://docs.bt.cn '''http://docs.bt.cn''']</p><p>论坛地址:[https://www.bt.cn/bbs '''https://www.bt.cn/bbs''']</p><p>GitHub链接:'''https://github.com/aaPanel/BaoTa'''</p></li></olspan>
== face_recognition人脸识别库的安装和测试方法 Python相关说明 ==
'''注意,此小节的内容都是在桌面版本的Linux系统中测试的,所以请确保开发板使用的系统为桌面版本的系统。'''<span id="python源码编译安装的方法"></span>=== Python源码编译安装的方法 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''另外下面的安装测试都是在orangepi用户下进行的,请保持环境一致。如果使用的Ubuntu或者Debian系统软件仓库中的Python版本不符合开发的要求,想要使用最新版本的Python,可以使用下面的方法下载Python的源码包来编译安装最新版本的Python。'''
'''Debian12目前没有适配。''' '''face_recognition源码仓库的地址为:''' [https://github.com/ageitgey/face_recognition '''https://github下面演示的是编译安装Python3.com/ageitgey/face_recognition''9的最新版本,如果要编译安装其他的版本的Python,方法也是一样的(需要下载想要安装的Python对应的源码)。'] '''face_recognition中文版本的说明文档为:''' '''https:<//github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md'''big>=== 使用脚本自动安装face_recognition的方法 ===|}
<ol style="list-style-type: decimal;">
<li><p>首先在桌面中打开一个终端,然后下载'''face_recognition_install.sh'''首先安装编译Python需要的依赖包</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~/Desktop$ '''wget \sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''https://gitee.com/leeboby/face_recognition_install/raw/master/face_recognition_install.shsudo apt-get install -y build-essential zlib1g-dev \'''</p></li><li><p>然后执行下面的命令开始安装'''face_recognitionlibncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \'''</p><p>orangepi@orangepi:~/Desktop$ '''bash face_recognition_install.shlibreadline-dev libffi-dev curl libbz2-dev'''</p>|}</li><li><p>face_recognition安装完后会自动下载face_recognition的源码,然后自动运行face_recognition中的一些示例,如果最后能看到桌面上弹出了下面的这些图片就说明face_recognition安装测试成功了然后下载最新版本的Python3.9源码并解压</p><p>[[File:media/image200.png{|576x324px]]</p></li></ol> class=== 手动安装face_recognition的方法 === <ol "wikitable" style="list-style-typewidth: decimal800px;"><li><p>首先新建'''~/.pip'''目录,再添加'''pip.conf'''配置文件,并在其中设置pip的镜像源为清华源,需要执行的命令如下所示:</p>|-<p>orangepi@orangepi:~$ '''mkdir -p ~/.pip'''</p>| <p>orangepi@orangepi:~$ '''cat &lt;&lt;EOF &gt; ~/.pip/pip.conf'''</p><p>'''[global]'''</p><p>'''timeout = 6000wget \'''</p><p>'''index-url = https://pypiwww.tunapython.tsinghuaorg/ftp/python/3.edu9.cn/simple'''<10/p><p>'''trustedPython-host = pypi.tuna3.tsinghua9.edu10.cntgz'''</p><p>'''EOF'''</p></li><li><p>然后安装依赖包</p><p>orangepi@orangepi:~$ '''sudo apt update'''</p><p>orangepi@orangepi:~$ '''sudo apt install tar xvf Python-y python3-pip libopencv-dev \3.9.10.tgz'''</p><p>'''python3-opencv imagemagick python3-scipy python3-setuptools python3-wheel \'''</p>|}<p>'''python3-dev cmake python3-testresources'''</p></li><li><p>然后更新下pip3然后运行配置命令</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 cd Python-m pip install -U pip setuptools wheel'''</p></li><li><p>安装'''face_recognition'''前首先需要安装下'''dlib'''这个库,由于dlib这个库在开发板上编译安装比较慢,所以我在'''gitee'''上保存了一份编译好的dlib whl文件,下载后直接安装就可以了。dlib whl文件下载地址如下所示:</p><p>'''https://gitee3.9.com/leeboby/python_whl10'''</p><ol style="list-style-type: lower-alpha;"><li><p>首先将python_whl仓库下载到开发板的Linux系统中</p><p>orangepi@orangepi:~$ '''git clone ./configure --enable-depth=1 https://gitee.com/leeboby/python_whloptimizations'''</p>|}</li><li><p>在python_whl文件夹中可以看到有多个版本的dlib安装包''','''dlib不同版本对应的Linux系统如下所示:然后编译安装Python3.9,编译时间大概需要半个小时左右</p></li></ol></li></ol> {| class="wikitable" style="width:800px;"
|-
| style="text<p>orangepi@orangepi:~$ '''make -alignj4'''</p><p>orangepi@orangepi: left;"| ~$ '''Ubuntu20.04sudo make altinstall'''</p>|}</li><li><p>安装完后可以使用下面的命令查看下刚安装的Python的版本号</p>{| class="wikitable" style="text-alignwidth: left800px;"| '''dlib-19.24.0-cp38-cp38-linux_aarch64.whl'''
|-
| style="text-align<p>orangepi@orangepi: left;"| ~$ '''Ubuntu22python3.049 --version'''</p>| style="text-align: left;"| <p>'''dlib-19Python 3.249.0-cp310-cp310-linux_aarch64.whl10'''</p>|}</li><li><p>然后更新下pip</p>{| class="wikitable" style="width:800px;"
|-
| style="text-align: left;"| '''Debian11'''| style="text-align<p>orangepi@orangepi: left;"| ~$ '''dlib-19/usr/local/bin/python3.24.09 -cp39m pip install -cp39-linux_aarch64.whlupgrade pip'''</p>
|}
</li></ol>
<ol startspan id="3python更换pip源的方法" style="list-style-type: lower-alpha;"><li><p>然后就可以开始安装dlib,命令如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>Ubuntu20.04</p><p>orangepi@orangepi:~$ '''cd python_whl'''</p><p>orangepi@orangepi:~/python_whl$ '''python3 -m pip install dlib-19.24.0-cp38-cp38-linux_aarch64.whl'''</p></li><li><p>Ubuntu22.04</p><p>orangepi@orangepi:~$ '''cd python_whl'''</p><p>orangepi@orangepi:~/python_whl$ '''python3 -m pip install dlib-19.24.0-cp310-cp310-linux_aarch64.whl'''</p></li><li><p>Debian11</p><p>orangepi@orangepi:~$ '''cd python_whl'''</p><p>orangepi@orangepi:~/python_whl$ '''python3 -m pip install dlib-19.24.0-cp39-cp39-linux_aarch64.whl'''</p></li></ol></li><li><p>安装完后如果使用下面的命令能正常打印dlib的版本号,就说明dlib安装正确</p><p>orangepi@orangepi:~/python_whl$ '''python3 -c &quot;import dlib; print(dlib.__version__)&quot;'''</p><p>'''19.24.0'''</p></li></olspan>
<!-- --><ol start="5" style="list-style-type: decimal;"><li><p>然后安装下'''face_recognition_models-0.3.0-py2.py3-none-any.whl'''</p><p>orangepi@orangepi:~/python_whl$ '''python3 -m pip install face_recognition_models-0.3.0-py2.py3-none-any.whl'''</p></li><li><p>然后安装'''face_recognition'''</p><p>orangepi@orangepi:~$ '''python3 -m pip install face_recognition'''</p></li><li><p>然后'''需要重新打开一个终端''',才能找到并运行'''face_detection'''和'''face_recognition'''这两个命令</p><ol style="list-style-type: lower-alpha;"><li><p>face_recognition命令用来在单张图片或一个图片文件夹中识别是谁的脸</p></li><li><p>face_detection命令用来在单张图片或一个图片文件夹中定位人脸的位置</p><p>orangepi@orangepi:~$ '''which face_detection'''</p><p>/usr/local/bin/face_detection</p><p>orangepi@orangepi:~$ '''which face_recognition'''</p><p>/usr/local/bin/face_recognition</p></li></ol></li></ol>Python更换pip源的方法 ===
如果重新打开终端找不到上面的两个命令,请试下手动导入环境变量,然后再测试下。 orangepi@orangepi{| class="wikitable" style="background-color:~$ '''export PATH=/home/orangepi/.local/bin#ffffdc;width:$PATH'''800px;" === face_recognition的测试方法 ===|-| <big>'''注意,下面的操作都是在桌面中演示的,所以首先请连接好HDMI显示器,或者使用NoMachine/VNC远程登录Linux桌面来测试。Linux系统pip默认使用的源为Python官方的源,但是国内访问Python官方的源速度是很慢的,并且经常会由于网络原因导致Python软件包安装失败。所以在使用pip安装Python库时,请记得更换下pip源。'''</big>|}
<ol style="list-style-type: decimal;">
<li><p>首先安装下'''face_recognitionpython3-pip'''的源码中有一些示例代码,我们可以直接用来测试,face_recognition源码的下载地址如下所示:</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>GitHub官方的下载地址</p>|-| <p>orangepi@orangepi:~$ '''git clone https://github.com/ageitgey/face_recognition.gitsudo apt-get update'''</p></li><li><p>Gitee镜像下载地址</p><p>orangepi@orangepi:~$ '''git clone [https://github.com/ageitgey/face_recognition https://gitee.com/leeboby/face_recognition.git]sudo apt-get install -y python3-pip'''</p></li></ol>|}
</li>
<li><p>face_recognition示例代码的路径如下所示</p><p>'''face_recognition/examples'''</p></li><li><p>face_recognition的中文说明文档链接如下所示,使用face_recognition前请仔细阅读下</p><p>[https://github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md '''https://github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md''']</p></li><li><p>'''find_faces_in_picture.py'''用来在图片中定位人脸的位置,测试步骤如下所示Linux下永久更换pip源的方法</p>
<ol style="list-style-type: lower-alpha;">
<li><p>在桌面中打开一个终端,然后进入先新建'''face_recognition~/examples.pip'''目录,然后添加'''pip.conf'目录,再执行下面的命令''配置文件,并在其中设置pip的源为清华源</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''cd face_recognitionmkdir -p ~/examples.pip'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 find_faces_in_picturecat &lt;&lt;EOF &gt; ~/.pip/pip.pyconf'''</p><p>'''I found 1 face(s) in this photograph.[global]'''</p><p>'''A face is located at pixel location Top: 241, Left: 419, Bottom: 562, Right: 740timeout = 6000'''</p></li><li><p>等待一段时间会弹出下面的图片,这就是在测试图片中定位到的人脸'''index-url = https://pypi.tuna.tsinghua.edu.cn/simple'''</p><p>[[File:media/image201'''trusted-host = pypi.tuna.tsinghua.edu.png|575x311px]]cn'''</p></lip>'''EOF'''</olp>|}
</li>
<li><p>'''find_facial_features_in_picture.py'''用来识别单张图片中人脸的关键点,测试步骤如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>在桌面中打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令</p><p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 find_facial_features_in_picture.py'''</p></li><li><p>等待一段时间会弹出下面的图片,可以看到将人脸轮廓都标注出来了</p><p>[[File:media/image202.png|575x302px]]然后使用pip3安装Python库速度就会很快了</p></li></ol>
</li>
<li><p>Linux下临时更换pip源的方法,其中的'''identify_and_draw_boxes_on_faces.py&lt;packagename&gt;'''用来识别人脸并使用方框标注,测试步骤如下所示需要替换为具体的包名</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>在桌面中打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令</p>|-| <p>orangepi@orangepi:~$ '''cd face_recognition/examplespip3 install &lt;packagename&gt; -i \'''</p><p>orangepi@orangepi'''https:~/face_recognition/examples$ '''python3 identify_and_draw_boxes_on_facespypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.pycn'''</p></li><li><p>等待一段时间会弹出下面的图片,可以看到将图片中的人脸都使用方框标注出来了,并且正确显示了人物的名字</p>|}<p>[[File:media/image203.png|461x250px]]</p></li></ol></li><li><pspan id="安装docker的方法">'''face_distance.py'''用来在不同精度上比较两个人脸是否属于一个人,首先打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令就可以看到测试的输出结果</p><p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</pspan><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 face_distance.py'''</p><p>'''The test image has a distance of 0.35 from known image #0'''</p>== 安装Docker的方法 ==<p>'''- With a normal cutoff of 0.6, would the test image match the known image? True'''</p><p>Orange Pi提供的linux镜像已经预装了Docker,只是Docker服务默认没有打开。使用'''- With a very strict cutoff of 0enable_docker.5, would the test image match the known image? Truesh'''</p>脚本可以使能docker服务,然后就可以开始使用docker命令了,并且在下次启动系统时也会自动启动docker服务。<p>'''The test image has a distance of 0.82 from known image #1'''</p><p>'''- With a normal cutoff of 0.6, would the test image match the known image? False'''</p>{| class="wikitable" style="width:800px;" <p>'''|- With a very strict cutoff of 0.5, would the test image match the known image? False'''</p></li><li><p>'''recognize_faces_in_pictures.py'''用来识别未知图片中的人脸是谁。首先打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令,等待一端时间后就能看到测试结果</p><p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p>| <p>orangepi@orangepi:~/face_recognition/examples$ '''python3 recognize_faces_in_picturesenable_docker.pysh'''</p><p>'''Is the unknown face a picture of Biden? False'''</p>|}<p>'''Is the unknown face a picture of Obama? True'''</p><p>可以使用下面的命令测试下docker,如果能运行'''Is the unknown face a new person that wehello-world've never seen before? False'''</p></li>说明docker能正常使用了。<li><p>'''facerec_from_webcam_faster.py'''用来识别USB摄像头中的人脸,测试步骤如下所示:</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>首先请将USB摄像头插入开发板的USB接口中,然后通过'''v4l2|-ctl'''('''注意v4l2中的l是小写字母l,不是数字1''')命令查看下USB摄像头的设备节点的序号</p><p>| orangepi@orangepi:~$ '''sudo apt updatedocker run hello-world'''</p><p>orangepi@orangepi:~$ Unable to find image '''sudo apt install hello-y v4l-utilsworld:latest'''<locally latest: Pulling from library/p>hello-world <p>orangepi@orangepi256ab8fe8778:~$ '''v4l2-ctl --list-devices'''</p>Pull complete <p>cedrus (platformDigest:cedrus)sha256:</p>7f0a9f93b4aa3022c3a4c147a449ef11e0941a1fd0bf4a8e6c9408b2600777c5<p>/dev/video0</p><p>USB2.0 UVC PC CameraStatus: USB2.0 UV (usb-5311000.usbDownloaded newer image for hello-1)world:</p>latest<p>'''/dev/video1'''</p><p>/dev/video2</p></li><li><p>然后在桌面中打开一个终端,进入'''face_recognition/examples'''目录后,首先修改下'''facerec_from_webcam_faster.py'''中使用的摄像头的设备序号。比如上面通过'''v4l2-ctl &gt; --list-devices'''命令查看到USB摄像头为'''/dev/video1''',那就修改'''cv2.VideoCapture(0)'''中的'''0'''为'''1'''</pspan style="color:#FF0000"><p>orangepi@orangepi:~$ '''cd face_recognition/examples'''Hello from Docker!</p><pspan>orangepi@orangepi:~/face_recognition/examples$ '''vim facerec_from_webcam_faster.py'''</p><p>'''video_capture = cv2.VideoCapture(1)'''</p></li><li><p>然后执行下面的命令运行'''facerec_from_webcam_faster.py'''</p><p>orangepi@orangepispan style="color:~/face_recognition/examples$ '''python3 facerec_from_webcam_faster.py'''</p#FF0000"></li><li><p>等待一段时间会弹出摄像头的显示画面</p><p>[[File:media/image204This message shows that your installation appears to be working correctly.png|314x245px]]</pspan></li><li><p>此时可以将摄像头对准自己,当摄像头检测到人脸时,会将检测到的人脸使用方框框起来。'''注意,检测人脸时,摄像头显示的画面会比较卡顿,请不要移动过快'''</p></li><li><p>还可以打开一张奥巴马的图片,然后使用摄像头对准打开的图片,可以看到不仅能将人脸标注出来,还能正确显示检测到的人脸的名字。'''注意,检测人脸时,摄像头显示的画面会比较卡顿,请不要移动过快.….'''</p><p>[[File:media/image205.png|358x284px]]</p></li></ol>}</li><li><p>使用docker命令时,如果提示'''web_service_example.pypermission denied'''是一个非常简单的使用Web服务上传图片运行人脸识别的案例,后端服务器会识别这张图片是不是奥巴马,并把识别结果以json键值对输出,测试步骤如下所示:</p>,请将当前用户加入到docker用户组,这样不需要sudo就能运行docker命令了。 <ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>在桌面中打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令('''如果是使用脚本自动安装的face_recognition,那么就不需要安装flask了''')</p>|-| <p>orangepi@orangepi:~$ '''python3 sudo usermod -m pip install flask'''</p><p>orangepi@orangepi:~aG docker $ USER'''cd face_recognition/examples'''</p><p>root@orangepi:~/face_recognition/examples$ '''python3 web_service_example.py'''</p>|}<p>* Serving Flask app 'web_service_example' (lazy loading)</p><p>* Environment{| class="wikitable" style="background-color: production</p><p>WARNING#ffffdc;width: This is a development server. Do not use it in a production deployment.</p>800px;" <p>Use a production WSGI server instead.</p><p>* Debug mode: on</p><p>* Running on all addresses (0.0.0.0)</p><p>WARNING: This is a development server. Do not use it in a production deployment.</p><p>* Running on http://127.0.0.1:5001</p><p>* Running on http://192.168.1.79:5001 (Press CTRL+C to quit)</p><p>* Restarting with stat</p><p>* Debugger is active!</p><p>* Debugger PIN: 500|-161-390</p></li><li><p>然后另外打开一个终端,再运行下面的命令就可以返回图片识别的结果(注意,下面的命令执行路径为'''face_recognition/examples''')</p>| <pbig>orangepi@orangepi:~/face_recognition/examples$ '''curl -XPOST -F \注意:需要退出重新登录系统才能生效,重启系统也可以。'''</pbig><p>'''&quot;file=@obama2.jpg&quot; http://127.0.0.1:5001'''</p>|}<p>'''{'''</p><pspan id="home-assistant的安装方法">'''&quot;face_found_in_image&quot;: true,'''</pspan><p>'''&quot;is_picture_of_obama&quot;: true'''</p><p>'''}'''</p></li>== Home Assistant的安装方法 ==<li><p>我们也可以将'''face_recognition/examples/obama2.jpg'''这张图片拷贝到其他的Linux电脑中,当然也可以自己准备一张名为'''obama2.jpg'''的图片,然后在Linux电脑中可以使用下面的命令远程通过开发板运行的服务来识别人脸('''注意命令中的IP地址需要替换为开发板的IP地址,file后的文件名需要替换为想要测试的图片的名字''')</p><p>test@test{| class="wikitable" style="background-color:~$ '''curl -XPOST -F &quot#ffffdc;file=@obama2.jpg&quotwidth:800px; http://192.168.1.79:5001'''</p>" <p>'''{'''</p>|-<p>'''&quot;face_found_in_image&quot;: true,'''</p>| <pbig>'''&quot;is_picture_of_obama&quot;: true注意,这里只会提供在Ubuntu或者Debian系统中安装Home Assistant的方法,Home Assistant详细的使用方法请参考官方文档或者相应的书籍。'''</pbig><p>'''|}'''</p></li><li><p>使用浏览器测试的方法如下所示:</p>=== 通过docker安装 === <ol style="list-style-type: lower-alphadecimal;"><li><p>首先打开浏览器,然后在浏览器的地址栏输入首先请安装好docker,并确保docker能正常运行。docker的安装步骤请参考[[Orange Pi Zero 3#安装Docker的方法|'''开发板的IP地址:5001安装Docker的方法''',然后就能看到下面的页面</p><p>[[File:media/image206.png|575x150px]]一节的说明。</p></li><li><p>然后将obama2.jpg复制到桌面然后可以搜索下Home Assistant的docker镜像</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~/face_recognition/examples$ '''cp obama2.jpg /home/orangepi/Desktop/'''</p></li><li><p>然后在浏览器中选择刚才复制的图片</p><p>[[File:media/image207.png|575x217px]]</p></li><li><p>然后点击'''Uploaddocker search homeassistant'''上传刚才选择的图片进行人脸识别</p><p>[[File:media/image208.png|575x145px]]</p></li><li><p>等待一段时间后就会显示检测的结果</p><p>[[File:media/image209.png|314x149px]]</p></li></ol></li></ol>}
</li>
<li><p>'''face_detection'''命令测试示例然后使用下面的命令下载Home Assistant的docker镜像到本地,镜像大小大概有1GB多,下载时间会比较长,请耐心等待下载完成</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>face_detection命令行工具可以在单张图片或一个图片文件夹中定位人脸位置(输出像素点坐标)。使用'''face_detection &gt; |--help'''可以查看下face_detection命令的帮助信息</p>| <p>orangepi@orangepi:~$ '''face_detection docker pull homeassistant/home--helpassistant'''</p><p>UsageUsing default tag: face_detection [OPTIONS] IMAGE_TO_CHECKlatest</p><p>Optionslatest:<Pulling from homeassistant/p><p>--cpus INTEGER number of CPU cores to use in parallel. home-1 means &quot;use all inassistant</p><p>system&quot;be307f383ecc: Downloading</p><p>--model TEXT Which face detection model to use. Options are &quot;hog&quot; or5fbc4c07ac88: Download complete</p><p>&quot;cnn&quot;'''......(省略部分输出)'''</p><p>--help Show this message and exit.3cc6a1510c9f: Pull complete</p></li><li><p>检测单张图片的示例如下所示:7a4e4d5b979f: Pull complete</p><p>orangepi@orangepiDigest: sha256:~$ '''cd face_recognition/examples'''81d381f5008c082a37da97d8b08dd8b358dae7ecf49e62ce3ef1eeaefc4381bb</p><p>orangepi@orangepiStatus:~Downloaded newer image for homeassistant/face_recognition/examples$ '''face_detection obama2.jpg'''home-assistant:latest</p><p>obama2docker.jpg,302,474,611,164io/homeassistant/home-assistant:latest</p>|}</li><li><p>使用多核并行检测多张图片的示例如下所示:然后可以使用下面的命令查看下刚下载的Home Assistant的docker镜像</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>首先进入'''face_recognition/examples'''文件夹</p></li>|-<li><p>然后新建一个test文件夹</p></li><li><p>然后将jpg图片都拷贝到test文件夹中</p></li><li><p>然后使用所有的cpu并行运行'''face_detection'''来检查test文件夹中的图片,其中'''--cpus &gt; -1'''表示使用所有的cpu</p>| <p>orangepi@orangepi:~$ '''cd face_recognitiondocker images homeassistant/exampleshome-assistant'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''mkdir test'''REPOSITORY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TAG &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMAGE &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATED &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SIZE</p><p>orangepi@orangepi:~homeassistant/face_recognition/examples$ home-assistant &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; latest &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bfa0ab9e1cf5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 months ago &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''cp *<span style="color:#FF0000">1.jpg test'''17GB</p><pspan>orangepi@orangepi:~/face_recognition/examples$ '''face_detection --cpus -1 test'''</p><p>test/obama-240p.jpg,29,261,101,189</p><p>test/obama_small.jpg,65,215,169,112</p><p>test/obama2.jpg,302,474,611,164</p><p>test/two_people.jpg,62,394,211,244</p><p>test/two_people.jpg,95,941,244,792</p><p>test/obama.jpg,136,624,394,366</p><p>test/obama-480p.jpg,65,507,189,383</p><p>test/obama-720p.jpg,94,751,273,572</p><p>test/obama-1080p.jpg,136,1140,394,882</p><p>test/biden.jpg,233,749,542,439</p></li></ol></li></ol>|}
</li>
<li><p>'''face_recognition'''命令测试示例此时就可以运行Home Assistant的docker容器了</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>'''face_recognition'''命令行工具可以在单张图片或者一个图片文件夹中认出是谁的脸。使用'''face_recognition &gt; |--help'''可以查看下face_recognition命令的帮助信息</p>| <p>orangepi@orangepi:~$ '''face_recognition docker run --helpd \'''</p><p>Usage: face_recognition [OPTIONS] KNOWN_PEOPLE_FOLDER IMAGE_TO_CHECK</p><p>Options:</p><p>--cpus INTEGER number of CPU cores to use in parallel (can speed</p><p>up processing lots of images). -1 means &quot;use all in</p><p>system&quot;</p><p>--tolerance FLOAT Tolerance for face comparisons. Default is 0.6.</p><p>Lower this if you get multiple matches for the same</p><p>person.</p><p>--show-distance BOOLEAN Output face distance. Useful for tweaking tolerance</p><p>setting.</p><p>--help Show this message and exit.</p></li><li><p>首先新建一个已知名字的人脸图片文件夹'''known_people''',然后复制两张图片到'''known_people'''中,然后将'''obama2.jpg'''复制为'''unkown.jpg''',也就是我们要识别的图片</p><p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''mkdir known_people'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''cp biden.jpg obama.jpg known_people'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''cp obama2.jpg unkown.jpg'''</p></li><li><p>然后就可以使用下面的命令识别下'''unkown.jpg'''图片中人物的名字,可以看到识别到unkown.jpg图片为obama</p><p>orangepi@orangepi:~/face_recognition/examples$ '''face_recognition known_people --name homeassistant \'''</p><p>'''unkown.jpg'''</p><p>unkown.jpg,obama</p></li><li><p>如果我们识别一张不相关的图片,就会显示unknown_person</p><p>root@orangepi:~/face_recognition/examples$ '''face_recognition known_people \'''</p><p>'''alex-lacamoire.png'''</p><p>alex-lacamoire.png,unknown_person</p></li><li><p>我们还可以新建一个test文件夹,然后在其中放入多张图片,然后就可以使用所有的CPU来并行识别所有的图片</p><p>orangepi@orangepi:~/face_recognition/examples$ '''mkdir testprivileged \'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''cp *.jpg *.png test'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''face_recognition --cpus restart=unless-1 stopped \'''</p>:<p>'''known_people test'''</p><p>test/obama-240p.jpg,obama</p><p>test/alex-lacamoire.png,unknown_person</p><p>test/obama_small.jpg,obama</p><p>test/unkown.jpg,obama</p><p>test/obama2.jpg,obama</p><p>test/lin-manuel-miranda.png,unknown_person</p><p>test/two_people.jpg,biden</p><p>test/two_people.jpg,obama</p><p>test/obama-720p.jpg,obama</p><p>test/obama.jpg,obama</p><p>test/obama-480p.jpg,obama</p><p>test/biden.jpg,biden</p><p>test/obama-1080p.jpg,obama</p></li></ol></li></ol> == 设置中文环境以及安装中文输入法 == '''注意,安装中文输入法前请确保开发板使用的Linux系统为桌面版系统。''' <span ide TZ="debian-系统的安装方法"><Asia/span>=== Debian 系统的安装方法 === <ol style="list-style-type: decimal;"><li><p>首先设置默认Shanghai \'''locale'''为中文</p><ol style="list-style-type: lower-alpha;"><li><p>输入下面的命令可以开始配置'''locale'''<-v /home/p><p>orangepi@orangepi/home-assistant:~$ '''sudo dpkg-reconfigure locales'''</p></li><li><p>然后在弹出的界面中选择'''zh_CN.UTF-8 &gt; UTF-8'''(通过键盘上的上下方向按键来上下移动,通过空格键来选择,最后通过Tab键可以将光标移动到'''&lt;OK&gt;config \''',然后回车即可)</p><p>[[File:media/image210.png|575x296px]]</p></li><li><p>然后设置默认'''locale'''为'''zh_CN.UTF-8-network=host \'''</p><p>[[File:media/image211.png|575x160px]]</p></li><li><p>退出界面后就会开始'''locale'''的设置,命令行显示的输出如下所示<homeassistant/p><p>orangepi@orangepihome-assistant:~$ '''sudo dpkg-reconfigure localeslatest'''</p><p>Generating locales (this might take a while)...</p><p>en_US.UTF-8... done</p><p>zh_CN.UTF-8... done</p><p>Generation complete.</p></li></ol>|}
</li>
<li><p>然后打开'''Input Method'''然后在浏览器中输入【开发板的IP地址:8123】就能看到Home Assistant的界面</p><p>[[File{| class="wikitable" style="background-color:#ffffdc;width:media/image212.png800px;" |-|575x361px]]</p></li><libig><p>然后选择'''OKHome Assistant容器的启动需要一段时间,如果下面的界面没有正常显示,请等待几秒钟再刷新。如果等待一分钟以上还没有正常显示下面的界面说明Home Assistant安装有问题,此时需要去检查前面的安装设置过程是否有问题了。'''</p></big>|}<p>[[File:media/image213zero3-img188.png|295x212px]]</p></li><li><p>然后选择然后输入'''Yes姓名、用户名'''</p><p>[[File:media/image214.png|303x192px]]</p></li><li><p>然后选择'''fcitx密码'''</p><p>[[File:media/image215.png|307x220px]]</p></li><li><p>然后选择再点击'''OK创建账号'''</p><p>[[File:media/image216zero3-img189.png|305x216px]]</p></li><li><p>'''然后重启Linux系统才能使配置生效'''</p></li><li><p>然后打开'''Fcitx configuration'''然后按照界面提示根据自己的喜好设置,再点击下一步</p><p>[[File:media/image217zero3-img190.png|575x376px]]</p></li><li><p>然后点击下图所示位置的'''+'''号然后点击下一步</p><p>[[File:media/image218zero3-img191.png|280x187px]]</p></li><li><p>然后搜索'''Google Pinyin'''再点击'''OK'''然后点击完成</p><p>[[File:media/image219zero3-img192.png|291x196px]]</p></li><li><p>然后将'''Google Pinyin'''放到最前面</p><p>[[File:media/image220.png|299x202px]]Home Assistant最终显示的主界面如下图所示</p><p>[[File:media/image221zero3-img193.png|300x202px]]</p></li><li><p>然后打开'''Geany'''这个编辑器测试下中文输入法停止Home Assistant容器的方法</p><p>[[Fileol style="list-style-type:media/image222.png|349x212px]]</p></lilower-alpha;"><li><p>中文输入法测试如下所示查看docker容器的命令如下所示</p><p>[[File{| class="wikitable" style="width:media/image223.png800px;" |-|575x325px]]</p></li><li><p>通过orangepi@orangepi:~$ '''Ctrl+Spacedocker ps -a'''快捷键可以切换中英文输入法</p>|}</li><li><p>如果需要整个系统都显示为中文,可以将'''/etc/default/locale'''中的变量都设置为'''zh_CN.UTF-8'''停止Home Assistant容器的命令如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo vim /etc/default/localedocker stop homeassistant'''</p>|}<p/li># File generated by update-locale</pli><p>LC_MESSAGES='''zh_CN.UTF-8'''删除Home Assistant容器的命令如下所示</p><p>LANG{| class="wikitable" style='''zh_CN.UTF"width:800px;" |-8'''</p>| <p>LANGUAGE=orangepi@orangepi:~$ '''zh_CN.UTF-8docker rm homeassistant'''</p>|}</li><li><p>然后'''重启系统'''就能看到系统显示为中文了</pol><p>[[File:media/image224.png|576x356px]]</p></li></ol> === 通过python安装 ===
<span id{| class="wikitable" style="ubuntubackground-20.04系统的安装方法color:#ffffdc;width:800px;"|-| <big>'''安装前请先更换下pip的源为国内源,加快Python包的安装速度,配置方法见[[Orange Pi Zero 3#Python更换pip源的方法|'''Python更换pip源的方法''']]一节的说明。'''</spanbig>=== Ubuntu 20.04系统的安装方法 ===|}
<ol style="list-style-type: decimal;">
<li><p>首先打开'''Language Support'''首先安装依赖包</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media/image225.png|575x351px]]~$ '''sudo apt-get update'''</p></li><li><p>然后找到orangepi@orangepi:~$ '''汉语(中国)sudo apt-get install -y python3 python3-dev python3-venv \'''选项</p><p>[[File:media/image226.png|318x311px]]'''python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</p></li><li><p>然后请使用鼠标左键选中'''汉语(中国)libopenjp2-7 libtiff5 libturbojpeg0-dev tzdata'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <pbig>[[File:media/image227.png|324x320px]]</p>'''如果是debian12请使用下面的命令:'''</lip></olbig>
'''注意,这一步不是很好拖动的,请耐心多试几次。''' <ol start="4" style="list-style-type: decimal;"><li><p>然后选择orangepi@orangepi:~$ '''Apply Systemsudo apt-Wideget update'''将中文设置应用到整个系统</p><p>[[Fileorangepi@orangepi:media/image228.png|321x316px]]</p></li><li><p>然后设置~$ '''Keyboard input method system'''为'''fcitxsudo apt-get install -y python3 python3-dev python3-venv \'''</p><p>[[File:media/image229.png|327x320px]]</p></li><li><p>'''然后重启Linux系统使配置生效python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \'''</p></li><li><p>重新进入系统后,在下面的界面请选择'''不要再次询问我libopenjp2-7 libturbojpeg0-dev tzdata''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[File:media/image230.png|303x247px]]</p>}</li><li><p>然后可以看到桌面都显示为中文了</p><p>然后需要编译安装Python3.9,方法请参考[[File:media/image231.pngOrange Pi Zero 3#Python源码编译安装的方法|575x383px'''Python源码编译安装的方法''']]一节</p></li>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <libig><p>然后我们可以打开'''GeanyDebian Bullseye默认的Python版本就是Python3.9,所以无需编译安装。'''测试下中文输入法,打开方式如下图所示</p><p>[[File:media/image232'''Ubuntu Jammy默认的Python版本就是Python3.png|576x292px]]10,所以也无需编译安装。'''</p></li><li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过''Debian Bookworm默认的Python版本就是Python3.11,所以也无需编译安装。'Ctrl+Space'''快捷键来切换成中文输入法,然后就能输入中文了</p><p/big>[[File:media/image233.png|575x308px]]}</pli></li><p>然后创建Python虚拟环境</olp<span id{| class="ubuntu-22.04系统的安装方法wikitable"></span>=== Ubuntu 22.04系统的安装方法 === <ol style="listbackground-style-typecolor:#ffffdc;width: decimal800px;">|-| <libig><p>首先打开'''Language SupportDebian Bookworm中是python3.11,请记得替换对应的命令。'''</p><p/big>[[File|}{| class="wikitable" style="width:media/image225.png800px;" |-|575x351px]]</p></li><li><p>然后找到orangepi@orangepi:~$ '''汉语(中国)sudo mkdir /srv/homeassistant'''选项</p><p>[[Fileorangepi@orangepi:~$ '''sudo chown orangepi:mediaorangepi /image234.png|249x242px]]srv/homeassistant'''</p></li><li><p>然后请使用鼠标左键选中orangepi@orangepi:~$ '''汉语(中国)cd /srv/homeassistant'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p><p>[[Fileorangepi@orangepi:media/image235.png|267x262px]]</p></li></ol> ~$ '''注意,这一步不是很好拖动的,请耐心多试几次。python3.9 -m venv .''' <ol start="4" style="list-style-type: decimal;"/p><li><p>然后选择orangepi@orangepi:~$ '''Apply System-Widesource bin/activate'''将中文设置应用到整个系统</p><p>[[File(homeassistant) orangepi@orangepi:media/image236.png|287x282px]]srv/homeassistant$</p>|}</li><li><p>'''然后重启Linux系统使配置生效'''然后安装需要的Python包</p></li><li>{| class="wikitable" style="width:800px;" |-| <p>重新进入系统后,在下面的界面请选择(homeassistant) orangepi@orangepi:/srv/homeassistant$ '''不要再次询问我python3 -m pip install wheel''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[File:media/image230.png|303x247px]]</p>}</li><li><p>然后可以看到桌面都显示为中文了然后就可以安装Home Assistant Core</p><p>[[File{| class="wikitable" style="width:media/image231.png800px;" |575x383px]]</p></li>-<li><p>然后打开Fcitx5配置程序</p>| <p>[[File(homeassistant) orangepi@orangepi:media/image237.png|575x349px]]srv/homeassistant$ '''pip3 install homeassistant'''</p>|}</li><li><p>然后选择使用拼音输入法然后输入下面的命令就可以运行Home Assistant Core</p><p>[[File{| class="wikitable" style="width:media/image238.png800px;" |338x267px]]</p></li>-<li><p>选择后的界面如下所示,再点击确定即可</p>| <p>[[File(homeassistant) orangepi@orangepi:media/image239.png|366x290px]]srv/homeassistant$ '''hass'''</p>|}</li><li><p>然后我们可以打开然后在浏览器中输入【'''Geany开发板的IP地址:8123'''测试下中文输入法,打开方式如下图所示】就能看到Home Assistant的界面</p><p>[[File{| class="wikitable" style="background-color:#ffffdc;width:media/image232.png800px;" |-|576x292px]]</p></li><libig><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过'''Ctrl+Space第一次运行hass命令时,会下载安装和缓存一些运行必须的库和依赖包。这个过程可能会花费几分钟的时间。注意,此时在浏览器中是无法看到Home Assistant的界面的,请等待一段时间后再刷新下。'''快捷键来切换成中文输入法,然后就能输入中文了</p></big>|}<p>[[File:media/image240zero3-img194.png|434x308px]]</p></li></ol>
<span id="远程登录linux系统桌面的方法opencv的安装方法"></span>== 远程登录Linux系统桌面的方法 ==
<span id="使用nomachine远程登录"></span>=== 使用NoMachine远程登录 =OpenCV的安装方法 ==
'''请确保开发板安装的Ubuntu或者Debian系统为桌面版本的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:''' '''https:/<span id="使用apt来安装opencv"></knowledgebase.nomachine.com/DT10R00166''' '''NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。'''span>'''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。'''=== 使用apt来安装OpenCV ===
<ol style="list-style-type: decimal;">
<li><p>首先下载NoMachine软件Linux 安装命令如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt-get update'''</p><p>orangepi@orangepi:~$ '''arm64sudo apt-get install -y libopencv-dev python3-opencv''' deb版本的安装包,然后安装到开发板的Linux系统中</p>|}</li><li><p>然后使用下面的命令打印OpenCV的版本号输出正常,说明OpenCV安装成功</p><ol style="list-style-type: lower-alpha;"><li>由于H618是ARMv8架构的SOC,我们使用的系统为Ubuntu或者Debian,所以这里需要下载<p>Ubuntu22.04中OpenCV的版本如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''NoMachine python3 -c &gtquot;import cv2; print(cv2.__version__)&quot;'''</p><p>'''4.5.4'''</p>|}</li><li><p>Ubuntu20.04中OpenCV的版本如下所示:</p>{| class="wikitable" style="width:800px; for ARM ARMv8 DEB" |-| <p>orangepi@orangepi:~$ '''安装包,下载链接如下所示:python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''</p><p>'''4.2.0'''</p>|}</li><li><p>Debian11中OpenCV的版本如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''</p><p>'''4.5.1'''</p>|}</li><li><p>Debian12中OpenCV的版本如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 -c &quot;import cv2; print(cv2.__version__)&quot;'''</p><p>'''4.6.0'''</p>|}</li></ol>
</li></ol>
'''注意,这个下载链接可能会变,请认准Armv8<span id="宝塔linux面板的安装方法"></Arm64版本的deb包。'''span>
[https://www.nomachine.com/download/download&id=112&s=ARM '''https://downloads.nomachine.com/download/?id宝塔Linux面板的安装方法 =118&amp;distro=ARM''']
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能(摘抄自[[Filehttps:media/image241/www.bt.pngcn/ 宝塔官网])'''</big>|575x227px]]}
<ol start="2" style="list-style-type: lower-alphadecimal;"><li><p>另外在首先需要扩展下'''官方工具/tmp'''中也可以下载到空间的大小,设置完后需要'''NoMachine<span style="color:#FF0000">重启下开发板的linux系统</span>'''的安装包,命令如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media~$ '''sudo sed -i 's/nosuid/image242.png|70x86px]]&amp;,size=2G/' /etc/fstab'''</p><p>先进入orangepi@orangepi:~$ '''远程登录软件-NoMachinesudo reboot'''文件夹</p>|}</li><li><p>[[File:media重启后,可以看到'''/image243.png|256x46px]]tmp'''空间的大小变为2G了</p>{| class="wikitable" style="width:800px;" |-| <p>然后下载arm64版本的deb安装包orangepi@orangepi:~$ '''df -h | grep &quot;/tmp&quot;'''</p><p>[[Filetmpfs 2.0G 12K '''<span style="color:media#FF0000">2.0G</image244.png|180x109px]]span>''' 1% /tmp</p>|}</li><li><p>然后将下载的然后在linux系统中输入下面的命令就可以开始宝塔的安装</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''nomachine_x.x.x_x_arm64sudo install_bt_panel.debsh'''上传到开发板的Linux系统中</p>|}</li><li><p>然后使用下面的命令在开发板的Linux系统中安装然后宝塔安装程序会提醒是否安装'''Bt-Panel'''到'''/www''NoMachine'文件夹,此时输入'''y'''即可</p>{| class="wikitable" style="width:800px;" |-| <p>+----------------------------------------------------------------------</p><p>| Bt-WebPanel FOR CentOS/Ubuntu/Debian</p><p>+----------------------------------------------------------------------</p><p>orangepi@orangepi| Copyright © 2015-2099 BT-SOFT(http:~$ '''sudo dpkg -i nomachine_x//www.xbt.x_x_arm64_arm64cn) All rights reserved.deb'''</p><p>+----------------------------------------------------------------------</p><p>| The WebPanel URL will be http:/li/SERVER_IP:8888 when installed.</p><p>+----------------------------------------------------------------------</olp>
<!-- -->
<ol start="2" style="list-style-type: decimal;">
<li>然后下载NoMachine软件Windows版本的安装包,下载地址如下所示</li></ol>
<p>Do you want to install Bt-Panel to the /www directory now?(y/n): '''注意,这个下载链接可能会变。<span style="color:#FF0000">y</span>'''</p>|}</li><li><p>然后要做的就是耐心等待,当看到终端输出下面的打印信息时,说明宝塔已经安装完成,整个安装过程大约耗时34分钟,根据网络速度的不同可能会有一些差别</p><p>[[File:zero3-img195.png]]</p></li><li><p>此时在浏览器中输入上面显示的'''面板地址'''就可以打开宝塔Linux面板的登录界面,然后在对应的位置输入上图显示的'''username'''和'''password'''就可以登录进宝塔<br />[[File:zero3-img196.png]]</p></li><li><p>成功登录宝塔后的会弹出下面的欢迎界面,首先请将中间的用户须知阅读完拖到最下面,然后就可以选择”我已同意并阅读《用户协议》“,接着点击”进入面板”就可以进入宝塔了</p><p>[[File:zero3-img197.png|1200px]]</p></li><li><p>进入宝塔后首先会提示需要绑定宝塔官网的账号,如果没有账号可以去宝塔的官网('''https://www.bt.cn''')注册一个</p><p>[[File:zero3-img198.png]]</p></li><li><p>最终显示的界面如下图所示,可以很直观的看到开发板Linux系统的一些状态信息,比如负载状态、CPU的使用率、内存使用率和存储空间的使用情况等</p><p>[[File:zero3-img199.png|1200px]]</p></li><li><p>宝塔的更多功能可以参考下面资料自行探索</p>{| class="wikitable" style="width:800px;" |-| <p>使用手册:[http://docs.bt.cn '''http://docs.bt.cn''']</p><p>论坛地址:[https://www.bt.cn/bbs '''https://www.bt.cn/bbs''']</p><p>GitHub链接:'''https://github.com/aaPanel/BaoTa'''</p>|}</li></ol>
'''https://downloads.nomachine.com/download/?id=9'''= face_recognition人脸识别库的安装和测试方法 ==
[[File{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,此小节的内容都是在<span style="color:media#FF0000">桌面版本</image245.png|575x163px]]span>的Linux系统中测试的,所以请确保开发板使用的系统为桌面版本的系统。'''
'''另外下面的安装测试都是在<ol start="3" span style="list-style-typecolor: decimal;#FF0000"><li><p>然后在Windows中安装NoMachine,'''安装完后请重启下电脑'''</p>orangepi</lispan><li><p>然后在Window中打开'用户下进行的,请保持环境一致。''NoMachine'''</p><p>[[File:media/image246.png|76x66px]]</p></li><li><p>NoMachine启动后会自动扫描局域网内其他安装有NoMachine的设备,进入NoMachine的主界面后就可以看到开发板已经在可连接的设备列表里了,然后点击下图红色方框所示的位置即可开始登录开发板的Linux系统桌面</p><p>[[File:media/image247.png|321x92px]]</p></li><li><p>然后点击'''OK'''</p><p>[[File:media/image248.png|318x217px]]</p></li><li><p>然后在下图对应的位置输入开发板Linux系统的用户名和密码,再点击'''OK'''开始登陆</p><p>[[File:media/image249.png|303x204px]]</p></li><li><p>然后在接下来的界面中都点击OK</p></li><li><p>最后就能看到开发板Linux系统的桌面了</p><p>[[File:media/image250.png|411x246px]]</p></li></ol>
<span id="使用vnc远程登录"></span>
=== 使用VNC远程登录 ===
'''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。Debian12目前没有适配。'''</big>|}
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''Ubuntu20.04测试VNC很多问题,请不要使用这种方法。face_recognition源码仓库的地址为:'''
<ol style="list-style-type: decimal;"><li><p>首先运行'''set_vnc.sh'''脚本设置下vnc,'''记得加sudo权限'''<https:/p><p>orangepi@orangepi:~$ '''sudo set_vnc.sh'''</p><p>You will require a password to access your desktopsgithub.</p><p>Password: '''#在这里设置vnc的密码,8位字符'''</p><p>Verify: '''#在这里设置vnc的密码,8位字符'''</p><p>Would you like to enter a view-only password (y/n)? '''n'''</p><p>xauth: file com/root/.Xauthority does not exist<ageitgey/p><p>New face_recognition'X' desktop is orangepi:1</p><p>Creating default startup script /root/.vnc/xstartup</p><p>Starting applications specified in /root/.vnc/xstartup</p><p>Log file is /root/.vnc/orangepi:1.log</p><p>Killing Xtightvnc process ID 3047</p><p>New 'X' desktop is orangepi:1</p><p>Starting applications specified in /root/.vnc/xstartup</p><p>Log file is /root/.vnc/orangepi:1.log</p></li><li><p>使用MobaXterm软件连接开发板linux系统桌面的步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li>首先点击Session,然后选择VNC,再填写开发板的IP地址和端口,最后点击OK确认</li></ol></li></ol>
[[File:media/image251.png|421x300px]]'''face_recognition中文版本的说明文档为:'''
<ol start="2" style="list-style-type'''https: lower-alpha;"><li><p>然后输入前面设置的VNC的密码</p><p>[[File:media/image252github.png|221x105px]]<com/ageitgey/p><face_recognition/li><li><p>登录成功后的界面显示如下图所示,然后就可以远程操作开发板linux系统的桌面了<blob/p><master/li>README_Simplified_Chinese.md'''</olbig>|}
[[File:media/image253.png|405x293px]] <span id="qt的安装方法"></span>== QT的安装方法 使用脚本自动安装face_recognition的方法 ===
<ol style="list-style-type: decimal;">
<li><p>使用下面的脚本可以安装QT5和QT Creator</p><p>orangepi@orangepi:~$ 首先在桌面中打开一个终端,然后下载'''install_qtface_recognition_install.sh'''</p></li><li><p>安装完后会自动打印QT的版本号</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>Ubuntu20.04自带的qt版本为'''5.12.8'''</p>|-| <p>orangepi@orangepi:~/Desktop$ '''install_qt.shwget \'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''5https://gitee.12.8''' in com/usrleeboby/lib/aarch64-linux-gnu<face_recognition_install/p><raw/li><li><p>Ubuntu22.04自带的QT版本为'''5.15.3'''<master/p><p>orangepi@orangepi:~$ '''install_qtface_recognition_install.sh'''</p><p>......</p><p>QMake version 3.1</p>|}<p>Using Qt version '''5.15.3''' in /usr/lib/aarch64-linux-gnu</p></li><li><p>Debian11自带的QT版本为然后执行下面的命令开始安装'''5.15.2face_recognition'''</p><p>orangepi@orangepi{| class="wikitable" style="width:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p>800px;" <p>Using Qt version '''5.15.2''' in /usr/lib/aarch64|-linux-gnu</p></li><li><p>Debian12自带的QT版本为'''5.15.8'''</p>| <p>orangepi@orangepi:~/Desktop$ '''install_qtbash face_recognition_install.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''5.15.8''' in /usr/lib/aarch64-linux-gnu</p></li></ol>|}
</li>
<li><p>然后在'''Applications'''中就可以看到QT Creator的启动图标face_recognition安装完后会自动下载face_recognition的源码,然后自动运行face_recognition中的一些示例,如果最后能看到桌面上弹出了下面的这些图片就说明face_recognition安装测试成功了</p><p>[[File:media/image254.png|576x270px]]</p><p>也可以使用下面的命令打开QT Creator</p><p>orangepi@orangepi:~$ '''qtcreator'''</p></li><li><p>QT Creator打开后的界面如下所示</p><p>[[File:media/image255.png|576x342px]]</p></li><li><p>QT Creator的版本如下所示</p><ol style="list-style-type: lowerzero3-alpha;"><li><p>QT Creator在'''Ubuntu20.04'''中的默认版本如下所示</p><p>[[File:media/image256.png|419x224px]]</p></li><li><p>QT Creator在'''Ubuntu22.04'''中的默认版本如下所示</p><p>[[File:media/image257.png|443x237px]]</p></li><li><p>QT Creator在'''Debian11'''中的默认版本如下所示</p><p>[[File:media/image258.png|444x238px]]</p></li><li><p>QT Creator在'''Debian12'''中的默认版本如下所示</p><p>[[File:media/image259.png|449x277px]]</p></li></ol></li><li><p>然后设置下QT</p><ol style="list-style-type: lower-alpha;"><li><p>首先打开'''Help'''-&gt;'''About Plugins...'''</p><p>[[File:media/image260.png|573x164px]]</p></li><li><p>然后去掉'''ClangCodeModel'''的那个勾</p><p>[[File:media/image261.png|408x254px]]</p></li><li><p>'''设置完后需要重启下QT Creator'''</p></li><li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p><p>'''Debian12请跳过这步。'''</p><p>[[File:media/image262.png|576x315px]]</p><p>[[File:media/image263.png|575x307px]]</p></li></ol></li><li><p>然后就可以打开一个示例代码</p><p>[[File:media/image264img200.png|575x312px]]</p></li><li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p><p>[[File:media/image265.png|576x218px]]</p></li><li><p>然后点击下'''Configure Project'''</p><p>[[File:media/image266.png|575x304px]]</p></li><li><p>然后点击左下角的绿色三角形编译运行下示例代码</p><p>[[File:media/image267.png|575x312px]]</p></li><li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p><p>[[File:media/image268.png|576x308px]]</p></li><li><p>参考资料</p><p>[https://wiki.qt.io/Install_Qt_5_on_Ubuntu '''https://wiki.qt.io/Install_Qt_5_on_Ubuntu''']</p><p>[https://download.qt.io/archive/qtcreator '''https://download.qt.io/archive/qtcreator''']</p><p>[https://download.qt.io/archive/qt '''https://download.qt.io/archive/qt''']</p></li></ol>
<span id="ros安装方法"></span>== ROS安装方法 手动安装face_recognition的方法 ===
<span idol style="ubuntu20list-style-type: decimal;"><li><p>首先新建'''~/.pip'''目录,再添加'''pip.conf'''配置文件,并在其中设置pip的镜像源为清华源,需要执行的命令如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''mkdir -p ~/.pip'''</p><p>orangepi@orangepi:~$ '''cat &lt;&lt;EOF &gt; ~/.pip/pip.04安装rosconf'''</p><p>'''[global]'''</p><p>'''timeout = 6000'''</p><p>'''index-1url = https://pypi.tuna.tsinghua.edu.cn/simple'''</p><p>'''trusted-noetic的方法host = pypi.tuna.tsinghua.edu.cn'''</p><p>'''EOF'''</p>|}</li><li><p>然后安装依赖包</p>{| class="wikitable" style="width:800px;"|-| <p>orangepi@orangepi:~$ '''sudo apt update'''</p><p>orangepi@orangepi:~$ '''sudo apt install -y python3-pip libopencv-dev \'''</p><p>'''python3-opencv imagemagick python3-scipy python3-setuptools python3-wheel \'''</p><p>'''python3-dev cmake python3-testresources'''</p>|}</li><li><p>然后更新下pip3</spanp>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 -m pip install -U pip setuptools wheel'''</p>|}</li><li><p>安装'''face_recognition'''前首先需要安装下'''dlib'''这个库,由于dlib这个库在开发板上编译安装比较慢,所以我在'''gitee'''上保存了一份编译好的dlib whl文件,下载后直接安装就可以了。dlib whl文件下载地址如下所示:</p>{| class="wikitable" style= Ubuntu20"width:800px;" |-| <p>'''https://gitee.04安装ROS 1 Noetic的方法 com/leeboby/python_whl'''</p>|}<ol style="list-style-type: lower-alpha;"><li><p>首先将python_whl仓库下载到开发板的Linux系统中</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''git clone --depth=1 https://gitee.com/leeboby/python_whl'''</p>|}# ROS 1当前活跃的版本如下所示,推荐版本为</li><li><p>在python_whl文件夹中可以看到有多个版本的dlib安装包'''Noetic Ninjemys'''dlib不同版本对应的Linux系统如下所示:</p></li>
[[File{| class="wikitable" style="width:media/image269.png800px;" |345x235px]]-| style="text-align: left;"| '''Ubuntu20.04'''[[File| style="text-align:media/image270left;"| '''dlib-19.24.0-cp38-cp38-linux_aarch64.pngwhl'''|576x210px]]- [http| style="text-align://docsleft;"| '''Ubuntu22.ros.org/ 04'''http| style="text-align://docsleft;"| '''dlib-19.24.ros0-cp310-cp310-linux_aarch64.orgwhl''']|-| style="text-align: left;"| '''Debian11'''https| style="text-align://wikileft;"| '''dlib-19.24.ros0-cp39-cp39-linux_aarch64.org/Distributionswhl'''|}</ol><ol start="23" style="list-style-type: decimallower-alpha;"><li><p>然后就可以开始安装dlib,命令如下所示</p><ol style="list-style-type: none;"><li><p>ROS 1 a) Ubuntu20.04</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''Noetic Ninjemyscd python_whl'''官方安装文档链接如下所示:</p><p>[httporangepi@orangepi:~//wiki.ros.org/noetic/Installation/Ubuntu python_whl$ '''http://wikipython3 -m pip install dlib-19.24.ros0-cp38-cp38-linux_aarch64.org/noetic/Installation/Ubuntuwhl''']</p>|}</li><li><p>ROS b) Ubuntu22.04</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''Noetic Ninjemyscd python_whl'''官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为</p><p>orangepi@orangepi:~/python_whl$ '''Ubuntu20python3 -m pip install dlib-19.24.0-cp310-cp310-linux_aarch64.04桌面版系统whl'''</p>|}</li><li><p>c) Debian11</p>{| class="wikitable" style="width:800px;" |-| <p>[httporangepi@orangepi://wiki.ros.org/noetic/Installation ~$ '''http://wiki.ros.org/noetic/Installationcd python_whl''']</p><p>[[Fileorangepi@orangepi:media~/image271python_whl$ '''python3 -m pip install dlib-19.24.png0-cp39-cp39-linux_aarch64.whl'''</p>|312x176px]]}</pli></ol></li><li><p>然后使用下面的脚本安装ros1安装完后如果使用下面的命令能正常打印dlib的版本号,就说明dlib安装正确</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~/python_whl$ '''install_rospython3 -c &quot;import dlib; print(dlib.sh ros1__version__)&quot;'''</p><p>'''19.24.0'''</lip>|}</li><p>使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件</pol></li></ol><!-- --><ol start="5" style="list-style-type: decimal;"><li><p>然后安装下'''注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。face_recognition_models-0.3.0-py2.py3-none-any.whl'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~/python_whl$ '''install_rospython3 -m pip install face_recognition_models-0.sh脚本会尝试修改/etc/hosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros3.0-py2.py3-none-any.sh安装完ros1后有提示下面的错误,请自己想其它办法让开发板的linux系统能正常访问github,然后再手动运行下面的命令。whl'''</p>|}</li><li><p>然后安装'''https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yamlface_recognition'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yamlpython3 -m pip install face_recognition'''</p>|}</li><li><p>然后'''ERROR: error loading sources list<span style="color:#FF0000">需要重新打开一个终端</span>''',才能找到并运行''' face_detection'''The read operation timed out''' orangepi@orangepi:~$ face_recognition'''source 这两个命令</optp><ol style="list-style-type: lower-alpha;"><li><p>face_recognition命令用来在单张图片或一个图片文件夹中识别是谁的脸</rosp></noeticli><li><p>face_detection命令用来在单张图片或一个图片文件夹中定位人脸的位置</setup.bash'''p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo rosdep initwhich face_detection'''</p> Wrote <p>/etcusr/roslocal/rosdepbin/sources.list.dface_detection</20-default.list Recommended: please run rosdep updatep><p>orangepi@orangepi:~$ '''rosdep updatewhich face_recognition'''</p> reading in sources list data from <p>/usr/etclocal/rosbin/rosdepface_recognition</sources.list.dp>|}</li></ol>
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml如果重新打开终端找不到上面的两个命令,请试下手动导入环境变量,然后再测试下。
Hit https{| class="wikitable" style="width:800px;" |-| orangepi@orangepi:~$ '''export PATH=/home/orangepi/raw.githubusercontent.comlocal/rosbin:$PATH'''|}</rosdistroli></master/rosdep/base.yamlol>
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml=== face_recognition的测试方法 ===
Hit https{| class="wikitable" style="background-color://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml#ffffdc;width:800px;" |-| Hit https:<big>'''注意,下面的操作都是在桌面中演示的,所以首先请连接好HDMI显示器,或者使用NoMachine/VNC远程登录Linux桌面来测试。'''</raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yamlbig>|}
Query rosdistro index <ol style="list-style-type: decimal;"><li><p>在'''face_recognition'''的源码中有一些示例代码,我们可以直接用来测试,face_recognition源码的下载地址如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>GitHub官方的下载地址</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''git clone https://github.com/ageitgey/face_recognition.git'''</p>|}</li><li><p>Gitee镜像下载地址</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''git clone [https://github.com/ageitgey/face_recognition https://gitee.com/leeboby/face_recognition.git]'''</p>|}</li></ol></li><li><p>face_recognition示例代码的路径如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>'''face_recognition/examples'''</p>|}</li><li><p>face_recognition的中文说明文档链接如下所示,使用face_recognition前请仔细阅读下</p>{| class="wikitable" style="width:800px;" |-| <p>[https://rawgithub.githubusercontentcom/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md '''https://github.com/rosageitgey/rosdistroface_recognition/blob/master/index-v4README_Simplified_Chinese.yamlmd''']</p>|}</li>Skip end<li><p>'''find_faces_in_picture.py'''用来在图片中定位人脸的位置,测试步骤如下所示</p><ol style="list-style-oftype: lower-life distro &quotalpha;ardent&quot"><li><p>在桌面中打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 find_faces_in_picture.py'''</p><p>'''I found 1 face(s) in this photograph.'''</p><p>'''A face is located at pixel location Top: 241, Left: 419, Bottom: 562, Right: 740'''</p>|}Skip end</li><li><p>等待一段时间会弹出下面的图片,这就是在测试图片中定位到的人脸</p><p>[[File:zero3-of-life distro &quot;bouncy&quot;img201.png]]</p></li></ol></li><li><p>'''find_facial_features_in_picture.py'''用来识别单张图片中人脸的关键点,测试步骤如下所示</p>Skip end<ol style="list-ofstyle-type: lower-life distro &quotalpha;crystal&quot"><li><p>在桌面中打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令</p>{| class="wikitable" style="width:800px;" |-Skip end| <p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 find_facial_features_in_picture.py'''</p>|}</li><li><p>等待一段时间会弹出下面的图片,可以看到将人脸轮廓都标注出来了</p><p>[[File:zero3-of-life distro &quot;dashing&quot;img202.png]]</p></li></ol></li><li><p>'''identify_and_draw_boxes_on_faces.py'''用来识别人脸并使用方框标注,测试步骤如下所示</p>Skip end<ol style="list-style-oftype: lower-life distro &quotalpha;eloquent&quot"><li><p>在桌面中打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令</p>{| class="wikitable" style="width:800px;" |-Add distro &quot;foxy&quot;| <p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 identify_and_draw_boxes_on_faces.py'''</p>|}Add distro &quot;galactic&quot;</li><li><p>等待一段时间会弹出下面的图片,可以看到将图片中的人脸都使用方框标注出来了,并且正确显示了人物的名字</p>Skip end<p>[[File:zero3-ofimg203.png]]</p></li></ol></li><li><p>'''face_distance.py'''用来在不同精度上比较两个人脸是否属于一个人,首先打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令就可以看到测试的输出结果</p>{| class="wikitable" style="width:800px;" |-life distro &quot;groovy&quot;| Add distro &quot;humble&quot;<p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 face_distance.py'''</p>Skip end-<p>'''The test image has a distance of-life distro &quot;hydro&quot;0.35 from known image #0'''</p>Skip end<p>'''-With a normal cutoff of-life distro &quot;indigo&quot;0.6, would the test image match the known image? True'''</p>Skip end<p>'''-With a very strict cutoff of-life distro &quot;jade&quot;0.5, would the test image match the known image? True'''</p>
Skip end-of-life distro &quot;kinetic&quot;
Skip end<p>'''The test image has a distance of 0.82 from known image #1'''</p><p>'''-With a normal cutoff of0.6, would the test image match the known image? False'''</p><p>'''-life distro &quotWith a very strict cutoff of 0.5, would the test image match the known image? False'''</p>|}</li><li><p>'''recognize_faces_in_pictures.py'''用来识别未知图片中的人脸是谁。首先打开一个终端,然后进入'''face_recognition/examples'''目录,再执行下面的命令,等待一端时间后就能看到测试结果</p>{| class="wikitable" style="width:800px;lunar&quot" |-| <p>orangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 recognize_faces_in_pictures.py'''</p><p>'''Is the unknown face a picture of Biden? False'''</p><p>'''Is the unknown face a picture of Obama? True'''</p><p>'''Is the unknown face a new person that we've never seen before? False'''</p>|}</li><li><p>'''facerec_from_webcam_faster.py'''用来识别USB摄像头中的人脸,测试步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>首先请将USB摄像头插入开发板的USB接口中,然后通过'''v4l2-ctl'''('''<span style="color:#FF0000">注意v4l2中的l是小写字母l,不是数字1</span>''')命令查看下USB摄像头的设备节点的序号</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt update'''</p><p>orangepi@orangepi:~$ '''sudo apt install -y v4l-utils'''</p><p>orangepi@orangepi:~$ '''v4l2-ctl --list-devices'''</p><p>cedrus (platform:cedrus):</p>::<p>/dev/video0</p>
Add distro &quot;melodic&quot;
Add distro &quot;noetic&quot;<p>USB2.0 UVC PC Camera: USB2.0 UV (usb-5311000.usb-1):</p> Add distro &quot;rolling&quot; updated cache in ::<p>'''<span style="color:#FF0000">/dev/video1</homespan>'''</orangepip>::<p>/.rosdev/rosdepvideo2</sources.cachep>|}<ol start="6" style="list-style-type: decimal;"/li><li><p>然后在然后在桌面中打开一个终端,进入'''face_recognition/examples'''目录后,首先修改下'''facerec_from_webcam_faster.py'''中使用的摄像头的设备序号。比如上面通过'''v4l2-ctl --list-devices'''命令查看到USB摄像头为'桌面''/dev/video1'''中打开一个命令行终端窗口,再使用,那就修改'''test_roscv2.shVideoCapture(0)'''中的'''0'''为'''<span style="color:#FF0000">1</span>'''脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''test_ros.shcd face_recognition/examples'''</p></li><li><p>运行完orangepi@orangepi:~/face_recognition/examples$ '''test_rosvim facerec_from_webcam_faster.shpy'''脚本后,会弹出下图所示的一个小海龟</p><p>[[File'''video_capture = cv2.VideoCapture(<span style="color:media#FF0000">1</image272.png|575x291px]]span>)'''</p>|}</li><li><p>然后请保持刚才打开终端窗口在最上面然后执行下面的命令运行'''facerec_from_webcam_faster.py'''</p></li></ol> [[File:media/image273.png{|575x269px]] <ol startclass="9wikitable" style="list-style-typewidth: decimal800px;"|-| <p>orangepi@orangepi:~/face_recognition/examples$ '''python3 facerec_from_webcam_faster.py'''</p>|}</li><li><p>此时按下键盘上的方向按键就可以控制小海龟上下左右移动了等待一段时间会弹出摄像头的显示画面</p><p>[[File:media/image274zero3-img204.png|575x250px]]</p></li></olli> <span id="ubuntu20.04安装ros-2-galactic的方法"p>此时可以将摄像头对准自己,当摄像头检测到人脸时,会将检测到的人脸使用方框框起来。'''注意,检测人脸时,摄像头显示的画面会比较卡顿,请不要移动过快'''</spanp>=== Ubuntu20.04安装ROS 2 Galactic的方法 === <ol style="list-style-type: decimal;"/li><li><p>ROS 2当前活跃的版本如下所示,推荐版本为还可以打开一张奥巴马的图片,然后使用摄像头对准打开的图片,可以看到不仅能将人脸标注出来,还能正确显示检测到的人脸的名字。'''Galactic Geochelone注意,检测人脸时,摄像头显示的画面会比较卡顿,请不要移动过快'''</p><p>[[File:media/image275zero3-img205.png|576x271px]]</p><p/li>[[File:media</image276.png|575x265px]]ol></pli><li><p>[http://docs.ros.org/ '''http://docs.rosweb_service_example.orgpy''']是一个非常简单的使用Web服务上传图片运行人脸识别的案例,后端服务器会识别这张图片是不是奥巴马,并把识别结果以json键值对输出,测试步骤如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>在桌面中打开一个终端,然后进入'''http:face_recognition//docs.ros.org/en/galactic/Releases.htmlexamples'''目录,再执行下面的命令('''<span style="color:#FF0000">如果是使用脚本自动安装的face_recognition,那么就不需要安装flask了</pspan>''')</lip><li>{| class="wikitable" style="width:800px;" |-| <p>ROS 2 orangepi@orangepi:~$ '''Galactic Geochelonepython3 -m pip install flask'''官方安装文档链接如下所示:</p><p>orangepi@orangepi:~$ '''docs.ros.org/en/galacticcd face_recognition/Installation.htmlexamples'''</p><p>root@orangepi:~/face_recognition/examples$ '''http://docspython3 web_service_example.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.htmlpy'''</p></li><li><p>ROS 2 '''Galactic Geochelone'''官方安装文档中Ubuntu Linux推荐使用Ubuntu20.04,所以请确保开发板使用的系统为'''Ubuntu20.04桌面版系统'''。安装ROS 2有几种方法,下面演示下通过'''Debian packages'''的方式来安装ROS 2 '''Galactic Geochelone'* Serving Flask app 'web_service_example'(lazy loading)</p><p>* Environment: production</lip><li><p>使用'''install_rosWARNING: This is a development server. Do not use it in a production deployment.sh'''脚本可以安装ros2</p><p>orangepi@orangepi:~$ '''install_rosUse a production WSGI server instead.sh ros2'''</p></li><li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成* Debug mode: on</p><p>usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. * Running on all addresses (0.0.0.0)</p><p>ros2 WARNING: This is an extensible command-line tool for ROS 2a development server. Do not use it in a production deployment.</p><p>optional arguments* Running on http://127.0.0.1:5001</p><p>-h, --help show this help message and exit* Running on http://192.168.1.79:5001 (Press CTRL+C to quit)</p><p>Commands:* Restarting with stat</p><p>action Various action related sub-commands* Debugger is active!</p><p>bag Various rosbag related sub* Debugger PIN: 500-commands161-390</p>|}</li><li><p>component Various component related sub-commands然后另外打开一个终端,再运行下面的命令就可以返回图片识别的结果(注意,下面的命令执行路径为'''face_recognition/examples''')</p>{| class="wikitable" style="width:800px;" |-| <p>daemon Various daemon related suborangepi@orangepi:~/face_recognition/examples$ '''curl -commandsXPOST -F \'''</p><p>doctor Check ROS setup and other potential issues'''&quot;file=@obama2.jpg&quot; http://127.0.0.1:5001'''</p><p>interface Show information about ROS interfaces'''{'''</p>:<p>launch Run a launch file'''&quot;face_found_in_image&quot;: true,'''</p>:<p>lifecycle Various lifecycle related sub-commands'''&quot;is_picture_of_obama&quot;: true'''</p><p>multicast Various multicast related sub-commands'''}'''</p>|}</li><li><p>node Various node related sub-commands我们也可以将'''face_recognition/examples/obama2.jpg'''这张图片拷贝到其他的Linux电脑中,当然也可以自己准备一张名为'''obama2.jpg'''的图片,然后在Linux电脑中可以使用下面的命令远程通过开发板运行的服务来识别人脸('''注意命令中的IP地址需要替换为开发板的IP地址,file后的文件名需要替换为想要测试的图片的名字''')</p>{| class="wikitable" style="width:800px;" |-| <p>param Various param related subtest@test:~$ '''curl -XPOST -commandsF &quot;file=@obama2.jpg&quot; http://192.168.1.79:5001'''</p><p>pkg Various package related sub-commands'''{'''</p>:<p>run Run a package specific executable'''&quot;face_found_in_image&quot;: true,'''</p>:<p>security Various security related sub-commands'''&quot;is_picture_of_obama&quot;: true'''</p><p>service Various service related sub-commands'''}'''</p>|}</li><li><p>topic Various topic related sub-commands使用浏览器测试的方法如下所示:</p><ol style="list-style-type: none;"><li><p>wtf Use `wtf` as alias to `doctor`a) 首先打开浏览器,然后在浏览器的地址栏输入'''开发板的IP地址:5001''',然后就能看到下面的页面</p><p>Call `ros2 &lt;command&gt; [[File:zero3-h` for more detailed usageimg206.png]]</p></li><li><p>然后可以使用 '''test_rosb) 然后将obama2.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行jpg复制到桌面</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~/face_recognition/examples$ '''test_roscp obama2.shjpg /home/orangepi/Desktop/'''</p>|}</li><li><p>[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'c) 然后在浏览器中选择刚才复制的图片</p><p>[INFO] [1671174101File:zero3-img207.235661048] [listenerpng]: I heard: [Hello World: 1]</p></li><li><p>[INFO] [1671174102.199572327] [talker]: Publishing: d) 然后点击'''Upload''Hello World: 2'上传刚才选择的图片进行人脸识别</p><p>[INFO] [1671174102File:zero3-img208.204196299png] [listener]: I heard: [Hello World: 2]</p></li><li><p>[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'e) 等待一段时间后就会显示检测的结果</p><p>[INFO] [1671174103File:zero3-img209.204019965] [listenerpng]: I heard: [Hello World: 3]</p></li></ol></li></ol></li><li><p>运行下面的命令可以打开rviz2'''face_detection'''命令测试示例</p><ol style="list-style-type: lower-alpha;"><li><p>orangepi@orangepi:~$ face_detection命令行工具可以在单张图片或一个图片文件夹中定位人脸位置(输出像素点坐标)。使用'''source /opt/ros/galactic/setup.bashface_detection --help'''可以查看下face_detection命令的帮助信息</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2face_detection --help'''</p><p>Usage: face_detection [[File:media/image277.png|576x324px]OPTIONS]IMAGE_TO_CHECK</p></li><li> <p>ROS的使用方法请参考下ROS 2的文档Options:</p>:<p>[http://docs--cpus INTEGER number of CPU cores to use in parallel.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/galactic/Tutorials.html''']-1 means &quot;use all in system&quot;</p>  :</lip>--model TEXT Which face detection model to use. Options are &quot;hog&quot; or &quot;cnn&quot;.</olp>
<span id="ubuntu22.04安装ros-2-humble的方法"></span>
=== Ubuntu22.04安装ROS 2 Humble的方法 ===
:<ol style="listp>-style-type: decimal;"help Show this message and exit.</p>|}</li><li><p>使用'''install_ros.sh'''脚本可以安装ros2检测单张图片的示例如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''install_ros.sh ros2cd face_recognition/examples'''</p></li><li><p>orangepi@orangepi:~/face_recognition/examples$ '''install_rosface_detection obama2.shjpg'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p><p>usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ..obama2.jpg,302,474,611,164</p>|}<p/li>ros2 is an extensible command-line tool for ROS 2.</pli><p>optional arguments:使用多核并行检测多张图片的示例如下所示:</p><p>ol style="list-h, style--help show this help message and exit</ptype: none;"><pli>Commands:</p>a) 首先进入'''face_recognition/examples'''文件夹</p>action Various action related sub-commands</pli><pli>bag Various rosbag related sub-commands</p>b) 然后新建一个test文件夹</p>component Various component related sub-commands</pli><p>daemon Various daemon related sub-commands</pli><p>doctor Check ROS setup and other potential issuesc) 然后将jpg图片都拷贝到test文件夹中</p><p>interface Show information about ROS interfaces</pli><pli>launch Run a launch file</p><p>lifecycle Various lifecycle related subd) 然后使用所有的cpu并行运行'''face_detection'''来检查test文件夹中的图片,其中'''--cpus -commands1'''表示使用所有的cpu</p><p>multicast Various multicast related sub{| class="wikitable" style="width:800px;" |-commands</p>| <p>node Various node related sub-commandsorangepi@orangepi:~$ '''cd face_recognition/examples'''</p><p>param Various param related sub-commandsorangepi@orangepi:~/face_recognition/examples$ '''mkdir test'''</p><p>pkg Various package related sub-commandsorangepi@orangepi:~/face_recognition/examples$ '''cp *.jpg test'''</p><p>run Run a package specific executable<orangepi@orangepi:~/face_recognition/p><p>security Various security related subexamples$ '''face_detection --cpus -commands1 test'''</p><p>service Various service related subtest/obama-commands240p.jpg,29,261,101,189</p><p>topic Various topic related sub-commandstest/obama_small.jpg,65,215,169,112</p><p>wtf Use `wtf` as alias to `doctor`test/obama2.jpg,302,474,611,164</p><p>Call `ros2 &lt;command&gt; -h` for more detailed usagetest/two_people.jpg,62,394,211,244</p></li><li><p>然后可以使用 '''test_rostest/two_people.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行jpg,95,941,244,792</p><p>orangepi@orangepi:~$ '''test_rostest/obama.sh'''jpg,136,624,394,366</p><p>[INFO] [1671174101test/obama-480p.200091527] [talker]: Publishing: 'Hello World: 1'jpg,65,507,189,383</p><p>[INFO] [1671174101test/obama-720p.235661048] [listener]: I heard: [Hello World: 1]jpg,94,751,273,572</p><p>[INFO] [1671174102test/obama-1080p.199572327] [talker]: Publishing: 'Hello World: 2'jpg,136,1140,394,882</p><p>[INFO] [1671174102test/biden.204196299] [listener]: I heard: [Hello World: 2]jpg,233,749,542,439</p>|}<p/li>[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'</pol><p/li>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: 3]</pol></li><li><p>运行下面的命令可以打开rviz2'''face_recognition'''命令测试示例</p><ol style="list-style-type: lower-alpha;"><li><p>orangepi@orangepi:~$ '''source /opt/ros/humble/setup.bashface_recognition'''命令行工具可以在单张图片或者一个图片文件夹中认出是谁的脸。使用'''face_recognition --help'''可以查看下face_recognition命令的帮助信息</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''ros2 run rviz2 rviz2face_recognition --help'''</p><p>Usage: face_recognition [[File:media/image278.png|575x323px]OPTIONS]KNOWN_PEOPLE_FOLDER IMAGE_TO_CHECK</p></li><li><p>参考文档Options:</p><p>'''http://docs.ros.org/en/humble/index.html'''</p><p>[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debianscpus INTEGER &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number of CPU cores to use in parallel (can speed up processing lots of images).html''']-1 means &quot;use all in system&quot;</p></li></ol>
== 安装内核头文件的方法 ==
'''Linux6:<p>--tolerance FLOAT &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tolerance for face comparisons.1内核的Debian11系统编译内核模块时会报GCC的错误。所以如果要编译内核模块请使用Debian12或者Ubuntu22Default is 0.04。'''6. Lower this if you get multiple matches for the same person.</p>
<ol style="list-style-type: decimal;">
<li><p>OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为'''/opt/'''</p>
<p>orangepi@orangepi:~$ '''ls /opt/linux-headers*'''</p>
<p>/opt/linux-headers-xxx-sun50iw9_x.x.x_arm64.deb</p></li>
<li><p>使用下面的命令可以安装内核头文件的deb包</p>
<p>orangepi@orangepi:~$ '''sudo dpkg -i /opt/linux-headers*.deb'''</p></li>
<li><p>安装完后在'''/usr/src'''下就能看到内核头文件所在的文件夹</p>
<p>orangepi@orangepi:~$ '''ls /usr/src'''</p>
<p>linux-headers-x.x.x</p></li>
<li><p>然后可以编译下Linux镜像中自带的hello内核模块的源码,hello模块的源码在'''/usr/src/hello'''中,进入此目录后,然后使用make命令编译即可。</p>
<p>orangepi@orangepi:~$ '''cd /usr/src/hello/'''</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo make'''</p>
<p>make -C /lib/modules/5.4.125/build M=/usr/src/hello modules</p>
<p>make[1]: Entering directory '/usr/src/linux-headers-5.4.125'</p>
<p>CC [M] /usr/src/hello/hello.o</p>
<p>Building modules, stage 2.</p>
<p>MODPOST 1 modules</p>
<p>CC [M] /usr/src/hello/hello.mod.o</p>
<p>LD [M] /usr/src/hello/hello.ko</p>
<p>make[1]: Leaving directory '/usr/src/linux-headers-5.4.125'</p></li>
<li><p>编译完后会生成'''hello.ko'''内核模块</p>
<p>orangepi@orangepi:/usr/src/hello$ '''ls *.ko'''</p>
<p>hello.ko</p></li>
<li><p>使用'''insmod'''命令可以将'''hello.ko'''内核模块插入内核中</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo insmod hello.ko'''</p></li>
<li><p>然后使用'''demsg'''命令可以查看下'''hello.ko'''内核模块的输出,如果能看到下面的输出说明'''hello.ko'''内核模块加载正确</p>
<p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep &quot;Hello&quot;'''</p>
<p>[ 2871.893988] '''Hello Orange Pi -- init'''</p></li>
<li><p>使用'''rmmod'''命令可以卸载'''hello.ko'''内核模块</p>
<p>orangepi@orangepi:/usr/src/hello$ '''sudo rmmod hello'''</p>
<p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep &quot;Hello&quot;'''</p>
<p>[ 2871.893988] Hello Orange Pi -- init</p>
<p>[ 3173.800892] '''Hello Orange Pi -- exit'''</p></li></ol>
:<span id="linux系统支持的部分编程语言测试"p>--show-distance BOOLEAN &nbsp;&nbsp; Output face distance. Useful for tweaking tolerance setting.</spanp>== Linux系统支持的部分编程语言测试 ==
<span id="debian-bullseye系统"></span>
=== Debian Bullseye系统 ===
<ol style="list-style-type: decimal;"><li><p>Debian Bullseye默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p><ol style="list-style-type: lower-alphahelp &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"><li><p>gcc的版本如下所示</p><p>orangepi@orangepi:~$ '''gcc --version'''</p><p>gcc (Debian 10.2.1-6) 10.2.1 20210110</p><p>Copyright (C) 2020 Free Software Foundation, Inc.</p><p>This is free software&nbsp; see the source for copying conditions. There is NO</p><p>warranty&nbsp; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p></li><li><p>编写C语言的'''hello_world.c'''程序</p><p>orangepi@orangepi:~$ '''vim hello_world.c'''</p><p>#include &ltnbsp;stdio.h&gtnbsp;</p><p>int main(void)</p><p>{</p><p>printf(&quotnbsp;Hello World!\n&quotnbsp;)&nbsp;</p><p>return 0&nbsp;Show this message and exit.</p><p>|}</p></li><li><p>然后编译运行'''hello_world.c'''</p><p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p><p>orangepi@orangepi:~$ '''./hello_world'''</p><p>Hello World!</p></li></ol>
</li>
<li><p>Debian Bullseye默认安装有Python3</p><ol style="list-style-type: lower-alpha;"><li><p>Python具体版本如下所示</p><p>orangepi@orangepi:~$ 首先新建一个已知名字的人脸图片文件夹'''known_people''',然后复制两张图片到'''python3known_people'''</p><p>中,然后将'''Python 3obama2.9.2jpg''' (default, Feb 28 2021, 17:03:44)</p><p>[GCC 10.2.1 20210110] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;</p><p>复制为'''使用Ctrl+D快捷键可退出python的交互模式。unkown.jpg''',也就是我们要识别的图片</p></li><li>{| class="wikitable" style="width:800px;" |-| <p>编写Python语言的orangepi@orangepi:~$ '''hello_world.pycd face_recognition/examples'''程序</p><p>orangepi@orangepi:~/face_recognition/examples$ '''vim hello_world.pymkdir known_people'''</p><p>print('Hello World!')<orangepi@orangepi:~/p><face_recognition/li><li><p>运行examples$ '''hello_worldcp biden.pyjpg obama.jpg known_people'''的结果如下所示</p><p>orangepi@orangepi:~/face_recognition/examples$ '''python3 hello_worldcp obama2.pyjpg unkown.jpg'''</p><p>Hello World!</p></li></ol>|}
</li>
<li><p>Debian Bullseye默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"><li><p>可以使用下面的命令安装openjdk,Debian &gt; Bullseye中最新版本为openjdk-17</p><p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''</p></li><li><p>安装完后可以查看下Java的版本</p><p>orangepi@orangepi:~$ '''java --version'''</p></li><li><p>编写Java版本的然后就可以使用下面的命令识别下'''hello_worldunkown.java'''</p><p>orangepi@orangepi:~$ jpg'''vim hello_world图片中人物的名字,可以看到识别到unkown.java'''jpg图片为obama</p><p>public {| class hello_world</p><p>{</p><p>public static void main(String[] args)</p><p>{</p><p>System.out.println(&quot;Hello World!&quot;);</p><p>}</p><p>}</p></li><li><p>然后编译运行'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p>orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p></li></ol></li></ol> <span id="debian-bookworm系统wikitable"></span>=== Debian Bookworm系统 === <ol style="list-style-typewidth: decimal800px;"><li><p>Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p><ol style="list-style-type: lower|-alpha;"><li><p>gcc的版本如下所示</p>| <p>orangepi@orangepi:~$ '''gcc --version'''</p><p>gcc (Debian 12.2.0-14) 12.2.0</p><p>Copyright (C) 2022 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p><face_recognition/li><li><p>编写C语言的'''hello_world.c'''程序</p><p>orangepi@orangepi:~examples$ '''vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p><p>int main(void)</p><p>{</p><p>printf(&quot;Hello World!face_recognition known_people \n&quot;);</p><p>return 0;</p><p>}</p></li><li><p>然后编译运行'''hello_world.c'''</p><p>orangepi@orangepi:~$ '''gcc -o hello_world hello_worldunkown.cjpg'''</p><p>orangepi@orangepi:~$ '''unkown./hello_world'''jpg,obama</p><p>Hello World!</p></li></ol>|}
</li>
<li><p>Debian Bookworm默认安装有Python3如果我们识别一张不相关的图片,就会显示unknown_person</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>Python具体版本如下所示</p>|-| <p>orangepiroot@orangepi:~$ '''python3'''</p><p>Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;<face_recognition/p><p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li><li><p>编写Python语言的'''hello_world.py'''程序</p><p>orangepi@orangepi:~examples$ '''vim hello_world.pyface_recognition known_people \'''</p><p>print('Hello World!')</p></li><li><p>运行'''hello_worldalex-lacamoire.pypng'''的结果如下所示</p><p>orangepi@orangepi:~$ '''python3 hello_worldalex-lacamoire.py'''png,unknown_person</p><p>Hello World!</p></li></ol>|}
</li>
<li><p>Debian Bookworm默认没有安装Java的编译工具和运行环境我们还可以新建一个test文件夹,然后在其中放入多张图片,然后就可以使用所有的CPU来并行识别所有的图片</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>可以使用下面的命令安装openjdk,Debian &gt; Bookworm中最新版本为openjdk|-17</p>| <p>orangepi@orangepi:~/face_recognition/examples$ '''sudo apt install -y openjdk-17-jdkmkdir test'''</p></li><li><p>安装完后可以查看下Java的版本orangepi@orangepi:~/face_recognition/examples$ '''cp *.jpg *.png test'''</p><p>orangepi@orangepi:~/face_recognition/examples$ '''java face_recognition --versioncpus -1 \'''</p></li><li><p>编写Java版本的'''hello_world.javaknown_people test'''</p><p>orangepi@orangepi:~$ '''vim hello_worldtest/obama-240p.java'''jpg,obama</p><p>public class hello_worldtest/alex-lacamoire.png,unknown_person</p><p>{test/obama_small.jpg,obama</p><p>public static void main(String[] args)test/unkown.jpg,obama</p><p>{test/obama2.jpg,obama</p><p>Systemtest/lin-manuel-miranda.out.println(&quot;Hello World!&quot;);png,unknown_person</p><p>}test/two_people.jpg,biden</p><p>}test/two_people.jpg,obama</p><p>test/obama-720p.jpg,obama</lip><li><p>然后编译运行'''hello_worldtest/obama.java'''jpg,obama</p><p>orangepi@orangepi:~$ '''javac hello_worldtest/obama-480p.java'''jpg,obama</p><p>orangepi@orangepi:~$ '''java hello_world'''test/biden.jpg,biden</p><p>Hello World!test/obama-1080p.jpg,obama</p>|}</li></ol>
</li></ol>
== 设置中文环境以及安装中文输入法 == {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,安装中文输入法前请确保开发板使用的Linux系统为桌面版系统。'''</big>|} <span id="ubuntudebian-focal系统系统的安装方法"></span>=== Ubuntu Focal系统 Debian 系统的安装方法 ===
<ol style="list-style-type: decimal;">
<li><p>Ubuntu Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序首先设置默认'''locale'''为中文</p>
<ol style="list-style-type: lower-alpha;">
<li><p>gcc的版本如下所示</p><p>orangepi@orangepi:~$ 输入下面的命令可以开始配置'''gcc --versionlocale'''</p><p>gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0</p><p>Copyright (C) 2019 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p></li><li><p>编写C语言的'''hello_world.c'''程序</p><p>orangepi@orangepi{| class="wikitable" style="width:~$ '''vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p><p>int main(void)</p><p>{</p><p>printf(&quot;Hello World!\n&quot800px;);</p>" <p>return 0;</p>|-<p>}</p></li><li><p>然后编译运行'''hello_world.c'''</p>| <p>orangepi@orangepi:~$ '''gcc sudo dpkg-o hello_world hello_world.creconfigure locales'''</p><p>orangepi@orangepi:~$ '''./hello_world'''</p><p>Hello World!</p></li></ol>|}
</li>
<li><p>Ubuntu Focal默认安装有Python3然后在弹出的界面中选择'''zh_CN.UTF-8 &gt; UTF-8'''(通过键盘上的上下方向按键来上下移动,通过空格键来选择,最后通过Tab键可以将光标移动到'''&lt;OK&gt;''',然后回车即可)</p><ol style="listp>[[File:zero3-styleimg210.png|1400px]]</p></li><li><p>然后设置默认'''locale'''为'''zh_CN.UTF-type8'''</p><p>[[File: lowerzero3-alpha;"img211.png|1400px]]</p></li><li><p>Python3具体版本如下所示退出界面后就会开始'''locale'''的设置,命令行显示的输出如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3sudo dpkg-reconfigure locales'''</p><p>Python 3Generating locales (this might take a while)...</p>:<p>en_US.UTF-8.10 (default, Nov 14 2022, 12.. done</p>:59<p>zh_CN.UTF-8... done</p><p>Generation complete.</p>|}</li></ol></li><li><p>然后打开'''Input Method'''</p><p>[[File:47)zero3-img212.png]]</p></li><li><p>然后选择'''OK'''</p><p>[GCC 9[File:zero3-img213.4png]]</p></li><li><p>然后选择'''Yes'''</p><p>[[File:zero3-img214.0png]] on linux</p></li><li><p>然后选择'''fcitx'''</p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information<p>[[File:zero3-img215.png]]</p></li><li><p>然后选择'''OK'''</p><p>&gt;&gt;&gt;[[File:zero3-img216.png]]</p></li><li><p>'''<span style="color:#FF0000">然后重启Linux系统才能使配置生效</span>'''</p></li><li><p>然后打开'''Fcitx configuration'''</p><p>[[File:zero3-img217.png]]</p></li><li><p>然后点击下图所示位置的'''使用Ctrl+D快捷键可退出python的交互模式。'''号</p><p>[[File:zero3-img218.png]]</p></li><li><p>编写Python语言的然后搜索'''Google Pinyin'''hello_world再点击'''OK'''</p><p>[[File:zero3-img219.pypng]]</p></li><li><p>然后将'''程序Google Pinyin'''放到最前面</p><p>orangepi@orangepi[[File:zero3-img220.png]]</p><p>[[File:~$ zero3-img221.png]]</p></li><li><p>然后打开'''vim hello_world.pyGeany'''这个编辑器测试下中文输入法</p><p>[[File:zero3-img222.png]]</p></li><li><p>print(中文输入法测试如下所示</p><p>[[File:zero3-img223.png]]</p></li><li><p>通过'''Ctrl+Space''Hello World!')快捷键可以切换中英文输入法</p></li><li><p>运行如果需要整个系统都显示为中文,可以将'''/etc/default/locale'''中的变量都设置为''hello_world'zh_CN.pyUTF-8'''的结果如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 hello_worldsudo vim /etc/default/locale'''</p><p># File generated by update-locale</p><p>LC_MESSAGES='''<span style="color:#FF0000">zh_CN.pyUTF-8</span>'''</p><p>Hello World!LANG='''<span style="color:#FF0000">zh_CN.UTF-8</span>'''</p><p>LANGUAGE='''<span style="color:#FF0000">zh_CN.UTF-8</lispan>'''</olp>|}
</li>
<li><p>Ubuntu Focal默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"><li><p>可以使用下面的命令安装openjdk-17</p><p>orangepi@orangepi:~$ 然后'''sudo apt install -y openjdk-17-jdk重启系统'''就能看到系统显示为中文了</p></li><li><p>安装完后可以查看下Java的版本</p><p>orangepi@orangepi[[File:~$ '''java -zero3-version'''</p><p>openjdk 17img224.0.2 2022-01-18png]]</p><p>OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)</p><p>OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)</p></li><li><p>编写Java版本的'''hello_world.java'''</pol><p>orangepi@orangepi:~$ '''vim hello_world.java'''</p><p>public class hello_world</p><p>{</p><p>public static void main(String[] args)</p><p>{</p><p>Systemspan id="ubuntu-20.out.println(&quot;Hello World!&quot;);</p><p>}</p><p>}</p></li><li><p>然后编译运行'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p04系统的安装方法">orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p></li></ol></li></olspan>
<span id="ubuntu-jammy系统"></span>=== Ubuntu Jammy系统 20.04系统的安装方法 ===
<ol style="list-style-type: decimal;">
<li><p>Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p><ol style="list-style-type: lower-alpha;"><li><p>gcc的版本如下所示</p><p>orangepi@orangepi:~$ 首先打开'''gcc --versionLanguage Support'''</p><p>gcc (Ubuntu 11.3.0[[File:zero3-1ubuntu1~22.04.1) '''11.3.0'''</p><p>Copyright (C) 2021 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSEimg225.png]]</p></li><li><p>编写C语言的然后找到'''hello_world.c汉语(中国)'''程序选项</p><p>orangepi@orangepi:~$ '''vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p><p>int main(void)</p><p>{</p><p>printf(&quot;Hello World!\n&quot;);</p><p>return 0;</p><p>}</p></li><li><p>然后编译运行'''hello_world.c'''</p><p>orangepi@orangepi[[File:~$ '''gcc zero3-o hello_world hello_worldimg226.c'''</p><p>orangepi@orangepi:~$ '''./hello_world'''</p><p>Hello World!png]]</p></li></ol></li><li><p>Ubuntu Jammy默认安装有Python3</p><ol style="list-style-type: lower-alpha;"><li><p>Python3具体版本如下所示</p><p>orangepi@orangepi:~$ 然后请使用鼠标左键选中'''python3汉语(中国)'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p><p>Python 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;</p><p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></li><li><p>编写Python语言的'''hello_world.py'''程序</p><p>orangepi@orangepi:~$ '''vim hello_world.py'''</p><p>print('Hello World!')</p></li><li><p>运行'''hello_world.py'''的结果如下所示</p><p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p><p>Hello World!</p></li></ol></li><li><p>Ubuntu Jammy默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"><li><p>可以使用下面的命令安装openjdk-18</p><p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-18-jdk'''</p></li><li><p>安装完后可以查看下Java的版本</p><p>orangepi@orangepi[File:~$ '''java zero3--version'''</p><p>openjdk 18img227.0.2-ea 2022-07-19</p><p>OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)</p><p>OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)</p></li><li><p>编写Java版本的'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''vim hello_world.java'''</p><p>public class hello_world</p><p>{</p><p>public static void main(String[png]] args)</p><p>{</p><p>System.out.println(&quot;Hello World!&quot;);</p><p>}</p><p>}</p></li><li><p>然后编译运行'''hello_world.java'''</p><p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p>orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p></li></ol></li></ol>
<span id{| class="wikitable" style="上传文件到开发板linux系统中的方法background-color:#ffffdc;width:800px;"|-| <big>'''注意,这一步不是很好拖动的,请耐心多试几次。'''</big>|}</spanol><ol start="4" style= 上传文件到开发板Linux系统中的方法 =="list-style-type: decimal;"><li><p>然后选择'''Apply System-Wide'''将中文设置应用到整个系统</p><p>[[File:zero3-img228.png]]</p></li><li><p>然后设置'''Keyboard input method system'''为'''fcitx'''</p><p>[[File:zero3-img229.png]]</p></li><li><p>'''<span idstyle="在ubuntu-pc中上传文件到开发板linux系统中的方法color:#FF0000">然后重启Linux系统使配置生效</span>'''</p></li><li><p>重新进入系统后,在下面的界面请选择'''不要再次询问我''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[File:zero3-img230.png]]</p></li>=== 在Ubuntu PC中上传文件到开发板Linux系统中的方法 ===<li><p>然后可以看到桌面都显示为中文了</p><p>[[File:zero3-img231.png]]</p></li><li><p>然后我们可以打开'''Geany'''测试下中文输入法,打开方式如下图所示</p><p>[[File:zero3-img232.png]]</p></li><li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过'''Ctrl+Space'''快捷键来切换成中文输入法,然后就能输入中文了</p><p>[[File:zero3-img233.png]]</p></li></ol>
<span id==== 使用scp命令上传文件的方法 ===="ubuntu-22.04系统的安装方法"></span>
<ol style="list-style-type: decimal;"><li><p>使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>'''file_path:'''需要替换为要上传文件的路径</p></li><li><p>'''orangepi:'''为开发板linux系统的用户名,也可以替换成其它的,比如root</p></li><li><p>'''192.168.xx.xx:''' 为开发板的IP地址,请根据实际情况进行修改</p></li><li><p>'''/home/orangepi:''' &gt; 开发板linux系统中的路径,也可以修改为其它的路径</p><p>test@test:~$ '''scp file_path orangepi@192.168.xx.xx:/home/orangepi/'''</p></li></ol></li><li><p>如果要上传文件夹,需要加上-r参数</p><p>test@test:~$ '''scp -r dir_path orangepi@192.168.xx= Ubuntu 22.xx:/home/orangepi/'''</p></li><li><p>scp还有更多的用法,请使用下面的命令查看man手册</p></li></ol> test@test:~$ '''man scp''' ==== 使用filezilla上传文件的方法 =04系统的安装方法 ===
<ol style="list-style-type: decimal;">
<li><p>首先在Ubuntu PC中安装filezilla首先打开'''Language Support'''</p><p>test@test[[File:~$ '''sudo apt install zero3-y filezilla'''img225.png]]</p></li><li><p>然后使用下面的命令打开filezilla然后找到'''汉语(中国)'''选项</p><p>test@test[[File:~$ '''filezilla'''zero3-img234.png]]</p></li><li><p>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的然后请使用鼠标左键选中'''汉语(中国)'''并按住不动,然后往上将其拖到最开始的位置,拖完后的显示如下图所示:</p><div class="figure"p>[[File:zero3-img235.png]]</p></li>
{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,这一步不是很好拖动的,请耐心多试几次。'''</big>|}</ol><ol start="4" style="list-style-type: decimal;"><li><p>然后选择'''Apply System-Wide'''将中文设置应用到整个系统</p><p>[[File:zero3-img236.png]]</p></li><li><p>'''<span style="color:#FF0000">然后重启Linux系统使配置生效</span>'''</p></li><li><p>重新进入系统后,在下面的界面请选择'''不要再次询问我''',然后请根据自己的喜好决定标准文件夹是否也要更新为中文</p><p>[[File:zero3-img230.png]]</p></li><li><p>然后可以看到桌面都显示为中文了</p><p>[[File:mediazero3-img231.png]]</p></li><li><p>然后打开Fcitx5配置程序</image279p><p>[[File:zero3-img237.png|576x453px|截图 2022]]</p></li><li><p>然后选择使用拼音输入法</p><p>[[File:zero3-12img238.png]]</p></li><li><p>选择后的界面如下所示,再点击确定即可</p><p>[[File:zero3-03 19img239.png]]</p></li><li><p>然后我们可以打开'''Geany'''测试下中文输入法,打开方式如下图所示</p><p>[[File:zero3-04img232.png]]</p></li><li><p>打开'''Geany'''后,默认还是英文输入法,我们可以通过'''Ctrl+Space'''快捷键来切换成中文输入法,然后就能输入中文了</p><p>[[File:zero3-40img240.png]]</p></li></ol>
</div></li><li><p>连接开发板的方法如下图所示</p></lispan id="远程登录linux系统桌面的方法"></olspan>
<div class="figure">= 远程登录Linux系统桌面的方法 ==
[[File:media<span id="使用nomachine远程登录"></image280.png|577x128px|IMG_256]]span>=== 使用NoMachine远程登录 ===
</div><ol start{| class="5wikitable" style="listbackground-style-typecolor:#ffffdc;width: decimal800px;"><li><p>然后选择'''保存密码''',再点击'''确定'''</p>|-<p>[[File:media/image281.png|249x181px]]</p></li><libig><p>然后选择'''总是信任该主机请确保开发板安装的Ubuntu或者Debian系统为桌面版本的系统。另外NoMachine也提供了详细的使用文档,强烈建议通读此文档来熟悉NoMachine的使用,文档链接如下所示:''',再点击'''确定'''</p></li></ol>
'''https://knowledgebase.nomachine.com/DT10R00166'''<div class="figure"/big>|}
[[File{| class="wikitable" style="background-color:media#ffffdc;width:800px;" |-| <big>'''NoMachine支持Windows、Mac、Linux、iOS和安卓平台,所以我们可以在多种设备上通过NoMachine来远程登录控制Orange Pi开发板。下面演示下在Windows中通过NoMachine来远程登录Orange Pi开发板的Linux系统桌面。其他平台的安装方法请参考下NoMachine的官方文档。'''</image282.png|278x150pxbig>|IMG_256]]}
</div><ol start{| class="7wikitable" style="listbackground-style-typecolor:#ffffdc;width: decimal800px;">|-| <libig>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了'''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。'''</li></olbig>|}
<div classol style="figurelist-style-type: decimal;"><li><p>首先下载NoMachine软件Linux '''<span style="color:#FF0000">arm64</span>''' deb版本的安装包,然后安装到开发板的Linux系统中</p><ol style="list-style-type: lower-alpha;"><li>由于H618是ARMv8架构的SOC,我们使用的系统为Ubuntu或者Debian,所以这里需要下载'''NoMachine &gt; for ARM ARMv8 DEB'''安装包,下载链接如下所示:
[[File{| class="wikitable" style="background-color:media#ffffdc;width:800px;" |-| <big>'''注意,这个下载链接可能会变,请认准Armv8/image283.png|533x330pxArm64版本的deb包。'''</big>|IMG_256]]}
</div><ol start{| class="8wikitable" style="list-style-typewidth: decimal800px;"><li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。<|-| [https://www.nomachine.com/download/download&id=112&s=ARM '''https:/li></ol>downloads.nomachine.com/download/?id=118&amp;distro=ARM''']|}
[[File:zero3-img241.png]]<div /li></ol><ol start="2" style="list-style-type: lower-alpha;"><li><p>另外在'''官方工具'''中也可以下载到'''NoMachine'''的安装包</p><p>[[File:zero3-img242.png]]</p><p>先进入'''远程登录软件-NoMachine'''文件夹</p><p>[[File:zero3-img243.png]]</p><p>然后下载arm64版本的deb安装包</p><p>[[File:zero3-img244.png]]</p></li><li><p>然后将下载的'''nomachine_x.x.x_x_arm64.deb'''上传到开发板的Linux系统中</p></li><li><p>然后使用下面的命令在开发板的Linux系统中安装'''NoMachine'''</p>{| class="figurewikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo dpkg -i nomachine_x.x.x_x_arm64_arm64.deb'''</p>|}</li></ol></li></ol><!-- --><ol start="2" style="list-style-type: decimal;"><li>然后下载NoMachine软件Windows版本的安装包,下载地址如下所示</li>
[[File:media/image284.png{|529x414px|IMG_256]] </div><ol startclass="9wikitable" style="listbackground-style-typecolor:#ffffdc;width: decimal800px;">|-| <li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</pbig>'''注意,这个下载链接可能会变。'''</libig><li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol>|}
<span id{| class="wikitable" style="在windowswidth:800px;" |-pc中上传文件到开发板linux系统中的方法"><| '''https://downloads.nomachine.com/download/span>?id=9'''=== 在Windows PC中上传文件到开发板Linux系统中的方法 ===|}
[[File:zero3-img245.png]]<span id/ol><ol start="3" style="使用filezilla上传文件的方法list-1style-type: decimal;"><li><p>然后在Windows中安装NoMachine,'''安装完后请重启下电脑'''</spanp></li><li><p>然后在Window中打开'''NoMachine'''</p>==== 使用filezilla上传文件的方法 ====<p>[[File:zero3-img246.png]]</p></li><li><p>NoMachine启动后会自动扫描局域网内其他安装有NoMachine的设备,进入NoMachine的主界面后就可以看到开发板已经在可连接的设备列表里了,然后点击下图红色方框所示的位置即可开始登录开发板的Linux系统桌面</p><p>[[File:zero3-img247.png]]</p></li><li><p>然后点击'''OK'''</p><p>[[File:zero3-img248.png]]</p></li><li><p>然后在下图对应的位置输入开发板Linux系统的用户名和密码,再点击'''OK'''开始登陆</p><p>[[File:zero3-img249.png]]</p></li><li><p>然后在接下来的界面中都点击OK</p></li><li><p>最后就能看到开发板Linux系统的桌面了</p><p>[[File:zero3-img250.png]]</p></li></ol>
# 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示<span id="使用vnc远程登录"></span>
[https://filezilla-project.org/download.php?type=client '''https://filezilla-project.org/download.php?type=client'''][[File:media/image285.png|472x171px|IMG_256]]= 使用VNC远程登录 ===
[[File{| class="wikitable" style="background-color:media/image286.png#ffffdc;width:800px;" |-|384x276px]]<big>'''操作前请先确保Windwos电脑和开发板在同一局域网内,并且能正常ssh登录开发板的Ubuntu或者Debian系统。'''
'''<ol start="2" span style="list-style-typecolor: decimal;#FF0000"><li><p>下载的安装包如下所示,然后双击直接安装即可Ubuntu20.04测试VNC很多问题,请不要使用这种方法。</pspan><p>'''FileZilla_Server_1.5.1_win64-setup.exe'''</p></li></olbig>|}
安装过程中,下面的安装界面请选择<ol style="list-style-type: decimal;"><li><p>首先运行'''set_vnc.sh''Decline'脚本设置下vnc,'',然后再选择'记得加sudo权限''Next&gt'</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo set_vnc.sh'''</p><p>You will require a password to access your desktops.</p>
<div class="figure">
[[File<p>Password:media'''<span style="color:#FF0000">#在这里设置vnc的密码,8位字符</span>'''</p><p>Verify: '''<span style="color:#FF0000">#在这里设置vnc的密码,8位字符</span>'''</p><p>Would you like to enter a view-only password (y/n)? '''<span style="color:#FF0000">n</span>'''</p><p>xauth: file /root/image287.png|355x279px|IMG_256]]Xauthority does not exist</p>
</div>
<ol start="3" style="list-style-type: decimal;">
<li>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</li></ol>
<div class="figure"p>New 'X' desktop is orangepi:1</p>
[[File:media/image288.png|451x357px|IMG_256]]
<p>Creating default startup script /divroot/.vnc/xstartup</p><ol start="4" style="list-style-type: decimal;"p>Starting applications specified in /root/.vnc/xstartup</p><lip>连接开发板的方法如下图所示:<Log file is /root/.vnc/li>orangepi:1.log</olp>
<div class="figure">
[[File:media<p>Killing Xtightvnc process ID 3047</image289.png|522x108px|IMG_256]]p>
</div>
<ol start="5" style="list-style-type: decimal;">
<li>然后选择'''保存密码''',再点击'''确定'''</li></ol>
<div class="figure"p>New 'X' desktop is orangepi:1</p>
[[File:media/image290.png|207x146px|IMG_256]]
<p>Starting applications specified in /root/.vnc/xstartup</p><p>Log file is /root/.vnc/orangepi:1.log</p>|}</divli><li><p>使用MobaXterm软件连接开发板linux系统桌面的步骤如下所示:</p><ol start="6" style="list-style-type: decimallower-alpha;"><li>然后选择'''总是信任该主机''',再点击'''确定'''首先点击Session,然后选择VNC,再填写开发板的IP地址和端口,最后点击OK确认</li></ol>
[[File:zero3-img251.png]]<div class/ol><ol start="2" style="figurelist-style-type: lower-alpha;"><li><p>然后输入前面设置的VNC的密码</p><p>[[File:zero3-img252.png]]</p></li><li><p>登录成功后的界面显示如下图所示,然后就可以远程操作开发板linux系统的桌面了</p></li>
[[File:media/image291zero3-img253.png|221x109px|IMG_256]]</ol></li></ol><span id="qt的安装方法"></span>
</div><ol start="7" style="list-style-type: decimal;"><li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li></ol> <div class="figure"> [[File:media/image292.png|449x332px|IMG_256]] </div><ol start="8" style="list-style-type: decimal;"><li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了</li></ol> <div class="figure"> [[File:media/image293.png|461x340px|IMG_256]] </div><ol start="9" style="list-style-type: decimal;"><li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li><li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol> == 开关机logo使用说明 QT的安装方法 ==
<ol style="list-style-type: decimal;">
<li><p>开关机logo默认只在桌面版的系统中才会显示</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''false'''可以关闭开关机logo</p><p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''使用下面的脚本可以安装QT5和QT Creator</p><p>verbosity{| class=1</p><p>'''bootlogo=false'''</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''true'''可以开启开关机logo</p><p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''bootlogo=true'''</p></li><li><p>开机logo图片在linux系统中的位置为</p><p>'''/usr/share/plymouth/themes/orangepi/watermark.png'''</p></li><li><p>替换开机logo图片后需要运行下命令才能生效</p><p>orangepi@orangepi:~$ '''sudo update-initramfs -u'''</p></li></ol> == 关机和重启开发板的方法 == <ol "wikitable" style="list-style-typewidth: decimal800px;"><li><p>在Linux系统运行的过程中,如果直接拔掉电源断电,可能会导致文件系统丢失某些数据,建议断电前先使用'''poweroff'''命令关闭开发板的Linux系统,然后再拔掉电源</p>|-| <p>orangepi@orangepi:~$ '''sudo poweroffinstall_qt.sh'''</p><p>'''注意,关闭开发板后需要重新拔插电源才能开机。'''</p>|}</li><li><p>使用'''reboot'''命令即可重启开发板中的Linux系统安装完后会自动打印QT的版本号</p><p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol> <span id="linux-sdkorangepi-build使用说明"></span> = '''Linux SDK——orangepi-build使用说明''' = == 编译系统需求 == Linux SDK,即'''orangepi-build''',只支持在安装有'''Ubuntu 22.04'''的X64电脑上运行,所以下载orangepi-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是'''22.04''',说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。 test@test:~$ '''lsb_release -a''' No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: '''22.04''' Codename: '''jammy''' 如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用'''VirtualBox'''或者'''VMware'''来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepi-build,因为orangepi-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepi-build,另外请不要在'''开发板'''的Linux系统中使用orangepi-build。Ubuntu 22.04 '''amd64'''版本的安装镜像下载地址为: [https://repo.huaweicloud.com/ubuntu-releases/21.04/ubuntu-21.04-desktop-amd64.iso '''https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso'''] 在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源(或者其它你觉得速度快的国内源),不然后面安装软件的时候很容易由于网络原因而出错。替换清华源的步骤如下所示: 
<ol style="list-style-type: lower-alpha;">
<li>替换清华源的方法参考这个网页的说明即可。</li></olp[https://mirrorsUbuntu20.tuna.tsinghua.edu.cn/help/ubuntu/ 04自带的qt版本为'''https://mirrors.tuna.tsinghua5.edu12.cn/help/ubuntu/8''']</p> <ol start{| class="2wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>注意Ubuntu版本需要切换到22.04。</p>|-<p>[[File:media/image294.png|576x241px]]</p></li><li><p>需要替换的'''/etc/apt/sources.list'''文件的内容为:</p><p>testorangepi@test:~$ '''sudo mv /etc/apt/sources.list cat /etc/apt/sources.list.bak'''</p><p>test@testorangepi:~$ '''sudo vim /etc/apt/sourcesinstall_qt.listsh'''</p><p># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p><p>deb https://mirrors.tunaQMake version 3.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse1</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverseUsing Qt version '''</p><p>deb httpsspan style="color://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</pFF0000"><p># deb-src https://mirrors5.tuna12.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse8</pspan><p># 预发布软件源,不建议启用<''' in /p><p># deb https:usr/lib/mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammyaarch64-proposed main restricted universe multiverse</p><p># deblinux-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiversegnu</p></li><li><p>替换完后需要更新下包信息,并确保没有报错。</p>|}<p>test@test:~$ '''sudo apt-get update'''</p></li><li><p>Ubuntu22.04自带的QT版本为'''另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。5.15.3'''</p></li></ol> <span id="获取linux-sdk的源码"></span>== 获取linux sdk的源码 == === 从github下载orangepi-build === linux sdk指的是orangepi-build这套代码,orangepi-build是基于armbian build编译系统修改而来的,使用orangepi-build可以编译出多个版本的linux镜像。使用下面的命令可以下载orangepi-build的代码: test@test:~$ '''sudo apt-get update''' test@test:~$ '''sudo apt-get install -y git''' test@test:~$ '''git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next''' '''注意,使用H618 Soc的开发板是需要下载orangepi-build的next分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。''' [[File:media/image295.png|576x288px]] '''通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。''' H618系列开发板当前使用的u-boot和linux内核版本如下所示: {| class="wikitable" style="width:800px;"
|-
| style="text-align<p>orangepi@orangepi: left;"| ~$ '''分支install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p>| <p>Using Qt version '''<span style="text-aligncolor: left;#FF0000">5.15.3</span>''' in /usr/lib/aarch64-linux-gnu</p>| }</li><li><p>Debian11自带的QT版本为'''u-boot版本5.15.2'''</p>{| class="wikitable" style="text-alignwidth: left800px;"| '''linux内核版本'''
|-
| <p>orangepi@orangepi:~$ '''install_qt.sh'''</p><p>......</p><p>QMake version 3.1</p><p>Using Qt version '''<span style="text-aligncolor: left;#FF0000">5.15.2</span>''' in /usr/lib/aarch64-linux-gnu</p>| }</li><li><p>Debian12自带的QT版本为'''current5.15.8'''</p>{| class="wikitable" style="text-alignwidth: left800px;"| -| <p>orangepi@orangepi:~$ '''u-boot v2018install_qt.05sh'''</p><p>......</p><p>QMake version 3.1</p>| <p>Using Qt version '''<span style="text-aligncolor: left;#FF0000">5.15.8</span>''' in /usr/lib/aarch64-linux-gnu</p>| }</li></ol></li><li><p>然后在'''linux5.4Applications'''中就可以看到QT Creator的启动图标</p><p>[[File:zero3-img254.png]]</p><p>也可以使用下面的命令打开QT Creator</p>{| class="wikitable" style="width:800px;"
|-
| style="text-align: left;"| '''next'''| style="text-align: left;"| '''u-boot v2021.07'''| style="text-align<p>orangepi@orangepi: left;"| ~$ '''linux6.1qtcreator'''</p>
|}
</li><li><p>QT Creator打开后的界面如下所示</p><p>[[File:zero3-img255.png]]</p></li><li><p>QT Creator的版本如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>QT Creator在'''这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。Ubuntu20.04'''中的默认版本如下所示</p><p>[[File:zero3-img256.png]]</p></li><li><p>QT Creator在'''目前全志提供的linux5Ubuntu22.4 bsp内核我们定义为current分支。最新的linux604'''中的默认版本如下所示</p><p>[[File:zero3-img257.1 LTS内核定义为next分支。png]]</p></li><li><p>QT Creator在'''Debian11'''中的默认版本如下所示</p><p>[[File:zero3-img258.png]]</p></li><li><p>QT Creator在'''Debian12'''中的默认版本如下所示</p>orangepi<p>[[File:zero3-build下载完后会包含下面的文件和文件夹:img259.png]]</p></li></ol></li><li><p>然后设置下QT</p>
<ol style="list-style-type: lower-alpha;">
<li><p>首先打开'''buildHelp'''-&gt;'''About Plugins...sh'''</p><p>[[File: 编译启动脚本zero3-img260.png]]</p></li><li><p>然后去掉'''externalClangCodeModel'''的那个勾</p><p>[[File: &gt; 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等zero3-img261.png]]</p></li><li><p>'''LICENSE<span style="color:#FF0000">设置完后需要重启下QT Creator</span>''': GPL 2许可证文件</p></li><li><p>然后确保QT Creator使用的GCC编译器,如果默认为Clang,请修改为GCC</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''README.mdDebian12请跳过这步。'''</p></big>|}<p>[[File:zero3-img262.png]]</p><p>[[File: orangepizero3-build说明文件img263.png]]</p></li></ol></li><li><p>'''scripts'''然后就可以打开一个示例代码</p><p>[[File: 编译linux镜像的通用脚本zero3-img264.png]]</p></li><li><p>点击示例代码后会自动打开对应的说明文档,可以仔细看下其中的使用说明</p><p>test@test[[File:~zero3-img265.png]]</orangepi-build$ p></li><li><p>然后点击下'''lsConfigure Project'''</p><p>'''build[[File:zero3-img266.sh external LICENSE READMEpng]]</p></li><li><p>然后点击左下角的绿色三角形编译运行下示例代码</p><p>[[File:zero3-img267.md scripts'''png]]</p></li><li><p>等待一段时间后,会弹出下图所示的界面,此时就说明QT能正常编译运行</p><p>'''如果是从github下载的orangepi[[File:zero3-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。'''img268.png]]</p></li><li><p>参考资料</olp=== 下载交叉编译工具链 ={| class="wikitable" style="width:800px;" |-| orangepi-build第一次运行的时候会自动下载交叉编译工具链放在<p>[https://wiki.qt.io/Install_Qt_5_on_Ubuntu '''https://wiki.qt.io/Install_Qt_5_on_Ubuntu'''toolchains]</p><p>[https://download.qt.io/archive/qtcreator '''文件夹中,每次运行orangepi-build的buildhttps://download.qt.io/archive/qtcreator''']</p><p>[https://download.qt.sh脚本后,都会检查io/archive/qt '''toolchainshttps://download.qt.io/archive/qt'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。]</p>|}<div class="figure"/li></ol>
[[File:media<span id="ros安装方法"></image296.png|575x278px|选区_396]]span>
</div>交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站:== ROS安装方法 ==
[https://mirrors<span id="ubuntu20.tuna.tsinghua.edu.cn/armbian04安装ros-1-releases/_toolchainnoetic的方法"></ '''https://mirrors.tuna.tsinghua.eduspan>=== Ubuntu20.cn/armbian-releases/_toolchain/''']04安装ROS 1 Noetic的方法 ===
# ROS 1当前活跃的版本如下所示,推荐版本为'''toolchainsNoetic Ninjemys'''下载完后会包含多个版本的交叉编译工具链:
test@test:~/orangepi:[[File:zero3-build$ '''ls toolchains/'''img269.png]]
gcc::[[File:zero3-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu gcc-linaro-4.9.4-2017img270.01-x86_64_aarch64-linux-gnu gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabipng]]
gcc::{| class="wikitable" style="width:800px;" |-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf gcc-linaro-4| [http://docs.9ros.4-2017org/ '''http://docs.01-x86_64_arm-linux-gnueabi gcc-linaro-aarch64-none-elf-4.8-2013ros.11_linuxorg''']
gcc-arm-9'''https://wiki.2-2019ros.12-x86_64-aarch64-none-linux-gnu gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linuxorg/Distributions'''|}
gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu gcc-linaro-arm-none-eabi-4.8-2014.04_linux 编译H618 Linux内核源码使用的交叉编译工具链为: <ol start="2" style="list-style-type: lower-alphadecimal;"><li><p>linux5.4ROS 1 '''Noetic Ninjemys'''官方安装文档链接如下所示:</p>{| class="wikitable" style="width:800px;" |-| <p>[http://wiki.ros.org/noetic/Installation/Ubuntu '''gcc-arm-11http://wiki.2-2022ros.02-x86_64-aarch64-none-linux-gnuorg/noetic/Installation/Ubuntu''']</p>|}</li><li><p>linux6ROS '''Noetic Ninjemys'''官方安装文档中Ubuntu推荐使用Ubuntu20.04,所以请确保开发板使用的系统为'''<span style="color:#FF0000">Ubuntu20.104桌面版系统</span>'''</p>{| class="wikitable" style="width:800px;" |-| <p>[http://wiki.ros.org/noetic/Installation '''gcc-arm-11http://wiki.2-2022ros.02-x86_64-aarch64-none-linux-gnuorg/noetic/Installation''']</p>|}<p>编译H618 u[[File:zero3-boot源码使用的交叉编译工具链为:img271.png]]</p></li></olli><p然后使用下面的脚本安装ros1<!-- --/p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>v2018.05</p>|-| <p>orangepi@orangepi:~$ '''gcc-linaro-7.4.1-2019install_ros.02-x86_64_arm-linux-gnueabish ros1'''</p>|}</li><li><p>v2021.07</p><p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''使用ROS工具前,首先需要初始化下rosdep,然后编译源码时就能快速的安装一些系统依赖和一些ROS中的核心组件</p></li></ol>
{| class="wikitable" style== orangepi"background-color:#ffffdc;width:800px;" |-build完整目录结构说明 ==| <big>'''<span style="color:#FF0000">注意,运行下面的命令需要确保开发板能正常访问github,否则会由于网络问题而报错。</span>'''
<ol style="list-style-type: decimal;">
<li><p>orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中</p>
<ol style="list-style-type: lower-alpha;">
<li><p>linux内核源码存放的git仓库如下,注意切换linux-orangepi仓库的分支为</p>
<ol style="list-style-type: lower-alpha;">
<li><p>Linux5.4</p>
<p>https://github.com/orangepi-xunlong/linux-orangepi/tree/'''orange-pi-5.4-sun50iw9'''</p></li>
<li><p>Linux6.1</p>
<p>https://github.com/orangepi-xunlong/linux-orangepi/tree/'''orange-pi-6.1-sun50iw9'''</p></li></ol>
</li>
<li><p>u-boot源码存放的git仓库如下,注意切换u-boot-orangepi仓库的分支为</p>
<ol style="list-style-type: lower-alpha;">
<li><p>v2018.05</p>
<p>https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''v2018.05-h618'''</p></li>
<li><p>v2021.07</p></li></ol>
</li></ol>
</li></ol>
https://github'''install_ros.com/orangepi-xunlongsh脚本会尝试修改/u-boot-orangepietc/tree/'''v2021hosts并自动运行下面的命令。但是这种方法无法保证每次都能正常访问github,如果install_ros.07-sunxish安装完ros1后有提示下面的错误,请自己想其它办法让开发板的linux系统能正常访问github,然后再手动运行下面的命令。'''
<ol start="2" style="list-style-type: decimal;">
<li><p>orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有</p>
<ol style="list-style-type: lower-alpha;">
<li><p>'''build.sh''': 编译启动脚本</p></li>
<li><p>'''external''': &gt; 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中</p></li>
<li><p>'''kernel''': 存放linux内核的源码</p></li>
<li><p>'''LICENSE''': GPL 2许可证文件</p></li>
<li><p>'''README.md''': orangepi-build说明文件</p></li>
<li><p>'''output''': &gt; 存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件</p></li>
<li><p>'''scripts''': 编译linux镜像的通用脚本</p></li>
<li><p>'''toolchains''': 存放交叉编译工具链</p></li>
<li><p>'''u-boot''': 存放u-boot的源码</p></li>
<li><p>'''userpatches''': 存放编译脚本需要用到的配置文件</p>
<p>test@test:~/orangepi-build$ '''ls'''</p>
<p>'''build.sh external kernel LICENSE output README.md scripts toolchains u-boot userpatches'''</p></li></ol>
</li></ol>
== 编译u'''https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-boot ==homebrew.yaml'''
<ol style="list-style-type'''Hit https: decimal;"><li><p>运行build//raw.githubusercontent.sh脚本,记得加sudo权限<com/p><p>test@test:~ros/orangepi-build$ '''sudo .rosdistro/build.sh'''<master/p><rosdep/li><li><p>选择base.yaml'''U-boot package''',然后回车</p><div class="figure">
[[File'''<span style="color:media#FF0000">ERROR: error loading sources list:</image297.png|576x132px|选区_238]]span>'''
</div></li><li><p>接着选择开发板的型号</p><p>[[File:media/image298.png|576x123px]]</p></li><li><p>然后选择u-boot的分支类型</p><ol style="list-style-type: lower-alpha;"><li><p>current分支会编译linux5.4镜像需要使用的u-boot v2018.05版本的代码'''</p></li><li><p>next分支会编译linux6.1镜像需要使用的u-boot v2021.07版本的代码</p><p>[[File:media/image299.png|576x77px]]</p></li></ol></li><li><p>然后就会开始编译u-boot,编译next分支时提示的部分信息说明如下所示:</p><ol span style="list-style-typecolor: lower-alpha;#FF0000"><li><p>u-boot源码的版本The read operation timed out</pspan><p>[ o.k. ] Compiling u-boot [ '''v2021.07''' ]</p></libig><li><p>交叉编译工具链的版本</p>|}<p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p></li><li><p>编译生成的u-boot deb包的路径</p><p>[ o.k. ] Target directory [ '''orangepi-build/output/debs/u-boot''' ]</p></li><li><p>编译生成的u-boot deb包的包名</p><p>[ o.k. ] File name [ '''linux-u-boot-next-orangepizero3_x.x.x_arm64.deb''' ]</p></li><li><p>编译使用的时间</p><p>[ o.k. ] Runtime [ '''1 min''' ]</p></li><li><p>重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot</p><p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD{| class=orangepizero3 BRANCH=next BUILD_OPT=u-boot''' ]</p></li></ol></li><li><p>查看编译生成的u-boot deb包</p><p>test@test:~/orangepi-build$ '''ls output/debs/u-boot/'''</p><p>'''linux-u-boot-next-orangepizero3_x.x.x_arm64.deb'''</p></li><li><p>orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能('''需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p><p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p><p>......</p><p>IGNORE_UPDATES=&quot;'''yes'''&quot;</p><p>......</p></li><li><p>调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试</p><ol "wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>首先将编译好的u|-boot的deb包上传到开发板的linux系统中</p><p>test| orangepi@testorangepi:~/orangepi-build$ '''cd output/debs/u-boot'''<source /p><p>test@test:~opt/orangepi_buildros/outputnoetic/debs/u-boot$ '''scp \'''</p><p>'''linux-u-boot-next-orangepizero3_x.x.x_arm64.deb [mailto:root@192.168.1.xxx:/root root@192.168.1setup.xxx:/root]bash'''</p></li><li><p>再安装刚才上传的新的u-boot的deb包</p><p>orangepi@orangepi:~$ '''sudo dpkg -i''' '''linux-u-boot-next-orangepizero3_x.x.x_arm64.debrosdep init'''</p></li><li><p>然后运行 nand-sata-install脚本</p><p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p></li><li><p>然后选择'''5 InstallWrote /Update the bootloader on SDetc/eMMC'''<ros/p><p>[[File:mediarosdep/image300sources.png|320x174px]]</p></li><li><p>按下回车键后首先会弹出一个Warring</p><p>[[File:media/image301list.png|314x170px]]<d/p></li><li><p>再按下回车键就会开始更新u20-boot,更新完后会显示下面的信息</p><p>[[File:media/image302default.png|292x164px]]</p></li><li><p>然后就可以重启开发板来测试u-boot的修改是否生效了</p></li></ol></li></ol>list
== 编译linux内核 ==Recommended: please run
<ol style="list-style-type: decimal;">
<li><p>运行'''build.sh'''脚本,记得加sudo权限</p>
<p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li>
<li><p>选择'''Kernel package''',然后回车</p>
<div class="figure">
[[File:media/image303.png|575x116px|选区_240]]:rosdep update
</div></li><li><p>然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个</p><p>[[Fileorangepi@orangepi:media/image304.png|576x87px]]</p></li><li><p>接着选择开发板的型号</p><p>[[File:media/image298.png|576x123px]]</p></li><li><p>然后选择内核源码的分支类型</p><ol style="list-style-type: lower-alpha;"><li><p>current分支会编译linux5.4内核源码</p></li><li><p>next分支会编译linux6.1内核源码</p><p>[[File:media/image299.png|576x77px]]</p></li></ol></li><li><p>如果第3)步选择了需要显示内核配置菜单(第二个选项),则会弹出通过~$ '''make menuconfigrosdep update'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码。</p><p>[[File:media/image305.png|575x357px]]</p></li></ol>
<!-- --><ol style="reading in sources list-style-type: lower-alpha;"><li><p>如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p><p>test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE=no'''<data from /p><etc/li><li><p>也可以设置orangepi-buildros/userpatchesrosdep/config-defaultsources.conf配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p></li><li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu &gt; PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu &gt; PC的终端调到最大,然后重新运行build.sh脚本</p><p>[[File:media/image306list.png|574x234px]]</p></li></ol>d
<!-- --><ol start="7" style="list-style-type: decimal;"><li><p>编译next分支内核源码时提示的部分信息说明如下:</p><ol style="list-style-typeHit https: lower-alpha;"><li><p>linux内核源码的版本</p><p>[ o.k. ] Compiling current kernel [ '''6.1.31''' ]</p></li><li><p>使用的交叉编译工具链的版本</p><p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p></li><li><p>内核默认使用的配置文件以及它存放的路径如下所示</p><p>[ o.k. ] Using kernel config file [ '''orangepi-build/external/config/kernel/linux-6.1-sun50iw9-next.config''' ]</p></li><li><p>编译生成的内核相关的deb包的路径</p><p>[ o.k. ] Target directory [ '''output/debs/''' ]</p></li><li><p>编译生成的内核镜像deb包的包名</p><p>[ o.k. ] File name [ '''linux-image-next-sun50iw9_x.x.x_arm64.deb''' ]</p></li><li><p>编译使用的时间</p><p>[ o.k. ] Runtime [ '''10 min''' ]</p></li><li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p><p>[ o.kraw. ] Repeat Build Options [ '''sudo ./buildgithubusercontent.sh BOARD=orangepizero3 BRANCH=next BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p></li></ol></li><li><p>查看编译生成的内核相关的deb包<com/p><ol style="list-style-type: lower-alpha;"><li><p>'''linux-dtb-next-sun50iw9_x.x.x_arm64.deb'''包含有内核使用的dtb文件<ros/p><rosdistro/li><li><p>'''linux-headers-next-sun50iw9_x.x.x_arm64.deb'''包含内核头文件<master/p><rosdep/li><li><p>'''linux-image-nextosx-sun50iw9_x.x.x_arm64homebrew.deb'''包含内核镜像和内核模块</p><p>test@test:~/orangepi-build$ '''ls output/debs/linux-*'''</p><p>output/debs/linux-dtb-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-headers-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-image-next-sun50iw9_x.x.x_arm64.deb</p></li></ol></li><li><p>orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p><p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p><p>IGNORE_UPDATES=&quot;'''yes'''&quot;</p></li><li><p>如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块</p><ol style="list-style-type: lower-alpha;"><li><p>将编译好的linux内核的deb包上传到开发板的linux系统中</p><p>test@test:~/orangepi-build$ '''cd output/debs'''</p><p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p><p>'''linux-image-next-sun50iw9_x.x.x_arm64.deb root@192.168.1.xxx:/root'''</p></li><li><p>再安装刚才上传的新的linux内核的deb包</p><p>orangepi@orangepi:~$ '''sudo dpkg -i linux-image-next-sun50iw9_x.x.x_arm64.deb'''</p></li><li><p>然后重启开发板,再查看内核相关的修改是否已生效</p><p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p></li></ol></li></ol>yaml
== 编译rootfs ==Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
<ol style="list-style-typeHit https: decimal;"><li><p>运行build.sh脚本,记得加sudo权限</p><p>test@test:~/orangepi-build$ '''sudo raw./buildgithubusercontent.sh'''<com/p><ros/li><li><p>选择'''Rootfs and all deb packages''',然后回车<rosdistro/p><master/li><rosdep/ol>python.yaml
<div class="figure">Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
[[FileHit https:media/image307/raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.png|576x119px|选区_241]]yaml
</div><ol start="3" style="list-style-typeQuery rosdistro index https: decimal;"><li><p>接着选择开发板的型号</p><p>[[File:media/image298raw.png|576x123px]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别</p><ol style="list-style-type: lower-alpha;"><li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22githubusercontent.04三个选项<com/p><ros/li><li><p>next分支可以看到debian11、debian12、ubuntu22.04三个选项<rosdistro/p><p>[[File:mediamaster/image299index-v4.png|576x77px]]</p></li></ol></li><li><p>然后选择rootfs的类型</p><p>[[File:media/image308.png|576x79px]]</p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alpha;"><li><p>'''Image with console interface &gt; (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure">yaml
[[File:media/image309.png|576x75px|选区_245]]Skip end-of-life distro &quot;ardent&quot;
</div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure">Skip end-of-life distro &quot;bouncy&quot;
[[File:media/image310.png|576x78px|选区_397]]Skip end-of-life distro &quot;crystal&quot;
</div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:media/image311.png|576x76px]]</p><p>[[File:media/image312.png|576x74px]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:media/image313.png|575x264px]]</p></li><li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下</p><ol style="listSkip end-styleof-type: lower-alphalife distro &quot;"><li><p>rootfs的类型</p><p>[ o.k. ] local not found [ Creating new rootfs cache for '''bullseye''' ]</p></li><li><p>编译生成的rootfs压缩包的存放路径</p><p>[ o.k. ] Target directory [ '''orangepi-build/external/cache/rootfs''' ]</p></li><li><p>编译生成的rootfs压缩包的名字</p><p>[ o.k. ] File name [ '''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4''' ]</p></li></ol></li><li><p>查看编译生成的rootfs压缩包</p><ol style="list-style-type: lower-alpha;"><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p><ol style="list-style-type: lower-alphadashing&quot;"><li><p>'''bullseye'''表示rootfs的linux发行版的类型</p></li><li><p>'''xfce'''表示rootfs为桌面版的类型,如果为'''cli'''则表示服务器版类型</p></li><li><p>'''arm64'''表示rootfs的架构类型</p></li><li><p>'''25250ec7002de9e81a41de169f1f89721'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol></li><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list'''列出了rootfs安装的所有软件包的包名</p><p>test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.current</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list</p></li></ol></li><li><p>如果需要的rootfs在'''external/cache/rootfs'''下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去'''external/cache/rootfs'''下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间</p></li></ol>
== 编译linux镜像 ==Skip end-of-life distro &quot;eloquent&quot;
<ol style="list-style-type: decimalAdd distro &quot;foxy&quot;"><li><p>运行'''build.sh'''脚本,记得加sudo权限</p><p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p></li><li><p>选择'''Full OS image for flashing''',然后回车</p></li></ol>
<div class="figure">Add distro &quot;galactic&quot; Skip end-of-life distro &quot;groovy&quot; Add distro &quot;humble&quot;
[[File:media/image314.png|576x128px|选区_242]]Skip end-of-life distro &quot;hydro&quot;
</div><ol start="3" style="listSkip end-styleof-type: decimallife distro &quot;"><li><p>然后选择开发板的型号</p><p>[[File:media/image298.png|576x123px]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别</p><ol style="list-style-type: lower-alphaindigo&quot;"><li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项</p></li><li><p>next分支可以看到debian11、debian12、ubuntu22.04三个选项</p><p>[[File:media/image299.png|576x77px]]</p></li></ol></li><li><p>然后选择rootfs的类型</p><p>[[File:media/image308.png|576x79px]]</p></li><li><p>然后选择镜像的类型</p><ol style="listSkip end-styleof-type: lower-alphalife distro &quot;"><li><p>'''Image with console interface jade&gtquot; (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure">
[[File:media/image309.png|576x75px|选区_245]]Skip end-of-life distro &quot;kinetic&quot;
</div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure">Skip end-of-life distro &quot;lunar&quot;
[[File:media/image310.png|576x78px|选区_397]]Add distro &quot;melodic&quot;
</div></li></ol>Add distro &quot;noetic&quot;
<!-- --><ol start="12" style="list-style-type: decimalAdd distro &quot;rolling&quot;"><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:media/image311.png|576x76px]]</p><p>[[File:media/image312.png|576x74px]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:media/image313.png|575x264px]]</p></li></ol>
updated cache in /home/orangepi/.ros/rosdep/sources.cache|}<!-- --/ol><ol start="86" style="list-style-type: decimal;"><li><p>然后就会开始编译linux镜像,编译的大致流程如下然后在'''桌面'''中打开一个命令行终端窗口,再使用'''test_ros.sh'''脚本可以启动一个小海龟的例程来测试下ROS是否能正常使用</p><ol {| class="wikitable" style="list-style-typewidth: lower-alpha800px;"><li><p>初始化Ubuntu PC的编译环境,安装编译过程需要的软件包</p></li><li><p>下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)</p></li><li><p>编译u-boot源码,生成u|-boot的deb包</p></li><li><p>编译linux源码,生成linux相关的deb包</p></li>| <li><p>制作linux firmware的deb包</p></li><li><p>制作orangepi-config工具的deb包</p></li><li><p>制作板级支持的deb包</p></li><li><p>如果是编译desktop版镜像,还会制作desktop相关的deb包</p></li><li><p>检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用</p></li><li><p>安装前面生成的deb包到rootfs中</p></li><li><p>对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等</p></li><li><p>然后制作镜像文件,并格式化分区,默认类型为ext4</p></li><li><p>再将配置好的rootfs拷贝到镜像的分区中</p></li><li><p>然后更新initramfsorangepi@orangepi:~$ '''test_ros.sh'''</p></li><li><p>最后将u-boot的bin文件通过dd命令写入到镜像中</p></li></ol>|}
</li>
<li><p>编译完镜像后会提示下面的信息</p><ol style="list-style-type: lower-alpha;"><li><p>编译生成的镜像的存放路径运行完'''test_ros.sh'''脚本后,会弹出下图所示的一个小海龟</p><p>[ o.k[File:zero3-img272. png] Done building [ '''output/images/orangepizero3_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop/orangepizero3_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop.img''' ]</p></li><li><p>编译使用的时间然后请保持刚才打开终端窗口在最上面</p></li></ol></li></ol>
'''[ o[File:zero3-img273.kpng]]</ol><ol start="9" style="list-style-type: decimal;"><li><p>此时按下键盘上的方向按键就可以控制小海龟上下左右移动了</p><p>[[File:zero3-img274. png] Runtime [ 19 min ]'''</p></li></ol>
<ol stylespan id="list-styleubuntu20.04安装ros-type: lower2-alpha;galactic的方法"><li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像</p><p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepizero3 BRANCH=next BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p></li></olspan>
<span id="android-12-tv系统使用说明"></span>== Ubuntu20.04安装ROS 2 Galactic的方法 ===
<ol style= "list-style-type: decimal;"><li><p>ROS 2当前活跃的版本如下所示,推荐版本为'''Android 12 TV系统使用说明Galactic Geochelone''' =</p><p>[[File:zero3-img275.png]]</p><span id="已支持的android版本"p>[[File:zero3-img276.png]]</spanp>== 已支持的Android版本 == {| class="wikitable" style="width:800px;"
|-
| style="text-align<p>[http://docs.ros.org/ '''http://docs.ros.org''']</p><p>'''http: left;"//docs.ros.org/en/galactic/Releases.html'''</p>| Android版本}</li><li><p>ROS 2 '''Galactic Geochelone'''官方安装文档链接如下所示:</p>{| class="wikitable" style="text-alignwidth: left800px;"| 内核版本
|-
| style="text-align: left;"| <p>'''Android 12 TV版docs.ros.org/en/galactic/Installation.html'''</p>| style="text-align: left;"| <p>'''linux5http://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.4html'''</p>
|}
</li><li><p>ROS 2 '''Galactic Geochelone'''官方安装文档中Ubuntu Linux推荐使用Ubuntu20.04,所以请确保开发板使用的系统为'''<span idstyle="android-12-tv功能适配情况color:#FF0000">Ubuntu20.04桌面版系统</span>'''。安装ROS 2有几种方法,下面演示下通过'''Debian packages'''的方式来安装ROS 2 '''Galactic Geochelone'''</p></li>== Android 12 TV功能适配情况 ==<li><p>使用'''install_ros.sh'''脚本可以安装ros2</p>{| class="wikitable" style="width:800px;"
|-
| style="text-align<p>orangepi@orangepi: left;"~$ '''install_ros.sh ros2'''</p>| 功能}</li><li><p>'''install_ros.sh'''脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p>{| class="wikitable" style="text-alignwidth: left800px;"| Android12
|-
| style="text<p>usage: ros2 [-h] Call `ros2 &lt;command&gt; -h` for more detailed usage. ...</p>  <p>ros2 is an extensible command-line tool for ROS 2.</p>  <p>optional arguments:</p>:<p>-h, --help show this help message and exit</p>  <p>Commands:</p>:<p>action Various action related sub-commands</p>:<p>bag Various rosbag related sub-commands</p>:<p>component Various component related sub-commands</p>:<p>daemon Various daemon related sub-commands</p>:<p>doctor Check ROS setup and other potential issues</p>:<p>interface Show information about ROS interfaces</p>:<p>launch Run a launch file</p>:<p>lifecycle Various lifecycle related sub-commands</p>:<p>multicast Various multicast related sub-commands</p>:<p>node Various node related sub-commands</p>:<p>param Various param related sub-commands</p>:<p>pkg Various package related sub-commands</p>:<p>run Run a package specific executable</p>:<p>security Various security related sub-commands</p>:<p>service Various service related sub-commands</p>:<p>topic Various topic related sub-aligncommands</p>: left<p>wtf Use `wtf` as alias to `doctor`</p>  :<p>Call `ros2 &lt;"command&gt; -h` for more detailed usage.</p>| HDMI视频}</li><li><p>然后可以使用 '''test_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p>{| class="wikitable" style="text-alignwidth: left800px;"| OK
|-
| style="text-align<p>orangepi@orangepi:~$ '''test_ros.sh'''</p><p>[INFO] [1671174101.200091527] [talker]: Publishing: 'Hello World: 1'</p><p>[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]</p><p>[INFO] [1671174102.199572327] [talker]: Publishing: 'Hello World: 2'</p><p>[INFO] [1671174102.204196299] [listener]: I heard: [Hello World: 2]</p><p>[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'</p><p>[INFO] [1671174103.204019965] [listener]: I heard: [Hello World: left;"3]</p>| HDMI音频}</li><li><p>运行下面的命令可以打开rviz2</p>{| class="wikitable" style="text-alignwidth: left800px;"| OK
|-
| style="text-align<p>orangepi@orangepi:~$ '''source /opt/ros/galactic/setup.bash'''</p><p>orangepi@orangepi: left;"~$ '''ros2 run rviz2 rviz2'''</p>| USB2}<p>[[File:zero3-img277.0 x 3png]]</p></li><li><p>ROS的使用方法请参考下ROS 2的文档</p>{| class="wikitable" style="text-alignwidth: left800px;"| OK
|-
| style="text-align: left;"| TF卡启动| style="text-align<p>[http: left;"| OK|-| style="text-align: left;"| 网卡| style="text-align: left;"| OK|-| style="text-align: left;"| 红外| style="text-align: left;"| OK|-| style="text-align: left;"| WIFI| style="text-align: left;"| OK|-| style="text-align: left;"| WIFI hotsport| style="text-align: left;"| OK|-| style="text-align: left;"| 蓝牙| style="text-align: left;"| OK|-| style="text-align: left;"| BLE蓝牙| style="text-align: left;"| OK|-| style="text-align: left;"| 耳机音频| style="text-align: left;"| OK|-| style="text-align: left;"| TV-OUT| style="text-align: left;"| OK|-| style="text-align: left;"| USB摄像头| style="text-align: left;"| OK|-| style="text-align: left;"| LED灯| style="text-align: left;"| OK|-| style="text-align: left;"| 温度传感器| style="text-align: left;"| OK|-| style="text-align: left;"| Mali GPU| style="text-align: left;"| OK|-| style="text-align: left;"| 视频编解码| style="text-align//docs.ros.org/en/galactic/Tutorials.html '''http: left;"| OK//docs.ros.org/en/galactic/Tutorials.html''']</p>
|}
</li></ol>
 
<span id="ubuntu22.04安装ros-2-humble的方法"></span>
<span id="板载led灯显示说明"></span>== 板载LED灯显示说明 Ubuntu22.04安装ROS 2 Humble的方法 ===
<ol style="list-style-type: decimal;"><li><p>使用'''install_ros.sh'''脚本可以安装ros2</p>{| class="wikitable" style="width:800px;"
|-
|| style="text-align<p>orangepi@orangepi: left;"~$ '''install_ros.sh ros2'''</p>| }</li><li><p>'''install_ros.sh''绿灯'脚本安装完ros2后会自动运行下'''ros2 -h'''命令,如果能看到下面的打印,说明ros2安装完成</p>{| class="wikitable" style="text-alignwidth: left800px;"| '''红灯'''
|-
| '''u-boot启动阶段'''| style="text-align<p>usage: left;"| '''灭'''| style="textros2 [-align: lefth] Call `ros2 &lt;"| '''亮'''|-| '''内核启动到进入系统'''| style="text-align: leftcommand&gt;"| '''亮'''| style="text-align: left;"| '''灭'''|}h` for more detailed usage. ...</p>
<span id="android返回上一级界面的方法"></span>
== Android返回上一级界面的方法 ==
<ol style="list-style-type: decimal;"><li><p>我们一般都是使用鼠标和键盘来控制开发板的安卓系统,当进入某些界面,需要返回上一级界面或者桌面时,只能通过'''鼠标右键'''来返回,键盘是无法返回的</p></li><li><p>如果有购买开发板配套的红外遥控(其他遥控不行)和扩展板,将扩展板插入开发板后,还可以通过遥控中的返回键来返回上一级菜单,返回键的位置如下图所示</p><p>[[File:media/image315ros2 is an extensible command-line tool for ROS 2.png|231x199px]]</p></li></ol>
<span id="adb的使用方法"></span>
== ADB的使用方法 ==
=== 使用网络连接adb调试 ===<p>optional arguments:</p>:<p>-h, --help show this help message and exit</p>
'''使用网络adb无需USB Typc C接口的数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。'''
<ol style="listp>Commands:</p>:<p>action Various action related sub-stylecommands</p>:<p>bag Various rosbag related sub-typecommands</p>: decimal;"<p>component Various component related sub-commands</p>:<p>daemon Various daemon related sub-commands</p>:<p>doctor Check ROS setup and other potential issues</p>:<lip>interface Show information about ROS interfaces</p>确保Android系统的'''service.adb.tcp.port'''设置为5555端口号:<p>launch Run a launch file</p>:<p>apollolifecycle Various lifecycle related sub-p2commands</p>:<p>multicast Various multicast related sub-commands</ # '''getprop | grep &quot;adb.tcp&quot;'''p>:<p>node Various node related sub-commands</p>:<p>[service.adb.tcp.port]param Various param related sub-commands</p>: [5555]<p>pkg Various package related sub-commands</p>:<p>run Run a package specific executable</lip>:<lip>security Various security related sub-commands</p>:<p>如果'''service.adb.tcp.port'''没有设置,可以在串口中使用下面的命令设置网络adb的端口号Various service related sub-commands</p>:<p>topic Various topic related sub-commands</lip>:<p>wtf Use `wtf` as alias to `doctor`</olp>
apollo-p2:/ # '''setprop service.adb.tcp.port 5555'''<br />
apollo-p2:/ # '''stop adbd'''
apollo:<p>Call `ros2 &lt;command&gt; -p2:h` for more detailed usage.</p>|}</ # li><li><p>然后可以使用 '''start adbdtest_ros.sh'''脚本测试下ROS 2是否安装成功,如果能看到下面的打印,说明ROS 2能正常运行</p> <ol start{| class="3wikitable" style="list-style-typewidth: decimal800px;"><li><p>在Ubuntu PC上安装adb工具</p>|-| <p>testorangepi@testorangepi:~$ '''sudo apt-get updatetest_ros.sh'''</p><p>test@test[INFO] [1671174101.200091527] [talker]: Publishing:~$ '''sudo apt-get install -y adb''Hello World: 1'</p></li><li><p>然后在Ubuntu PC上连接网络adb[INFO] [1671174101.235661048] [listener]: I heard: [Hello World: 1]</p><p>test@test[INFO] [1671174102.199572327] [talker]: Publishing:~$ '''adb connect 192.168.1.xxxHello World:5555''' '''(需要修改为开发板的IP地址)''2'</p><p>* daemon not running; starting now at tcp[INFO] [1671174102.204196299] [listener]: I heard: [Hello World:50372]</p><p>* daemon started successfully[INFO] [1671174103.199580322] [talker]: Publishing: 'Hello World: 3'</p><p>connected to 192[INFO] [1671174103.168.1.xxx204019965] [listener]: I heard: [Hello World:55553]</p>|}</li><li><p>运行下面的命令可以打开rviz2</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''adb devicessource /opt/ros/humble/setup.bash'''</p><p>List of devices attachedorangepi@orangepi:~$ '''ros2 run rviz2 rviz2'''</p>|}<p>192[[File:zero3-img278.168.1.xxx:5555 devicepng]]</p></li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统参考文档</p>{| class="wikitable" style="width:800px;" |-| <p>'''http://docs.ros.org/en/humble/index.html'''</p><p>[http://docs.ros.org/en/galactic/Tutorials.html '''http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html''']</p>|}</li></ol>
test@test:~$ '''adb shell'''== 安装内核头文件的方法 ==
apollo{| class="wikitable" style="background-p2color:/ #ffffdc;width:800px;" |-| <big>'''<span style=== 使用数据线连接adb调试 ==="color:#FF0000">Linux6.1</span>内核的Debian11系统编译内核模块时会报GCC的错误。所以如果要编译内核模块请使用Debian12或者Ubuntu22.04。'''</big>|}
<ol style="list-style-type: decimal;">
<li><p>准备一根USB Typc C接口的数据线, USB接口一端插入电脑的USB接口中,USB Type C接口一端插入开发板的电源接口中。在这种情况下是由电脑的USB接口给开发板供电,所以请确保电脑的USB接口能提供最够的功率驱动开发板OPi发布的Linux镜像默认自带了内核头文件的deb包,存放的位置为'''/opt/'''</p><div {| class="figurewikitable" style=">width:800px;" |-| [[File<p>orangepi@orangepi:media~$ '''ls /opt/linux-headers*'''</p><p>/opt/image15linux-headers-xxx-sun50iw9_x.x.x_arm64.jpegdeb</p>|172x172px}</li><li><p>使用下面的命令可以安装内核头文件的deb包</p>{| class="wikitable" style="width:800px;" |IMG_4194(20201104-125502)]]| <p>orangepi@orangepi:~$ '''sudo dpkg -i /divopt/linux-headers*.deb'''</p>|}</li><li><p>在Ubuntu PC上安装adb工具安装完后在'''/usr/src'''下就能看到内核头文件所在的文件夹</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''sudo aptls /usr/src'''</p><p>linux-headers-get updatex.x.x</p>|}</li><li><p>然后可以编译下Linux镜像中自带的hello内核模块的源码,hello模块的源码在'''/usr/src/hello'''中,进入此目录后,然后使用make命令编译即可。</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~$ '''cd /usr/src/hello/'''</p><p>orangepi@orangepi:/usr/src/hello$ '''sudo aptmake'''</p><p>make -get install C /lib/modules/5.4.125/build M=/usr/src/hello modules</p><p>make[1]: Entering directory '/usr/src/linux-headers-y adb5.4.125'</p>:<p>CC [M] /usr/src/hello/hello.o</p>:<p>Building modules, stage 2.</p>:<p>MODPOST 1 modules</p>:<p>CC [M] /usr/src/hello/hello.mod.o</p>:<p>LD [M] /usr/src/hello/hello.ko</p><p>make[1]: Leaving directory '/usr/src/linux-headers-5.4.125'</p>|}</li><li><p>查看识别到ADB设备编译完后会生成'''hello.ko'''内核模块</p>{| class="wikitable" style="width:800px;" |-| <p>testorangepi@testorangepi:~/usr/src/hello$ '''adb devicesls *.ko'''</p><p>List of devices attachedhello.ko</p>|}</li><li><p>4c00146473c28651dd0 device使用'''insmod'''命令可以将'''hello.ko'''内核模块插入内核中</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:/usr/src/hello$ '''sudo insmod hello.ko'''</p>|}</li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统然后使用'''demsg'''命令可以查看下'''hello.ko'''内核模块的输出,如果能看到下面的输出说明'''hello.ko'''内核模块加载正确</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:/usr/src/hello$ '''dmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.893988] '''Hello Orange Pi -- init'''</p>|}</li><li><p>使用'''rmmod'''命令可以卸载'''hello.ko'''内核模块</olp>{| class="wikitable" style="width:800px;" test|-| <p>orangepi@testorangepi:~/usr/src/hello$ '''sudo rmmod hello'''</p><p>orangepi@orangepi:/usr/src/hello$ '''adb shelldmesg | grep &quot;Hello&quot;'''</p><p>[ 2871.893988] Hello Orange Pi -- init</p><p>[ 3173.800892] '''Hello Orange Pi -- exit'''</p>|}</li></ol>
apollo-p2:<span id="linux系统支持的部分编程语言测试"></ $span>
<span id="查看设置hdmi显示分辨率的方法"></span>== 查看设置HDMI显示分辨率的方法 Linux系统支持的部分编程语言测试 ==
<ol style="list-style-type: decimal;"><li><p>首先进入'''Settings'''</p><p>[[File:media/image316.png|234x83px]]</p></li><li><p>然后选择'''Device Preferences'''</p><p>[[File:media/image317.png|415x170px]]</p></li><li><p>然后选择'''Display &amp; Sound'''</p><p>[[File:media/image318.png|420x133px]]</p></li><li><p>然后选择'''Advanced display settings'''</p><p>[[File:media/image319.png|423x96px]]</p></li><li><p>然后选择'''HDMI outpu mode'''</p><p>[[File:media/image320.png|423x101px]]</p></li><li><p>然后就能看到显示器支持的分辨率列表了。此时点击对应的选项就会切换到对应的分辨率。请注意,不同显示器支持的分辨率可能是不同的,如果接到电视上,一般会看到比下图更多的分辨率选项。</p><p>[[File:media/image321.png|429x136px]]</p></li><li><p>开发板的HDMI输出是支持4K显示的,当接到4K电视时就可以看到4K分辨率的选项</p><p>[[File:media/image322.png|429x242px]]</p></li></ol> <span id="hdmi转vga显示测试debian-1bullseye系统"></span>== HDMI转VGA显示测试 = Debian Bullseye系统 ===
<ol style="list-style-type: decimal;">
<li><p>首先需要准备下面的配件Debian Bullseye默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p>
<ol style="list-style-type: lower-alpha;">
<li><p>HDMI转VGA转换器gcc的版本如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media/image146.png|155x104px]]~$ '''gcc --version'''</p></li><li><p>一根VGA线和一根Micro HDMI公转HDMI母转接线gcc (Debian 10.2.1-6) 10.2.1 20210110</p><p>[[File:media/image147.png|148x133px]] [[File:media/image148.jpeg|157x139px|IMG_6140Copyright (20220104-134930C)]]2020 Free Software Foundation, Inc.</p></li><li><p>一个支持VGA接口的显示器或者电视This is free software; see the source for copying conditions. There is NO</p></lip>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</olp>|}
</li>
<li><p>HDMI转VGA显示测试如下所示编写C语言的'''hello_world.c'''程序</p><p>[[File{| class="wikitable" style="width:media/image323.png800px;" |-|576x330px]]</p><p>orangepi@orangepi:~$ '''使用HDMI转VGA显示时,开发板以及开发板的Android系统是不需要做任何设置的,只需要开发板Micro HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。vim hello_world.c'''</p></lip>#include &lt;stdio.h&gt;</olp>
<span id="wi-fi的连接方法"></span>
== WI-FI的连接方法 ==
<ol style="list-style-type: decimal;"><li><p>首先选择'''Settings'''int main(void)</p><p>[[File:media/image316.png|234x83px]]{</p></li><li>:<p>然后选择'''Network printf(&quot;Hello World!\n&ampquot;); Internet'''</p><p>[[File:media/image324.png|373x103px]]</p></li><li><p>然后打开WI-FI</p><p>[[File:media/image325.png|381x50px]]</p></li><li><p>打开WI-FI后在'''Available networks'''下面就可以看到搜索到的信号</p><p>[[File:media/image326.png|381x187px]]</p></li><li><p>选择想连接的WI-FI后会弹出下图所示的密码输入界面</p><div class="figure">
[[File:media/image327.png|386x180px|Screenshot_20220104-164114]]
:<p>return 0;</divp><p>}</p>|}</li><li><p>然后使用键盘输入WI-FI对应的密码,再使用然后编译运行'''鼠标hello_world.c'''点击虚拟键盘中的回车按钮就会开始连接WI-FI了</p>{| class="wikitable" style="width:800px;" |-| <p>[[Fileorangepi@orangepi:media/image328~$ '''gcc -o hello_world hello_world.png|388x160px]]c'''</p></li><li><p>WI-FI连接成功后的显示如下图所示orangepi@orangepi:~$ '''./hello_world'''</p><p>[[File:media/image329.png|402x141px]]Hello World!</p>|}</li></ol></li><span id="wi-fi-hotspot的使用方法"li><p>Debian Bullseye默认安装有Python3</spanp>== WI-FI hotspot的使用方法 == <ol style="list-style-type: decimallower-alpha;"><li><p>首先请确保以太网口已连接网线,并且能正常上网Python具体版本如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3'''</lip><li><p>然后选择'''SettingsPython 3.9.2'''(default, Feb 28 2021, 17:03:44)</p><p>[[File:media/image316GCC 10.2.png|234x83px]1 20210110]on linux</p></li><li><p>然后选择'''Network Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&ampquot; Internet'''for more information.</p><p>[[File:media/image324.png|373x103px]]&gt;&gt;&gt;</p></li>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <libig><p>然后选择'''WIFI hotspot使用Ctrl+D快捷键可退出python的交互模式。'''</p><p/big>[[File:media/image330.png|378x104px]]</p>}</li><li><p>然后打开编写Python语言的'''Hotspot Enable''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭'''Hotspot Enablehello_world.py''',然后才能修改)程序</p><p>[[File{| class="wikitable" style="width:media/image331.png800px;" |-|402x174px]]</p></li><li><p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WI-FI列表中就能找到上图orangepi@orangepi:~$ '''Hotspot name'''下面显示的同名('''这里为AndroidAP_7132''')的WIFI热点了。然后可以点击vim hello_world.py'''AndroidAP_7132'''连接热点,密码在上图的'''Hotspot password'''下面可以看到</p><p>[[File:media/image332.png|269x191px]]print('Hello World!')</p>|}</li><li><p>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页,说明开发板的运行'''WI-FI Hotspothello_world.py'''能正常使用的结果如下所示</p><p>[[File:media/image333.png{|269x125px]]</p></li></ol> <span idclass="查看以太网口ip地址的方法wikitable"></span>== 查看以太网口IP地址的方法 == <ol style="list-style-typewidth: decimal800px;"><li><p>首先请确保开发板的千兆网口连接到了路由器或者交换机</p></li>|-| <li><p>然后打开orangepi@orangepi:~$ '''Settingspython3 hello_world.py'''</p><p>[[File:media/image334.png|431x161px]]Hello World!</p>|}</li><li><p>然后选择'''Network &amp; Internet'''</pol><p>[[File:media/image335.png|576x186px]]</p></li><li><p>然后在下图所示的位置就能看到开发板有线网口的IP地址了</p><p>[[File:media/image336.png|576x200px]]Debian Bullseye默认没有安装Java的编译工具和运行环境</p></li></ol== 蓝牙的连接方法 == <ol style="list-style-type: decimallower-alpha;"><li><p>首先选择'''Settings'''可以使用下面的命令安装openjdk,Debian Bullseye中最新版本为openjdk-17</p><p>[[File{| class="wikitable" style="width:media/image316.png800px;" |-|234x83px]]</p></li><li><p>然后选择orangepi@orangepi:~$ '''Bluetoothsudo apt install -y openjdk-17-jdk'''</p><p>[[File:media/image337.png|377x111px]]</p>}</li><li><p>然后打开'''Bluetooth Enable'''安装完后可以查看下Java的版本</p><p>[[File{| class="wikitable" style="width:media/image338.png800px;" |-|384x180px]]</p></li><li><p>然后点击orangepi@orangepi:~$ '''Pair new devicejava --version'''开始扫描周围的蓝牙设备</p><p>[[File:media/image339.png|389x129px]]</p>}</li><li><p>搜索到的蓝牙设备会在编写Java版本的'''Available deviceshello_world.java'''下面显示出来</p><p>[[File{| class="wikitable" style="width:media/image340.png800px;" |-|407x181px]]</p></li><li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择orangepi@orangepi:~$ '''Pairvim hello_world.java'''选项</p><p>[[File:media/image341.png|420x115px]]public class hello_world</p></li><li><p>这里测试的是开发板和'''安卓手机'''蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程{</p>:<p>public static void main(String[[File:media/image342.png|178x200px]]args)</p></li><li>:<p>配对完成后,再打开'''Paired devices'''下面就可以看到已配对的蓝牙设备{</p>::<p>[[File:media/image343System.out.png|430x136px]]println(&quot;Hello World!&quot;);</p></li><li>:<p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击'''Accept'''就可以开始接收手机发过来的图片了}</p><p>[[File:media/image344.png|433x113px]]}</p>|}</li><li><p>开发板Android系统蓝牙接收到的图片可以打开然后编译运行'''Received fileshello_world.java'''中查看</p><p>[[File:media/image345.png{|432x209px]]</p></li></ol> <span idclass="usb摄像头使用方法wikitable"></span>== USB摄像头使用方法 == <ol style="list-style-typewidth: decimal800px;"><li><p>首先在开发板的USB接口中插入USB(UVC协议)摄像头</p></li>|-<li><p>USB摄像头如果识别正常,在/dev下会生成相应的video设备节点</p>| <p>consoleorangepi@orangepi:/ # ~$ '''ls /dev/video0'''</p><p>/dev/video0</p></li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[\l|'''ADB的使用方法''']]一小节的说明</p></li><li><p>在开发板资料下载页面的'''官方工具javac hello_world.java'''中下载USB摄像头测试APP</p><p>[[File:media/image346.png|576x172px]]</p><p>[[File:media/image347.png|575x145px]]</p></li><li><p>然后使用adb命令安装USB摄像头测试APP到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p><p>testorangepi@testorangepi:~$ '''adb install usbcamera.apkjava hello_world'''</p></li><li><p>安装完后在Android的桌面可以看到USB摄像头的启动图标Hello World!</p><p>[[File:media/image348.png|576x132px]]}</pli></liol><li><p>然后双击打开USB摄像头APP就可以看到USB摄像头的输出视频了</p></li></ol> <span id="android系统root说明"></span>== Android系统ROOT说明 ==
'''<span classid="markdebian-bookworm系统">Orange Pi发布的Android系统已经ROOT,可以使用下面的方法来测试。</span>'''
<ol style="list-style-type: decimal;"><li><p>在开发板资料下载页面的'''官方工具'''中下载'''rootcheck.apk'''</p><p>[[File:media/image346.png|576x172px]]</p><p>[[File:media/image349.png|575x124px]]</p></li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[\l|'''ADB的使用方法''']]一小节的说明</p></li><li><p>然后使用adb命令安装rootcheck.apk到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p><p>test@test:~$ '''adb install rootcheck.apk'''</p></li><li><p>安装完后在Android的桌面可以看到ROOT测试工具的启动图标</p><p>[[File:media/image350.png|575x119px]]</p></li><li><p>第一次打开'''ROOT测试工具'''后的显示界面如下图所示</p><p>[[File:media/image351.png|575x162px]]</p></li><li><p>然后就可以点击'''CHECK NOW'''开始Android系统的ROOT状态的检查,检查完后的显示如下所示,可以看到Android系统已取得ROOT权限</p><p>[[File:media/image352.png|575x161px]]</p></li></ol> <span id="使用miracastreceiver将手机屏幕投屏到开发板的方法"></span>=Debian Bookworm系统 = 使用MiracastReceiver将手机屏幕投屏到开发板的方法 ==
<ol style="list-style-type: decimal;">
<li><p>首先请确保开发板和手机都连接了同一个WIFI热点,开发板连接WIFI的方法请参考[[\l|'''WI-FI的连接方法''']]一小节的说明Debian Bookworm默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p></li><li><p>然后打开开发板安卓系统中的'''MiracastReceiver'''应用</p><p>[[Fileol style="list-style-type:media/image353.png|576x124px]]</p></lilower-alpha;"><li><p>'''MiracastReceiver'''打开后的界面如下所示gcc的版本如下所示</p><div {| class="figurewikitable" style="width:800px;"> [[File:media/image354.png|420x236px|Screenshot_20230625-193535]]| </div></li><li><p>然后在手机设置中找到投屏功能,orangepi@orangepi:~$ '''这里以小米12S Pro手机为例gcc --version''',其他品牌的手机请自行研究下,如下图所示,点击红色方框位置的按钮即可打开手机的投屏功能</p><p>[[File:media/image355gcc (Debian 12.2.0-14) 12.2.png|167x266px]]0</p><p>Copyright (C) 2022 Free Software Foundation, Inc.</lip><li><p>等待一段时间后在手机上就能看到搜索到的可连接的设备,然后我们选择开发板对应的设备连接即可This is free software; see the source for copying conditions. There is NO</p><p>[[File:media/image356warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.png|146x308px]]</p>|}</li><li><p>然后在开发板的编写C语言的'''MiracastReceiver'''应用界面会弹出下图所示的选择框,这里我们选择''hello_world.c'Accept'''即可程序</p><p>[[File{| class="wikitable" style="width:media/image357.png800px;" |-|468x265px]]</p></li><li><p>然后就能在开发板连接的HDMI屏幕上看到手机屏幕的内容了orangepi@orangepi:~$ '''vim hello_world.c'''</p><p>[[File:media/image358#include &lt;stdio.png|576x352px]]h&gt;</p></li></ol>
<span id="pin-接口-gpiouartspi-测试"></span>
== 26pin 接口 GPIO、UART、SPI 测试 ==
<span id="pin的gpio口测试方法"p>int main(void)</spanp>=== 26pin的GPIO口测试方法 ===<p>{</p>:<p>printf(&quot;Hello World!\n&quot;);</p>
<ol style="list-style-type: decimal;">
<li><p>首先在桌面中打开wiringOP APP</p>
<p>[[File:media/image359.png|576x133px]]</p></li>
<li><p>然后点击'''GPIO_TEST'''按钮打开GPIO测试界面</p>
<p>[[File:media/image360.png|413x77px]]</p></li>
<li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox'''按钮跟26pin引脚('''左下角的PC1/PI16/PI6/PH10是13pin引脚中的GPIO口''')是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平设置为低电平;当点击右边的'''GPIO READALL'''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息。</p>
<p>[[File:media/image361.png|425x236px]]</p></li>
<li><p>然后点击'''GPIO READALL'''按钮,输出信息如下图所示:</p>
<div class="figure">
[[File:media/image362.png|444x249px|Screenshot_20230609-155643]] </div></li><li><p>开发板26pin中总共有17个GPIO口可以使用('''如果加上13pin中的4个GPIO口,那么总共就是有21个'''),下面以7号引脚——对应GPIO为PC9 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平。首先点击7号引脚对应的'''CheckBox'''按钮,当按钮为选中状态时,7号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3.3v''',说明设置高电平成功</p><p>[[File:media/image363.png|432x210px]]return 0;</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为'''OUT''',引脚电平为高电平}</p><p>[[File:media/image364.png|430x207px]]</p>}</li><li><p>再次点击下图的'''CheckBox然后编译运行'''按钮取消勾选状态,7号引脚会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功</p><p>[[File:media/image365hello_world.png|434x212px]]</p></li><li><p>然后点击c'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为OUT,引脚电平为低电平</p><p>[[File:media/image366.png{|438x217px]]</p></li></ol> <span idclass="pin的uart测试方法wikitable"></span>=== 26pin的UART测试方法 === <ol style="list-style-typewidth: decimal800px;"><li>|-| <p>Android中默认打开了orangepi@orangepi:~$ '''UART5''',对应的设备节点为'''/dev/ttyAS5gcc -o hello_world hello_world.c'''</p><p>apollo-p2orangepi@orangepi:/ # ~$ '''ls ./dev/ttyAS5hello_world'''</p><p>/dev/ttyAS5Hello World!</p>|}</li><li><p>首先在桌面中打开wiringOP APP</pol><p>[[File:media/image359.png|576x133px]]</p></li><li><p>然后点击'''UART_TEST'''按钮打开UART测试界面Debian Bookworm默认安装有Python3</p><p>[[Fileol style="list-style-type:media/image367.png|505x94px]]</p></lilower-alpha;"><li><p>wiringOP的串口测试界面如下图所示Python具体版本如下所示</p></li></ol[[File:media/image368.png{|511x133px]] <ol startclass="5wikitable" style="list-style-typewidth: decimal800px;"><li>|-| <p>然后在选择框中选择orangepi@orangepi:~$ '''/dev/ttyAS5python3'''节点</p><p>Python 3.11.2 (main, Mar 13 2023, 12:18:29) [[File:media/image369GCC 12.2.png|499x269px]0]on linux</p></li><li><p>再在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开'''/dev/ttyAS5'''节点,打开成功后,'''OPEN'''按钮变为不可选中状态,'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p></lip>&gt;&gt;&gt;</olp>|}[[File:media/image370.png{|334x107px]] <ol startclass="7wikitable" style="listbackground-style-typecolor:#ffffdc;width: decimal800px;"><li>然后使用杜邦线短接uart5的rx和tx引脚</li></ol> {| class="wikitable"
|-
|<big><p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></big>| }</li><li><p>编写Python语言的'''hello_world.py'''程序</p>{| class="wikitable" style="text-alignwidth: left800px;"| uart5
|-
| tx引脚<p>orangepi@orangepi:~$ '''vim hello_world.py'''</p><p>print('Hello World!')</p>| }</li><li><p>运行'''hello_world.py'''的结果如下所示</p>{| class="wikitable" style="text-alignwidth: left800px;"| 对应26pin的8号引脚
|-
| rx引脚| style="text-align<p>orangepi@orangepi: left;"| 对应26pin的10号引脚~$ '''python3 hello_world.py'''</p><p>Hello World!</p>
|}
</li></ol>
</li>
<li><p>Debian Bookworm默认没有安装Java的编译工具和运行环境</p>
<ol style="list-style-type: lower-alpha;">
<li><p>可以使用下面的命令安装openjdk,Debian Bookworm中最新版本为openjdk-17</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-17-jdk'''</p>
|}
</li>
<li><p>安装完后可以查看下Java的版本</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''java --version'''</p>
|}
</li>
<li><p>编写Java版本的'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''vim hello_world.java'''</p>
<p>public class hello_world</p>
<p>{</p>
:<p>public static void main(String[] args)</p>
:<p>{</p>
::<p>System.out.println(&quot;Hello World!&quot;);</p>
:<p>}</p>
<p>}</p>
|}
</li>
<li><p>然后编译运行'''hello_world.java'''</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>orangepi@orangepi:~$ '''javac hello_world.java'''</p>
<p>orangepi@orangepi:~$ '''java hello_world'''</p>
<p>Hello World!</p>
|}
</li></ol>
</li></ol>
<ol start="8" style="list-style-type: decimal;"><li>然后可以在下面的发送编辑框中输入一段字符,点击'''SEND'''按钮开始发送</li></ol> [[File:media/image371.png|376x189px]] <ol start="9" style="list-style-type: decimal;"><li>如果一切正常,接收框内会显示已接收到的字符串</li></ol> [[File:media/image372.png|382x196px]] <span id="pin的spi测试方法ubuntu-focal系统"></span>=== 26pin的SPI测试方法 === <ol style="list-style-type: decimal;"><li><p>26pin中可以用的SPI为SPI1,对应的设备节点为'''/dev/spidev1.1'''</p><p>[[File:media/image359.png|576x133px]]</p></li><li><p>这里演示下通过'''w25q64'''模块来测试SPI1接口,首先在SPI1接口接入w25q64模块</p></li></ol>
'''<span class="mark">如果没有</span>w25q64模块也没关系,因为开发板上有一个SPIFlash接在了SPI0上,在安卓中SPI0的配置默认也打开了,所以我们也可以直接使用板载的SPIFlash测试。'''== Ubuntu Focal系统 ===
<ol start="3" style="list-style-type: decimal;"><li><p>然后在桌面中打开wiringOP APPUbuntu Focal默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p></liol style="list-style-type: lower-alpha;"><li><p>然后点击gcc的版本如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''SPI_TESTgcc --version'''按钮打开SPI的测试界面</p><p>[[File:media/image373gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.png|518x96px]]0</p><p>Copyright (C) 2019 Free Software Foundation, Inc.</lip><li><p>然后在左上角选择spi的设备节点,如果直接测试板载的SPIFlash,那么保持默认的'''/dev/spidev0.0'''即可,如果在26pin的spi1上接了'''w25q64'''模块,那么就请选择'''/dev/spidev1This is free software; see the source for copying conditions.1'''There is NO</p><p>[[File:media/image374warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.png|296x135px]]</p>|}</li><li><p>然后点击编写C语言的'''OPENhello_world.c'''按钮初始化SPI程序</p></li></ol[[File:media/image375.png{|295x168px]] <ol startclass="7wikitable" style="list-style-typewidth: decimal800px;"><li>|-| <p>然后填充需要发送的字节,比如读取板载SPIFlash的ID信息,在data[0]中填入地址0x9f,然后点击orangepi@orangepi:~$ '''TRANSFERvim hello_world.c'''按钮</p><p>[[File:media/image376#include &lt;stdio.png|294x169px]]h&gt;</p></li><li><p>最后APP会显示读取到的板载SPI Flash的ID信息</p></li></ol>
[[File:media/image377.png|299x217px]]
<ol start="9" style="list-style-type: decimal;"><li><p>如果是读取接在26pin SPI1上的w25q64模块,那么读取到的ID信息如下图所示int main(void)</p><p>[[File:media/image378.png|302x201px]]{</p></li><li>:<p>w25q64模块的MANUFACTURER ID为EFh,Device ID为4017h,跟上面读取到的值是对应的(h代表是16进制)printf(&quot;Hello World!\n&quot;);</p><p>[[File:media/image379.png|336x113px]]</p></li></ol>
<span id="pin的i2c测试方法"></span>
=== 26pin的I2C测试方法 ===
<ol style="list-style-type: decimal;"><li><p>Android中默认打开了26pin中的i2c3,对应的设备节点为'''/dev/i2c-3'''return 0;</p><p>apollo-p2:/ # '''ls /dev/i2c-3'''}</p><p>/dev/i2c-3</p></li><li><p>首先在桌面中打开wiringOP APP</p>|}<p>[[File:media/image359.png|576x133px]]</p></li><li><p>然后点击'''I2C_TEST然后编译运行'''按钮打开i2c的测试界面</p><p>[[File:media/image380hello_world.png|506x110px]]</p></li><li><p>wiringOP的i2c测试界面如下图所示,可以看到默认使用的i2c为'''/dev/i2c-3c''',所以我们无需重新选择了</p></li></ol[[File:media/image381.png{|353x159px]] <ol startclass="5wikitable" style="list-style-typewidth: decimal800px;"><li><p>然后在26pin的i2c3引脚上接一个i2c设备,这里以ds1307 rtc模块为例</p><p>[[File:media/image186.png|121x103px]]</p></li></ol> {| class="wikitable"
|-
| style="text<p>orangepi@orangepi:~$ '''gcc -aligno hello_world hello_world.c'''</p><p>orangepi@orangepi: left;"| ~$ '''RTC模块的引脚./hello_world'''</p><p>Hello World!</p>| }</li></ol></li><li><p>Ubuntu Focal默认安装有Python3</p><ol style="textlist-style-aligntype: leftlower-alpha;"><li><p>Python3具体版本如下所示</p>{| '''开发板26pin对应的引脚'''class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''python3'''</p><p>Python 3.8.10 (default, Nov 14 2022, 12:59:47)</p><p>[GCC 9.4.0] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;</p>|}{| class="wikitable" style="textbackground-aligncolor: left#ffffdc;width:800px;"|-| <big><p>'''5V使用Ctrl+D快捷键可退出python的交互模式。'''</p></big>| }</li><li><p>编写Python语言的'''hello_world.py'''程序</p>{| class="wikitable" style="text-alignwidth: left800px;"| -| <p>orangepi@orangepi:~$ '''2号引脚vim hello_world.py'''</p><p>print('Hello World!')</p>|}</li><li><p>运行'''hello_world.py'''的结果如下所示</p>{| class="wikitable" style="width:800px;"
|-
| style="text-align<p>orangepi@orangepi: left;"| ~$ '''GNDpython3 hello_world.py'''</p><p>Hello World!</p>| }</li></ol></li><li><p>Ubuntu Focal默认没有安装Java的编译工具和运行环境</p><ol style="textlist-alignstyle-type: leftlower-alpha;"><li><p>可以使用下面的命令安装openjdk-17</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''6号引脚sudo apt install -y openjdk-17-jdk'''</p>|}</li><li><p>安装完后可以查看下Java的版本</p>{| class="wikitable" style="width:800px;"
|-
| <p>orangepi@orangepi:~$ '''java --version'''</p><p>openjdk 17.0.2 2022-01-18</p><p>OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)</p><p>OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)</p>|}</li><li><p>编写Java版本的'''hello_world.java'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''vim hello_world.java'''</p><p>public class hello_world</p><p>{</p>:<p>public static void main(String[] args)</p>:<p>{</p>::<p>System.out.println(&quot;Hello World!&quot;);</p>:<p>}</p><p>}</p>|}</li><li><p>然后编译运行'''hello_world.java'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p>orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p>|}</li></ol></li></ol> <span id="ubuntu-jammy系统"></span> === Ubuntu Jammy系统 === <ol style="list-style-type: decimal;"><li><p>Ubuntu Jammy默认安装有gcc编译工具链,可以直接在开发板的Linux系统中编译C语言的程序</p><ol style="list-style-type: lower-alpha;"><li><p>gcc的版本如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''gcc --version'''</p><p>gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) '''11.3.0'''</p><p>Copyright (C) 2021 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO</p><p>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p>|}</li><li><p>编写C语言的'''hello_world.c'''程序</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''vim hello_world.c'''</p><p>#include &lt;stdio.h&gt;</p>  <p>int main(void)</p><p>{</p>:<p>printf(&quot;Hello World!\n&quot;);</p>  :<p>return 0;</p><p>}</p>|}</li><li><p>然后编译运行'''hello_world.c'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''gcc -o hello_world hello_world.c'''</p><p>orangepi@orangepi:~$ '''./hello_world'''</p><p>Hello World!</p>|}</li></ol></li><li><p>Ubuntu Jammy默认安装有Python3</p><ol style="list-style-type: lower-alpha;"><li><p>Python3具体版本如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3'''</p><p>Python 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0] on linux</p><p>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.</p><p>&gt;&gt;&gt;</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''使用Ctrl+D快捷键可退出python的交互模式。'''</p></big>|}</li><li><p>编写Python语言的'''hello_world.py'''程序</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''vim hello_world.py'''</p><p>print('Hello World!')</p>|}</li><li><p>运行'''hello_world.py'''的结果如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''python3 hello_world.py'''</p><p>Hello World!</p>|}</li></ol></li><li><p>Ubuntu Jammy默认没有安装Java的编译工具和运行环境</p><ol style="list-style-type: lower-alpha;"><li><p>可以使用下面的命令安装openjdk-18</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo apt install -y openjdk-18-jdk'''</p>|}</li><li><p>安装完后可以查看下Java的版本</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''java --version'''</p><p>openjdk 18.0.2-ea 2022-07-19</p><p>OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)</p><p>OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)</p>|}</li><li><p>编写Java版本的'''hello_world.java'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''vim hello_world.java'''</p><p>public class hello_world</p><p>{</p>:<p>public static void main(String[] args)</p>:<p>{</p>::<p>System.out.println(&quot;Hello World!&quot;);</p>:<p>}</p><p>}</p>|}</li><li><p>然后编译运行'''hello_world.java'''</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''javac hello_world.java'''</p><p>orangepi@orangepi:~$ '''java hello_world'''</p><p>Hello World!</p>|}</li></ol></li></ol> <span id="上传文件到开发板linux系统中的方法"></span> == 上传文件到开发板Linux系统中的方法 == <span id="在ubuntu-pc中上传文件到开发板linux系统中的方法"></span>=== 在Ubuntu PC中上传文件到开发板Linux系统中的方法 === ==== 使用scp命令上传文件的方法 ==== <ol style="list-style-type: decimal;"><li><p>使用scp命令可以在Ubuntu PC中上传文件到开发板的Linux系统中,具体命令如下所示</p><ol style="list-style-type: lower-alpha;"><li><p>'''file_path:'''需要替换为要上传文件的路径</p></li><li><p>'''orangepi:'''为开发板linux系统的用户名,也可以替换成其它的,比如root</p></li><li><p>'''192.168.xx.xx:''' 为开发板的IP地址,请根据实际情况进行修改</p></li><li><p>'''/home/orangepi:''' 开发板linux系统中的路径,也可以修改为其它的路径</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''scp file_path orangepi@192.168.xx.xx:/home/orangepi/'''</p>|}</li></ol></li><li><p>如果要上传文件夹,需要加上-r参数</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''scp <span style="color:#FF0000">-r</span> dir_path orangepi@192.168.xx.xx:/home/orangepi/'''</p>|}</li><li><p>scp还有更多的用法,请使用下面的命令查看man手册</p>{| class="wikitable" style="width:800px;" |-| test@test:~$ '''man scp'''|}</li></ol> ==== 使用filezilla上传文件的方法 ==== <ol style="list-style-type: decimal;"><li><p>首先在Ubuntu PC中安装filezilla</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt install -y filezilla'''</p>|}</li><li><p>然后使用下面的命令打开filezilla</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''filezilla'''</p>|}</li><li><p>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的</p><div class="figure"> [[File:zero3-img279.png]] </div></li><li><p>连接开发板的方法如下图所示</p> <div class="figure"> [[File:zero3-img280.png]] </div></li></ol><ol start="5" style="list-style-type: decimal;"><li><p>然后选择'''保存密码''',再点击'''确定'''</p><p>[[File:zero3-img281.png]]</p></li><li><p>然后选择'''总是信任该主机''',再点击'''确定'''</p> <div class="figure"> [[File:zero3-img282.png]] </div></li></ol><ol start="7" style="list-style-type: decimal;"><li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了</li> <div class="figure"> [[File:zero3-img283.png]] </div></ol><ol start="8" style="list-style-type: decimal;"><li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Ubuntu PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了。</li> <div class="figure"> [[File:zero3-img284.png]] </div></ol><ol start="9" style="list-style-type: decimal;"><li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li><li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol> <span id="在windows-pc中上传文件到开发板linux系统中的方法"></span> === 在Windows PC中上传文件到开发板Linux系统中的方法 === <span id="使用filezilla上传文件的方法-1"></span>==== 使用filezilla上传文件的方法 ==== # 首先下载filezilla软件Windows版本的安装文件,下载链接如下所示 ::{| class="wikitable" style="width:800px;" |-| [https://filezilla-project.org/download.php?type=client '''https://filezilla-project.org/download.php?type=client''']|}::[[File:zero3-img285.png]] ::[[File:zero3-img286.png]] <ol start="2" style="list-style-type: decimal;"><li><p>下载的安装包如下所示,然后双击直接安装即可</p>{| class="wikitable" style="width:800px;" |-| <p>'''FileZilla_Server_1.5.1_win64-setup.exe'''</p>|} 安装过程中,下面的安装界面请选择'''Decline''',然后再选择'''Next&gt;''' <div class="figure"> [[File:zero3-img287.png]] </div></li></ol><ol start="3" style="list-style-type: decimal;"><li>filezilla打开后的界面如下所示,此时右边远程站点下面显示的是空的 <div class="figure"> [[File:zero3-img288.png]] </div></li></ol><ol start="4" style="list-style-type: decimal;"><li>连接开发板的方法如下图所示: <div class="figure"> [[File:zero3-img289.png]] </div></li></ol><ol start="5" style="list-style-type: decimal;"><li>然后选择'''保存密码''',再点击'''确定''' <div class="figure"> [[File:zero3-img290.png]] </div></li></ol><ol start="6" style="list-style-type: decimal;"><li>然后选择'''总是信任该主机''',再点击'''确定''' <div class="figure"> [[File:zero3-img291.png]] </div></li></ol><ol start="7" style="list-style-type: decimal;"><li>连接成功后在filezilla软件的右边就可以看到开发板linux文件系统的目录结构了 <div class="figure"> [[File:zero3-img292.png]] </div></li></ol><ol start="8" style="list-style-type: decimal;"><li>然后在filezilla软件的右边选择要上传到开发板中的路径,再在filezilla软件的左边选中Windows PC中要上传的文件,再点击鼠标右键,再点击上传选项就会开始上传文件到开发板中了 <div class="figure"> [[File:zero3-img293.png]] </div></li></ol><ol start="9" style="list-style-type: decimal;"><li><p>上传完成后就可以去开发板linux系统中的对应路径中查看上传的文件了</p></li><li><p>上传文件夹的方法和上传文件的方法是一样的,这里就不再赘述了</p></li></ol> == 开关机logo使用说明 == <ol style="list-style-type: decimal;"><li><p>开关机logo默认只在桌面版的系统中才会显示</p></li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''false'''可以关闭开关机logo</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''<span style="color:#FF0000">bootlogo=false</span>'''</p>|}</li><li><p>在'''/boot/orangepiEnv.txt'''中设置'''bootlogo'''变量为'''true'''可以开启开关机logo</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo vim /boot/orangepiEnv.txt'''</p><p>verbosity=1</p><p>'''<span style="color:#FF0000">bootlogo=true</span>'''</p>|}</li><li><p>开机logo图片在linux系统中的位置为</p>{| class="wikitable" style="width:800px;" |-| <p>'''/usr/share/plymouth/themes/orangepi/watermark.png'''</p>|}</li><li><p>替换开机logo图片后需要运行下命令才能生效</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo update-initramfs -u'''</p>|}</li></ol> == 关机和重启开发板的方法 == <ol style="list-style-type: decimal;"><li><p>在Linux系统运行的过程中,如果直接拔掉电源断电,可能会导致文件系统丢失某些数据,建议断电前先使用'''poweroff'''命令关闭开发板的Linux系统,然后再拔掉电源</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo poweroff'''</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''注意,关闭开发板后需要重新拔插电源才能开机。'''</p></big>|}</li><li><p>使用'''reboot'''命令即可重启开发板中的Linux系统</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p>|}</li></ol> <span id="linux-sdkorangepi-build使用说明"></span> = '''Linux SDK——orangepi-build使用说明''' = == 编译系统需求 == Linux SDK,即'''orangepi-build''',只支持在安装有'''<span style="color:#FF0000">Ubuntu 22.04</span>'''的X64电脑上运行,所以下载orangepi-build前,请首先确保自己电脑已安装的Ubuntu版本是Ubuntu 22.04。查看电脑已安装的Ubuntu版本的命令如下所示,如果Release字段显示的不是'''<span style="color:#FF0000">22.04</span>''',说明当前使用的Ubuntu版本不符合要求,请更换系统后再进行下面的操作。 {| class="wikitable" style="width:800px;" |-| test@test:~$ '''lsb_release -a''' No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: '''<span style="color:#FF0000">22.04</span>''' Codename: '''jammy'''|} 如果电脑安装的是Windows系统,没有安装有Ubuntu 22.04的电脑,可以考虑使用'''VirtualBox'''或者'''VMware'''来在Windows系统中安装一个Ubuntu 22.04虚拟机。但是请注意,不要在WSL虚拟机上编译orangepi-build,因为orangepi-build没有在WSL虚拟机中测试过,所以无法确保能正常在WSL中使用orangepi-build,另外请不要在'''开发板'''的Linux系统中使用orangepi-build。Ubuntu 22.04 '''<span style="color:#FF0000">amd64</span>'''版本的安装镜像下载地址为: {| class="wikitable" style="width:800px;" |-| [https://repo.huaweicloud.com/ubuntu-releases/21.04/ubuntu-21.04-desktop-amd64.iso '''https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu-22.04-desktop-amd64.iso''']|} 在电脑中或者虚拟机中安装完Ubuntu 22.04后,请先设置Ubuntu 22.04的软件源为清华源(或者其它你觉得速度快的国内源),不然后面安装软件的时候很容易由于网络原因而出错。替换清华源的步骤如下所示: <ol style="list-style-type: lower-alpha;"><li>替换清华源的方法参考这个网页的说明即可。 {| class="wikitable" style="width:800px;" |-| [https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ '''https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/''']|}</li></ol><ol start="2" style="list-style-type: lower-alpha;"><li><p>注意Ubuntu版本需要切换到22.04。</p><p>[[File:zero3-img294.png]]</p></li><li><p>需要替换的'''/etc/apt/sources.list'''文件的内容为:</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo mv /etc/apt/sources.list cat /etc/apt/sources.list.bak'''</p><p>test@test:~$ '''sudo vim /etc/apt/sources.list'''</p><p># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse</p><p>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse</p>  <p># 预发布软件源,不建议启用</p><p># deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p><p># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse</p>|}</li><li><p>替换完后需要更新下包信息,并确保没有报错。</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt-get update'''</p>|}</li><li><p>'''<span style="color:#FF0000">另外,由于内核和U-boot等源码都是存放在GitHub上的,所以编译镜像的时候请确保电脑能正常从GitHub下载代码,这点是非常重要的。</span>'''</p></li></ol> <span id="获取linux-sdk的源码"></span> == 获取linux sdk的源码 == === 从github下载orangepi-build === linux sdk指的是orangepi-build这套代码,orangepi-build是基于armbian build编译系统修改而来的,使用orangepi-build可以编译出多个版本的linux镜像。使用下面的命令可以下载orangepi-build的代码: {| class="wikitable" style="width:800px;" |-| test@test:~$ '''sudo apt-get update''' test@test:~$ '''sudo apt-get install -y git''' test@test:~$ '''git clone https://github.com/orangepi-xunlong/orangepi-build.git <span style="color:#FF0000">-b next</span>'''|} {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''注意,使用H618 Soc的开发板是需要下载orangepi-build的<span style="color:#FF0000">next</span>分支源码的,上面的git clone命令需要指定orangepi-build源码的分支为next。'''</big> [[File:zero3-img295.png]]|} {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''通过git clone命令下载orangepi-build的代码是不需要输入github账号的用户名和密码的(下载本手册中的其他代码也是一样的),如果如输入git clone命令后Ubuntu PC提示需要输入github账号的用户名和密码,一般都是git clone后面的orangepi-build仓库的地址输入错误了,请仔细检查命令拼写是否有错误,而不是以为我们这里忘了提供github账号的用户名和密码。'''</big>|} H618系列开发板当前使用的u-boot和linux内核版本如下所示: {| class="wikitable" style="width:800px;" |-| style="text-align: left;"| '''分支'''| style="text-align: left;"| '''u-boot版本'''| style="text-align: left;"| '''linux内核版本'''|-| style="text-align: left;"| '''current'''| style="text-align: left;"| '''u-boot v2018.05'''| style="text-align: left;"| '''linux5.4'''|-| style="text-align: left;"| '''next'''| style="text-align: left;"| '''u-boot v2021.07'''| style="text-align: left;"| '''linux6.1'''|} {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''这里所说的分支和orangepi-build源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的。''' '''目前全志提供的linux5.4 bsp内核我们定义为current分支。最新的linux6.1 LTS内核定义为next分支。'''</big>|} orangepi-build下载完后会包含下面的文件和文件夹: <ol style="list-style-type: lower-alpha;"><li><p>'''build.sh''': 编译启动脚本</p></li><li><p>'''external''': 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等</p></li><li><p>'''LICENSE''': GPL 2许可证文件</p></li><li><p>'''README.md''': orangepi-build说明文件</p></li><li><p>'''scripts''': 编译linux镜像的通用脚本</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls'''</p><p>'''build.sh &nbsp;&nbsp; external &nbsp;&nbsp; LICENSE &nbsp;&nbsp; README.md &nbsp;&nbsp; scripts'''</p>|}{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''如果是从github下载的orangepi-build的代码,下载完后你可能会发现orangepi-build中并没有包含u-boot和linux内核的源码,也没有编译u-boot和linux内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的github仓库或者某些服务器上了(下文会详述其地址)。orangepi-build在脚本和配置文件中会指定u-boot、linux内核和交叉编译工具链的地址,运行orangepi-build时,当其发现本地没有这些东西,会自动去相应的地方下载的。'''</p></big>|}</li></ol> === 下载交叉编译工具链 === orangepi-build第一次运行的时候会自动下载交叉编译工具链放在'''toolchains'''文件夹中,每次运行orangepi-build的build.sh脚本后,都会检查'''toolchains'''中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载。 <div class="figure"> [[File:zero3-img296.png|1400px]] </div>交叉编译工具链在中国境内的镜像网址为清华大学的开源软件镜像站: {| class="wikitable" style="width:800px;" |-| [https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/ '''https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/''']|} '''toolchains'''下载完后会包含多个版本的交叉编译工具链: {| class="wikitable" style="width:800px;" |-| test@test:~/orangepi-build$ '''ls toolchains/''' gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu  gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu  gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf  gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi  gcc-linaro-aarch64-none-elf-4.8-2013.11_linux gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu  gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf  gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf  gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu  gcc-linaro-arm-none-eabi-4.8-2014.04_linux|} 编译H618 Linux内核源码使用的交叉编译工具链为: <ol style="list-style-type: lower-alpha;"><li><p>linux5.4</p>{| class="wikitable" style="width:800px;" |-| <p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>|}</li><li><p>linux6.1</p>{| class="wikitable" style="width:800px;" |-| <p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>|}</li></ol><p>编译H618 u-boot源码使用的交叉编译工具链为:</p> <!-- --><ol style="list-style-type: lower-alpha;"><li><p>v2018.05</p>{| class="wikitable" style="width:800px;" |-| <p>'''gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi'''</p>|}</li><li><p>v2021.07</p>{| class="wikitable" style="width:800px;" |-| <p>'''gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu'''</p>|}</li></ol> === orangepi-build完整目录结构说明 === <ol style="list-style-type: decimal;"><li><p>orangepi-build仓库下载完后并不包含linux内核、u-boot的源码以及交叉编译工具链,linux内核和u-boot的源码存放在独立的git仓库中</p><ol style="list-style-type: lower-alpha;"><li><p>linux内核源码存放的git仓库如下,注意切换linux-orangepi仓库的分支为</p><ol style="list-style-type: none;"><li><p>a) Linux5.4</p>{| class="wikitable" style="width:800px;" |-| <p>https://github.com/orangepi-xunlong/linux-orangepi/tree/'''orange-pi-5.4-sun50iw9'''</p>|}</li><li><p>b) Linux6.1</p>{| class="wikitable" style="width:800px;" |-| <p>https://github.com/orangepi-xunlong/linux-orangepi/tree/'''orange-pi-6.1-sun50iw9'''</p>|}</li></ol></li><li><p>u-boot源码存放的git仓库如下,注意切换u-boot-orangepi仓库的分支为</p><ol style="list-style-type: none;"><li><p>a) v2018.05</p>{| class="wikitable" style="width:800px;" |-| <p>https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''v2018.05-h618'''</p>|}</li><li><p>b) v2021.07</p>{| class="wikitable" style="width:800px;" |-| https://github.com/orangepi-xunlong/u-boot-orangepi/tree/'''v2021.07-sunxi'''|}</li></ol></li></ol></li></ol><ol start="2" style="list-style-type: decimal;"><li><p>orangepi-build第一次运行的时候会去下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有</p><ol style="list-style-type: lower-alpha;"><li><p>'''build.sh''': 编译启动脚本</p></li><li><p>'''external''': 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的rootfs压缩包也存放在external中</p></li><li><p>'''kernel''': 存放linux内核的源码</p></li><li><p>'''LICENSE''': GPL 2许可证文件</p></li><li><p>'''README.md''': orangepi-build说明文件</p></li><li><p>'''output''': 存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件</p></li><li><p>'''scripts''': 编译linux镜像的通用脚本</p></li><li><p>'''toolchains''': 存放交叉编译工具链</p></li><li><p>'''u-boot''': 存放u-boot的源码</p></li><li><p>'''userpatches''': 存放编译脚本需要用到的配置文件</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls'''</p><p>'''build.sh &nbsp;&nbsp; external &nbsp;&nbsp; kernel &nbsp;&nbsp; LICENSE &nbsp;&nbsp; output &nbsp;&nbsp; README.md &nbsp;&nbsp; scripts &nbsp;&nbsp; toolchains &nbsp;&nbsp; u-boot &nbsp;&nbsp; userpatches'''</p>|}</li></ol></li></ol> == 编译u-boot == <ol style="list-style-type: decimal;"><li><p>运行build.sh脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''U-boot package''',然后回车</p><div class="figure"> [[File:zero3-img297.png]] </div></li><li><p>接着选择开发板的型号</p><p>[[File:zero3-img298.png]]</p></li><li><p>然后选择u-boot的分支类型</p><ol style="list-style-type: lower-alpha;"><li><p>current分支会编译linux5.4镜像需要使用的u-boot v2018.05版本的代码</p></li><li><p>next分支会编译linux6.1镜像需要使用的u-boot v2021.07版本的代码</p><p>[[File:zero3-img299.png]]</p></li></ol></li><li><p>如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择</p><ol style="list-style-type: lower-alpha;"><li><p>如果购买的开发板为1.5GB内存大小的,请选择第一项</p></li><li><p>如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项</p><p>[[File:zero3-img299-1.png|1000px]]</p></li></ol></li><li><p>然后就会开始编译u-boot,编译next分支时提示的部分信息说明如下所示:</p><ol style="list-style-type: lower-alpha;"><li><p>u-boot源码的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiling u-boot [ '''v2021.07''' ]</p>|}</li><li><p>交叉编译工具链的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p>|}</li><li><p>编译生成的u-boot deb包的路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Target directory [ '''orangepi-build/output/debs/u-boot''' ]</p>|}</li><li><p>编译生成的u-boot deb包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ '''linux-u-boot-next-orangepizero3_x.x.x_arm64.deb''' ]</p>|}</li><li><p>编译使用的时间</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Runtime [ '''1 min''' ]</p>|}</li><li><p>重复编译u-boot的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepizero3 BRANCH=next BUILD_OPT=u-boot''' ]</p>|}</li></ol></li><li><p>查看编译生成的u-boot deb包</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls output/debs/u-boot/'''</p><p>'''linux-u-boot-next-orangepizero3_x.x.x_arm64.deb'''</p>|}</li><li><p>orangepi-bulid编译系统编译u-boot源码时首先会将u-boot的源码和github服务器的u-boot源码进行同步,所以如果想修改u-boot的源码,首先需要关闭源码的下载更新功能('''需要完整编译过一次u-boot后才能关闭这个功能,否则会提示找不到u-boot的源码'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p><p>......</p><p>IGNORE_UPDATES=&quot;'''<span style="color:#FF0000">yes</span>'''&quot;</p><p>......</p>|}</li><li><p>调试u-boot代码时,可以使用下面的方法来更新linux镜像中的u-boot进行测试</p><ol style="list-style-type: lower-alpha;"><li><p>首先将编译好的u-boot的deb包上传到开发板的linux系统中</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''cd output/debs/u-boot'''</p><p>test@test:~/orangepi_build/output/debs/u-boot$ '''scp \'''</p><p>'''linux-u-boot-next-orangepizero3_x.x.x_arm64.deb root@192.168.1.xxx:/root'''</p>|}</li><li><p>再安装刚才上传的新的u-boot的deb包</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo dpkg -i''' '''linux-u-boot-next-orangepizero3_x.x.x_arm64.deb'''</p>|}</li><li><p>然后运行 nand-sata-install脚本</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo nand-sata-install'''</p>|}</li><li><p>然后选择'''5 Install/Update the bootloader on SD/eMMC'''</p><p>[[File:zero3-img300.png]]</p></li><li><p>按下回车键后首先会弹出一个'''Warning'''</p><p>[[File:zero3-img301.png]]</p></li><li><p>再按下回车键就会开始更新u-boot,更新完后会显示下面的信息</p><p>[[File:zero3-img302.png]]</p></li><li><p>然后就可以重启开发板来测试u-boot的修改是否生效了</p></li></ol></li></ol> == 编译linux内核 == <ol style="list-style-type: decimal;"><li><p>运行'''build.sh'''脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''Kernel package''',然后回车</p><div class="figure"> [[File:zero3-img303.png]] </div></li><li><p>然后会提示是否需要显示内核配置界面,如果不需要修改内核配置,则选择第一个即可,如果需要修改内核配置,则选择第二个</p><p>[[File:zero3-img304.png]]</p></li><li><p>接着选择开发板的型号</p><p>[[File:zero3-img298.png]]</p></li><li><p>然后选择内核源码的分支类型</p><ol style="list-style-type: lower-alpha;"><li><p>current分支会编译linux5.4内核源码</p></li><li><p>next分支会编译linux6.1内核源码</p><p>[[File:zero3-img299.png]]</p></li></ol></li><li><p>如果第3)步选择了需要显示内核配置菜单(第二个选项),则会弹出通过'''make menuconfig'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码。</p><p>[[File:zero3-img305.png]]</p></li></ol> <!-- --><ol style="list-style-type: lower-alpha;"><li><p>如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE=no'''</p>|}</li><li><p>也可以设置orangepi-build/userpatches/config-default.conf配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p></li><li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu &gt; PC的终端界面太小,导致make menuconfig的界面无法显示,请把Ubuntu &gt; PC的终端调到最大,然后重新运行build.sh脚本</p><p>[[File:zero3-img306.png]]</p></li></ol> <!-- --><ol start="7" style="list-style-type: decimal;"><li><p>编译next分支内核源码时提示的部分信息说明如下:</p><ol style="list-style-type: lower-alpha;"><li><p>linux内核源码的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiling current kernel [ '''6.1.31''' ]</p>|}</li><li><p>使用的交叉编译工具链的版本</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiler version [ '''aarch64-linux-gnu-gcc 11''' ]</p>|}</li><li><p>内核默认使用的配置文件以及它存放的路径如下所示</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Using kernel config file [ '''orangepi-build/external/config/kernel/linux-6.1-sun50iw9-next.config''' ]</p>|}</li><li><p>编译生成的内核相关的deb包的路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Target directory [ '''output/debs/''' ]</p>|}</li><li><p>编译生成的内核镜像deb包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ '''linux-image-next-sun50iw9_x.x.x_arm64.deb''' ]</p>|}</li><li><p>编译使用的时间</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Runtime [ '''10 min''' ]</p>|}</li><li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepizero3 BRANCH=next BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p>|}</li></ol></li><li><p>查看编译生成的内核相关的deb包</p><ol style="list-style-type: lower-alpha;"><li><p>'''linux-dtb-next-sun50iw9_x.x.x_arm64.deb'''包含有内核使用的dtb文件</p></li><li><p>'''linux-headers-next-sun50iw9_x.x.x_arm64.deb'''包含内核头文件</p></li><li><p>'''linux-image-next-sun50iw9_x.x.x_arm64.deb'''包含内核镜像和内核模块</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls output/debs/linux-*'''</p><p>output/debs/linux-dtb-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-headers-next-sun50iw9_x.x.x_arm64.deb</p><p>output/debs/linux-image-next-sun50iw9_x.x.x_arm64.deb</p>|}</li></ol></li><li><p>orangepi-bulid编译系统编译linux内核源码时首先会将linux内核源码和github服务器的linux内核源码进行同步,所以如果想修改linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次linux内核源码后才能关闭这个功能,否则会提示找不到linux内核的源码'''),否则所作的修改都会被还原,方法如下:</p><p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p><p>IGNORE_UPDATES=&quot;'''<span style="color:#FF0000">yes</span>'''&quot;</p>|}</li><li><p>如果对内核做了修改,可以使用下面的方法来更新开发板linux系统的内核和内核模块</p><ol style="list-style-type: lower-alpha;"><li><p>将编译好的linux内核的deb包上传到开发板的linux系统中</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''cd output/debs'''</p><p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p><p>'''linux-image-next-sun50iw9_x.x.x_arm64.deb root@192.168.1.xxx:/root'''</p>|}</li><li><p>再安装刚才上传的新的linux内核的deb包</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo dpkg -i linux-image-next-sun50iw9_x.x.x_arm64.deb'''</p>|}</li><li><p>然后重启开发板,再查看内核相关的修改是否已生效</p>{| class="wikitable" style="width:800px;" |-| <p>orangepi@orangepi:~$ '''sudo''' '''reboot'''</p>|}</li></ol></li></ol> == 编译rootfs == <ol style="list-style-type: decimal;"><li><p>运行build.sh脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''Rootfs and all deb packages''',然后回车</p></li> <div class="figure"> [[File:zero3-img307.png]] </div></ol><ol start="3" style="list-style-type: decimal;"><li><p>接着选择开发板的型号</p><p>[[File:zero3-img298.png]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别</p><ol style="list-style-type: lower-alpha;"><li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项</p></li><li><p>next分支可以看到debian11、debian12、ubuntu22.04三个选项</p><p>[[File:zero3-img299.png]]</p></li></ol></li><li><p>然后选择rootfs的类型</p><p>[[File:zero3-img308.png]]</p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alpha;"><li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure"> [[File:zero3-img309.png]] </div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure"> [[File:zero3-img310.png]] </div></li><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:zero3-img311.png]]</p><p>[[File:zero3-img312.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:zero3-img313.png]]</p></li><li><p>然后就会开始编译rootfs,编译时提示的部分信息说明如下</p><ol style="list-style-type: lower-alpha;"><li><p>rootfs的类型</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] local not found [ Creating new rootfs cache for '''bullseye''' ]</p>|}</li><li><p>编译生成的rootfs压缩包的存放路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Target directory [ '''orangepi-build/external/cache/rootfs''' ]</p>|}</li><li><p>编译生成的rootfs压缩包的名字</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ '''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4''' ]</p>|}</li></ol></li><li><p>查看编译生成的rootfs压缩包</p><ol style="list-style-type: lower-alpha;"><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4'''是rootfs的压缩包,名字各字段的含义为</p><ol style="list-style-type: none;"><li><p>a) '''bullseye'''表示rootfs的linux发行版的类型</p></li><li><p>b) '''xfce'''表示rootfs为桌面版的类型,如果为'''cli'''则表示服务器版类型</p></li><li><p>c) '''arm64'''表示rootfs的架构类型</p></li><li><p>d) '''25250ec7002de9e81a41de169f1f89721'''是由rootfs安装的所有软件包的包名生成的MD5哈希值,只要没有修改rootfs安装的软件包的列表,那么这个值就不会变,编译脚本会通过这个MD5哈希值来判断是否需要重新编译rootfs</p></li></ol></li><li><p>'''bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list'''列出了rootfs安装的所有软件包的包名</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''ls external/cache/rootfs/'''</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.current</p><p>bullseye-xfce-arm64.5250ec7002de9e81a41de169f1f89721.tar.lz4.list</p>|}</li></ol></li><li><p>如果需要的rootfs在'''external/cache/rootfs'''下已经存在,那么再次编译rootfs就会直接跳过编译过程,不会重新开始编译,编译镜像的时候也会去'''external/cache/rootfs'''下查找是否已经有缓存可用的rootfs,如果有就直接使用,这样可以节省大量的下载编译时间</p></li></ol> == 编译linux镜像 == <ol style="list-style-type: decimal;"><li><p>运行'''build.sh'''脚本,记得加sudo权限</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh'''</p>|}</li><li><p>选择'''Full OS image for flashing''',然后回车</p></li> <div class="figure"> [[File:zero3-img314.png]] </div></ol><ol start="3" style="list-style-type: decimal;"><li><p>然后选择开发板的型号</p><p>[[File:zero3-img298.png]]</p></li><li><p>然后选择内核源码的分支类型,不同版本的内核源码维护的rootfs类型有区别</p><ol style="list-style-type: lower-alpha;"><li><p>current分支可以看到debian11、ubuntu20.04、ubuntu22.04三个选项</p></li><li><p>next分支可以看到debian11、debian12、ubuntu22.04三个选项</p><p>[[File:zero3-img299.png]]</p></li></ol></li><li><p>如果选择的next分支还会提示需要选择内存的大小,current分支不需要选择</p><ol style="list-style-type: lower-alpha;"><li><p>如果购买的开发板为1.5GB内存大小的,请选择第一项</p></li><li><p>如果购买的开发板为1GB或2GB或4GB内存大小的,请选择第二项</p><p>[[File:zero3-img299-1.png]]</p></li></ol></li><li><p>然后选择rootfs的类型</p><p>[[File:zero3-img308.png]]</p></li><li><p>然后选择镜像的类型</p><ol style="list-style-type: lower-alpha;"><li><p>'''Image with console interface (server)'''表示服务器版的镜像,体积比较小</p></li><li><p>'''Image with desktop environment'''表示带桌面的镜像,体积比较大</p><div class="figure"> [[File:zero3-img309.png]] </div></li></ol></li><li><p>如果是编译服务器版的镜像,还可以选择编译Standard版本或者Minimal版本,Minimal版本预装的软件会比Standard版本少很多('''没特殊需求请不要选择Minimal版本,因为很多东西默认没有预装,部分功能可能用不了''')</p><div class="figure"> [[File:zero3-img310.png]] </div></li></ol> <!-- --><ol start="8" style="list-style-type: decimal;"><li><p>如果是编译桌面版本的镜像还需要选择桌面环境的类型,目前只维护XFCE,所以请选择XFCE类型的桌面</p><p>[[File:zero3-img311.png]]</p><p>[[File:zero3-img312.png]]</p><p>然后可以选择需要安装的额外的软件包。这里请按下回车键直接跳过。</p><p>[[File:zero3-img313.png]]</p></li></ol> <!-- --><ol start="9" style="list-style-type: decimal;"><li><p>然后就会开始编译linux镜像,编译的大致流程如下</p><ol style="list-style-type: lower-alpha;"><li><p>初始化Ubuntu PC的编译环境,安装编译过程需要的软件包</p></li><li><p>下载u-boot和linux内核的源码(如果已经缓存,则只更新代码)</p></li><li><p>编译u-boot源码,生成u-boot的deb包</p></li><li><p>编译linux源码,生成linux相关的deb包</p></li><li><p>制作linux firmware的deb包</p></li><li><p>制作orangepi-config工具的deb包</p></li><li><p>制作板级支持的deb包</p></li><li><p>如果是编译desktop版镜像,还会制作desktop相关的deb包</p></li><li><p>检查rootfs是否已经缓存,如果没有缓存,则重新制作rootfs,如果已经缓存,则直接解压使用</p></li><li><p>安装前面生成的deb包到rootfs中</p></li><li><p>对不同的开发板和不同类型镜像做一些特定的设置,如预装额外的软件包,修改系统配置等</p></li><li><p>然后制作镜像文件,并格式化分区,默认类型为ext4</p></li><li><p>再将配置好的rootfs拷贝到镜像的分区中</p></li><li><p>然后更新initramfs</p></li><li><p>最后将u-boot的bin文件通过dd命令写入到镜像中</p></li></ol></li><li><p>编译完镜像后会提示下面的信息</p><ol style="list-style-type: lower-alpha;"><li><p>编译生成的镜像的存放路径</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Done building [ '''output/images/orangepizero3_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop/orangepizero3_x.x.x_debian_bullseye_linux6.1.xx_xfce_desktop.img''' ]</p>|}</li><li><p>编译使用的时间</p></li>{| class="wikitable" style="width:800px;" |-| '''[ o.k. ] Runtime [ 19 min ]'''|}<li><p>重复编译镜像的命令,使用下面的命令无需通过图形界面选择,可以直接开始编译镜像</p>{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepizero3 BRANCH=next BUILD_OPT=image RELEASE=bullseye BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=yes''' ]</p>|}</li></ol></li></ol><span id="android-12-tv系统使用说明"></span> = '''Android 12 TV系统使用说明''' = <span id="已支持的android版本"></span>== 已支持的Android版本 == {| class="wikitable" style="width:600px;" |-| style="text-align: left;"| Android版本| style="text-align: left;"| 内核版本|-| style="text-align: left;"| '''Android 12 TV版'''| style="text-align: left;"| '''linux5.4'''|} <span id="android-12-tv功能适配情况"></span> == Android 12 TV功能适配情况 == {| class="wikitable" style="width:600px;" |-| style="text-align: left;"| 功能| style="text-align: left;"| Android12|-| style="text-align: left;"| HDMI视频| style="text-align: left;"| OK|-| style="text-align: left;"| HDMI音频| style="text-align: left;"| OK|-| style="text-align: left;"| USB2.0 x 3| style="text-align: left;"| OK|-| style="text-align: left;"| TF卡启动| style="text-align: left;"| OK|-| style="text-align: left;"| 网卡| style="text-align: left;"| OK|-| style="text-align: left;"| 红外| style="text-align: left;"| OK|-| style="text-align: left;"| WIFI| style="text-align: left;"| OK|-| style="text-align: left;"| WIFI hotsport| style="text-align: left;"| OK|-| style="text-align: left;"| 蓝牙| style="text-align: left;"| OK|-| style="text-align: left;"| BLE蓝牙| style="text-align: left;"| OK|-| style="text-align: left;"| 耳机音频| style="text-align: left;"| OK|-| style="text-align: left;"| TV-OUT| style="text-align: left;"| OK|-| style="text-align: left;"| USB摄像头| style="text-align: left;"| OK|-| style="text-align: left;"| LED灯| style="text-align: left;"| OK|-| style="text-align: left;"| 温度传感器| style="text-align: left;"| OK|-| style="text-align: left;"| Mali GPU| style="text-align: left;"| OK|-| style="text-align: left;"| 视频编解码| style="text-align: left;"| OK|} <span id="板载led灯显示说明"></span> == 板载LED灯显示说明 == {| class="wikitable" style="width:600px;" |-|| style="text-align: left;"| '''绿灯'''| style="text-align: left;"| '''红灯'''|-| '''u-boot启动阶段'''| style="text-align: left;"| '''灭'''| style="text-align: left;"| '''亮'''|-| '''内核启动到进入系统'''| style="text-align: left;"| '''亮'''| style="text-align: left;"| '''灭'''|} <span id="android返回上一级界面的方法"></span> == Android返回上一级界面的方法 == <ol style="list-style-type: decimal;"><li><p>我们一般都是使用鼠标和键盘来控制开发板的安卓系统,当进入某些界面,需要返回上一级界面或者桌面时,只能通过'''<span style="color:#FF0000">鼠标右键</span>'''来返回,键盘是无法返回的</p></li><li><p>如果有购买开发板配套的红外遥控(其他遥控不行)和扩展板,将扩展板插入开发板后,还可以通过遥控中的返回键来返回上一级菜单,返回键的位置如下图所示</p><p>[[File:zero3-img315.png]]</p></li></ol> <span id="adb的使用方法"></span> == ADB的使用方法 == === 使用网络连接adb调试 === {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''使用网络adb无需USB Typc C接口的数据线来连接电脑和开发板,而是通过网络来通信,所以首先请确保开发板的有线或者无线网络已经连接好了,然后获取开发板的IP地址,后面要用到。'''</big>|} <ol style="list-style-type: decimal;"><li><p>确保Android系统的'''service.adb.tcp.port'''设置为5555端口号</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''getprop | grep &quot;adb.tcp&quot;'''</p><p>[service.adb.tcp.port]: [5555]</p>|}</li><li><p>如果'''service.adb.tcp.port'''没有设置,可以在串口中使用下面的命令设置网络adb的端口号</p> {| class="wikitable" style="width:800px;" |-| apollo-p2:/ # '''setprop service.adb.tcp.port 5555''' apollo-p2:/ # '''stop adbd''' apollo-p2:/ # '''start adbd'''|}</li></ol><ol start="3" style="list-style-type: decimal;"><li><p>在Ubuntu PC上安装adb工具</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt-get update'''</p><p>test@test:~$ '''sudo apt-get install -y adb'''</p>|}</li><li><p>然后在Ubuntu PC上连接网络adb</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb connect 192.168.1.xxx:5555''' '''(需要修改为开发板的IP地址)'''</p><p>* daemon not running; starting now at tcp:5037</p><p>* daemon started successfully</p><p>connected to 192.168.1.xxx:5555</p>  <p>test@test:~$ '''adb devices'''</p><p>List of devices attached</p><p>192.168.1.xxx:5555 device</p>|}</li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p> {| class="wikitable" style="width:800px;" |-| test@test:~$ '''adb shell''' apollo-p2:/ #|}</li></ol> === 使用数据线连接adb调试 === <ol style="list-style-type: decimal;"><li><p>准备一根USB Typc C接口的数据线, USB接口一端插入电脑的USB接口中,USB Type C接口一端插入开发板的电源接口中。在这种情况下是由电脑的USB接口给开发板供电,所以请确保电脑的USB接口能提供最够的功率驱动开发板</p><div class="figure"> [[File:zero3-img15.png]] </div></li><li><p>在Ubuntu PC上安装adb工具</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''sudo apt-get update'''</p><p>test@test:~$ '''sudo apt-get install -y adb'''</p>|}</li><li><p>查看识别到ADB设备</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb devices'''</p><p>List of devices attached</p><p>4c00146473c28651dd0 device</p>|}</li><li><p>然后在Ubuntu PC上通过adb shell就可以登录android系统</p> {| class="wikitable" style="width:800px;" |-| test@test:~$ '''adb shell''' apollo-p2:/ $|}</li></ol><span id="查看设置hdmi显示分辨率的方法"></span> == 查看设置HDMI显示分辨率的方法 == <ol style="list-style-type: decimal;"><li><p>首先进入'''Settings'''</p><p>[[File:zero3-img316.png]]</p></li><li><p>然后选择'''Device Preferences'''</p><p>[[File:zero3-img317.png]]</p></li><li><p>然后选择'''Display &amp; Sound'''</p><p>[[File:zero3-img318.png]]</p></li><li><p>然后选择'''Advanced display settings'''</p><p>[[File:zero3-img319.png]]</p></li><li><p>然后选择'''HDMI output mode'''</p><p>[[File:zero3-img320.png]]</p></li><li><p>然后就能看到显示器支持的分辨率列表了。此时点击对应的选项就会切换到对应的分辨率。请注意,不同显示器支持的分辨率可能是不同的,如果接到电视上,一般会看到比下图更多的分辨率选项。</p><p>[[File:zero3-img321.png]]</p></li><li><p>开发板的HDMI输出是支持4K显示的,当接到4K电视时就可以看到4K分辨率的选项</p><p>[[File:zero3-img322.png]]</p></li></ol> <span id="hdmi转vga显示测试-1"></span> == HDMI转VGA显示测试 == <ol style="list-style-type: decimal;"><li><p>首先需要准备下面的配件</p><ol style="list-style-type: lower-alpha;"><li><p>HDMI转VGA转换器</p><p>[[File:zero3-img146.png]]</p></li><li><p>一根VGA线和一根Micro HDMI公转HDMI母转接线</p><p>[[File:zero3-img147.png]] [[File:zero3-img148.png]]</p></li><li><p>一个支持VGA接口的显示器或者电视</p></li></ol></li><li><p>HDMI转VGA显示测试如下所示</p><p>[[File:zero3-img323.png]]</p>{| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big><p>'''使用HDMI转VGA显示时,开发板以及开发板的Android系统是不需要做任何设置的,只需要开发板Micro HDMI接口能正常显示就可以了。所以如果测试有问题,请检查HDMI转VGA转换器、VGA线以及显示器是否有问题。'''</p></big>|}</li></ol> <span id="wi-fi的连接方法"></span> == WI-FI的连接方法 == <ol style="list-style-type: decimal;"><li><p>首先选择'''Settings'''</p><p>[[File:zero3-img316.png]]</p></li><li><p>然后选择'''Network &amp; Internet'''</p><p>[[File:zero3-img324.png]]</p></li><li><p>然后打开WI-FI</p><p>[[File:zero3-img325.png]]</p></li><li><p>打开WI-FI后在'''Available networks'''下面就可以看到搜索到的信号</p><p>[[File:zero3-img326.png]]</p></li><li><p>选择想连接的WI-FI后会弹出下图所示的密码输入界面</p><div class="figure"> [[File:zero3-img327.png]] </div></li><li><p>然后使用键盘输入WI-FI对应的密码,再使用'''鼠标'''点击虚拟键盘中的回车按钮就会开始连接WI-FI了</p><p>[[File:zero3-img328.png]]</p></li><li><p>WI-FI连接成功后的显示如下图所示</p><p>[[File:zero3-img329.png]]</p></li></ol> <span id="wi-fi-hotspot的使用方法"></span>== WI-FI hotspot的使用方法 == <ol style="list-style-type: decimal;"><li><p>首先请确保以太网口已连接网线,并且能正常上网</p></li><li><p>然后选择'''Settings'''</p><p>[[File:zero3-img316.png]]</p></li><li><p>然后选择'''Network &amp; Internet'''</p><p>[[File:zero3-img324.png]]</p></li><li><p>然后选择'''WIFI hotspot'''</p><p>[[File:zero3-img330.png]]</p></li><li><p>然后打开'''Hotspot Enable''',下图中还可以看到生成的热点的名字和密码,记住它们,在连接热点的时候要用到(如果需要修改热点的名字和密码,需要先关闭'''Hotspot Enable''',然后才能修改)</p><p>[[File:zero3-img331.png]]</p></li><li><p>此时可以拿出你的手机,如果一切正常,在手机搜索到的WI-FI列表中就能找到上图'''Hotspot name'''下面显示的同名('''这里为AndroidAP_7132''')的WIFI热点了。然后可以点击'''AndroidAP_7132'''连接热点,密码在上图的'''Hotspot password'''下面可以看到</p><p>[[File:zero3-img332.png]]</p></li><li><p>连接成功后显示如下图所示(不同手机界面会有区别,具体界面以你手机显示的为准)。此时就可以在手机上打开一个网页看下能否上网了,如果能正常打开网页,说明开发板的'''WI-FI Hotspot'''能正常使用</p><p>[[File:zero3-img333.png]]</p></li></ol> <span id="查看以太网口ip地址的方法"></span>== 查看以太网口IP地址的方法 == <ol style="list-style-type: decimal;"><li><p>首先请确保开发板的千兆网口连接到了路由器或者交换机</p></li><li><p>然后打开'''Settings'''</p><p>[[File:zero3-img334.png]]</p></li><li><p>然后选择'''Network &amp; Internet'''</p><p>[[File:zero3-img335.png]]</p></li><li><p>然后在下图所示的位置就能看到开发板有线网口的IP地址了</p><p>[[File:zero3-img336.png]]</p></li></ol> == 蓝牙的连接方法 == <ol style="list-style-type: decimal;"><li><p>首先选择'''Settings'''</p><p>[[File:zero3-img316.png]]</p></li><li><p>然后选择'''Bluetooth'''</p><p>[[File:zero3-img337.png]]</p></li><li><p>然后打开'''Bluetooth Enable'''</p><p>[[File:zero3-img338.png]]</p></li><li><p>然后点击'''Pair new device'''开始扫描周围的蓝牙设备</p><p>[[File:zero3-img339.png]]</p></li><li><p>搜索到的蓝牙设备会在'''Available devices'''下面显示出来</p><p>[[File:zero3-img340.png]]</p></li><li><p>然后点击想要连接的蓝牙设备就可以开始配对了,当弹出下面的界面时,请使用鼠标选择'''Pair'''选项</p><p>[[File:zero3-img341.png]]</p></li><li><p>这里测试的是开发板和'''<span style="color:#FF0000">安卓手机</span>'''蓝牙的配置过程,此时在手机上会弹出下面的确认界面,在手机上也点击配对按钮后就会开始配对过程</p><p>[[File:zero3-img342.png]]</p></li><li><p>配对完成后,再打开'''Paired devices'''下面就可以看到已配对的蓝牙设备</p><p>[[File:zero3-img343.png]]</p></li><li><p>此时可以使用手机蓝牙给开发板发送一张图片,发送后,在开发板的安卓系统中可以看到下面的确认界面,然后点击'''Accept'''就可以开始接收手机发过来的图片了</p><p>[[File:zero3-img344.png]]</p></li><li><p>开发板Android系统蓝牙接收到的图片可以打开'''Received files'''中查看</p><p>[[File:zero3-img345.png]]</p></li></ol> <span id="usb摄像头使用方法"></span> == USB摄像头使用方法 == <ol style="list-style-type: decimal;"><li><p>首先在开发板的USB接口中插入USB(UVC协议)摄像头</p></li><li><p>USB摄像头如果识别正常,在/dev下会生成相应的video设备节点</p>{| class="wikitable" style="width:800px;" |-| <p>console:/ # '''ls /dev/video0'''</p><p>/dev/video0</p>|}</li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[Orange Pi Zero 3#ADB的使用方法|'''ADB的使用方法''']]一小节的说明</p></li><li><p>在开发板资料下载页面的'''官方工具'''中下载USB摄像头测试APP</p><p>[[File:zero3-img346.png]]</p><p>[[File:zero3-img347.png]]</p></li><li><p>然后使用adb命令安装USB摄像头测试APP到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb install usbcamera.apk'''</p>|}</li><li><p>安装完后在Android的桌面可以看到USB摄像头的启动图标</p><p>[[File:zero3-img348.png]]</p></li><li><p>然后双击打开USB摄像头APP就可以看到USB摄像头的输出视频了</p></li></ol> <span id="android系统root说明"></span> == Android系统ROOT说明 == {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''<span class="mark">Orange Pi发布的Android系统已经ROOT,可以使用下面的方法来测试。</span>'''</big>|} <ol style="list-style-type: decimal;"><li><p>在开发板资料下载页面的'''官方工具'''中下载'''rootcheck.apk'''</p><p>[[File:zero3-img346.png]]</p><p>[[File:zero3-img349.png]]</p></li><li><p>然后确保Ubuntu PC和开发板的adb连接正常,adb的使用方法请参考[[\l|'''ADB的使用方法''']]一小节的说明</p></li><li><p>然后使用adb命令安装rootcheck.apk到Android系统中,当然也可以使用U盘拷贝的方式进行安装</p>{| class="wikitable" style="width:800px;" |-| <p>test@test:~$ '''adb install rootcheck.apk'''</p>|}</li><li><p>安装完后在Android的桌面可以看到ROOT测试工具的启动图标</p><p>[[File:zero3-img350.png]]</p></li><li><p>第一次打开'''ROOT测试工具'''后的显示界面如下图所示</p><p>[[File:zero3-img351.png]]</p></li><li><p>然后就可以点击'''CHECK NOW'''开始Android系统的ROOT状态的检查,检查完后的显示如下所示,可以看到Android系统已取得ROOT权限</p><p>[[File:zero3-img352.png]]</p></li></ol> <span id="使用miracastreceiver将手机屏幕投屏到开发板的方法"></span> == 使用MiracastReceiver将手机屏幕投屏到开发板的方法 == <ol style="list-style-type: decimal;"><li><p>首先请确保开发板和手机都连接了同一个WIFI热点,开发板连接WIFI的方法请参考[[Orange Pi Zero 3#WI-FI的连接方法|'''WI-FI的连接方法''']]一小节的说明</p></li><li><p>然后打开开发板安卓系统中的'''MiracastReceiver'''应用</p><p>[[File:zero3-img353.png]]</p></li><li><p>'''MiracastReceiver'''打开后的界面如下所示</p><div class="figure"> [[File:zero3-img354.png]] </div></li><li><p>然后在手机设置中找到投屏功能,'''这里以小米12S Pro手机为例''',其他品牌的手机请自行研究下,如下图所示,点击红色方框位置的按钮即可打开手机的投屏功能</p><p>[[File:zero3-img355.png]]</p></li><li><p>等待一段时间后在手机上就能看到搜索到的可连接的设备,然后我们选择开发板对应的设备连接即可</p><p>[[File:zero3-img356.png]]</p></li><li><p>然后在开发板的'''MiracastReceiver'''应用界面会弹出下图所示的选择框,这里我们选择'''Accept'''即可</p><p>[[File:zero3-img357.png]]</p></li><li><p>然后就能在开发板连接的HDMI屏幕上看到手机屏幕的内容了</p><p>[[File:zero3-img358-1.png]]</p></li></ol> <span id="pin-接口-gpiouartspi-测试"></span> == 26pin 接口 GPIO、UART、SPI 测试 == <span id="pin的gpio口测试方法"></span>=== 26pin的GPIO口测试方法 === <ol style="list-style-type: decimal;"><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:zero3-img359.png]]</p></li><li><p>然后点击'''GPIO_TEST'''按钮打开GPIO测试界面</p><p>[[File:zero3-img360.png]]</p></li><li><p>GPIO测试界面如下图所示,左边的两排'''CheckBox'''按钮跟26pin引脚('''左下角的PC1/PI16/PI6/PH10是13pin引脚中的GPIO口''')是一一对应的关系。当勾选'''CheckBox'''按钮时,对应的GPIO引脚会被设置为'''OUT'''模式,引脚电平设置为高电平;当取消勾选时,GPIO引脚电平设置为低电平;当点击右边的'''GPIO READALL'''按钮时,可以获取到wPi号、GPIO模式、引脚电平等信息。</p><p>[[File:zero3-img361.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,输出信息如下图所示:</p><div class="figure"> [[File:zero3-img362.png]] </div></li><li><p>开发板26pin中总共有17个GPIO口可以使用('''如果加上13pin中的4个GPIO口,那么总共就是有21个'''),下面以7号引脚——对应GPIO为PC9 ——对应wPi序号为2——为例演示如何设置GPIO口的高低电平。首先点击7号引脚对应的'''CheckBox'''按钮,当按钮为选中状态时,7号引脚会设置为高电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''3.3v''',说明设置高电平成功</p><p>[[File:zero3-img363.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为'''OUT''',引脚电平为高电平</p><p>[[File:zero3-img364.png]]</p></li><li><p>再次点击下图的'''CheckBox'''按钮取消勾选状态,7号引脚会设置为低电平,设置完后可以使用万用表测量引脚的电压的数值,如果为'''0v''',说明设置低电平成功</p><p>[[File:zero3-img365.png]]</p></li><li><p>然后点击'''GPIO READALL'''按钮,可以看到当前的7号引脚模式为OUT,引脚电平为低电平</p><p>[[File:zero3-img366.png]]</p></li></ol> <span id="pin的uart测试方法"></span>=== 26pin的UART测试方法 === <ol style="list-style-type: decimal;"><li><p>Android中默认打开了'''UART5''',对应的设备节点为'''/dev/ttyAS5'''</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''ls /dev/ttyAS5'''</p><p>/dev/ttyAS5</p>|}</li><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:zero3-img359.png]]</p></li><li><p>然后点击'''UART_TEST'''按钮打开UART测试界面</p><p>[[File:zero3-img367.png]]</p></li><li><p>wiringOP的串口测试界面如下图所示</p></li> [[File:zero3-img368.png]]</ol><ol start="5" style="list-style-type: decimal;"><li><p>然后在选择框中选择'''/dev/ttyAS5'''节点</p><p>[[File:zero3-img369.png]]</p></li><li><p>再在编辑框中输入想要设置的波特率,然后点击'''OPEN'''按钮打开'''/dev/ttyAS5'''节点,打开成功后,'''OPEN'''按钮变为不可选中状态,'''CLOSE'''按钮和'''SEND'''按钮变为可选中状态</p></li> [[File:zero3-img370.png]]</ol><ol start="7" style="list-style-type: decimal;"><li>然后使用杜邦线短接uart5的rx和tx引脚</li> {| class="wikitable" style="width:600px;" |-|| style="text-align: left;"| uart5|-| tx引脚| style="text-align: left;"| 对应26pin的8号引脚|-| rx引脚| style="text-align: left;"| 对应26pin的10号引脚|}</ol><ol start="8" style="list-style-type: decimal;"><li>然后可以在下面的发送编辑框中输入一段字符,点击'''SEND'''按钮开始发送</li> [[File:zero3-img371.png]]</ol><ol start="9" style="list-style-type: decimal;"><li>如果一切正常,接收框内会显示已接收到的字符串</li> [[File:zero3-img372.png]]</ol><span id="pin的spi测试方法"></span> === 26pin的SPI测试方法 === <ol style="list-style-type: decimal;"><li><p>26pin中可以用的SPI为SPI1,对应的设备节点为'''/dev/spidev1.1'''</p><p>[[File:zero3-img359.png]]</p></li><li><p>这里演示下通过'''w25q64'''模块来测试SPI1接口,首先在SPI1接口接入w25q64模块</p> {| class="wikitable" style="background-color:#ffffdc;width:800px;" |-| <big>'''如果没有 w25q64 模块也没关系,因为开发板上有一个SPIFlash接在了SPI0上,在安卓中SPI0的配置默认也打开了,所以我们也可以直接使用板载的SPIFlash测试。'''</big>|}</li></ol><ol start="3" style="list-style-type: decimal;"><li><p>然后在桌面中打开wiringOP APP</p></li><li><p>然后点击'''SPI_TEST'''按钮打开SPI的测试界面</p><p>[[File:zero3-img373.png]]</p></li><li><p>然后在左上角选择spi的设备节点,如果直接测试板载的SPIFlash,那么保持默认的'''/dev/spidev0.0'''即可,如果在26pin的spi1上接了'''w25q64'''模块,那么就请选择'''/dev/spidev1.1'''</p><p>[[File:zero3-img374.png]]</p></li><li><p>然后点击'''OPEN'''按钮初始化SPI</p></li> [[File:zero3-img375.png]]</ol><ol start="7" style="list-style-type: decimal;"><li><p>然后填充需要发送的字节,比如读取板载SPIFlash的ID信息,在data[0]中填入地址0x9f,然后点击'''TRANSFER'''按钮</p><p>[[File:zero3-img376.png]]</p></li><li><p>最后APP会显示读取到的板载SPI Flash的ID信息</p></li> [[File:zero3-img377-1.png]]</ol><ol start="9" style="list-style-type: decimal;"><li><p>如果是读取接在26pin SPI1上的w25q64模块,那么读取到的ID信息如下图所示</p><p>[[File:zero3-img378.png]]</p></li><li><p>w25q64模块的MANUFACTURER ID为EFh,Device ID为4017h,跟上面读取到的值是对应的(h代表是16进制)</p><p>[[File:zero3-img379.png]]</p></li></ol> <span id="pin的i2c测试方法"></span> === 26pin的I2C测试方法 === <ol style="list-style-type: decimal;"><li><p>Android中默认打开了26pin中的i2c3,对应的设备节点为'''/dev/i2c-3'''</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''ls /dev/i2c-3'''</p><p>/dev/i2c-3</p>|}</li><li><p>首先在桌面中打开wiringOP APP</p><p>[[File:zero3-img359.png]]</p></li><li><p>然后点击'''I2C_TEST'''按钮打开i2c的测试界面</p><p>[[File:zero3-img380.png]]</p></li><li><p>wiringOP的i2c测试界面如下图所示,可以看到默认使用的i2c为'''/dev/i2c-3''',所以我们无需重新选择了</p></li> [[File:zero3-img381.png]]</ol><ol start="5" style="list-style-type: decimal;"><li><p>然后在26pin的i2c3引脚上接一个i2c设备,这里以ds1307 rtc模块为例</p><p>[[File:zero3-img186.png]]</p></li> {| class="wikitable" style="width:600px;" |-| style="text-align: left;"| '''RTC模块的引脚'''| style="text-align: left;"| '''开发板26pin对应的引脚'''|-| style="text-align: left;"| '''5V'''| style="text-align: left;"| '''2号引脚'''|-| style="text-align: left;"| '''GND'''| style="text-align: left;"| '''6号引脚'''|-| style="text-align: left;"| '''SDA'''| style="text-align: left;"| '''3号引脚'''
|-
| style="text-align: left;"| '''SCL'''
| style="text-align: left;"| '''5号引脚'''|}</ol><ol start="6" style="list-style-type: decimal;"><li><p>ds1307 rtc模块的i2c地址为0x68,接好线后,我们可以在串口命令行中使用'''i2cdetect -y 3'''命令查看下是否能扫描到ds1307 rtc模块的i2c地址。如下图所示,如果能看到0x68这个地址,说明ds1307 rtc模块接线正确。</p>{| class="wikitable" style="width:800px;" |-| <p>apollo-p2:/ # '''i2cdetect -y 3'''</p>|}<p>[[File:media/image382zero3-img382.png|424x186px]]</p></li><li><p>然后在wiringOP中设置i2c的地址为0x68,再点击'''OPEN'''按钮打开i2c3</p><p>[[File:media/image383zero3-img383.png|354x177px]]</p></li><li><p>点击'''OPEN'''按钮打开i2c3后的显示如下所示:</p><p>[[File:media/image384zero3-img384.png|355x171px]]</p></li><li><p>然后我们测试下往rtc模块的寄存器中写入一个值,比如往0x1c地址写入0x55</p><ol style="list-style-type: lower-alpha;"><li><p>我们首先设置需要写入的寄存器的地址为0x1c</p><p>[[File:media/image385zero3-img385.png|322x152px]]</p></li><li><p>然后设置需要写入的值为0x55</p><p>[[File:media/image386zero3-img386.png|315x177px]]</p></li><li><p>然后点击'''WRITE BYTE'''按钮执行写入的动作</p><p>[[File:media/image387zero3-img387.png|314x173px]]</p></li></ol></li><li><p>然后点击'''READ BYTE'''按钮读取下0x1c寄存器的值,如果显示为0x55,就说明i2c读写测试通过</p><p>[[File:media/image388zero3-img388.png|316x170px]]</p></li></ol> = '''附录''' = == 用户手册更新历史 == {| class="wikitable" style="width:800px;" |-| style="text-align: left;"| '''版本'''| style="text-align: left;"| '''日期'''| style="text-align: left;"| '''更新说明'''|-| style="text-align: left;"| v1.0| style="text-align: left;"| 2023-07-10| style="text-align: left;"| 初始版本|} == 镜像更新历史 == {| class="wikitable" style="width:800px;" |-| '''日期''' | '''更新说明'''|-| 2023-07-10| Orangepizero3_1.0.0_ubuntu_jammy_server_linux5.4.125.7z Orangepizero3_1.0.0_debian_bullseye_server_linux5.4.125.7z Orangepizero3_1.0.0_ubuntu_focal_desktop_xfce_linux5.4.125.7z Orangepizero3_1.0.0_ubuntu_jammy_desktop_xfce_linux5.4.125.7z Orangepizero3_1.0.0_debian_bullseye_desktop_xfce_linux5.4.125.7z  Orangepizero3_1.0.0_ubuntu_jammy_server_linux6.1.31.7z Orangepizero3_1.0.0_debian_bookworm_server_linux6.1.31.7z Orangepizero3_1.0.0_debian_bullseye_server_linux6.1.31.7z Orangepizero3_1.0.0_ubuntu_jammy_desktop_xfce_linux6.1.31.7z Orangepizero3_1.0.0_debian_bookworm_desktop_xfce_linux6.1.31.7z Orangepizero3_1.0.0_debian_bullseye_desktop_xfce_linux6.1.31.7z  OrangePi_Zero3_Android12_v1.0.tar.gz
== 用户手册更新历史 ==
 
{| class="wikitable"
|-
| style="text-align: left;"| '''版本'''
| style="text-align: left;"| '''日期'''
| style="text-align: left;"| '''更新说明'''
|-
| style="text-align: left;"| v1.0
| style="text-align: left;"| 2023-07-05
| style="text-align: left;"| 初始版本
|}
 
== 镜像更新历史 ==
 
{| class="wikitable"
|-
| * *日期**
 
| '''更新说明'''
|-
| 202 3-07-05
| Orangepizero3_1.0.0_ubuntu_jammy_server_linux5.4.125.7z
 
Orangepizero3_1.0.0_debian_bullseye_server_linux5.4.125.7z
 
Ora ngepizero3_1.0.0_ubuntu_focal_desktop_xfce_linux5.4.125.7z
 
Ora ngepizero3_1.0.0_ubuntu_jammy_desktop_xfce_linux5.4.125.7z
 
Orange pizero3_1.0.0_debian_bullseye_desktop_xfce_linux5.4.125.7z
 
Orangepizero3_1.0.0_ubuntu_jammy_server_linux6.1.31.7z
 
Orangepizero3_1.0.0_debian_bookworm_server_linux6.1.31.7z
 
Orangepizero3_1.0.0_debian_bullseye_server_linux6.1.31.7z
 
Or angepizero3_1.0.0_ubuntu_jammy_desktop_xfce_linux6.1.31.7z
 
Orang epizero3_1.0.0_debian_bookworm_desktop_xfce_linux6.1.31.7z
 
Orang epizero3_1.0.0_debian_bullseye_desktop_xfce_linux6.1.31.7z
 
OrangePi_Zero3_Android12_v1.0.tar.gz
* 初始版本
|}
8,460
个编辑