[PYTHON] J'ai essayé de créer un bouton pour Slack avec Raspeye + Tact Switch

J'ai essayé de créer un bouton de style fontaine qui dit "Hey" à Slack lorsque j'appuie sur l'interrupteur tactile connecté à la tarte à la râpe

Ce qui a été fait

Lorsque vous appuyez sur le bouton connecté à la maquette, il dira "Hey" à un canal spécifique dans Slack comme indiqué ci-dessous. Si vous appuyez dessus plusieurs fois, il dira "Hey" ce nombre de fois.

Screen Shot 2016-03-31 at 11.43.22 AM.png

environnement

Câble

Je l'ai câblé comme suit. C'est exactement ce qui était écrit dans le livre. J'ai dessiné le schéma de câblage en utilisant un logiciel appelé fritzing.

qiitatest_bb.jpg

En fait, ça ressemble à ça.

reduce.jpg

Obtenir si le bouton a été enfoncé en Python

Écrivez le programme suivant.

inputsw.py


#la magie
import RPi.GPIO as GPIO
import time
import signal
import sys

# Ctrl+Handler lorsque C envoie un signal SIGINT. GPIO avant la fin.Nettoyage des appels
def handler(signum, frame):
  print 'Signal handler called with signal', signum
  GPIO.cleanup()
  sys.exit(0)

#Enregistrer un gestionnaire
signal.signal(signal.SIGINT, handler)

#Utiliser GPIO9 comme entrée
GPIO.setmode(GPIO.BCM)
GPIO.setup(9, GPIO.IN)
before = 0

#boucle infinie
while True:
  #Renvoie 1 si enfoncé, 0 si non enfoncé
  now = GPIO.input(9)
  if before == 0 and now == 1:
    print("Push!!!")
  time.sleep(0.1)
  before = now

Maintenant, lorsque le commutateur est enfoncé pendant l'exécution du programme, ** Push !!! ** sera affiché sur la sortie standard. Si vous souhaitez interrompre, appuyez sur Ctrl + C pour envoyer un signal d'interruption.

$python inputsw.py
Push!!!
Push!!!
Push!!!
^CSignal handler called with signal 2

Mumble vers une chaîne spécifique dans Slack

Il est normal de l'inclure dans ce qui précède depuis le début, mais comme c'était la première fois que Python notifiait Slack, je n'ai implémenté que celui-ci au début.

Quand j'ai vérifié, il y avait une bibliothèque pour Slack maintenue par Slack, donc je vais l'utiliser.

slackhq/python-slackclient

Tout d'abord, installez-le.

$sudo pip install slackclient

Vérifions si cela fonctionne avec le contenu du Readme officiel. Pour la partie token, accédez à l'URL suivante à l'avance, émettez un token et définissez le token émis.

slack-token

slack.py


import time
from slackclient import SlackClient

token = "xoxp-xxxxx"
sc = SlackClient(token)
print sc.api_call(
  "chat.postMessage", channel="#general", text="Hello from Python! :tada:",
  username='pybot', icon_emoji=':robot_face:'
)

Je vais essayer.

$python slack.py

S'il existe un paramètre, il sera affiché dans Slack comme suit.

Screen Shot 2016-03-31 at 10.56.07 AM.png

Changeons le message. Puisque j'écris en japonais, j'ai également ajouté que c'était UTF-8.

slack.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
from slackclient import SlackClient

token = "xoxp-xxxx"
sc = SlackClient(token)
print sc.api_call(
  "chat.postMessage", channel="#general", text="Hey:neutral_face:",
  username='pybot', icon_emoji=':robot_face:'
)

Screen Shot 2016-03-31 at 11.21.28 AM.png

Vous avez terminé.

Faites dire quelque chose à Slack lorsque vous appuyez sur le bouton

Apportez simplement le contenu de programmation à ʻinputsw.py` que vous avez créé en premier.

inputsw.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time
import signal
import sys
from slackclient import SlackClient

def post(sc):
  print sc.api_call(
    "chat.postMessage", channel="#general", text="Hey:neutral_face:",
    username='pybot', icon_emoji=':robot_face:'
  )

def handler(signum, frame):
  print 'Signal handler called with signal', signum
  GPIO.cleanup()
  sys.exit(0)

signal.signal(signal.SIGINT, handler)

GPIO.setmode(GPIO.BCM)
GPIO.setup(9, GPIO.IN)
before = 0
token = "xoxp-xxxxx"
sc = SlackClient(token)

while True:
  now = GPIO.input(9)
  if before == 0 and now == 1:
    print("Push!!!")
    post(sc)
  time.sleep(0.1)
  before = now

Cette fois, je vais l'exécuter en arrière-plan.

$python inputsw.py &

Si vous appuyez sur le bouton dans cet état, Slack parlera. Si vous appuyez sur plus d'un, vous serez parlé le nombre de fois que vous appuyez sur.

Screen Shot 2016-03-31 at 11.43.22 AM.png

ennuyeux.

Tuez le processus lorsque vous avez terminé.

#Vérifier l'ID du processus
$ps aux |grep python
pi        2630  0.4  1.4  18940 13872 pts/0    S    17:41   0:00 python inputsw.py
pi        2639  0.0  0.1   5724  1852 pts/0    S+   17:44   0:00 grep --color=auto python

#Envoyer un signal
$kill -KILL 2630

#Confirmer la fin
$ps aux |grep python
pi        2641  0.0  0.1   5724  1832 pts/0    S+   17:44   0:00 grep --color=auto python
[1]+Entrées python de terminaison forcéew.py

#Rien n'est dit lorsque le bouton est enfoncé

J'aimerais essayer diverses choses en combinaison avec des LED et des capteurs!

Recommended Posts

J'ai essayé de créer un bouton pour Slack avec Raspeye + Tact Switch
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
J'ai essayé de créer un bot pour annoncer un événement Wiire
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un linebot (préparation)
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai créé un serveur Web avec Razpai pour regarder des anime
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de créer une caméra de surveillance à détection de mouvement avec OpenCV en utilisant une caméra WEB avec Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Development] (2/3)
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Execution] (3/3)
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Setup] (1/3)
J'ai essayé L-Chika avec Razpai 4 (édition Python)
J'ai essayé de créer un environnement Ubuntu 20.04 LTS + ROS2 avec Raspberry Pi 4
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
J'ai essayé de créer facilement un système de présence entièrement automatique avec Selenium + Python
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
Je souhaite créer manuellement une légende avec matplotlib
J'ai essayé un RPA simple pour me connecter avec du sélénium
Quand j'ai essayé de faire une communication socket avec Raspberry Pi, le protocole était différent
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook
J'ai essayé de créer une classe pour rechercher des fichiers avec la méthode Glob de Python dans VBA
J'ai essayé de créer un cadre de données pandas en grattant les informations de rappel d'aliments avec Python
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
J'ai essayé de connecter Raspeye et conect + avec l'API Web
J'ai essayé de commencer avec Hy ・ Définir une classe
J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
J'ai essayé d'écrire dans un modèle de langage profondément appris
Je veux créer un Dockerfile pour le moment.
J'ai essayé de créer un article dans Wiki.js avec SQL Alchemy
Je voulais faire fonctionner le moteur avec une tarte à la râpe, alors j'ai essayé d'utiliser la carte de commande du moteur de Waveshare
J'ai essayé de créer l'API Quip
Utiliser une webcam avec Raspberry Pi
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
J'ai essayé de créer un pointage de crédit simple avec régression logistique.
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de visualiser les signets volant vers Slack avec Doc2Vec et PCA
Je voulais créer une présentation intelligente avec Jupyter Notebook + nb present
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
Comment créer une étiquette (masque) pour la segmentation avec labelme (masque de segmentation sémantique)
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de résumer les remarques de tout le monde sur le slack avec wordcloud (Python)