树莓派教程:在 Raspberry Pi 上使用 3D 跟踪和手势控制硬件 Flick HAT

> Flick HAT允许有趣的数据摄入选项进入Raspberry Pi,并允许您使用手势来触发事件。

Flick HAT 做手势识别,所以你可以点击,点击,双击,并在垫子上或上方移动手指。控制项目或一些随机输入是很酷的。

有时候,您想通过点击某个特定的触摸板或设备上的某个设备来触发事件。这可能是在工厂,在门上或在你的桌子上。

对我来说,这是我桌上的一个小设备,可以用来触发事件。我每 15 秒钟就有一次这样的手势。我可以把它放在一个无限循环(死循环)中,但是 Python 和 Raspberry Pi 可能会泄漏一些内存。我们的资源非常受限制,所以我想尽量多保留一点点。我保持我的批处理时间为15秒,我的运行调度为 15 秒。

我们的 NiFi 流

让我们构建一个简单的 NiFi 流来接收 JSON 数据,并作出反应:

NiFi 流

在我的 RouteOnContent 中,我只是寻找单词 center。因此我想到了运行 SQL,做备份等很多选项。

在 NiFi 中建立 MiniFi 流

Flick Hat MiniFlow

下载的 minifi 0.2.0 和 minifi 0.2.0 工具包(你可以使用一个更新的版本,但要确保在你的设备上安装相同的版本,并移动你的 config.yml 到设备上)。

minifi-toolkit-0.2.0/bin/config.sh transform minififlick.xml config.yml

然后把 SCP 那个 config.ymlminifi-*.zip 到你的设备上。

解压缩(或者 tar -cvf),然后你就可以运行了。它需要在您的机器上安装并运行 Java 8 JDK。Oracle 版本的 Java 在 Raspberry Pi 上工作得最好。

安装并运行 MiniFi

脚本如下:

cd /opt/demo/minifi-0.2.0     
bin/minifi.sh install     
bin/minifi.sh start

示例消息

{
    "flick": "center",
    "host": "herrflick",
    "ipaddress": "192.168.1.185",
    "ts": "2017-08-14 21:19:21",
    "cputemp": 47
}

重要的数据是 “flick”,这是手势(点击,点击,移动,双击等)。其他数据是我总是喜欢抓取设备的(主机名、IP地址、时间戳和CPU温度)。

基于触发器,我们可以在流程中做任何你想做的事情:启动备份、发送系统信息、任何你想要触发的东西。

最终源码

#!/usr/bin/env python
#- * -coding: < utf - 8 > - * -#Based on# Author: Callum Pritchard, Joachim Hummel# Project Name: Flick 3 D Gesture# Project Description: Sending Flick 3 D Gesture sensor data to mqtt# Version Number: 0.1# Date: 15 / 6 / 17# Release State: Alpha testing# Changes: Created
import time
import colorsys
import os
import json
import sys, socket
import subprocess
import time
import datetime from time
import sleep from time
import gmtime, strftime
import signal
import flicklib
import time from curses
import wrapper some_value = 5000 flicktxt = ''####
Initialization# yyyy - mm - dd hh: mm: ss currenttime = strftime("%Y-%m-%d %H:%M:%S", gmtime()) external_IP_and_port = ('198.41.0.4', 53)# a.root - servers.net socket_family = socket.AF_INET host = os.uname()[1] def getCPUtemperature(): res = os.popen('vcgencmd measure_temp').readline() return (res.replace("temp=", "").replace("'C\n", "")) def IP_address(): try: s = socket.socket(socket_family, socket.SOCK_DGRAM) s.connect(external_IP_and_port) answer = s.getsockname() s.close() return answer[0]
if answer
else None except socket.error: return None def message(publisher, value): print value @flicklib.move() def move(x, y, z): global xyztxt xyztxt = '{:5.3f} {:5.3f} {:5.3f}'.format(x, y, z) @flicklib.flick() def flick(start, finish): global flicktxt flicktxt = 'FLICK-' + start[0].upper() + finish[0].upper() message('flick', flicktxt) @flicklib.airwheel() def spinny(delta): global some_value global airwheeltxt global flicktxt some_value += delta
if some_value < 0: some_value = 0
if some_value > 10000: some_value = 10000 airwheeltxt = str(some_value / 100) flicktxt = airwheeltxt @flicklib.double_tap() def doubletap(position): global doubletaptxt global flicktxt doubletaptxt = position flicktxt = doubletaptxt @flicklib.tap() def tap(position): global taptxt global flicktxt taptxt = position flicktxt = taptxt @flicklib.touch() def touch(position): global touchtxt global flicktxt touchtxt = position flicktxt = touchtxt def main(): global xyztxt global flicktxt global airwheeltxt global touchtxt global taptxt global doubletaptxt flickcount = 0 airwheeltxt = ''
airwheelcount = 0 touchtxt = ''
touchcount = 0 taptxt = ''
tapcount = 0 doubletaptxt = ''
doubletapcount = 0 time.sleep(0.1) while flickcount < 100: if (flicktxt != ""): flickcount += 100 cpuTemp = int(float(getCPUtemperature())) ipaddress = IP_address() row = {
    'ts': currenttime,
    'host': host,
    'cputemp': round(cpuTemp, 2),
    'ipaddress': ipaddress,
    'flick': flicktxt
  }
  json_string = json.dumps(row) print(json_string) sys.exit() time.sleep(0.1) flickcount += 1 main()

相关资源

英语原文链接:Using the Flick HAT for Raspberry Pi

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.