香橙派外设开发

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

文章目录

  • wiringPi库
  • 震动传感器
  • 定时器
  • II2C
  • 串口

前言

为什么我们要跑ARM+Linux?

因为在Linux内核下帮我们完成了很多底层的一些东西,我们在应用时常常只需要调用就行了,且Linux 开源,移植性好,可裁剪软硬件,功能强大。


一、wiringPi库

在Linux上进行arm开发,往往会用到GPIO,串口,定时器....,这些特定的功能接口,就是由wiringPi库所提供的。

wiringPi下载wget https://unicorn.drogon.net/wiringpi-2.46-1.deb

二、震动传感器

#include <stdio.h>
#include <wiringPi.h>
#include <unistd.h>
#define PIN 0

void main()
{
        wiringPiSetup();//初始化wiringpi库
        pinMode(PIN,INPUT);//设置成输入模式
        digitalWrite(PIN,HIGH);//写入电平

        while(1)
        {
                usleep(500000);//每隔500毫秒读一次

                if(digitalRead(PIN) == 0)//读取引脚电平,如果是低电平,执行里面的内容
                {
                        printf("产生震动\n");
                }
        }

}

三、定时器 

#include <stdio.h>
#include <signal.h>

/*
 * struct itimerval
 * {

        struct timeval it_interval; 计时器的初始值,一般基于这个初始值来加或者来减,看控制函数的参数配置
        struct timeval it_value;    多久启动定时器
};
*/


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

/*int setitimer (__itimer_which_t __which, const struct itimerval *__restrict __new, struct itimerval *__restrict __old) 设置定时方式

which:三种类型
ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。
ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。
ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。

很明显,这边需要捕获对应的信号进行逻辑相关处理 signal(SIGALRM,signal_handler);
返回说明:
成功执行时,返回0。失败返回-1
*/


void handler()
{
        printf("hello world\n");
}


void main()
{
        struct itimerval t1;//设置定时器结构体

        t1.it_interval.tv_sec = 1;//设置多少秒
        t1.it_interval.tv_usec = 0;//设置多少微秒



        t1.it_value.tv_sec = 1;//设置多少秒后启动
        t1.it_value.tv_usec = 0;

        if(setitimer(ITIMER_REAL,&t1,NULL) == -1 )
        {
                printf("error\n");
        }

        signal(SIGALRM,handler);//捕捉到超时的信号,去做handlr的事情,一个进程只有一个定时器


        while(1);


}

四、II2C

在wiringPi库里面提供了非常多的例程代码,我们可以用于修改,最主要是Linux下一切皆文件,使用II2的时候一定要打开它的设备文件,编译的时候如果不知道自己该指定什么库,直接看例程里面makefile用的什么库。


#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];

        oled_putstrto(disp, 0, 9+1, "Welcome       to");//写内容
        disp->font = font1;//设置字体
        oled_send_buffer(disp);//写入到缓冲区


        return 0;
}



int main(int argc, char **argv)
{
        int e;
        char filename[32];
        struct display_info disp;

        if (argc < 2)
        {
                perror("argc");
                return -1;
        }

        memset(&disp, 0, sizeof(disp));
        sprintf(filename, "%s", argv[1]);

        disp.address = OLED_I2C_ADDR; //地址
        disp.font = font2;//字体

        e = oled_open(&disp, filename);//打开驱动设备
        e = oled_init(&disp);//初始化

        return 0;
}

五、串口 

打开串口文件,配置相对应的波特率...

#include <stdio.h>
#include <string.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

int fd;

void * handler(void * argc)
{
        char buf[128]={'\0'};
        int cnt;

        while(1)
        {
                memset(buf,'\0',sizeof(buf));
                cnt = serialDataAvail(fd);

                if(cnt > 0)
                {
                        read(fd,buf,cnt);
                        printf("read:%s\n",buf);
                }
        }
}


void main()
{
        wiringPiSetup();

        pthread_t t1;
        char buf[128]={'\0'};

        fd = serialOpen("/dev/ttyS5",115200);//打开串口 配置波特率
        pthread_create(&t1,NULL,handler,NULL);


        while(1)
        {
                memset(buf,'\0',sizeof(buf));
                printf("send->");
                gets(buf);

                serialPuts(fd,buf);

        }


}

 文章来源地址https://www.toymoban.com/news/detail-530153.html

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

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

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

相关文章

  • [香橙派开发系列]使用蓝牙和手机进行信息的交换

    隔了这么久我准备再玩一下香橙派,最近这段时间还是比较的忙,我搭建了个论坛和博客,经常被网络攻击,所以我也是一直在弄网络去了,然后今天比较空闲就想着把单子做一下,这个单子需要使用到HC05蓝牙模块,所以我准备写一篇博客来使用香橙派控制HC05蓝牙模块。 这

    2024年02月22日
    浏览(28)
  • 香橙派(orangePiZero2):交叉编译、内核编译及驱动开发

    1、安装好相关环境(Ubuntu 18.04) 开发板:orangepi-zero2 交叉编译器:aarch64-none-linux-gnu- 2、安装交叉编译工具: (1)下载并安装交叉编译工具,下载地址如下:Index of /armbian-releases/_toolchain/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载好压缩包,将压缩包放到Ubuntu里

    2024年02月03日
    浏览(29)
  • Linux篇 三、香橙派Zero2搭建Qt环境

    一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 四、Linux修改用户名 五、Ubuntu与Linux板卡建立NFS服务 主要讲述了移植QT的过程 默认在香橙派篇2中,已经成功拉取Linux的SDK源码的情况下 如果失败的话,可以直接去官网下载交叉编译工具 此处路径和上一篇的源码

    2023年04月21日
    浏览(29)
  • 第一篇 香橙派刷机和开发环境准备(ubuntu20.04版)

    目录 一、香橙派刷ubuntu系统和SSH登录 1.Ubuntu有趣的Codename 2.刷机步骤(ubuntu20.04) 🔖格式化TF卡 🔖烧写系统到TF卡 🔖调试串口登陆系统 🔖SSH登陆系统  二、开发环境准备 1.香橙派ubuntu20.04换源 2.VNC远程连接香橙派 (1)安装VNC服务 (2)VNC连接香橙派 3.安装wiringPi (1)安装

    2023年04月21日
    浏览(39)
  • 使用香橙派学习Linux udev的rules 并实现U盘的自动挂载

    在之前编程首先语音刷抖音的博文里提到过udev,现在回顾一下: 什么是udev? udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。udev在用户空间运行,而不在内核空间 运行。它能够根据系统中的硬 件设备的状态动态

    2024年02月05日
    浏览(33)
  • Linux + 香橙派 + V4L2 + http 实现远程监控摄像头在网页端显示

    项目需求,需要做一个基于边缘端的人脸识别远程监控摄像头并在网页前端展示 ,这里采用国产香橙派作为边缘计算终端,安装ubuntu系统,系统中采用v4l2接口对摄像头进行获取,当客户端通过网页进行请求时,服务器通过http服务的形式将一帧帧图像发送给客户端,只要一秒

    2024年02月15日
    浏览(30)
  • 嵌入式开发——DMA外设到内存

    加强理解DMA数据传输过程 加强掌握DMA的初始化流程 掌握DMA数据表查询 理解源和目标的配置 理解数据传输特点 能够动态配置源数据 需求 实现串口的数据接收,要求采用dma的方式。 数据交互流程 CPU配置好DMA 外部数据发送给串口外设 串口外设触发中断 CPU处理中断逻辑,通知

    2024年02月03日
    浏览(40)
  • lv15 input子系统框架、外设驱动开发 5

     在我们日常的Linux系统中,存在大量的输入设备,例如按键、鼠标、键盘、触摸屏、摇杆等,他们本身就是字符设备,linux内核将这些字符设备的共同性抽象出来,简化驱动开发建立了一个input子系统。 Linux内核为了两个目的: 简化纯输入类外设 (如:键盘、鼠标、游戏杆

    2024年02月19日
    浏览(30)
  • 【linux深入剖析】深入理解基础外设--磁盘以及理解文件系统

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 我们所有的文件都是与进程相关的文件–进程打开的文件 系统中是不是所有的文件都被打开了呢?如果没

    2024年04月11日
    浏览(37)
  • CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设

    苏勇,2023年2月 集成在微控制器芯片中的CAN总线通信引擎的外设电路系统,有一些典型的实现,例如飞思卡尔半导体(已并入恩智浦半导体)的ColdFire系列微控制器中用到的MSCAN和Kinetis系列微控制器的FlexCAN(由Silvaco International公司设计),这些CAN总线通信引擎在汽车电子应用

    2024年02月10日
    浏览(23)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包