[PYTHON] Capteur humain amélioré fabriqué avec Raspberry Pi

introduction

Posté la dernière fois a terminé un capteur pratique, et après l'avoir utilisé pendant un certain temps, certains points que je voulais améliorer sont ressortis.

  1. Le pop-up n'est pas bon
  2. Je souhaite émettre un son en même temps que l'affichage contextuel
  3. Je souhaite prendre en charge plusieurs clients

En ce qui concerne 1., j'y pensais depuis le début, et le pop-up standard de Windows a l'air moche de toute façon, alors je voulais lui donner un aspect à la mode et moderne.

Concernant 2., le pop-up n'apparaît pas lorsque vous jouez à un jeu en plein écran, donc je l'ai mal vécu à moins que je ne le remarque avec le son.

En 3., j'ai plusieurs PC dans ma chambre, donc je voulais pouvoir utiliser l'un ou l'autre PC.

Amélioration des pop-up

Après avoir consulté une connaissance, je pense que grogner est bon. J'ai une suggestion J'ai décidé de l'utiliser car il peut être utilisé sous Windows, il peut être facilement utilisé à partir de la ligne de commande, il a l'air moderne et cool, et il produit également du son. Je l'ai fait exécuter à partir d'un fichier batch en me référant à ce site

réglage de grognement

Tout d'abord, installez growl pour windows et passez-le par le chemin. (J'ai remarqué après avoir terminé, mais j'ai l'impression que si j'écris le chemin complet dans le fichier batch, je n'ai pas à passer le chemin) Après cela, définissez le mot de passe, l'apparence et le son à partir de l'écran de réglage du grognement et terminez (Comme il est conforme à ce site, il est omis)

Création de fichiers par lots

Créez un fichier de commandes à afficher

popup.bat


growlnotify.exe /t:"Emergency!" /s:False /pass:"password"Veuillez sauvegarder

Si vous définissez / s: True, la fenêtre contextuelle ne disparaîtra pas à moins que vous ne cliquiez dessus, mais c'est gênant si elle vient en continu, donc je la mets sur False

Lorsque j'ai exécuté cela, une fenêtre contextuelle était affichée, mais lorsque j'ai exécuté le fichier de commandes, l'invite de commande était affichée pendant un moment. Après de nombreuses recherches, la méthode d'appeler un fichier batch depuis vbs semble être la voie royale (je ne sais pas vraiment) Donc je ne l'ai pas compris, mais j'ai créé des vbs

popup.vbs


Dim oShell
Dim path

Set oShell = WScript.CreateObject ("WSCript.shell")

path = oShell.CurrentDirectory
path = path & "\PopUp.bat"

oShell.run path,0

Set oShell = Nothing

Cela fonctionne comme souhaité, j'ai donc décidé d'exécuter ce vbs à partir d'un script.

Changement de script

La partie qui affiche la fenêtre contextuelle créée la dernière fois

python


def popup(): #Envoyer un message sur l'écran Windows
  user32 = windll.user32
  user32.MessageBoxA( 0, "Enemy Will Come Here!!", "Caution!!", 0x00000030)

Changer comme ci-dessous

def growl(): #Exécutez vbs pour montrer le grognement
  path = os.path.abspath(os.path.dirname(__file__))
  filename = "popup.vbs"
  path = os.path.join(path,filename)
  os.system(path) h

Dans l'ensemble, c'est devenu comme ça

sencer_server.py


from __future__ import print_function
import socket
import time
import os

from contextlib import closing
from ctypes import *


def main():
  while True:
    print('listen,start')
    recv()
    time.sleep(1)

def recv():
  host = '192.168.1.xx'
  port = 8080
  backlog = 10
  bufsize = 4096
  socket.timeout(1)
  
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  try:
    with closing(sock):
      sock.bind((host, port))
      sock.listen(backlog)
      conn, address = sock.accept() 
      msg = conn.recv(bufsize) 
      if (msg == 'raspberry'):
        print('recieve')
        growl()
        
  except socket.timeout:
    print('connect,timeout')
  except socket.error:
    print('connect,error')

def growl():
  path = os.path.abspath(os.path.dirname(__file__))
  filename = "popup.vbs"
  path = os.path.join(path,filename)
  os.system(path)
  
if __name__ == '__main__':
  main()

Terminé J'ai pu réaliser le pop-up à la mode que je recherchais

Prend en charge plusieurs clients

J'ai examiné différentes méthodes et répertorié les candidats

  1. Passez de TCP à UDP et faites-le diffuser
  2. rendre la partie de transmission multi-thread
  3. Faites-le bien dans le cloud

Il semble facile de diffuser 1., et je n'avais pas besoin d'écrire chaque adresse IP dans la source, alors je l'ai essayé, mais j'étais frustré parce que cela ne fonctionnait pas. Je suis frustré, alors je veux me venger dès que je demande à quelqu'un

Concernant 3., il faut du temps pour revoir les spécifications globales, sélectionner le cloud et conclure un contrat, il est donc réservé

Je suis réticent, mais en 2., j'ai décidé de m'en occuper pour le moment

Alors, j'ai changé ce qui suit

sencer_cliant.py


from __future__ import print_function
import socket
import time

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN)

from contextlib import closing
import threading

def main():
  print('start,waiting')
  while True:
    inputValue = GPIO.input(25)
    host = ['192.168.1.xx','192.168.1.yy']
    if (inputValue == True):
      print('inputTrue')
      for ip in host:
        thread = threading.Thread(target=send, args=(ip,))
        thread.start()
      time.sleep(5)

def send(host):
  port = 8080
  bufsize = 4096
  
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  sock.settimeout(1)
  
  with closing(sock):
    try:
      sock.connect((host, port))
      sock.send('raspberry')
      print(host + ' send')
    except socket.timeout:
      print(host + ' socketTimeout')
    except socket.error:
      print(host + ' socketError')
  return

if __name__ == '__main__':
  main()

Terminé

Impressions

L'insatisfaction pratique dans mon environnement a été presque éliminée et je vis une vie confortable dans ma chambre. Je viens de fabriquer un jouet bizarre avec un motif impur, mais quand j'ai touché du python pour la première fois, la tension est montée et j'étais assez absorbée. Je veux essayer de m'obscurcir pendant les vacances d'hiver De plus, comme c'est presque une copie, le contenu de la source peut être terrible, je ne peux pas l'obtenir à moins de le faire en l'examinant un peu plus, alors j'aimerais me consacrer petit à petit.

Si vous avez des suggestions ou des conseils, n'hésitez pas à nous contacter.

Recommended Posts

Capteur humain amélioré fabriqué avec Raspberry Pi
Utiliser le capteur de mouvement PIR avec Raspberry Pi
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Application d'analyse des investissements boursiers avec tarte aux framboises
Plantes Mutter avec Raspberry Pi
Utilisez le capteur d'éclairement numérique TSL2561 avec Raspberry Pi
Vérifiez! Obtenez les données du capteur via Bluetooth avec Raspberry Pi ~ Préparation
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
Communication série avec Raspberry Pi + PySerial
Configuration du système d'exploitation avec Raspberry Pi Imager
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Détecte les personnes avec le module de capteur humain
Essayez de déplacer 3 servos avec Raspeye
Utiliser une webcam avec Raspberry Pi
J'ai créé un serveur Web avec Razpai pour regarder des anime
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
Surveillance des animaux avec Rekognition et Raspberry pi
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Essayez de pêcher le Wakasagi avec Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Utiliser le capteur Grove avec Raspberry Pi
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Exécuter le servomoteur SG-90 avec Raspberry Pi
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Faire une minuterie de lavage-séchage avec Raspberry Pi
Modèle Infer Custom Vision avec Raspeye
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
Enregistrement de la valeur d'Inkbird IBS-TH1 avec Raspberry Pi
Travailler avec le GPS en Python pour Raspberry Pi 3
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
[Travail électronique] J'ai fabriqué un détecteur de son tactile Suica avec Raspberry Pi
Remarque: je souhaite faire de la domotique avec Home Assistant + Raspberry Pi + capteur # 1
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
Discord bot raspberry pi zéro avec python [Note]
Programmation média avec Raspeye (préparation audio)
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
J'ai essayé L-Chika avec Razpai 4 (édition Python)
Profitez du travail électronique avec GPIO de Raspberry Pi
MQTT Radicon Car avec Arduino et Raspberry
Allumez / éteignez votre PC avec Raspberry Pi
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Observez le groupe de météores Futago avec RaspberryPi4
Grove - Capteur de température et d'humidité (DHT11) avec Raspberry Pi
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Raspberry + am2302 Mesure la température et l'humidité avec un capteur de température et d'humidité
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Enregistrement de la valeur d'Inkbird IBS-TH1 mini avec Raspberry Pi