OrangePi zero 3
OrangePi ZERO 3
最近刷视频突然有了个买块开发板的念头,而且这个念头一形成就挥之不去;忍耐了几周,终于还是下手了!
由于是第一次买Orangepi,且网上关于Orangepi的资料也不如Raspberry pi,故记录一下使用过程,方便之后查阅。
刷 Ubuntu
系统
参照网上教程,不多赘述
不过需注意一点:要找适合自己开发板内存的系统镜像
刷完使用串口线连接电脑与板子即可,我使用的工具是:MobaXterm
部署博客
开发板架构
刷完系统先看下镜像版本与开发板 CPU
架构
- 查看版本
1 | lsb_release -a |
- 查看架构
1 | uname -m (或 arch) |
返回参数说明:
x86_64、x64、AMD64 是同一个东西,都为x86架构;
aarch64 是 ARM 架构的 64 位版本
要根据架构选择对应的源!否则在 sudo apt update
时会出错!
(若开发板的cpu是arm架构,默认匹配都是x86架构处理器的软件包,用错源会找不到所需的包信息,就会报错)
连接WiFi
若接了网线可跳过此步
- 查看附近所有wifi
1 | nmcli dev wifi list |
- 连接wifi
1 | sudo nmcli device wifi connect "WiFi名称" password "密码" |
- 查看连接wifi后的ip,方便之后连接SSH
1 | ifconfig |
换源
我刷的系统为 Ubuntu 22.04,不同版本系统可能会有差异,可百度对应版本换源方法;此处以22.04为例:
- 先备份
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bk |
- 修改
1 | sudo vim /etc/apt/sources.list |
将以下内容覆盖即可:
此处用的是 中科大源
1 | 默认注释了源码仓库,如有需要可自行取消注释 |
改时区
1 | sudo orangepi-config |
找到 timezone
,改为 Asia
shanghai
保存并退出即可
- 查看系统日期及时间
1 | date |
更新
依次执行即可:
1 | sudo apt-get update |
部署 hexo
博客
跟着上面文章来就行,我这里简单记录一下使用到的命令
1 | ssh-copy-id -p 22 orangepi@192.168.10.11 |
- 安装git
1 | sudo apt-get install git |
- 查看是否安装成功
1 | git --version |
- 安装nginx
1 | sudo apt-get install nginx |
- 查看是否安装成功
1 | nginx -v |
- 其他
以下操作最好不要使用root用户
1 | sudo mkdir /var/repo/ |
- 脚本
1 | sudo vim /var/repo/web_blog.git/hooks/post-receive |
填写如下内容:
1 | !/bin/bash |
- 赋予脚本可执行权限
1 | sudo chmod +x /var/repo/web_blog.git/hooks/post-receive |
- 修改nginx配置
1 | sudo vim /etc/nginx/sites-available/default |
将其中路径改为你自己的hexo目录的路径
- 重启nginx即可
1 | sudo service nginx restart |
内网穿透
因为我还有个服务器,故这里直接用frp穿透
赋予可执行权限:
1 | chmod +x frpc |
贴一下frpc.ini的配置内容
1 | [common] |
- 使其开机自启
1 | sudo vim /etc/systemd/system/frpc.service |
填入以下内容:
1 | [Unit] |
- 使其生效
1 | 重载 |
散热
可以搞个 外壳+散热片+散热扇 淘宝有自己搜
- 获取CPU温度
1 | cat /sys/class/thermal/thermal_zone0/temp |
上面的值除以1000即为CPU温度
有了CPU温度即可编程实现温度高于多少度则自动开风扇、低于多少度自动关;
哦,对了,可能需要个三极管来做开关;因为板子上引脚电压是没办法使用编程来控制高低电平的
编程
在SOC上控制引脚与在单片机上略有不同
不过Orangepi zero 3自带了 WiringPi库可用来控制引脚,直接使用该库即可,库函数都封装好的,直接调用即可;
外设
我还买了DHT11与OLED屏用来检测并显示一些内容,代码也给贴一下,注释还是比较详细的:
获取ip并输出到文件
- 创建脚本
1 | vim get_ip.sh |
脚本内容如下:
1 | 获取IP地址 |
赋予脚本可执行权限
1 | sudo chmod +x get_ip.sh |
- 定时执行
1 | crontab -e |
整体C代码
1 |
|
编译:gcc main.c -o main -lwiringPi -lwiringPiDev -lpthread -lcrypt -lrt
执行:sudo ./main /dev/i2c-3
使用了线程,因为不用线程的话直接运行占用内存与CPU比较大,改成这样好多了。由于对Linux编程并不是很熟,暂时只能先这样用,之后再慢慢研究研究。
- 开机自启
1 | sudo vim /etc/systemd/system/my_main.service |
填入如下内容:
1 | [Unit] |
- 启用
1 | 重载 |
- 停用
1 | 停止 |
还可以加一层保底,以防程序自己退出或被杀进程
- 创建脚本
1 | vim start_main.sh |
填入如下内容:
1 | !/bin/bash |
赋予可执行权限
1 | chmod +x start_main.sh |
定时执行
1 | crontab -e |
其他
还想部署一下alist来着,不过docker仓库被墙了,这里记一下怎样本地部署
首先需要将alist包下载下来,然后上传到开发板
- 开始安装
1 | docker load -i alist.tar.gz |
- 运行
1 | docker run -d --restart=always \ |
解释一下:
docker run -d -p 5000:5244 –name alist xhofe/alist:latest
-d作用:在后台运行容器,并且打印容器id
-t作用:分配一个伪TTY
-i作用:即使没有attached,也要保持STDIN打开状态
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
–name:给容器起一个名字,比如叫做alist
- 获取alist密码
1 | docker exec -it alist ./alist admin log |
- 重置密码
1 | docker exec -it alist ./alist admin set your_new_password |
- 其他
1 | ps -ef | grep alist # 查看alist进程 |