
#项目起源#

#视频展示#
#硬件介绍#


#性能参数介绍#

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 timefrom 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 timegui=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 timewhile True:#增加等待,防止程序退出和卡住time.sleep(1)
x : 横坐标
y : 纵坐标
w : 二维码的边长
text : 二维码扫描后得到的内容
origin : 对齐位置,默认左上角
onclick : 当被点击时触发的回调函数

按键侦测
from unihiker import GUI #导入包import timegui=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 Audioimport timeaudio = 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=textresult = 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 GUIfrom unihiker import Audioimport timefrom aip import AipSpeech #导入百度AIaudio = 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 textresult = 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 jsonfrom unihiker import GUIfrom unihiker import Audioimport timefrom aip import AipSpeech #导入百度AIaudio = 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 textresult = 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'] = worddata['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

人工智能案例测试








