#项目起源#
#视频展示#
#硬件介绍#
#性能参数介绍#
CPU: RK3308 64位 Ram国产 4核 1.2GHz
协处理器:GD32VF103C8T6 RISC-V 主频108MHz & 64KB Flash & 32KB SRAM
内存: 512MB DDR3
硬盘: 16GB eMMC
Wi-Fi: 2.4G
蓝牙: 4.0
板载元件:
接口:
USB TYPE-A *1
microSD卡接口 *1
3Pin I/O *4 (其中支持3路PWM 2路ADC)
4Pin I2C *2
金手指: 19路无冲突I/O(支持I2C、UART、SPI、ADC、PWM)
供电: Type-C 5V供电
工作电压:3.3V
最大工作电流: 2000mA
系统:定制化的debian系统
CPU:1.5 GHz 4 核心 64 位博通 BCM2711
GPU:400MHzVideoCore IV
网络:千兆以太网端口
内存:1GB/2GB/4GB/8GB LPDDR4 SDRAM 内存
Wi-Fi:双频(2.4 GHz 和 5 GHz)无线网络
蓝牙:蓝牙 5.0
接口:
USB Type C 电源接口(5V3A)
系统:Ubuntu、debian、raspbian、windows等
在CPU和主频率方面行空板要比树莓派稍逊一些
内存方面行空板没有更多的选择,只有512MB;而树莓派则给用户提供了1-8GB多种选择(当然内存和价格有着明显的关系)
在板载的元件方面,行空板要略胜一筹,板载了很多实用的按键、传感器,省去了再配置的麻烦
在硬盘方面,行空板直接在主控板中配置了16GB的硬盘芯片,除此之外还可以通过microSD卡的接口扩大存储容量。而树莓派则只预留了SD卡的接口,需要自备内存卡来烧录系统
在接口方面,行空板配置了一个USB2.0的外设接口,要使用多个USB设备则需要扩展坞来实现。而树莓派则配置了两个USB 2.0和两个USB 3.0的端口,除此之外树莓派还支持双路MicroHDMI接口、CSI摄像头接口,DSI显示器接口以及音频接口,在接口配置方面树莓派明显占了上风。
在系统方面,行空板出厂自带官方提供的深度定制系统。而树莓派则支持包括windows在内的多种系统,不过系统需要用户自己完成烧录
在GPIO接口方面,行空板提供了4路3Pin I/O接口(支持ADC、PWM),2两路I2C接口以及19路金手指接口。而树莓派则提供了40针的GPIO接口。在这一环节,树莓派的引脚选择性更多,但接线相对更繁琐。而行空板使用起来则相对简单一些
#控制板系统介绍#
切换运行程序
应用开关
查看网络信息
开关无线热点模式
切换应用程序
应用开关
Jupyter:开关Jupyter python编辑器服务,默认关闭
SIoT:开关SIoT物联网服务器,默认开启
文件共享:开关samba文件共享功能,默认开启
屏幕共享:开关VNC屏幕共享功能,默认开启
开机自启:打开之后,板子开机时将自动运行上一次关机前运行的程序,默认关闭
查看网络信息
USB网口:显示使用usb线连接板子和电脑时 板子的IP地址,固定为10.1.2.3
无线连接:显示板子连接其他Wi-Fi热点时,板子被分配的地址,由路由器分配ip
无线热点:显示当板子开启无线热点模式时,板子的ip地址,固定为192.168.123.1
其他设备:显示其他情况出现的ip地址,例如在板子上连接其他网卡设备时被分配的地址,由路由器分配ip
查看系统信息
系统版本:显示当前系统版本
CPU占用:显示当前CPU占用情况
内存占用:显示当前内存占用情况
硬盘占用:显示当前硬盘占用情况
开关无线热点
192.168.123.1
本地Web主页访问
10.1.2.3
,就可以打开界面。此页面显示板子的相关使用教程,可以方便打开官网、教程、论坛了解行空板相关资料。
应用开关设置
网络设置
需要注意的是这里不支持中文Wi-Fi,另外热点仅支持2.4G Wi-Fi。
文件上传
选择文件后点击上传即可上传文件到文件夹名称所在的文件夹下,如果重名则直接覆盖,删除文件夹将删除文件夹及其中所有文件。
注:此处仅能上传到单个文件
VNC屏幕共享
#上手测试#
unihiker库说明
pip install unihiker
复制
from unihiker import GUI #导入包
gui=GUI() #实例化GUI类
复制
显示文字
import time
from unihiker import GUI #导入包
gui=GUI() #实例化GUI类
def info_text_on_click():
print("文字被点击")
info_text = gui.draw_text(x=120, y=320, text='你好',origin='bottom' ,onclick=info_text_on_click)
while True:
#增加等待,防止程序退出和卡住
time.sleep(1)
复制
显示表情
from unihiker import GUI #导入包
import time
gui=GUI() #实例化GUI类
# 传入图片文件路径的方式
emj1 = gui.draw_emoji(x=0, y=0, w=100, h=100, emoji="Wink", duration=0.1, onclick=lambda:print("emojis clicked"))
emj2 = gui.draw_emoji(x=120, y=200, w=100, h=100, emoji="Smile", duration=1,origin="center" , onclick=lambda:print("emojis clicked"))
while True:
time.sleep(1) #等待防止程序退出看不到效果
复制
x : 横坐标
y : 纵坐标
w : 表情的宽度。按照长宽最小边等比例缩放,可省略,宽高参数都省略则保持原图分辨率。
h : 表情的高度。按照长宽最小边等比例缩放,可省略,宽高参数都省略则保持原图分辨率。
emoji : 表情名,可以使用内置表情(Angry,Nerve,Peace,Shock,Sleep,Smile,Sweat,Think,Wink)也可以传入路径表情图片(按照名字-序号.png顺序)
duration : 图片切换间隔时间
origin : 对齐位置,默认左上角
onclick : 当被点击时触发的回调函数
显示二维码
from unihiker import GUI #导入包
gui=GUI() #实例化GUI类
gui.draw_qr_code(x=120, y=150, w=100, text="https://unihiker.com", origin ="center",onclick=lambda:print("qr clicked"))
import time
while True:
#增加等待,防止程序退出和卡住
time.sleep(1)
复制
x : 横坐标
y : 纵坐标
w : 二维码的边长
text : 二维码扫描后得到的内容
origin : 对齐位置,默认左上角
onclick : 当被点击时触发的回调函数
按键侦测
from unihiker import GUI #导入包
import time
gui=GUI() #实例化GUI类
gui.wait_a_click()
# 传入图片文件路径的方式
emj1 = gui.draw_emoji(x=0, y=0, w=100, h=100, emoji="Wink", duration=0.1, onclick=lambda:print("emojis clicked"))
emj2 = gui.draw_emoji(x=120, y=200, w=100, h=100, emoji="Smile", duration=1,origin="center" , onclick=lambda:print("emojis clicked"))
while True:
time.sleep(1) #等待防止程序退出看不到效果
复制
行空板麦克风录音
from unihiker import Audio
import time
audio = Audio() #实例化音频
print("录音5秒")
audio.record('5s.wav', 5) #录音5秒,存到文件5s.wav中
复制
行空板音播放频
audio.play('5s.wav')
复制
百度语音识别
#调用百度智能云,进行语音识别
def audio_discern(audio_path):
audio_type = "wav"
""" 百度云的ID,免费注册 """
APP_ID = ' '
API_KEY = ' '
SECRET_KEY = ' '
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
text = client.asr(get_file_content(audio_path), audio_type, 16000)
return text
复制
百度语音合成
#调用百度云,进行语音合成
def audio_speech(text):
APP_ID = ' '
API_KEY = ' '
SECRET_KEY = ' '
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
text=text
result = client.synthesis(text, 'zh', 1, { 'vol': 10,})
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
with open('auido.mp3', 'wb') as f:
f.write(result)
复制
二维码生成器
from unihiker import GUI
from unihiker import Audio
import time
from aip import AipSpeech #导入百度AI
audio = Audio() #实例化音频
print("录音5秒")
audio.record('5s.wav', 5) #录音5秒,存到文件5s.wav中
print("停止录音")
#调用百度云,进行语音识别
def audio_discern(audio_path = "5s.wav",audio_type = "wav"):
""" 百度云的ID,免费注册 """
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
text = client.asr(get_file_content(audio_path), audio_type, 16000)
return text
result = audio_discern()
print(result['result'][0])
result_text = result['result'][0]
gui=GUI()
gui.draw_text(x=40, y=44, color="red", text="二维码生成器", font_size=20)
gui.draw_qr_code(x=130, y=200, w=150, text=result_text , origin ="center",onclick=lambda:print("qr clicked"))
while True:
pass
复制
翻译助手
#导入requests库
import requests
#导入json库
import json
from unihiker import GUI
from unihiker import Audio
import time
from aip import AipSpeech #导入百度AI
audio = Audio() #实例化音频
print("录音5秒")
audio.record('5s.wav', 5) #录音5秒,存到文件5s.wav中
print("停止录音")
#调用百度云,进行语音识别
def audio_discern(audio_path = "5s.wav",audio_type = "wav"):
""" 百度云的ID,免费注册 """
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
text = client.asr(get_file_content(audio_path), audio_type, 16000)
return text
result = audio_discern()
print(result['result'][0])
result_text = result['result'][0]
#翻译函数
def translate(b):
#将有道翻译API地址放入“url”变量中
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#获取要翻译的内容
word = b
#新建data字典,用来存放POST请求时需要携带的数据
data = {}
data['i'] = word
data['doctype'] = 'json'
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['client'] = 'fanyideskweb'
#向有道翻译API发送网络请求,并将返回的数据放入变量“http_data”中
http_data = requests.post(url=url,data=data).text
#将http_data中的数据解析为json格式
dict_data = json.loads(http_data)
#提取字典中的有效数据
result = dict_data["translateResult"][0][0]["tgt"]
print(f'翻译结果:{result}')
return(result)
result_text = result_text.replace("。", "")
result_f = translate(result_text)
gui=GUI()
gui.draw_text(x=80, y=44, color="red", text="翻译助手", font_size=20)
gui.draw_text(x=10, y=88, color=(255,105,180), text="原文:", font_size=20)
gui.draw_text(x=90, y=88, color=(0,191,255), text=result_text, font_size=18)
gui.draw_text(x=10, y=150, color=(255,105,180), text="结果:", font_size=20)
gui.draw_text(x=90, y=150, color=(0,191,255), text=result_f, font_size=18)
while True:
pass
复制