【新技能Get】小伙写了个Python脚本,用高性能RISC-V开发板监测B站未读消息

描述

RVspace.org

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

                                                                

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

 

开发板

 

写入镜像

 

这块板子的系统运行和树莓派一样,需要先将系统镜像写入内存卡,再插到板子上来运行。目前官方提供的只有 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可以快速达到。


 

开发板

 

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


 

开发板

 

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


 

开发板

 

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

  •  
./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来控制它。


 

开发板

 

通过GPIO控制LED灯

 

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

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


 

开发板

 

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


 

开发板

 

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

  •  
  •  
  •  
  •  
  •  
cd /sys/class/gpio
echo 448 > export
cd gpio448
echo out > direction
echo 1 > value

这样便能点亮LED灯;


 

开发板

 

如果想熄灭它,只需执行

  •  
echo 0 > value

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


 

开发板

 

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

 

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

 

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

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

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
import requests
import time
import os
# 使用time模块的sleep来控制亮灯熄灯时间间隔

# 使用哪一个针脚,例如 448、450、452 等
gpio = 452
led = '/sys/class/gpio/gpio' + str(gpio)

# 通过浏览器的 F12 获取 cookie
cookie = ""

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):
pass
else:
    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开源软件安装与编译内核,感兴趣的朋友可自行查看~

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分