[ARM+Linux] 基于全志h616外设开发笔记

这篇具有很好参考价值的文章主要介绍了[ARM+Linux] 基于全志h616外设开发笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[ARM+Linux] 基于全志h616外设开发笔记

修改用户密码

[ARM+Linux] 基于全志h616外设开发笔记

配置网络

nmcli dev wifi 命令扫描周围WIFI热点

 [ARM+Linux] 基于全志h616外设开发笔记

nmcli dev wifi connect  xxx password xxx 命令连接WiFi

查看ip地址的指令:

ifconfig

ip addr show wlan0

[ARM+Linux] 基于全志h616外设开发笔记

SSH登录

        这是企业开发调试必用方式,比串口来说不用接线,前提是接入网络并获得板子IP 地址,且系统做了SSH的服务器,本镜像自带 SSH 服务器,所以通过 mobaXterm 登陆就行

[ARM+Linux] 基于全志h616外设开发笔记

基于官方外设开发

1.wiringPi库SDK安装

git clone https : //github.com/orangepi-xunlong/wiringOP // 下载源码
cd wiringOP // 进入文件夹
sudo . / build clean // 清除编译信息
sudo . / build // 编译
通过 windows 浏览器打开 https : //github.com/orangepi-xunlong/wiringOP
下载压缩包
把压缩包通过 xterm 传到开发板
解压 unzip xxx . zip
cd xxx
sudo . / build
gpio readall
通过指令:gpio readall验证 [ARM+Linux] 基于全志h616外设开发笔记

设置tab缩进

⑥、设置tab缩进

sudo vim /etc/vim/vimrc

set tabstop=4 设置tab键缩进4个空格

set shiftwidth=4 设置批量对齐时候的tab键空格数为4

 [ARM+Linux] 基于全志h616外设开发笔记

[ARM+Linux] 基于全志h616外设开发笔记

通过配置GPIO口,让蜂鸣器响 

#include<wiringPi.h>
#include <stdio.h>
#include <sys/time.h>

#define BEEP 0

int main()
{
    wiringPiSetup();//wiringPi库初始化
    pinMode(BEEP,OUTPUT);//配置GPIO口为输出端口
    while(1)
    {
        digitalWrite(BEEP,LOW);//蜂鸣器输出低电平响
        sleep(1);
        digitalWrite(BEEP,HIGH);//蜂鸣器输出高电平不响
        sleep(1);
    }
    return 0;
}

 因为编译关于配置gpio口的程序需要连接很多,比如:

-lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt
所以我们可以编写一个简易的shell脚本
gcc $1 -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt 
$1是待编译的文件名

超声波测距

超声波测距的原理就是当Trig发出波后开始计时,Echo会从低电平变为高电平,当接收到返回的波时,Echo会从高电平重新变回低电平,这时停止计时,计算发送和接收到波的时间,用速度x时间=距离来计算,速度= 340m/s(最后的距离单位是cm/s注意换算单位!!!)

(86条消息) [STM32F103C8T6] 超声波测距_TX564的博客-CSDN博客

 在全志h616中怎么获取时间呢?

我们会用到时间函数

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

#define Trig 0
#define Echo 1

double getdistance()
{
   double dis;
   struct timeval start;
   struct timeval stop;
   pinMode(Trig,OUTPUT);
   pinMode(Echo,INPUT);

   digitalWrite(Trig,LOW);
   usleep(5);
   digitalWrite(Trig,HIGH);
   usleep(20);
   digitalWrite(Trig,LOW);
   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);//乘以1000000是为了将s换算成us便于与后面相加
   dis = (double)difftime/1000000 * 34000/2;dis的单位是cm/us
   return dis;
}

int main()
{
    if(wiringPiSetup() == -1)
    {
        perror("error\n");
    } 
   while(1)
    {
        dis = getdistance();
        printf("dis = %ld\n",dis);
        sleep(1);
    }
}

全志h616在linux下的定时器

#include <sys/time.h>

setitimer() value 指向的结构体设为计时器的当前值,如果 ovalue 不是 NULL ,将返回计时器原有值。
int setitimer (__itimer_which_t __which,
const struct itimerval  *__restrict __new,
struct itimerval  *__restrict __old)
一般第三个参数设为NULL
which: 三种类型
ITIMER_REAL // 数值为0(底层吧ITIMER_REAL 宏定义为0),计时器的值实时递减,发送的信号是 SIGALRM 。---->用的最多
ITIMER_VIRTUAL // 数值为 1 ,进程执行时递减计时器的值,发送的信号是 SIGVTALRM
ITIMER_PROF // 数值为 2 ,进程和系统执行时都递减计时器的值,发送的信号是 SIGPROF

struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};

it_interval:定时器初始值
it_value:当定时器被设置OK,延时多久时间去执行定时器计时 //这个值不能设置为0!!

struct timeval {
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};

__restrict __old:
可以不设置,用NULL

返回值: 成功执行时,返回0。失败返回-1

很明显,这边需要捕获对应的信号进行逻辑相关处理 signal(SIGALRM,signal_handler);

一个进程只能创建一个定时器!!!

每隔1s打印一次gogogo 

#include <stdio.h>
#include <sys/time.h>

/*
struct itimerval {
struct timeval it_interval;//初值
struct timeval it_value;//启动定时器时间
};*/

static i = 0;
void signal_handler()
{
    i++;
    if(i == 2000)
    {
        printf("gogoog\n");//每一秒打印一次
    }

}


int main()
{
    struct itimerval ivt;
    //设定初值
    ivt.it_interval.sec = 0;
    ivt.it_interval.usec = 500;//初值为500us
    //设定什么时候开启定时器
    ivt.it_value.sec = 1;//1s后开始启动定时器
    ivt.it_value.usec = 0;
    //设定定时方式
    setitimer(ITIMER_REAL,&ivt,NULL);
    //信号处理
    signal(SIGALRM,signal_handler);
    while(1);
}

 sg90舵机操作

sg90舵机的角度控制主要是pwm控制,pwm说白了就是占空比(高电平所占周期与总周期的比例)

#include <stdio.h>
#include <sys/time.h>

#define sg90 5
int jd;
static int i;

void signal_handler()
{
    if(i<=jd)
    {
        digitalWrite(sg90,HIGH);
    }else
    {
        digitalWrite(sg90,LOW);
    }
    if(i == 40)//总周期为20ms分成若干份作为pwm波
    {
        i = 0;
    }
    i++;
}


int main()
{
   struct itimerval ivt;
   //初始化
   wiringPiSetup();
   pinMode(sg90,OUTPUT);
   //设置定时器初值   
   ivt.it_interval.tv_sec = 0;
   ivt.it_interval.tv_usec = 500;      
   //设置几秒后启动定时器
   ivt.it_value.tv_sec = 1;
   ivt.it_value.tv_usec = 0; 
   //设置定时器模式
   if(setitimer(ITIMER_REAL,&ivt,NULL) == -1)
    {
        perror("error");
    }
   //信号处理
   signal(SIGALRM,signal_handler);
   while(1)
    {
        printf("choose jd:1-0,2-45,3-90,4-135,5-180");
        scanf("%d",&jd);
    }
}

基于iic的oled显示

 [ARM+Linux] 基于全志h616外设开发笔记

[ARM+Linux] 基于全志h616外设开发笔记
开始测试 i2c , 首先安装 i2c-tools
使用命令:
sudo apt-get install i2c-tools

[ARM+Linux] 基于全志h616外设开发笔记

根据官方给的oled_demo来编写 文章来源地址https://www.toymoban.com/news/detail-419966.html

#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>
 
#include "oled.h"
#include "font.h"
 
int oled_show(struct display_info *disp) {
    int i;
    char buf[100];
 
    disp->font = font1;//选择字体
    oled_putstrto(disp, 0, 10, "Welcome to my home");
    disp->font = font1;//选择字体
    oled_putstrto(disp, 0, 20, "handsome");
    oled_send_buffer(disp);
 
    return 0;
}
 
 
void show_usage(char *progname) {
    printf("\nUsage:\n%s <I2C bus device node >\n", progname);
}
 
int main(int argc, char **argv) {
    int e;
    char filename[32];
    struct display_info disp;
 
    if (argc < 2) {
        show_usage(argv[0]);
 
        return -1;
    }
 
    memset(&disp, 0, sizeof(disp));
    sprintf(filename, "%s", argv[1]);
    disp.address = OLED_I2C_ADDR;
 
    e = oled_open(&disp, filename);
    e = oled_init(&disp);
    oled_show(&disp);
 
    return 0;
}

到了这里,关于[ARM+Linux] 基于全志h616外设开发笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全志H616交叉编译工具链的安装与使用

    交叉编译是一个平台生成另外一个平台的可执行代码,同一体系结构可以运行不同的操纵系统,同时不同的操作系统也可以在不同的体系中运行。 例如我们在Ubuntu Linux上编写orangepiZero2 的代码编译为a.out是在orangepiZero2上运行并不是在Ubuntu Linux上运行 那什么是编译呢? 编译是

    2024年02月13日
    浏览(49)
  • Orangepi Zero2 全志H616(一):配置初始化和启动流程

    目录 一,Orangepi简单说明 ①为什么使用全志H616 ②基本特性 ③配套操作系统支持 二,刷机和系统启动 ①准备工具 ②登录系统 ● 开发板供电 ● 登录 ● 开发板上板载LED灯测试说明 ③修改登录密码 ④网络配置 ⑤SSH登陆开发板 三,vim设置:tab键缩进及代码行数显示 四,全志

    2024年02月04日
    浏览(48)
  • 在全志H616核桃派上实现USB摄像头的OpenCV颜色检测

    在给核桃派开发板用OpenCV读取图像并显示到pyqt5的窗口上并加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。 按照惯例,先要介绍一下opencv中常用的hsv像素格式。颜色还是那个颜色,只是描述颜色用的参数变了。h代表色调,s代表饱和度,v代表明度,比

    2024年01月23日
    浏览(41)
  • 【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)

    一、编程实现语音和开发板通信 wiringpi库源码 demo.c 二、基于前面串口的代码修改实现 uartTool.h uartTool.c uartTest.c 三、ADB adb控制指令 四、手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb c. dmeg能查看到手机接入的信息,

    2024年02月21日
    浏览(40)
  • 【香橙派+DHT11】香橙派(全志H616)+ DHT11温湿度传感器的驱动教程

    最近写DHT11的代码到香橙派(全志H616)上,发现网上案例基本上都是树莓派+DHT11的居多,香橙派的少,少数找得到的代码跑起来也是不稳定或者数据相对不太准确,于是这里自己写了一篇,供大家参考和批评指正 产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出

    2024年02月11日
    浏览(34)
  • 花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车

    常见的视觉循迹小车都具备有路径识别、轨迹跟踪、转向避障、自主决策等基本功能,如果不采用红外避障的方案,那么想要完全满足以上这些功能,摄像头、电机、传感器这类关键部件缺一不可,由此一来小车成本也就难以控制了。 但如果,有这样一款视觉循迹小车,它可

    2024年02月21日
    浏览(42)
  • 基于全志A33开发板linux系统移植学习记录(Boot0)

    第一章 Boot0基于ARMGCC的编译与修改 入行快两年,希望通过学习系统移植巩固下相关的知识,目标板使用基于全志A33 的astar-parrot开发板,开始本来想着使用Boot0来加载uboot,但后期发现为了代码统一和便捷性,最终还是选择了SPL作为跳板,但Boot0流程相对清晰,所以将对其做的

    2023年04月08日
    浏览(45)
  • 全志ARM926 Melis2.0系统的开发指引③

    本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。 此文档主要介绍 Melis 2.0 的存储开发方法。与固件结构组成等。 6.2.1. 文件系统支持 Melis2.0 支持可读写的文件系统分别是:

    2024年02月08日
    浏览(27)
  • 全志ARM926 Melis2.0系统的开发指引②

    本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。 Melis2.0 平台工具链的配置文件是“sdkrootincludescfgsCROSSTOOL.CFG”。 该文件指定了 Melis2.0 平台的编译工具、硬件平台、共用库

    2024年02月08日
    浏览(35)
  • 全志ARM926 Melis2.0系统的开发指引④

    本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。 打包固件是下载前的最后一步。系统应用程序、驱动编写完成,经过编译得到输出文件,加上各种中 间件、资源文件、配置

    2024年02月07日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包