香橙派外设开发

news/2024/12/22 10:11:57/

文章目录

  • 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 0void 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);}}

 


http://www.ppmy.cn/news/772337.html

相关文章

如何成为微软MVP?

对一个普通的开发人员来说&#xff0c;最大的认可就是得到微软官方的MVP 认证了&#xff0c;是一份对技术人的荣誉证书。 微软的MVP是相对公平公正的&#xff0c;只要你热爱技术&#xff0c;热爱分享&#xff0c;在一定的领域里有足够的深度&#xff0c;就会得到微软官方的认证…

SpringBoot2+Vue2实战(十二)springboot一对一,一对多查询

新建数据库表 Course Data TableName("t_course") public class Course implements Serializable {private static final long serialVersionUID 1L;/*** id*/TableId(value "id", type IdType.AUTO)private Integer id;/*** 课程名称*/private String…

H5中img标签引入https图片在安卓和ios不显示

引入的src图片地址是https时&#xff0c;在pc端和h5均正常显示&#xff0c;但在手机端均无法显示&#xff0c;并且图片链接在微信里面也无法打开&#xff1b; 于是尝试将地址复制去浏览器及其他地方&#xff08;除微信&#xff09;均能正常显示&#xff1b; 并且尝试用http图…

关于flex布局伸缩项为img时,图片不收缩显示的问题

问题描述 今天使用flex伸缩盒布局时&#xff0c;伸缩容器container的宽度317px&#xff0c;伸缩项是两张img&#xff0c;宽度为181px。按理说当伸缩项宽度和大于伸缩容器时&#xff0c;伸缩项会收缩显示。但是实际上并非如此。 尝试的方法 我起初认为是不是还要为伸缩容器…

python读取bmp文件,go 读取BMP文件头二进制读取方式

bmp文件头定义&#xff1a; word 两个字节 16bit dword 四个字节 32bit package main import ( "encoding/binary" "fmt" "os" ) func main() { file, err : os.open("tim.bmp") if err ! nil { fmt.println(err) return } defer file…

移动安全事件总结情况说明

2019 年各地移动安全事件总结 奇安信移动安全团队基于内部数据及相关公开资料&#xff0c;对 2019 年全球影响较 大的移动安全事件进行了汇总&#xff0c;以便更好的展现 2019 年移动安全对全球的影响。 Google Play 为全球最大的移动应用平台&#xff0c;也是国外大多用户下…

小程序总结

小程序总结 1基础传参 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEAElMwk-1611239139403)(C:\Users\12987\AppData\Roaming\Typora\typora-user-images\image-20210102151005684.png)] 2 简易双向绑定和原始写法 给input默认值 利用输入事件…

Markdown教程

Markdown教程 文章目录 Markdown教程一.简介二.标题三.段落1.字体2.分割线3.删除线4.脚注 四.列表1.无序列表2.有序列表3.列表嵌套 五.区块1.基础语法2.区块嵌套 六.代码1.代码块2.行内代码 七.链接1.外部链接2.内部链接3.高级链接 八.表格1.基本语法2.对齐方式 九.图片十.高级…