1 介绍
EAIDK-310 开发套件集成 40 Pins IO 扩展接口,其中包括9个GPIO口,可用于高效的控制结构简单的外部设备或者电路。上期我们已经介绍了《基于EAIDK-310 的传感器调试案例介绍(一)》,本期我们就接着上期内容,介绍下基于EAIDK-310 的传感器调试应用。
前3节内容在上期已经做过介绍,看过《基于EAIDK-310 的传感器调试案例介绍(一)》的读者可以直接跳到第4节内容。
1.1 术语
GPIO:通用型之输入输出
VCC:高电平
GND:地
1.2 目的
本案例的目的是:
A. 熟悉EAIDK310的GPIO的pin角配置
B. 了解GPIO的操作
C. 实际操作传感器硬件接线,以及软件操作
1.3 EAIDK-310
EAIDK(Embedded Artificial Intelligence Development Kit)- 嵌入式人工智能开发套件,是全球首个采用Arm架构的人工智能开发平台,是OPEN AI LAB专为 AI 开发者精心打造,面向边缘计算的人工智能开发套件。硬件平台具备语音、视觉等传感器数据采集能力,及适用于多场景的运动控制接口;智能软件平台支持视觉处理与分析、语音识别、语义分析、SLAM等应用的基础平台和主流开源算法,满足端侧AI教育、算法应用开发、产品原型开发验证等需求。
EAIDK-310作为EAIDK产品系列中的一款套件,该套件硬件平台使用的是含有4核A53 CPU的高性能Arm SoC(瑞芯微rk3228H),通过搭载OPEN AI LAB开发的嵌入式深度学习框架Tengine,为AI应用提供简洁、高效、统一的API接口,加速终端AI产品的场景化应用落地实现。同时,使用自建的源服务器,便于用户快速上手使用。
EAIDK平台,配置专有更新源文档内容服务,该源服务器支持Tengine/Blade CV以及其他标准第三方软件安装和更新。
EAIDK-310 硬件规格
EAIDK-310 软件规格
2 GPIO概述
2.1 什么是GPIO
GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个通用可编程IO接口,即GPIO。
接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。
2.2 传感器
EAIDK-310能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。传感器能够对周围环境的变化做出反应,例如温度、声音、光照(包括红外)、距离、压力、重力、姿态、磁场、烟粉尘等,也就是说它能够将周围环境的变化变成电信号输出。正是因为有了他们,我们就可以根据这些传感器输出的信号来调整设备的工作状态,达到与环境互动与世界互动的目的。
本次调试的是37款主流传感器包,基于EAIDK-310调试平台,通过杜邦线连接/调试/实验。
2.3 GPIO分布图
EAIDK310管脚分布如下图,Pin1和Pin2已经用红圈标出,其他管脚以此类推。
各个管脚定义如下图
从上表可以得出,PIN7, PIN11, PIN12, PIN13, PIN15, PIN16, PIN18, PIN22, PIN36为GPIO。
GPIO设置成输出模式时,高电平为3.3V,低电平为0V。
GPIO设置成输入模式时,高于1.8V为高电平,低于1.8V为低电平。
2.4 命令控制gpio
从GPIO管脚定义图可以看出,GPIO的Name格式都是GPIOX_YZ形式,其中X,Z是一个数字,Y是A-D的大写字母,引脚号计算公式为
X*32+F(Y)*8+Z 式1
其中当Y=A,B,C,D时, F(Y)分别为0,1,2,3。
以GPIO2_B7为例。通过式1,计算出GPIO2_B7引脚号为232+18+7=79。
切换root权限。
[openailab@localhost ~]$ sudo su
进入 /sys/class/gpio/ 目录
[root@localhost openailab]# cd /sys/class/gpio/
生成一个gpio79 的目录。
[root@localhost gpio]# echo 79 > export
进入gpio79目录。
[root@localhost gpio]# cd gpio79/
gpio79目录下主要有以下文件
1)direction: 设置输出还是输入模式
设置输入模式。
[root@localhost gpio79]# echo in > direction
设置输出模式。
[root@localhost gpio79]# echo out > direction
2)value :输出时,控制高低电平;输入时,获取高低电平
设置高电平。
[root@localhost gpio79]# echo 1 > value
设置低电平。
[root@localhost gpio79]# echo 0 > value
3)edge :控制中断触发模式,引脚被配置为中断后可以使用poll() 函数监听引脚
非中断引脚:
[root@localhost gpio79]# echo “none” > edge
上升沿触发:
[root@localhost gpio79]# echo “rising” > edge
下降沿触发:
[root@localhost gpio79]# echo “falling” > edge
边沿触发:
[root@localhost gpio79]# echo “both” > edge
5.如果想要卸载gpio79,需要回到/sys/class/gpio/
目录并执行echo 79 > unexport
2.5 GPIO接线指引
实际接线时,先准备好5条以上杜邦线,如下接线能满足大部分传感器。
EAIDK-310接线
红色接线:5v电源pin脚
黑色接线:GND pin脚
绿色接线:默认称为第1个GPIO口,对应pin编号是79
灰色接线:默认称为第2个GPIO口,对应pin编号是82
白色接线:默认称为第3个GPIO口,对应pin编号是81
当传感器需要接gpio口时,按顺序接gpio口即可。
传感器接线
一般传感器,示例接线如下:
“S”接GPIO口,下图中绿线是GPIO79;
“-”号表示接GND;
中间没有标的一般是VCC,也可能是GPIO,要根据具体传感器来接。
2.6 实验时长
运行实验时,实验结束后会自动退出,运行时长不定。
1,有的传感器现象比较容易观察,运行的时间较短,比如LED灯显示类实验。
2,有的传感器需要实验者手动操作设备,运行的时间会长一点。
3,当实验者觉得已经完成实验,不需要继续实验,可以在程序的终端用ctrl+C手动结束实验。
3 获取实验源代码
3.1 下载源码代码:
ftp地址:ftp://ftp.eaidk.net/EAIDK310_Source/eaidk310_sensor_kit/
3.2 GPIO控制源码解读
输入、输出是GPIO常用功能模式,如按键开关案例使用输入模式,蜂鸣器案例使用输出模式。本案例中所有传感器实验源码较简单,下面分别对按键开关、蜂鸣器这两个案例做源码解读示例,其他传感器类似,就不再贴源码解读了。
3.2.1 按键开关
void eaidk310_sensor_pushbotton (int pin)
{
gpio_init(pin, INPUT); //初始化pin脚方向,设置按键开关传感器的方向为input
for(int i=0; i<EAIDK310_LOOP*3; i++){
if(read_value(pin)){ //读取pin脚的值,根据input的值做出不同的响应
printf("button is not pushed.\n");
}else{
printf("button is pushed.\n");
printf("developer can add codes here.\n");
}
usleep(1000*10); //延时10ms
}
}
3.2.2 无源蜂鸣器
void eaidk310_sensor_passive_buzzer (int pin)
{
gpio_init(pin, OUTPUT); //初始化pin脚方向,设置无源蜂鸣器的方向为output
int i,j;
while(1){
for(i=0;i<80;i++)
{
set_value(pin, HIGH); //设置无源蜂鸣器的值,发出声音
usleep(1000); //延时1ms
set_value(pin, LOW); //设置无源蜂鸣器的值,不发声音
usleep(1000); //延时1ms
}
for(j=0;j<80;j++)
{
set_value(pin, HIGH);
usleep(2000);
set_value(pin, LOW);
usleep(2000);
}
}
}
3.3 编译
本案例源码不依赖第三方库,下载代码后,可通过如下操作进行编译:
unzip arduino_sensor_kit.zip
cd eaidk310_sensor_kit
cmake .
make
编译完成后会在当前目录生成可执行文件eaidk310_sensor_test
4 实际操作介绍
4.1 水银开关
又称倾侧开关,是电路开关的一种,小玻璃泡容器中储存着一小滴水银,容器中多数注入惰性气体或真空。因为重力的关系,水银珠会向容器中较低的地方流去,因为水银是一种导电的液体,如果它同时接触到两个电极,电路便会接通,否则电路断开。因为水银开关的通断与物体的水平角度有关,因此它常被应用在一些自动控制电路当中。
4.1.1 实验材料及实图
4.1.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令
sudo ./eaidk310_sensor_test -s tiltswitch
4.1.3 预期结果
水平摆动传感器时,自带LED灯会根据水银滴的摇动而发出不同的亮度。
两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C
4.2 光线感应
光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特征的PN结,具有单向导电性,因此工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射PN结时,可以使PN结中产生电子一空穴对,使少数载流子的密度增加。这些载流子在反向电压下漂移,使反向电流增加。
4.2.1 实验材料及实图
4.2.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令
sudo ./eaidk310_sensor_test -s photoresistor
4.2.3 预期结果
没有遮住该设备时,打印“the device photoresistor is negative.
”
当遮住该设备时,打印“the device photoresistor is positive.
” “the device active now.
”
两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C
4.3 人体触摸
该传感器是一款使用电容式感应原理设计的触摸IC,其稳定的感应方式可以应用到各种不同电子类产品,面板介质可以是完全绝源的材料。
4.3.1 实验材料及实图
4.3.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令
sudo ./eaidk310_sensor_test -s touch
4.3.3 预期结果
人手没有触摸设备时,打印“the device touch is negative.
”
人手触摸设备时,打印“the device touch is positive.
”“the device active now.
”
两种方式结束实验
1,程序运行一小段时间后,程序自动退出。
2,在该程序的终端按键ctrl + C
4.4 倾斜开关
倾斜传感器开关可以用于检测物体的方向并相应地输出高电平或低电平。实际上,在它的内部有一个水银球,可以移动并形成短路。这样倾斜传感器可以根据方向闭合或断开回路。
4.4.1 实验材料及实图
4.4.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令
sudo ./eaidk310_sensor_test -s ballswitch
4.4.3 预期结果
该设备静放时,打印“the device ball switch is negative.
”
当上下摆放该设备时,打印“the device ball switch is positive.
”“the device active now.
”
两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C
4.5 魔术光杯
魔术光杯是利用PWM调光的原理,两个模块的亮度发生变化。水银开关提供数字信号,触发PWM的调节,通过程序的设计,可以组合2个魔术光杯传感器交替显示形成好看的效果,比如光杯效果。
4.5.1 实验材料及实图
4.5.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令
sudo ./eaidk310_sensor_test -s lightcup
4.5.3 预期结果
移动光杯时,LED会随着水银滴的位置交互显示。
两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C
4.6 小麦克风 & 高强度麦克风
声音传感器的作用相当于一个话筒(麦克风)。它用来接收声波,显示声音的振动图象,但不能对噪声的强度进行测量。传感器内置一个对声音敏感的电容式驻极体话筒。声波使话筒内的驻极体薄膜振动,导致电容的变化,而产生与之对应变化的微小电压。
2个设备区别在于硬件上麦克风接收器不一样。
4.6.1 实验材料及实图
小麦克风
高强度麦克风
4.6.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令
sudo ./eaidk310_sensor_test -s sound
4.6.3 预期结果
当对着麦克风吹气时,打印“the device microphone is positive.
”“the device active now.
”
静放设备时,打印“the device microphone is negative.
”
两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C
4.7 敲击模块
有机玻璃外壳的敲击头和振动开关类似,只是能感受较小振幅的振动,更灵敏一些,余振的时间能维持稍微久一点点。这个模块简单些,相关资料非常少。
4.7.1 实验材料及实图
4.7.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令
sudo ./eaidk310_sensor_test -s tap
4.7.3 预期结果
当敲击该设备时,打印“the device tap module is positive.
”“the device active now.
”
静放设备时,打印“the device tap module is negative.
”
注意: 敲击效果不是很灵敏,需要注意观察。
两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C
4.8 光遮断
光断续器又称为穿透型光电感应器、光遮断器、光电断续器、光电遮断器,它是将发光组件与受光组件面对面排列并设置于同一封装内,利用检测物体通过时会遮光的原理便得以实现检测功能。
4.8.1 实验材料及实图
4.8.2 实验步骤
1,正确接好硬件接线
2,执行如下软件程序命令sudo ./eaidk310_sensor_test -s lightblock
4.8.3 预期结果
当模块中间凹进去的地方遮住时,打印“the device light block is positive.
”“the device active now.
”
静放设备时,打印“the device light block is negative.
”
两种方式结束实验
1.程序运行一小段时间后,程序自动退出;
2.在该程序的终端按键ctrl + C
5 总结
本期实验包含了9种传感器,计划后续还有1期介绍剩下传感器的调试,共3期来介绍在EAIDK-310开发套件通过GPIO使用传感器的案例。
如有疑问或想要了解更多关于EAIDK开发平台方面的内容,欢迎加入EAIDK开发者大本营,QQ群:625546458。