Impinj GPIO快速上手指南

先解释下GPIO,General-purpose input/output,通用型输入输出接口,其实就是利用针脚的高低电位来进行信息传递的作用,以此来对外部设备进行开关控制,或者获取外部设备的控制。最常见的俩例子就是红外传感器和报警器。
红外报警器算是输入设备(以控制器为主体而言),它可以检测是否有物体出现在其前方,一旦检测到物体,则输出信号,控制器得到信号,可以做出进一步响应。
报警器则是输出响应设备,在得到信号控制后,可以进行报警响应。
下面介绍一个简单案例来对GPIO的使用流程、方法有个全面的认识。注意,一下仅仅是如何连线,具体原理等详情请见附件文档(impinjGPIO文档合集)。
https://download.csdn.net/download/xiaohaigary/11580460

一、所用设备

1、 impinj读写器、impinj GPIO盒子、24v直流电源适配器
2、红外传感器(直流三线NPN常开型)、声光报警器(5线型)
 impinj读写器、impinj GPIO盒子、24v直流电源适配器
红外传感器(直流三线NPN常开型)、声光报警器

二、接线

GPIO盒子的示意图
这是GPIO盒子的示意图,其中1处接R420的GPIO口,8、9分别接外置直流24V电源,8正极,9负极。至此便完成了基本准备了,可以用impinj自带的Item Test来进行测试一下,out 1有效时4号处亮灯,out 4有效时7号处亮灯。

下一步开始连接声光报警器,这是五线报警器的接线。最左侧两根线分别是正负电源。中间灰色线是喇叭控制线,第四根(红线)是灯光控制线,第五根(黑线)是公共端即地线。

在这里插入图片描述

报警器怎么与GPIO盒子连接呢?
首先两根电源线可以连接在8、9位置,也可连接在10、15位置皆可。
红色灯光控制线连接在4号位,为out1。灰色线连接5号位,为out2。
最后一个黑线连接在3号处。
这样,便完成了声光报警器的连接。利用ItemTest进行测试,便可以分别控制声音和灯光进行报警。

下面在说说红外感应器的连接:
下图中标记的1、2、3便是红外传感器的三根连线。1、3分别为正负极。分别连接至10、15处的位置。2是控制线,连接至11处位。
进行测试:将手挡住红外传感器,看11处的小灯是否会亮,亮则说明传感器正常工作了。
在这里插入图片描述

输出信号控制原理:

这个盒子其实蛮方便的,输出是继电器输出。但是我尝试直接一端接COM一端接在out1上,然后小灯无法使用。
就咨询了厂家,原来供电只支持0-5v的小灯。
但是对于 供电即亮的两线小灯,要怎么进行控制嘞?下面依次说说对于两线小灯和四线小灯的连接方式。

核心原理:outX在有效时,会与COM连通,形成COM端的电平。
两线小灯:

如果是24v的小灯就太方便了。

灯正极---->盒子的24v+
灯负极---->盒子的out1
盒子的COM口与盒子的0V短接

这样一来当out1有效时,就接通了out1和COM口,也就接通了小灯的正负极。

扫描二维码关注公众号,回复: 13008508 查看本文章

但是如果是12v的两线小灯嘞?
那肯定要增加一个12v的电源咯。

灯正极---->12v+
灯负极---->盒子的out1
盒子的COM口与盒子的0V短接,并且还要和12v电源的0极短接,使两个电源共零。

四线小灯:

四线小灯是高低电平触发的灯。四根线分别为:正、负、高电平触发线、低电平触发线。

灯正极---->盒子的24v+
灯的低电平触发线---->盒子的out1
盒子的COM口与盒子的0V短接

此时盒子的out1有效时,是低电平,就会触发小灯了。

三、代码控制

下面用代码演示:红外传感器检测到物体后,令声光报警器进行报警。

package com.example.sdksamples;

import com.impinj.octane.ImpinjReader;
import com.impinj.octane.OctaneSdkException;
import com.impinj.octane.Settings;

import java.util.Scanner;

public class SetGPO {

    public static void main(String[] args) {

        try {
            String hostname = System.getProperty(SampleProperties.hostname);

            if (hostname == null) {
                throw new Exception("Must specify the '"
                        + SampleProperties.hostname + "' property");
            }

            ImpinjReader reader = new ImpinjReader();

            reader.connect(hostname);

            Settings settings = reader.queryDefaultSettings();
            reader.applySettings(settings);


            reader.setGpiChangeListener(
                            new GpiChangeListenerImplementation()
            );

           	
        } catch (OctaneSdkException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace(System.out);
        }
    }
}

GpiChangeListenerImplementation文件为:

package com.example.sdksamples;
import com.impinj.octane.GpiChangeListener;
import com.impinj.octane.GpiEvent;
import com.impinj.octane.ImpinjReader;
import com.impinj.octane.OctaneSdkException;

public class GpiChangeListenerImplementation implements GpiChangeListener {

    @Override
    public void onGpiChanged(ImpinjReader reader, GpiEvent e) {
        System.out.println("GPI Change--port: " + e.getPortNumber()
                + " status: " + e.isState());
        try {
            if(e.isState()==true){

                reader.setGpo(1, true);
reader.setGpo(2, true);
            }else{
                reader.setGpo(1, true);
reader.setGpo(2, true);
            }
        } catch (OctaneSdkException ex) {
            ex.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/xiaohaigary/article/details/99765196