本篇介绍基础软件准备工作。主要从以下几个方面描述。系统镜像烧录,SSH登陆,VNC远程桌面配置,OpenCV安装,USB串口使用。
由于LicheePi 4A开发板是内测版,出场自带的系统不是最新的,为了更好地体验开发板,需要重新烧录最新的系统,下面介绍如何给板子重新烧录系统。
官方提供了百度网盘的下载链接:
https://pan.baidu.com/e/1xH56ZlewB6UOMlke5BrKWQ
下载并解压好后,需要修改burn_lpi4a.bat的内容来适配自己的文件目录。我存储的目录和修改的文件见下图。
具体烧录镜像过程官方文档介绍的非常详细,照着做就行。参见如下链接:
https://wiki.sipeed.com/hardware/zh/lichee/th1520/lpi4a/4_burn_image.html
我开启了debug串口监视,可以和CMD烧录窗口对比观察进度,刚开始是这样的。
烧录完成是这样的:
完成后手动重启,就可以直接进入新版系统,而且是自动登录sipeed账号,比默认版本好用。
新版系统默认开启SSH登陆,基本上不用设置,此处我推荐一款终端工具软件。MobaXterm 是用于远程计算的工具箱,作为一个 Windows 应用程序,它为程序员、网站管理员、IT管理员和几乎所有需要以更简单的方式处理远程工作的用户量身定制了大量功能。MobaXterm 提供了所有重要的远程网络工具(SSH, X11, RDP, VNC, FTP, MOSH,…)和 Unix 命令(bash, ls, cat, sed, grep, awk, rsync,…)。MobaXterm 还有很强的扩展能力,可以集成插件来运行 Gcc, Perl、Curl、Tcl / Tk / Expect 等程序。
具体下载链接如下,下载便携版就很好用。
网址:
https://mobaxterm.mobatek.net/download-home-edition.html
文件链接:
https://download.mobatek.net/2332023092000531/MobaXterm_Portable_v23.3.zip
使用SSH登陆,用户名sipeed,密码licheepi,登录界面如下。
安装需要的软件包,远程桌面使用轻量化的 Xfce 桌面环境。
sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
sudo apt install tigervnc-standalone-server tigervnc-common
安装好之后,输入 vncserver 命令,配置相关密码,系统会提示配置密码,根据自身需要设置,第二个密码用于仅供查看的用户登录:
kill 掉刚刚创建的 VNC 实例,先进行一些配置。xstartup 文件是 TigerVNC 服务器启动时运行的脚本,创建并编辑文件 ~/.vnc/xstartup:
写入下面的内容:
并赋予权限
增加 VNC 服务器的启动参数,创建并编辑“~/.vnc/config”文件,加入需要的启动参数,比如想要设置启动时的分辨率和 dpi,可以写入下面的内容:
以上两个文件搞好后,可以在SSH登陆后,mobaxterm如下界面看到。
若因为防火墙连接不上 VNC,可以使用 ufw 来添加允许的端口,比如使用 VNC服务器的显示端口5901
虽然有报错,但是好像不影响VNC登录。
通过Applications->Setting内的Session and Startup菜单打开启动设置:
点击对话框底部的”Add“按钮,添加自启动程序即可。其中, Command栏填写正确最关键。
如此操作后,由于系统是开机自动登录sipeed账户桌面,就能实现VNC开机自启动了。
由于我的设计预计会用到OpenCV,就按照官方指导文件安装并测试。
首先安装依赖,以及python3环境
然后使用以下程序读取摄像头并显示出来。
代码1、camtest.py
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)
# 检查是否成功打开摄像头
if not cap.isOpened():
print("无法打开摄像头")
exit()
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# 循环读取摄像头的每一帧图像
while True:
# 从摄像头中获取一帧图像
ret, frame = cap.read()
# 检查是否读取成功
if not ret:
print("无法获取图像")
break
# 显示图像
cv2.imshow("USB Camera", frame)
# 等待按下 ESC 键退出
if cv2.waitKey(1) == 27:
break
# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
安装成功,运行效果如下图。
我的设计预计会用到USB转串口,手头小板是CP2102芯片的。把转接线插入LicheePi 4A开发板后,可以从调试串口看到如下信息。
由此可见,开发板此版操作系统是内置CP210X驱动的,而且在设备接入后,自动加载到/dev/ttyUSB0。
计划在Python程序中使用串口连接Arduino外设,所以安装Python串口库。
编写测试代码,进行简单收发,代码如下。
代码2、test_com.py
# 导入模块
import threading
import time
import serial
import serial.tools.list_ports
# 自定义变量
port = "/dev/ttyUSB0" # 端口号,根据自己实际情况输入,可以在设备管理器查看
bps = 115200 # 串口波特率,根据自己实际情况输入
timeout = 5 # 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
rxdata = '' # 接收的数据
# 扫描端口
def check_uart_port():
port_list = list(serial.tools.list_ports.comports())
# print(port_list)
if len(port_list) == 0:
print('can not fine uart port')
return False
else:
for i in range(0,len(port_list)):
print(port_list[i])
return True
# 打开串口
def open_uart(port, bps, timeout):
try:
# 打开串口,并返回串口对象
uart = serial.Serial(port, bps, timeout=timeout)
return uart
except Exception as result:
print("can not open uart")
print(result)
return False
# 发送数据
def uart_send_data(uart, txbuf):
len = uart.write(txbuf.encode('utf-8')) # 写数据
return len
# 接收数据
def uart_receive_data(uart):
if uart.in_waiting:
rxdata = uart.read(uart.in_waiting).decode("utf-8") # 以字符串接收
# rxdata = uart.read().hex() # 以16进制(hex)接收
print(rxdata) # 打印数据
# 关闭串口
def close_uart(uart):
uart.close()
# 创建一个线程用来等待串口接收数据
class myThread (threading.Thread): # 继承父类threading.Thread
def __init__(self, uart):
threading.Thread.__init__(self)
self.uart = uart
def run(self): # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
while True:
# print("thread_uart_receive")
uart_receive_data(self.uart) # 接收数据
time.sleep(0.01)
# 主函数
def main():
# 扫描端口
result = check_uart_port()
if(result == False):
return
# 打开串口
result = open_uart(port, bps, timeout)
if (result == False):
return
else:
uart1 = result
# 创建一个线程用来接收串口数据
thread_uart = myThread(uart1)
thread_uart.start()
while True:
# 定时发送数据
txbuf = "hello world\r\n"
len = uart_send_data(uart1, txbuf)
print("send len: ", len)
time.sleep(3)
# 启动主函数
main()
我这测试用了两个CP2102小板,一个接开发板,一个接PC机,串口交叉相连。运行测试程序。
测试效果如下图,开发板每隔3秒发送一次"hello world",在PC机上可以收到,PC机随便发一些字符,开发板也能收到,串口测试通过。
通过以上操作,基本把系统常用工具和硬件外设准备完成,经过简单测试都能正常工作,为下一步任务打好基础。
本帖最后由 sipower 于 2023-10-8 23:40 编辑用VNC还是挺方便的,我回去也学习一下先。