单片机/MCUwilliam hill官网
直播中

zealsoft

3年用户 689经验值
擅长:可编程逻辑,嵌入式技术
私信 关注

【youyeetoo X1 windows 开发板体验】支持语音控制的AIoT智能终端设计

感谢电子发烧友和深圳风火轮科技的信任,本次参加youyeetoo X1 Windows 开发板的评测。

开发板特点

youyeetoo X1 是一款由深圳风火轮科技推出的x86架构单板电脑(SBC),可运行全功能版的windows和Linux, 具备低成本,高性能的特点(11代Intel CPU N5105),它主要面向AIOT和自动控制 市场,尺寸只有手掌大(115 * 75mm),接口却非常丰富,内置了3路串口UART,2路HDMI,6路USB口、1路I2C、1路SPI、5路GPIO等 AIOT物联网常用的接口,还能接7寸MIPI触摸屏。

未标题-1(2).jpg

规格参数

Item descriptions
处理器CPU: 11代Intel@ Jasper Lake N5105 赛扬(CPU工作频率2.0~2.9GHz,四核四线程10nm TDP 10W)
显卡GPU: Intel@UHD超高清核心显(频率:450-800MHz)
内存RAM: 板载4G/8G/16G LPDDR4 (可选) 主推8GB
硬盘: 板载eMMC:0/64G/128G/256G(可选)M.2扩展:支持 NVMe 2280 SSD固态(PCIE3.0)和m2 SATA2280 SSD(支持超高速 PCle Gen 3.0 x4NVMe 1.4,也兼容PCle Gen 3.0 x2 NVME)SATA扩展:通过SATA转接板 可以扩展 SATA3硬盘 (需要另购SATA转接板配件)Micro SD(TF): 支持市面上主流的所有TF卡
网络: 有线网络: RJ45千兆网口 1个无线网络: 通过M.2槽扩展,可选 WIFI5+BT5.0/WIFI6+BT5.2 双频WIFI蓝牙4G LTE: 通过 M.2槽扩展,默认调 EC20 4G数据上网(需要另购4G转接板配件)
显示输出 (多屏异显) HDMI 接口: HDMI2.0 4K/60HzMicro HDMI接口: HDMI2.0 4K/60HzMIPI FPC接口:默认支持风火轮 MIPI7LCD(1024 * 600 LCD触摸屏)
USB USB-A 座子: USB2.0 * 2(两个接口共用1.45A电流)USB-A 座子:USB3.0 * 2 (两个接口共用1.45A电流)USB插针:USB2.0 * 2(两个接口共用1.45A电流)
音频输出 1. 3.5耳机座(4线式),可直接用带MIC的通话耳机2. SPK插针座子:板载3W功放,匹配8欧喇叭3. HDMI音频输出 (音频可以走HDMI输到电视上)
音频输入 1. 板载数字麦克风MIC,带降噪功能 (默认BIOS支持)2. 背面MIC座2PIN: 可接模拟信号的MIC 咪头3.3V,座子间距0.8mm(需换BIOS才能使用)
M.2插槽扩展 2280规格:支持NVME SSD/M.2 SATA SSD (M-key)2230规格:支持WIFI5+BT5.0/WIFI6+BT5.2 模组扩展或者购买风火轮4G转接板,支持4G LTE (E-key)
UART串口 有3个UART TTL电平串口,可转接 RS232或RS485等模块,也可以CAN通信模块
I2C IIC接口* 1 4PIN插针引出,提供windows/linux 操作例子教程 默认3.3V
SPI SPI接口* 1 5PIN插针引出,提供windows/linux 操作例子教程 默认3.3V
GPIO GPIO* 5 6PIN插针引出,提供windows/linux 操作例子教程默认3.3V
LED灯 板载红蓝LED灯2个,并联6PIN插针引出,方便安装整机 默认3.3V(提供教程API接口可控制亮灭或者心跳闪烁),默认红灯闪烁绿灯常灭,可编程控制
按键 Power键 * 1 Reset键 * 1(恢复BIOS设置)
RTC RTC座子SH1.25规格,可以外接纽扣电池CR2032,实现断电时间和定时开机, 3.3VRTC一年功耗35mAh左右
通电开机 支持通电开机(可以在BIOS中设置)
电源 12V DC座子(5.5*2.1)输入,2PIN PH-2A 2.54mm插针输入推荐电源适配器12V3A
尺寸 115 * 75mm
散热器 FAN座子规格: SH1.04PIN座子 标配带散热器出货 5V/0.2A 功率
系统OS Windows 10/11 和 Linux ubuntu /Linux Debian 提供硬件操作教程和例子
NFC NFC被动通信,支持与手机进行数据传输,兼容android/iOS手机 风火轮提供例子和API教程
软件看门狗 标准windows API支持
CPU温度读取 标准windows API支持
CPU风扇调速 标准windows API支持
POE 支持AC/BT协议30W POE模块,可定制60W支持(需要另购POE模组)

详细资料

该开发板的详细资料参见:http://wiki.smartfire.cn/x1

评测计划

接下来打算先文档,学习youyeetoo X1的外设控制,重点是其在Windows下的使用。以前测试过很多Linux开发板,本次重点想测试其Windows下的表现,开发工具将采用Visual Studio,开发语言采用C#,也可能会结合使用C++和Python,视需要再定。

后续将移植语音识别模块到该平台上,并且连接该模块到IoT平台,实现利用语音指令控制其他外设。

开箱

今天收到厂商寄送的开发板,中午就迫不及待地开箱了。

vlcsnap-2024-01-26-16h25m41s719.png
vlcsnap-2024-01-26-16h25m26s538.png

vlcsnap-2024-01-26-16h25m56s547.png

vlcsnap-2024-01-26-16h29m13s282.png

vlcsnap-2024-01-26-16h29m38s393.png

风火轮的板子做工精致,配件齐全,特别是配了7存的显示屏,真是诚意满满!

完整的开箱视频见B站:https://www.bilibili.com/video/BV15k4y1S7R3/

回帖(5)

zealsoft

2024-2-17 20:12:18
开发板默认的镜像是Windows 10 + HDMI接口输出。所以如果想简单地测试板子的功能,可以直接利用HDMI显示器进行。

接好电源,开机后等待几秒钟,HDMI显示器就有输出了。首次安装系统,就会显示Windows 10的安装界面


经过几步设置之后,就正式进入Windows了。



如果想安装Windows 11,可以到风火轮的官方网站下载固件。
举报

zealsoft

2024-2-17 20:12:31
本帖最后由 zealsoft 于 2024-2-18 18:49 编辑

由于厂商提供了7寸的触摸屏,就希望修改BIOS为触摸屏输出。参照https://wiki.youyeetoo.cn/zh/x1/parts/screen的介绍方法就可以将BIOS的默认输出改为7寸触摸屏。厂商在B站也提供了详细的视频指导:https://www.bilibili.com/video/BV1aG411i7r5/。触摸屏盒子中还有一个窄的排线,是提供给华硕开发板使用的,我们用不到。在厂商的说明中,还提到不更新BIOS,直接在Windows下安装显示驱动的方法,不过我在测试中发现不可行。

再次接好电源,开机后默认的输出就是7寸屏了,HDMI显示器也会有输出,可以形成双屏显示效果。
微信图片_20240218184621.jpg



举报

zealsoft

2024-3-1 22:16:05
今天进入到正式开发阶段,介绍一下如何使用C#语言和华为提供的IoT设备接入SDK(C#)进行设备的连云工作。

1. 下载华为的IoT设备接入SDK(C#)
华为的IoT平台支持MQTT,当然可以直接调用C#语言的MQTTNet库直接编程完成平台的接入工作。我们选择华为官方的C#接入SDK,主要是可以简化诸如鉴权和一些手工编解码的工作。使用官方的SDK也会有很多坑,特别是这个C# SDK用的人不多,它的文档好久没有更新了,和最新的平台有点对不上。不过代码是有人一直在维护的,基本可以工作。官方的SDK地址:
https://github.com/huaweicloud/huaweicloud-iot-device-sdk-csharp
建议大家先看看中文的ReadMe文档,这个文档写得还是很详细的。对于文档中已经描述的部分,我们就不重复了,下面重点说文档和现有平台不一致的地方。

2. 在华为平台上创建产品和注册设备
要使用华为平台进行接入,首先需要在平台上进行产品创建和设备注册,然后才能用程序进行平台介入。在文档中介绍了全过程,虽然有个别地方和现有平台不一致,但大体差不多,有几点不同需要注意:

  • 文档中提到的产品模型注册链接是错误的,无法下载到SmokeDetector的产品模型。这部分可以忽略,不会影响设备的接入,只影响消息内容的解析。我们先做测试,日后再创建产品模型。
  • 文档和示例程序中的设备密钥都是“secret”。现有平台上要求密钥至少8位,所以这个地方要设置8位以上的密钥,内容随意。
  • 平台的接入信息很重要,后面修改程序时会用到。

接入信息.PNG
3. 对程序代码的修改
官方程序是针对Visual Studio 2017的.NET Standard 2.0的,我们使用Visual Studio 2022的.NET 8.0,并没有遇到什么问题。测试程序的功能可以先从 iot-device-feature-test这个例子开始。这个例子的Main函数是所有简单功能测试的入口。对程序的修改包括:


  • 修改serverUri为上面接入信息的服务器,MQTT和MQTTS使用的服务器地址是相同的。
  • 修改deviceId使其和所创建的设备一致。
  • 修改deviceSecret使其和所创建的设备一致。
  • 该程序中的每个测试代码默认是用注释关闭的,想测试哪个就把哪个前面的注释去掉。比如
  1. MessageSample ms = new MessageSample();
  2.             ms.FunMessageSample(serverUri, 1883, deviceId, deviceSecret);
这里采用的是1883端口,先测试非安全协议,免得证书问题捣乱。


  • 程序内部使用NLog输出了日志,有问题时可以看日志进行排查


4. 发送消息的测试
下面就可以直接运行测试程序了。从程序输出可以看到设备侧已经连接上服务器,并正确发出了消息。
消息发送成功控制台.PNG
在切换到云侧的控制台,我们在消息跟踪中可以看到设备发送消息的相关日志。
消息发送日志云平台.PNG
点击消息详情,可以看出平台接到的消息是完全正确的。
消息跟踪详情.PNG



举报

zealsoft

2024-3-6 21:19:49

MQTT连云测试完成之后,今天来测试一下板子的语音功能,为后续的语音控制做准备。

C#进行语音处理需要借助于NAudio库。

我们写了一个简单的程序进行录音测试。
  1. sing System;
  2. using NAudio.Wave;
  3. class Program
  4. {
  5.     static void Main(string[] args)
  6.     {
  7.         WaveInEvent waveSource = new WaveInEvent();
  8.         waveSource.DeviceNumber = 0; // 选择输入设备,0通常是默认麦克风  
  9.         waveSource.WaveFormat = new WaveFormat(44100, 1); // 设置音频格式,这里是44.1kHz单声道  
  10.         WaveFileWriter waveFile = new WaveFileWriter(@"RecordedAudio.wav", waveSource.WaveFormat);
  11.         waveSource.DataAvailable += (object sender, WaveInEventArgs e) =>
  12.         {
  13.             waveFile.Write(e.Buffer, 0, e.BytesRecorded);
  14.             waveFile.Flush(); // 确保数据被写入磁盘  
  15.         };
  16.         Console.WriteLine("开始录音,按任意键停止...");
  17.         waveSource.StartRecording();
  18.         Console.ReadKey(true); // 等待用户按键以停止录音  
  19.         waveSource.StopRecording(); // 停止录音  
  20.         waveFile.Dispose(); // 关闭并释放文件资源  
  21.         waveSource.Dispose(); // 释放录音设备资源  
  22.         Console.WriteLine("录音已保存到 RecordedAudio.wav");
  23.     }
  24. }
我是在无影云电脑上进行Visual Studio开发的,这个程序虽然可以在无影云电脑上正常运行,但录音的音质很差,主要还是无影云电脑对实时语音流的支持比较差。我决定把程序直接拷贝到板子上运行。

开发板上内置了.NET Framework,但是并不包括最新的.NET 环境。要将程序拷贝到板子上运行,要么在板子上安装.NET 8.0的运行库,要么在Visual Studio中发布程序时将所有需要的库文件都打包在一起。我选择的是后者,需要在发布的配置文件设置中选择部署模式为“独立”。


这样Visual Studio就会把所有需要的文件都放在一个目录中。对于这样的一个简单程序,一共需要195个文件,共66MB。将这些文件拷贝到X1开发板上直接运行就可以了。

运行程序的时候发现由于X1开发板的镜像是英文的,默认不支持中文,显示是乱码。但是生成的录音文件是正确的,音质也很好。附件是生成的录音文件。音频测试成功了,后面就可以实现语音识别了。

RecordedAudio.rar (232.74 KB)
(下载次数: 0, 2024-3-6 21:05 上传)





举报

zealsoft

2024-3-12 07:56:39
完成了录音的测试后,就开始语音识别的工作。这里我们采用百度的在线语音识别功能。
百度AI开放平台中,登录自己的百度账号,点击“语音识别”服务,选择“创建应用”,填好应用名称,选择应用类型,填好应用描述,这样就创建好了“语音识别”服务。

百度为C#提供了SDK,所有百度AI功能都很容易在C#中调用。在NuGet中搜索 Baidu.AI,安装最新版即可。下面是完整的代码,其中APPID/ApiKEY和apiSecretKey 需要从百度的控制台获得。
  1. using System;
  2. using NAudio.Wave;
  3. using System.Collections.Generic;
  4. using System.Text.Json;
  5. using Newtonsoft.Json;
  6. public class JsonResponse
  7. {
  8.     public int ErrNo { get; set; }
  9.     public string ErrMsg { get; set; }
  10.     public string CorpusNo { get; set; }
  11.     public string Sn { get; set; }
  12.     public List Result { get; set; }
  13. }
  14. class Program
  15. {
  16.     static void Main(string[] args)
  17.     {
  18.         WaveInEvent waveSource = new WaveInEvent();
  19.         waveSource.DeviceNumber = 0; // 选择输入设备,0通常是默认麦克风  
  20.         waveSource.WaveFormat = new WaveFormat(16000, 1); // 设置音频格式,这里是44.1kHz单声道  
  21.         WaveFileWriter waveFile = new WaveFileWriter(@"RecordedAudio.wav", waveSource.WaveFormat);
  22.         waveSource.DataAvailable += (object sender, WaveInEventArgs e) =>
  23.         {
  24. //            Console.WriteLine("BytesRecorded: {0:G}", e.BytesRecorded);
  25.             waveFile.Write(e.Buffer, 0, e.BytesRecorded);
  26.             waveFile.Flush(); // 确保数据被写入磁盘  
  27.         };
  28.         Console.WriteLine("Start recording and press any key to stop...");
  29.         waveSource.StartRecording();
  30.         Console.ReadKey(true); // 等待用户按键以停止录音  
  31.         waveSource.StopRecording(); // 停止录音  
  32.         waveFile.Dispose(); // 关闭并释放文件资源  
  33.         waveSource.Dispose(); // 释放录音设备资源  
  34.         Console.WriteLine("Saved to RecordedAudio.wav");
  35.         var data = File.ReadAllBytes(@"RecordedAudio.wav");
  36.         var AppID = "54665143";
  37.         var apiKey = "xxxx";
  38.         var apiSecretKey = "xxxxx";
  39.         var language = 1537;    //普通话模型
  40.         var options = new Dictionary
  41.         {
  42.             {"dev_pid", language}
  43.         };
  44.         Baidu.Aip.Speech.Asr asr = new Baidu.Aip.Speech.Asr(AppID, apiKey, apiSecretKey) { Timeout = 60000 };
  45.         //JObject Asr.Recognize(byte[] data, string format, int rate, [Dictionary options options = null])
  46.         var jobject = asr.Recognize(data, "wav", 16000, options);
  47.         Console.WriteLine(jobject);
  48.         
  49.         try
  50.         {
  51.             //Console.WriteLine(jsonString);
  52.             // 解析JSON字符串  
  53.             //            JsonResponse response = JsonSerializer.Deserialize(jobject.ToString());
  54.             JsonResponse response = JsonConvert.DeserializeObject(jobject.ToString());
  55.             // 检查err_no的值  
  56.             if (response.ErrNo == 0)
  57.             {
  58.                 // 打印result数组中的字符串  
  59.                 foreach (var item in response.Result)
  60.                 {
  61.                     Console.WriteLine(item);
  62.                     if (item.ToString().IndexOf("开灯") > 0)
  63.                         Console.WriteLine("Turn on the light");
  64.                     else if(item.ToString().IndexOf("关灯") > 0)
  65.                         Console.WriteLine("Turn off the light");
  66.                 }
  67.             }
  68.             else
  69.             {
  70.                 Console.WriteLine("Error occurred: " + response.ErrMsg);
  71.             }
  72.         }
  73.         catch (JsonReaderException ex)
  74.         {
  75.             // 处理JSON解析异常  
  76.             Console.WriteLine("JSON parsing error: " + ex.Message);
  77.         }
  78.     }
  79. }
在这段代码中,我们还对语音识别结果中是否包括开灯、关灯这样的词进行了判断。一般在语音识别时,百度返回的结果是“开灯。”,有时候百度也会返回“啊开灯?”这样的。程序在云电脑上运行的结果如下。由于云电脑的网络延迟导致云电脑上的录音结果不如X1开发板,现在云电脑都可以正常处理,X1开发板运行程序更没有问题了。

至此所有单项技术都验证完毕,后面就实现程序整合。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分