全志H6-ARMLinux第1天:全志概述、刷机登陆、官方外设库、蜂鸣器、超声波测距

news2024/11/24 20:42:52

1. 全志H616课程概述(456.01)

1.1 为什么学

  • 学习目标依然是Linux系统,平台是ARM架构
    • 蜂巢快递柜,配送机器人,这些应用场景用 C51、STM32 单片机无法实现
    • 第三方介入库的局限性,比如刷脸支付和公交车收费设备需要集成支付宝 SDK,提供的 libalipay.so 是 Linux 的库,设备必须跑 Linux系统
    • 图像识别,音频,视频等领域的技术支撑也无法脱离 Linux 系统
    • 人工智能型设备通常需要更好的系统和更高的算力,所以 Linux 也是必不可少
    • 能跑 Linux 的一般为 X86,ARM,MIPS,PowerPC 等架构,而 ARM 市场占有率最大
  • 综上所述就是一句话:嵌入式软件工程师如果技术栈不存在 Linux-ARM 的开发经验,那么面向的工作岗
    位就会带很多局限性,天花板有容易来的过早,在技术积累阶段对于这个知识的学习是必不可少的,但
    是这个方向水深,需要客观且科学的选择适合的角度学习。

1.2 学什么

  • 这个领域的程序员一般分三个方向:
    • 应用开发,通过跟产品业务相关,比如智能家居中控板,可以是 C++QT,可以是 C GTK,也可以是 Android 页面,也可以是基于串口屏的UI交互,后台数据交互和系统交互都是基于 Linux 系统的,初级工程师以这个方向入行居多,也容易上手,招聘岗位也很多
    • 系统开发,主要任务是为硬件工程师设计的产品板操作系统,比如 uboot,Linux 内核,文件系统等,一般为中高级嵌入式工程师,新手如果以这个方向入行,压力相对更大,一般原厂公司会招聘,岗位相对少
    • 算法工程师,此类算法跟数学模型挂钩,比如人脸识别的图像不调库处理,语音识别算法如讯飞语音的工程师,一般博士一大堆,硕士满天飞的现状
  • 根据现有就业案例,大专本科生以应用开发入行为主,在工作一两年可能会根据公司安排走系统开发,也可能一直做应用,薪资待遇并不完全由技术方向决定,还是看个人发展和公司的关系,当然还有城市,学校等因素。硕士可根据面试结果选择应用,系统,算法都行

2. H616开发板OrangePizero2介绍(457.02)

  • 学习平台至于用树莓派,海思,全志都无所谓,初级工程师掌握的是 Linux-ARM 的软硬件架构开发,主要是Linux系统的学习,只有入职后的中高级工程师才会考虑算法或者协议对底层硬件的差异化,第一版本这部分的内容以树莓派讲解,就业学员入职海康威视,OPPO,全志,移远等公司可以完美过度,所以板材的选择根据教程就行,学的是 Linux 系统
  • OrangePi 开发板不仅仅是一款消费品,同时也是给任何想用技术来进行创作创新的人设计的。它是一款简单、有趣、实用的工具,你可以用它去打造你身边的世界。
    在这里插入图片描述
  • 特性
    • CPU 全志 H616 四核 64 位 1.5GHz 高性能 Cortex-A53 处理器
    • GPU MaliG31MP2 SupportsOpenGLES1.0/2.0/3.2、OpenCL2.0
    • 运行内存 1GBDDR3(与 GPU 共享)
    • 存储 TF卡插槽:课程配套硬件 16G,测试 128G 可支持、2MBSPIFlash
    • WIFI+蓝牙 AW859A芯片、支持 IEEE802.11a/b/g/n/ac、BT5.0
    • 视频输出 MicroHDMI20a
    • 电源 USBTypeC 接口输入
    • 外设带有 I2Cx1、SPIx1、UARTx1 以及多个 GPIO 口
    • 电源指示灯和状态指示灯
  • 配套操作系统支持
    在这里插入图片描述

3. 开发板刷机和系统登录(458.03)

  • 就像买了电脑,出厂带有 windows 操作系统,才算是正在的电脑,开发板需要烧写对应的系统固件,才能正常发挥作用
  • 工具
    • Orangepi Zero2 全志H616开发板
    • PC机
    • TF卡及读卡器
    • 操作系统镜像
    • SDFormatter TF卡的格式化工具
    • Win32Diskimager 刷机工具
    • USB转TTL,用于系统烧写后的串口登录开发板
  • 工具安装
    • SDFormatter傻瓜式安装,Win32Diskimager傻瓜式安装
  • 刷机
    • Orangepizero2_3.0.6_ubuntu_jammy_desktop_xfce_linux5.16.17.img

登录系统

  • 供电
    • TypeC 口,需要插到 5V/2A 或者 5V/3A 的电源适配头,特别是开发板有接多个外设模块的时候
    • 平常 USB 供电用电脑可以,前提是不接多外设模块
    • 后面做小车等项目,用电池供电可以参考如下供电方式
      在这里插入图片描述
  • 登录
    • 使用 USB 转 TTL 模块,使用 MobaXterm 免费好用,类似的工具还有 Putty 相对太简陋,SecurityCRT 老牌
      工具需要付费或者破解
    • USB 转 TTL 模块 GND、TX 和 RX 引脚需要通过杜邦线连接到开发板的调试串口上
      a. USB 转 TTL 模块的 GND 接到开发板的 GND 上
      b. USB 转 TTL 模块的 RX 接到开发板的 TX 上
      c. USB 转 TTL 模块的 TX 接到开发板的 RX 上
      在这里插入图片描述
      在这里插入图片描述
    • 电脑安装 ch340 驱动
    • 使用 mobaXterm 登陆,默认登陆密码:
      • 用户:orangepi 密码:orangepi
      • 用户:root 密码:orangepi
    • 板载 LED 灯测试说明
      在这里插入图片描述

4. 开发板配置网络SSH登录(459.04)

1. 修改登陆密码

  • sudo passwd orangepi
    在这里插入图片描述

2. 网络配置

  • 命令扫描周围的WIFI热点:nmcli dev wifi
    在这里插入图片描述
  • 命令接入网络:nmcli dev wifi connect Jessie password 1234567890
    在这里插入图片描述
  • 查看IP地址 ip addr show wlan0
  • ifconfig 也可以
    在这里插入图片描述

3. SSH登陆开发板

  • 这是企业开发调试必用方式,相比串口来说不用接线,前提是接入网络并获得板子 IP 地址,且系统做了 SSH 的服务器,本镜像自带 SSH 服务器,所以通过 mobaXterm 登陆就行
  • 若需搭建 SSH 服务器,参考文章
    在这里插入图片描述
    在这里插入图片描述
  • 复制窗口
    在这里插入图片描述

4. 命令测试

  • echo jessieShuai >> file1:将字符串 “jessieShuai” 追加到名为 “file1” 的文件中。
    在这里插入图片描述
  • 其他命令测试
    在这里插入图片描述

5. 修改开发板内核启动日志级别(460.05)

  1. 串口连接开发板到电脑
  2. 开发板重新上电
  3. 登陆orangepi
  4. sudo vi /boot/orangepiEnv.txt
    在这里插入图片描述
  5. :wq退出
  6. sudo reboot
    在这里插入图片描述

6. 官方外设库SDK安装和验证(461.06)

  • 方法一:直接在终端下载
git clone https://github.com/orangepi-xunlong/wiringOP //下载源码
cd wiringOP                        //进入文件夹
sudo ./build clean                 //清除编译信息,实测可以不用
sudo ./build                       //编译
  • 方法二:先将压缩包下载至 win 本地
通过 windows 浏览器打开 https://github.com/orangepi-xunlong/wiringOP
下载压缩包至本地
把压缩包通过xterm传到开发板
解压 unzip xxx.zip
cd  xxx
sudo ./build
gpio readall
  • 验证指令: gpio readall
  • 如下方所示,外设库就完成安装了
    在这里插入图片描述

7. 老演员蜂鸣器BB响(462.07)

  • vim 的设置,修改 /etc/vim/vimrc 文件,需要用超级用户权限
sudo vi /etc/vim/vimrc
set tabstop=4  //设置tab键缩进4个空格(默认是8)
set nu //显示行号
set shiftwidth=4 //设置批量对齐时候的tab键空格数为4(默认是8)

在这里插入图片描述

  • 简易编译的 shell脚本:./build.sh
//build.sh
gcc beep.c -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt
  • /hardwareSoft/beep.c
#include <stdio.h>
#include <wiringPi.h>
#include <unistd.h>

#define BEEP 0 // 设置针脚0为蜂鸣器的控制引脚

int main(void)
{
    wiringPiSetup(); // 初始化wiringPi库

    pinMode(BEEP, OUTPUT); // 设置IO口的输入输出,输出

    while (1)
    {
        // sleep(1); // 1s
        usleep(100000);            // 100ms
        digitalWrite(BEEP, LOW);   // 设置IO口输出低电平,蜂鸣器响
        // sleep(1);
        usleep(100000);
        digitalWrite(BEEP, HIGH); // 设置IO口输出高电平,蜂鸣器不响
    }

    return 0;
}

8. 上节课遗留问题(463.08)

  • shell脚本小插曲
    • ./build beep.c 对应 $0 $1
    • shell脚本处理参数:可通过$x来处理,$0是命令,$1是要编译的文件
  • build.sh
gcc $1 -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt

9. 超声波测距原理(464.09)

1. 测距原理基本说明

超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离
在这里插入图片描述

  • 型号:HC-SR04

  • 接线参考:模块除了两个电源引脚外,还有TRIG,ECHO引脚
    在这里插入图片描述

  • 怎么让它发送波

    • Trig ,给Trig端口至少10us的高电平
  • 怎么知道它开始发送了

    • Echo信号,由低电平跳转到高电平,表示开始发送波
  • 怎么知道接收了返回波

    • Echo,由高电平跳转回低电平,表示波回来了
  • 怎么算时间
    Echo引脚维持高电平的时间!

    • 波发出去的那一刻,开始启动定时器;
    • 波返回来的拿一刻,开始停止定时器;

    计算出中间经过多少时间。

  • 怎么算距离

    • 距离 = 速度 (340m/s)* 时间/2

2. 时序

在这里插入图片描述

3. 时间函数

  • 函数原型
#include<sys/time.h>
int gettimeofday(struct timeval *tv,struct timezone *tz )
- gettimeofday() 会把目前的时间用 tv 结构体返回,当地时区的信息则放到 tz 所指的结构体中
struct timeval
{
  long tv_sec;/*秒*/
  long tv_usec;/*微妙*/
};

10. Linux算时差方法-可用于程序运行效率比较(465.10)

  • /hardwareSoft/timeCnt10w.c
#include <sys/time.h>
#include <stdio.h>

void mydelay()
{
    int i, j;

    for (i = 0; i < 100; i++){
        for (j = 0; j < 1000; j++);
    }
}
int main()
{
    struct timeval startTime;
    struct timeval stopTime;

    gettimeofday(&startTime, NULL);
    mydelay();
    gettimeofday(&stopTime, NULL);

    long diffTime = 1000000 * (stopTime.tv_sec - startTime.tv_sec) +
                    (stopTime.tv_usec - startTime.tv_usec);

    printf("全志H6的Linux数到10w耗时%ldus\n", diffTime);

    return 0;
}

11. 超声波测距代码编程实现(466.11)

  • /hardwareSoft/csb.c
#include <stdio.h>  //printf
#include <sys/time.h>   //gettimeofday
#include <wiringPi.h>   //gpio
#include <stdlib.h> //exit
#include <unistd.h> //usleep

#define Trig 0
#define Echo 1

double getDistance()
{
    struct timeval start;
    struct timeval stop;

    pinMode(Trig, OUTPUT);
    pinMode(Echo, INPUT);

    digitalWrite(Trig, LOW);
    usleep(5);

    digitalWrite(Trig, HIGH);
    usleep(10);
    digitalWrite(Trig, LOW);
    /* above init CSB*/

    while(!digitalRead(Echo));
    gettimeofday(&start, NULL);
    while(digitalRead(Echo));
    gettimeofday(&stop, NULL);

    long diffTime = 1000000*(stop.tv_sec - start.tv_sec) +
        (stop.tv_usec - start.tv_usec);
    //printf("diffTime = %ld\n",diffTime);

    double dis = (double)diffTime/1000000 * 340*100 / 2;
    return dis;
}

int main()
{
    double dis;

    if(wiringPiSetup() == -1){
        fprintf(stderr,"%s","init wiringPi error");
        exit(-1);
    }

    while(1){
        dis = getDistance();
        printf("dis = %lf\n\n",dis);
        usleep(500000);
    }

    return 0;
}
  • fprintf(stderr, “%s”, “init wiringPi error”); 和 perror(“why”);
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

超级好用的IDEA插件推荐

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

Vulnhub项目:EMPIRE: BREAKOUT

一、靶机地址 靶机地址&#xff1a;Empire: Breakout ~ VulnHub 靶机介绍&#xff1a; 该靶机被定义为简单&#xff0c;但是如果没有找到&#xff0c;那就难度成中等了&#xff01; 二、渗透过程 老三样&#xff0c;发现目标&#xff0c;这里用 arp-scan 确定靶机 ip&#…

网络通信的流程,浏览器地址?

1.没有交换机的通信 在一个机房内,有两台电脑相互需要通信 假设现在有三台电脑: 随着电脑的增加,线的数量也在增加,因此显得很臃肿&#xff0c;次数交换机诞生&#xff0c;很好的解决了这一方面&#xff0c; 交换机不需要进行多条线的连接: 通过给设备分配,ip地址来实现局域网…

麻辣香锅病毒处置

1. 前言 今天早上正忙着&#xff0c;上级领导通知&#xff0c;说态势感知发现2023-12-05 18:40:50 主机X.X.93.21遭受攻击&#xff0c;攻击者为X.X.0.7后迅速开展检查&#xff0c;核实确认。 2. 原因分析 这里我从态势感知上看是IP&#xff1a;X.X.93.21去攻击IP&#xff1a;…

springboot 在自定义注解中注入bean,解决注入bean为null的问题

问题&#xff1a; 在我们开发过程中总会遇到比如在某些场合中需要使用service或者mapper等读取数据库&#xff0c;或者某些自动注入bean失效的情况 解决方法&#xff1a; 1.在构造方法中通过工具类获取需要的bean 工具类代码&#xff1a; import org.springframework.beans…

制药企业的设备健康管理系统为何要符合计算机化系统验证CSV?

在制药行业&#xff0c;设备健康管理对于确保生产过程的可靠性和质量至关重要。为了有效管理和监控设备的状态&#xff0c;制药企业常常采用设备健康管理系统。然而&#xff0c;这些系统的可靠性和合规性需要通过计算机化系统验证&#xff08;CSV&#xff09;进行验证。本文将探…

STM32——定时器Timer

定时器工作原理 软件定时 缺点&#xff1a;不精确、占用 CPU 资源 void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); } 使用精准的时基&#xff0c;通过硬件的方式&#xff0c;实现定时功…

消费1000返1500元,买了4罐奶粉倒赚商家2000元?商家亏吗?

大家好&#xff0c;我是微三云胡佳东&#xff0c;一个深耕私域电商模式玩法的互联网人&#xff01;&#xff01; 在当前的全球经济环境下&#xff0c;消费增值的概念正逐渐受到广泛的关注。这一模式的崛起&#xff0c;不仅仅是一种商业模式的创新&#xff0c;更代表着我们对经…

(十五)Flask覆写wsgi_app函数实现自定义中间件

中间件 一、剖析&#xff1a; 在前面讲session部分提到过&#xff1a;请求一进来&#xff0c;Flask会自动调用应用程序对象【Flask(__name__)】的__call__方法&#xff0c;这个方法负责处理请求并返回响应&#xff08;其实如下图&#xff1a;其内部就是wsgi_app方法&#xff…

报表多源关联

报表多源关联 需求背景 在项目中会遇到多种数据展现在一起的报表。例如部分指标在关系型数据库中&#xff0c;部分指标通过restful接口获得到json&#xff0c;然后根据共同的维度关联一起&#xff0c;形成新的数据集。 解决方案 在硕迪报表中有两种方式实现该多源报表&…

UI自动化测试工具的定义及重要性

UI自动化测试工具在现代软件开发中起着不可或缺的作用。它们能够提高测试效率、减少人为错误、提供全面的测试覆盖&#xff0c;并支持持续集成。通过有效使用UI自动化测试工具&#xff0c;开发团队可以提高软件质量&#xff0c;提供更可靠的应用程序&#xff0c;满足用户的需求…

C语言内存函数讲解

目录 文章目录 内存函数针对的数据类型不确定可能是整型数据&#xff0c;字符数据&#xff0c;结构体数据...... memcpy的使用和模拟实现 memcpy的使用 memcpy打印字符数据 memcpy打印整型数据 memcpy的模拟实现 模拟实现的memcpy打印重叠情境 memmove的使用和模拟实现 memm…

vue 实现返回顶部功能-指定盒子滚动区域

vue 实现返回顶部功能-指定盒子滚动区域 html代码css代码返回顶部显示/隐藏返回标志 html代码 <a-icontype"vertical-align-top"class"top"name"back-top"click"backTop"v-if"btnFlag"/>css代码 .top {height: 35px;…

2023年天猫淘宝双12红包口令领取时间是从什么时候开始年终好价节活动?

2023年淘宝双12红包年终好价节活动时间 「领取时间」2023年淘宝年终好价节红包领取时间是从2023年12月8日00:00开始持续到12月12日23:59结束&#xff0c;在活动时间内每天都可以领取一次淘宝2023年终好价节红包&#xff0c;最高可得8888元淘宝超级红包&#xff1b; 「使用时间…

Python实现word自动化

个人网站 文章首发于公众号&#xff1a;小肖学数据分析 介绍 本教程将介绍如何使用Python的python-docx库来自动化Microsoft Word文档的创建和编辑工作&#xff0c;从而提高办公效率和准确性。 前提条件 基本的Python编程知识。 Python环境已安装python-docx库&#xff08;…

MySQL高级--01_1--数据库缓冲池(buffer pool)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 数据库缓冲池(buffer pool)DBMS 会申请占用内存来作为数据缓冲池&#xff0c;在真正访问页面之前&#xff0c;需要把在磁盘上的页缓存到内存中的Buffer Pool 之后才…

使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹

环境: Inno Setup 6.6 Win10 专业版 问题描述: 使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹 将文件api-ms-win-shcore-scaling-l1-1-1.dll复制到system32里面 解决方案: 1.由于安全和权限的限制,直接在Inno Setup脚本中复制文件到C:\…

如何使用phpStudy本地快速搭建网站并内网穿透远程访问

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

RuntimeError: CUDA error: out of memory怎么解决

遇到这个问题的原因是之前的程序没有结束进程。 需要打开Linux的命令窗口。输入命令 nvidia-smi 发现有很多的进程没有结束。使用如下命令查看进程 发现这些黄色框里的进程就是需要结束掉的进程。 查看当前conda的环境都有哪些&#xff0c;目前项目主要用到的是main这个。 使…

12_企业架构之Tomcat部署使用

Tomcat 学习目标和内容 1、能够描述Tomcat的使用场景 2、能够简单描述Tomcat的工作原理 3、能够实现部署安装Tomcat 4、能够实现配置Tomcat的service服务和自启动 5、能够实现Tomcat的Host的配置 6、能够实现Nginx反向代理Tomcat 7、能够实现Nginx负载均衡到Tomcat 一、Tomcat介…