资讯详情

【新技能Get】小伙写了个Python脚本,用高性能RISC-V开发板监测B站
来源:StarFive赛昉科技 发布时间:2022-04-24 类型:元器件知识
本文转自B站up主Powersee,博客地址:https://powersee.github.io/。另外,RVspace.org社区开通了昉·星光VisionFive中文讨论区,欢迎大家来玩~

本文转自B站up主Powersee,博客地址:https://powersee.github.io/。另外,RVspace.org社区开通了昉·星光VisionFive中文讨论区,欢迎大家来玩~


近一在折腾昉·星光VisionFive这块开发板,这是赛昉推出的可运行Linux的RISC-V单板计算机处理器是赛昉的昉·惊鸿7100 SoC(JH7100,这是一颗RISC-V架构的处理器,工作频率1.0GHz,64位双核,内核性能对标ARM A55

2

写入镜像


这块板子的系统运行和树莓派一样,需要先将系统镜像写入内存卡,再插到板子上来运行。目前官方提供的只有 Fedora 这个发行版,可以在GitHub上找到下载链接:https://github.com/starfive-tech/Fedora_on_StarFive


下载完是一个特殊的压缩格式,zst,当前这种zst格式是一种压缩文件,是由ZStandard研发的,作为一种ZStandard压缩文件使用,此文件流行程度是50分(0-100满分)。

需要使用专门的工具才能解压,稍微麻烦了点。工具在这里有提供:

https://rvspace.org/en/Product/VisionFive/Technical_Documents/VisionFive_Single_Board_Computer_Quick_Start_Guide


点击RVspace.org网页左侧的Flashing Fedora OS to a Micro-SD Card可以快速达到。

3

我是在win10进行操作的,将下载好的解压工具从压缩包里解压出来,和zst文件放在一起。

4

此时在这个文件夹里的空白处,一只手按住键盘上的Shift键,另一只手按一下鼠标的右键,在此处打开powershell,就可以快速在当前文件夹打开一个命令行窗口。(此处我的 powershell 是自己升级过的,系统自带的是没有带preview的)

5

执行这条命令就可以解压了,

./zstd.exe -d Fedora-riscv64-jh7100-developer-xfce-Rawhide-20211226-214100.n.0-sda.raw\.zst -o Fedora-riscv64-jh7100-developer-xfce-Rawhide-20211226-214100.n.0-sda.raw

解压出来的文件差不多 13G,可以使用写盘工具将它写入内存卡中,例如etcher。


开机


之后将内存卡插入开发板,使用HDMI线连接显示器,通电开机,便可进入Fedora了。


默认的用户名是riscv,密码是starfive。


由于没有GPU,且本身只是双核,所以桌面体验会有一些卡顿。于是我放弃用鼠标来控制它,而是选择在电脑上通过ssh来控制它。

6

通过GPIO控制LED灯


通过这个网页,我们可以了解到这块板子的GPIO信息;

https://rvspace.org/en/Product/General/StarFive_40-Pin_GPIO_Header_User_Guide


7

准备一颗LED灯,一头连接34号的GND,一头连接40号的GPIO0;

8

在终端里进行如下的操作(需要 root 身份来执行);

cd /sys/class/gpioecho 448 > exportcd gpio448echo out > directionecho 1 > value

这样便能点亮LED灯;

9

官方文档里的这个表格非常重要,刚才我们控制 GPIO0,操作的是 448,如果现在我们想控制 GPIO4,从表格可以查到是 452,那么只需将刚才的 448 换成452 即可让 GPIO4 输出高电平。

10

用Python脚本监测B站未读消息


我写了一个Python脚本,作用是监测哔哩哔哩上面是否有人给我发私信,也就是我是否有未读消息,如果有的话,则点亮LED灯。而当我看我消息后,脚本检测到目前没有未读消息了,则会将LED灯熄灭。


脚本已放在GitHub 上面,有兴趣的朋友可以参考一下。

https://github.com/powersee/bilibili_unread/blob/master/bili-for-visionfive.py

import requestsimport timeimport os# 使用time模块的sleep来控制亮灯熄灯时间间隔
# 使用哪一个针脚,例如 448、450、452 等gpio = 452led = '/sys/class/gpio/gpio' + str(gpio)
# 通过浏览器的 F12 获取 cookiecookie = ""
url_mes = 'https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread?unread_type=0&build=0&mobi_app=web'headers = {'cookie': cookie}
if os.path.exists(led):passelse: os.system(f'echo {gpio} > /sys/class/gpio/export')
os.system(f'echo out > {led}/direction')# 将引脚设置为输出端
# 获取未读消息数量unread = requests.get(url_mes, headers=headers).json()unfollow_unread = unread['data']['unfollow_unread']follow_unread = unread['data']['follow_unread']num = unfollow_unread + follow_unread# 如果有未读消息,将未读数量打印出来if num: print(num)#GPIO.output(ioNum, GPIO.HIGH) os.system(f'echo 1 > {led}/value') print(time.asctime(time.localtime(time.time())))# 引脚输出高电平,LED灯亮起else:# print("No message.")#GPIO.output(ioNum, GPIO.LOW) os.system(f'echo 0 > {led}/value')# 引脚设置为低电平,LED灯熄灭

此外,Powersee在RVspace.org和他的博客上分享了另外两篇使用心得,分别是VisionFive串口调试与编译内核RISC-V开源软件安装与编译内核,感兴趣的朋友可自行查看~


最后添加上VisonFive开发板链接:https://www.iceasy.com/10210/1022722251.shtml