合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)

基于ARM语音识别的智能家居系统

我们上一篇,我们实现在Linux系统下编译程序,我们首先通过两个小练习来熟悉一下如何去编译。今天,我们来介绍一下LCD屏幕基本使用。

一、LCD屏幕基本使用

如何使用LCD屏幕?
    1、打开开发板LCD设备驱动文件。  (/dev/fb0)
    2、准备颜色数据。
    3、写入颜色像素点数据。
    4、关闭设备文件。

示例代码:

#include <stdio.h> 
#include <sys/types.h>  //open()
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>    //write()int main()  
{//1、打开开发板LCD设备驱动文件。  (/dev/fb0)int lcd_fd = open("/dev/fb0", O_RDWR);if(lcd_fd == -1){perror("open lcd_fd failed!");  //通过错误码打印错误信息return -1;   //程序非正常结束}//2、准备颜色数据。int buf[1024*600] = {0};        //像素数据缓冲区// A R G B :  0 255 0 0  -----> 0x00FF0000;int R = 0x00FF0000;int i;for(i = 0; i<1024*600; i++){buf[i] =  R;}//3、写入颜色像素点数据。int w_size = write(lcd_fd, buf, 1024*600*4);//4、关闭设备文件。close(lcd_fd);return 0;
}

二、开发板运行程序

1、在Ubuntu平台上使用交叉编译器arm-linux-gcc 编译程序。

2、下载程序到开发板。

3、给予权限,运行程序。

三、界面显示(bmp图片)

bmp:BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式。
​
它是用位映射存储的方式的图片格式,图像数据中的RGB数据直接可以使用。

1、图片准备

2、显示bmp图片

1、打开开发板LCD设备驱动文件。  (/dev/fb0)
2、打开bmp图片文件。
3、读取bmp图片像素颜色数据。
4、写入颜色像素点数据到LCD。
5、关闭设备关闭文件。
头文件: #include <unistd.h>
函数原型:ssize_t read(int fd, void *buf, size_t count);从文件描述符fd指代的文件中,读取count字节数据存入buf指向缓冲区中。
参数列表:int fd:读取的目标文件的文件描述符。void *buf:存储读到的数据的内存缓冲区。size_t count:要读取的字节数。
返回值:成功: 成功读取的字节个数。失败: -1,并且errno被设置。

示例代码:

#include <stdio.h> 
#include <sys/types.h>  //open()
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>    //write()int showBmp(char *bmp_path)
{//1、打开开发板LCD设备驱动文件。  (/dev/fb0)int lcd_fd = open("/dev/fb0", O_RDWR);if(lcd_fd == -1){perror("open lcd failed!");  //通过错误码打印错误信息return -1;   //程序非正常结束}//2、打开bmp图片文件。int bmp_fd = open(bmp_path, O_RDWR);if(bmp_fd == -1){perror("open bmp failed!");  //通过错误码打印错误信息return -1;   //程序非正常结束}//3、读取bmp图片像素颜色数据。//文件偏移量(光标),从文件开始位置偏移54字节,去除无效数据。char buf[54] = {0};read(bmp_fd, buf, 54);char bmp_buf[1024*600*3] = {0};read(bmp_fd, bmp_buf, 1024*600*3);//3.1数据处理//将3字节的bgr 的bmp图像像素点数据处理为 lcd 屏幕所需要的 argb像素数据int lcd_buf[1024*600] = {0};  //lcd 像素数据缓冲区int i, j = 0;for(i = 0; i<1024*600; i++, j+=3){//  ARGB        b   			g					r  			alcd_buf[i] = bmp_buf[0+j]<<0 | bmp_buf[1+j]<<8 | bmp_buf[2+j]<<16 | 0x00<<24;}//3.2 图片上下翻转int show_buf[1024*600] = {0};  //lcd 像素数据缓冲区int x, y;for(y = 0; y<600; y++){for(x = 0; x<1024; x++){show_buf[y*1024+x] = lcd_buf[(599-y)*1024+x];}}//4、写入颜色像素点数据到LCD。write(lcd_fd, show_buf, 1024*600*4);//5、关闭设备,关闭文件。close(lcd_fd);close(bmp_fd);return 0;
}int main()  
{showBmp("./1.bmp");return 0;
}

四、音视频播放:

mplayer 是一款开源的多媒体播放器,可以用来播放音视频,mplayer 自带多种格式的解码器,不需要我们再另外安装。开发板并未安装配置mplayer,需要自行移植。

直接移植我提供的mplayer:

文件使用说明:

alsa-lib--lib.tar.gz:

此为alsa-lib的编译结果 lib库文件压缩包,先把该文件拷贝到开发板。

tftp下载命令为: tftp 192.168.1.100 -gr alsa-lib--lib.tar.gz

解压,并将此目录下的所有库文件拷贝到开发板的/usr/lib 目录下。

解压命令为: tar -zxvf alsa-lib--lib.tar.gz
进入解压目录:  cd lib/ 
拷贝到/usr/lib目录下: cp ./* /usr/lib -r

arm-alsa.tar.gz:

         此为alsa-lib编译出的配置文件压缩包,把该文件拷贝到开发板。

tftp下载命令为: tftp 192.168.1.100 -gr arm-alsa.tar.gz

解压后,将此目录下所有文件拷贝开发板的 /usr/share/arm-alsa 目录下。(需要先在开发板根文件系统中也创建一个/usr/share/arm-alsa 目录)

  1. 新建arm-alsa/目录: mkdir /usr/share/arm-alsa (空格) -p 
  2. 新建arm-alsa/目录: mkdir /usr/share/arm-alsa (空格) -p 
  3. 拷贝到/usr/share/arm-alsa目录:    cp ./arm-alsa/* /usr/share/arm-alsa/ -r

 

zlib--lib.tar.gz:

此文件为zlib的编译结果lib库文件压缩包,先把该文件拷贝到开发板。

tftp下载命令为: tftp 192.168.1.100 -gr zlib--lib.tar.gz

解压后,将此目录下的 lib 库文件拷贝到开发板根文件系统的/usr/lib 目录下。

解压命令为: tar -zxvf zlib--lib.tar.gz
拷贝到/usr/lib目录: cd lib/            //进入解压得到的lib目录cp ./* /usr/lib -r    //拷贝

mplayer:

此为mplayer的可执行文件,这就是我们需要的 mplayer播放器!将其拷贝到开发板根文件系统的/bin 目录下,并给予执行权限即可。

cd /usr/bin/
tftp下载命令为: tftp 192.168.1.100 -gr mplayer
给予执行权限: chmod +x mplayer

使用:

    mplayer是一个命令行音视频播放工具。

代码方式:
system函数

#include <stdlib.h>
int system(const char *command);
command:命令

前台播放,可以直接停掉,后台播放,只能通过发送信号来停止,暂停,继续
killall -19 mplayer        暂停
killall -18 mplayer        继续
killall -9 mplayer        杀死进程

#include <stdlib.h>int main(int argc, char const *argv[])
{system("mplayer 1.mp3 </dev/null &");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP学习

参考&#xff1a;NLP发展之路I - 从词袋模型到Transformer - 知乎 (zhihu.com) NLP大致的发展历史。从最开始的词袋模型&#xff0c;到RNN&#xff0c;到Transformers和BERT&#xff0c;再到ChatGPT&#xff0c;NLP经历了一段不断精进的发展道路。数据驱动和不断完善的端到端的…

构建ansible学习环境

1.设置主机名 命名命令:hostnamectl set-hostname xx 设置4台主机 servera serverb serverc serverd 2.配置扩展源 1)cd /etc/yum.reops.d/ 2)vim local.repo [biaoshi] namemiaoshu baseurl/mnt/BaseOS enable1 gpgcheck0 [biaoshi2] namemi…

uniapp 打包后各静态资源加载失败的问题(背景图,字体等)

原因: 1.部署地址不在域名根目录下 解决办法(推荐办法2): 办法1.如果部署在域名的文件夹下(例如h5), 则运行的基础路径修改为/h5/ 且注意路由模式 办法2.不修改运行的基础路径(还是./), 将代码中涉及背景图(background-image)和字体资源的路径前统一加,如图:

【giszz笔记】产品设计标准流程【合集】【1.79 万字】

Tips&#xff1a;原笔记共8篇&#xff0c;本文是合集&#xff0c;字数较多&#xff0c;可收藏或关注。 目录 一、普通产品打造的流程 二、更标准一点的产品打造过程&#xff08;十一步&#xff09; &#xff08;一&#xff09;制定工作计划 &#xff08;二&#xff09;用户…

65道常问前端面试题总结react

面试题总结 一.Axios的实现原理 Axios 是一个基于 Promise 的 HTTP 客户端库&#xff0c;用于浏览器和 Node.js 环境。它可以发送 HTTP 请求并处理响应数据。下面是 Axios 实现的基本原理&#xff1a; 封装请求&#xff1a;Axios 提供了一个简单易用的 API&#xff0c;使得开…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 系列文章(目录)

系列文章目录 第一章 技术栈简介 (开篇) 第二章 环境部署 (Node等环境安装) 第三章 项目创建 (Vite项目初始化) 第四章 认识项目目录 (项目整体介绍) 第五章 组件库安装和使用(Element-Plus基础配置) 第六章 样式格式化 (Sass配置) 第七章 路由配置 (vue-router深入解读) 第八…

向上转型 向下转型 重写 多态 ---java

目录 一. 向上转型 1.1 概念 1.2 语法格式 1.3 动态绑定引入 1.4 重写的引入 1.5向上转型的使用方式 方式一: 直接赋值 方式二: 通过传参,进行向上转型(多态引入) 方法三:通过返回值, 进行向上转型 二. 重写 2.1 概念 2.2 重写的格式 2.3 重写的规则 【重写和重…

如何最大化客户生命周期价值?APMDR 模型在袋鼠云的落地实践

相信大家都认可一个观点&#xff1a;不论是 To B 还是 To C&#xff0c;用户是企业的核心资源&#xff0c;是互联网产品中最重要的价值之一。因此&#xff0c;深入挖掘用户价值成为现在大部分企业运营的关键。 之前我们为大家介绍过如何利用 RFM 模型让企业聚焦于更有价值的用…

数据分层:打造数据资产管家

一、引言 随着企业数据规模的增长&#xff0c;数据的价值变得越来越重要。然而&#xff0c;传统的数据库在承载大量数据时面临挑战&#xff0c;需要高效有序的维护。因此&#xff0c;建立高效的数据仓库成为了企业决策和管理的基石&#xff0c;但现代技术的背景下&#xff0c;…

动能方案 | 15693协议的读卡器应用 DP1363F 替代RC663

15693协议是一种高频&#xff08;13.56 MHz&#xff09;射频识别&#xff08;RFID&#xff09;协议&#xff0c;广泛满足无线识别和数据传输领域。其特点包括较远的读取范围、支持快速数据传输、与多个标签的兼容等&#xff0c;产生于不同行业有着广泛的应用&#xff0c;包括但…

【广州华锐互动】昆虫3D虚拟动态展示:探索神奇的微观世界

在这个充满科技魅力的时代&#xff0c;我们可以通过各种方式去了解和探索自然界的奥秘。而昆虫作为地球上最为丰富多样的生物群体之一&#xff0c;其独特的生活习性和形态特征一直吸引着人们的目光。 由广州华锐互动开发的昆虫3D虚拟动态展示系统&#xff0c;成为了一种全新的科…

Java异常处理机制

Java异常处理机制 一、异常概述与异常体系结构异常概述Error示例代码&#xff1a;Exception示例代码&#xff1a;异常体系结构Error和Exception的区别:异常分类检查异常非检查异常Why:为什么有非检查异常&#xff1f;Where:非检查异常有哪些&#xff1f;Exception异常划分运行时…

idea拉去新建子模块,提交提示此模块处于游离状态

前提&#xff1a; 其他同时创建了子模块&#xff0c;我这边进行拉去后&#xff0c;无法拉去&#xff0c;后使用命令行将代码拉去下来&#xff0c;使用代码拉去详见&#xff1a;idea使用git拉不下来子模块信息后我这边写代码&#xff0c;提交提示子模块处于游离状态。 处理方法…

ModuleNotFoundError: No module named ‘pycocotools‘

cuda 12.1 pytorch 2.0.1 python 3.11 运行代码&#xff0c;报该错误&#xff0c;尝试了以下方法解决&#xff1a; 方法一 # step 1: 安装cython pip install Cython# step 2: 安装pycocotools pip install githttps://github.com/philferriere/cocoapi.git#eggpycocotools…

和田2023年群众舞蹈大赛总决赛圆满落幕!

11月19日&#xff0c;由中共和田地委宣传部主办&#xff0c;地区文旅局承办&#xff0c;地区文化馆、各县市文旅局协办&#xff0c;北京市援疆和田指挥部支持的和田地区2023年“大地欢歌 舞动和田”群众舞蹈大赛总决赛在和田市新夜市圆满落幕&#xff0c;比赛最终决出一等奖1名…

Adobe XD免费使用全攻略,详细教程来袭!

Adobexd是一种基于矢量的UI和UX设计工具。设计师可以使用Adobexd进行智能手表揭示设计、网页设计等。由于其强大的设计功能&#xff0c;Adobexd逐渐成为设计界的热门工具。作为一种海外设计工具&#xff0c;Adobexd是否免费也成为很多设计关注的话题&#xff0c;本文将为您解答…

Github Copilot AI编码完成工具

目录 一、GitHub Copilot 1、简介 2、工作原理 3、功能 二、GitHub Copilot X 1、什么是 GitHub Copilot X 2、GitHub Copilot X 的功能 三、支持、使用 1、支持 2、使用 四、实际研究、验证(代码方向) 1、代码生成 2、代码提示 3、生成测试用例 4、代码解释 5…

MySQL INSERT插入条件判断:如果不存在则插入

MySQL INSERT插入条件判断&#xff1a;如果不存在则插入&#xff08;转&#xff09; 我们经常需要进行sql的批量插入&#xff0c;要求&#xff1a;该条记录不存在则插入&#xff0c;存在则不插入。如果使用一条INSERT语句实现呢&#xff1f; ####普通的 INSERT INTO 插入&…

编译源码-【opencv3.4.16 + vs2013 x64】

编译机器&#xff1a;i5 13500HX RTX 4050 laptop win11 CMake 3.26.4 Configure&#xff0c;去掉勾选图中黄色标注的项&#xff0c;opencv_world 随意 Configure可能提示3rdparty下载timeout&#xff0c;它会下载到源码目录的.cache ├── .cache │ ├──ffmpeg │ │ …

怎样获得RWS证书?

RWS认证负责的羊毛标准是一个独立、自愿的标准&#xff0c;这意味着企业可以选择接受认证。对于一个农场&#xff0c;认证保证了羊的五种自由得到尊重&#xff0c;并确保土地管理和保护方面的最佳做法。认证可确保认证农场的羊毛被正确识别和追踪。 怎样获得RWS证书&#xff1f…