Si vous avez besoin que votre PC – en particulier un ordinateur portable d’entreprise de votre travail – vous voie actif même lorsque vous vous éloignez, un jiggler de souris est votre meilleur choix. La plupart des ordinateurs émis par l’entreprise ne vous permettent pas d’installer de logiciel ou d’espionner les applications que vous exécutez, donc l’utilisation d’un appareil qui déplace automatiquement le pointeur mais se présente au système d’exploitation comme une souris résout le problème. Vous pouvez vous rendre sur Amazon et acheter un périphérique USB qui coûte entre 7 $ et 40 $, ou vous pouvez créer votre propre jiggler de souris bricolage en utilisant le 4 $ Framboise Pi Pico.
Dans ce guide, nous allons construire un jiggler de souris bricolage en utilisant le Raspberry Pi Pico et CircuitPython. Rien d’autre n’est requis, pas même des chauffeurs, ce qui fait de ce projet de 4 $ une grande économie de temps et d’argent. Notez que, bien que nous ayons utilisé un Pico, ces instructions fonctionneront pour tout microcontrôleur alimenté par RP2040 prenant en charge CircuitPython (presque tous). Une planche comme la Adafruit Trinkey QT2040un autre microcontrôleur alimenté par RP2040 qui coûte 8 $, serait encore meilleur que le Pico car il a un USB Type-A intégré et ne nécessite donc même pas de fil pour se connecter à votre PC.
Configuration de CircuitPython pour Mouse Jiggler
1. Accédez à la page officielle de CircuitPython pour le Raspberry Pi Pico et téléchargez la dernière version de l’image du micrologiciel UF2. Au moment de la rédaction, il s’agissait de CircuitPython 8 Beta 6. Si vous utilisez une autre carte alimentée par RP2040, recherchez son Page UF2 sur Circuitpython.org.
2. Tout en maintenant le bouton BOOTSEL enfoncé, connectez le Raspberry Pi Pico à votre ordinateur. Un nouveau lecteur, RPI-RP2 apparaîtra
3. Copiez le fichier CircuitPython UF2 téléchargé sur RPI-RP2. Cela écrira CircuitPython dans le stockage flash interne du Pico. Un nouveau lecteur, CIRCUITPY apparaîtra.
Nous avons besoin d’un certain nombre de bibliothèques CircuitPython avant de pouvoir continuer. Ces bibliothèques de code pré-écrit ajoutent des fonctionnalités supplémentaires à un projet.
1. Télécharger le ensemble de bibliothèques pour la même version de CircuitPython que celle installée sur le Pico. Nous avons installé CircuitPython 8, nous avons donc téléchargé le bundle pour la version 8.x.
2. Extraire le bundle sur votre bureau et puis ouvrez le dossier lib contenue à l’intérieur.
3. Copiez le dossier adafruit_hid de ce dossier lib vers le dossier lib sur le lecteur CIRCUITPY.
Écrire du code CircuitPython pour Mouse Jiggler
1. Téléchargez et installez Thonny si vous ne l’avez pas déjà. Thonny est un éditeur Python qui couvre Python 3, MicroPython et CircuitPython.
2. Ouvrez Thonny et allez dans Outils >> Options.
3. Sélectionnez Interprète, puis définissez l’interpréteur sur CircuitPython, port sur automatique, puis cliquez sur OK. Thonny va maintenant se connecter au Pico W exécutant CircuitPython.
4. Cliquez sur Fichier >> Ouvrir et ouvrez code.py sur l’appareil CircuitPython (notre Raspberry Pi Pico).
5. Supprimez tout code déjà présent dans le fichier.
6. Importez la librairie USB_HID, suivi de la bibliothèque de support de la souris d’Adafruit.
import usb_hid
from adafruit_hid.mouse import Mouse
7. Importez la fonction de veille à partir de la bibliothèque de temps. Nous allons l’utiliser pour ajouter un court délai entre chaque mouvement.
from time import sleep
8. Créer un objet, m, pour contrôler la souris virtuelle.
m = Mouse(usb_hid.devices)
9. Créez une boucle pour exécuter le code en continu. À des fins de test, cette boucle peut être remplacée par une boucle for, sinon le code nous empêcherait de travailler.
while True:
Test alternatif pour la boucle
for i in range(2):
dix. Utilisez « déplacer » pour déplacer le curseur de 100 pixels vers la gauche.
m.move(-100, 0, 0)
11. Imprimez un message dans le shell Python et faites une pause d’une demi-seconde. L’impression nous aide à déboguer le code.
print("I am working")
12. Déplacez maintenant la souris de 100 pixels vers la droite, imprimez un autre message et faites une pause d’une demi-seconde supplémentaire.
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
13. Déplacez la souris de 100 pixels vers le bas, imprimez un message puis une autre pause.
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
14. Déplacez la souris de 10 pixels vers le haut, imprimez un message, puis faites à nouveau une pause.
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
15. Enregistrez le code sous code.py sur votre Raspberry Pi Pico (appareil CircuitPython). CircuitPython exécutera automatiquement code.py (MicroPython peut également le faire avec main.py et boot.py) lorsque le Pico est connecté à l’ordinateur. Comme le système d’exploitation pense qu’il ne s’agit «que d’une souris», le projet peut être utilisé sur n’importe quel système d’exploitation.
Liste complète des codes
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
m = Mouse(usb_hid.devices)
while True:
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
Ajouter un bouton au DIY Jiggler
Un jiggler de souris plug and play est pratique, mais plus utile est celui que nous pouvons activer en appuyant sur un bouton. Ici, nous avons modifié le code pour inclure un bouton-poussoir sur GPIO12 qui activera ou désactivera le jiggler.
Pour ce projet, vous aurez besoin
- Un Raspberry Pi Pico
- Planche à pain demi-taille
- Bouton poussoir
- 2 x fils mâle à mâle
Le circuit est extrêmement simple, il suffit de câbler un bouton poussoir sur GPIO 12 et GND. GPIO 12 sera réglé pour tirer vers le haut, et lorsque le bouton est enfoncé, il connectera la broche à GND. Cela déclenchera le changement d’état de la broche en bas, et nous l’utilisons comme bascule pour le code jiggler. Ce projet s’appuiera sur le code de la version précédente.
1. Ajoutez deux importations supplémentaires pour le tableau et le digitalio. Ces deux bibliothèques donnent accès au GPIO et nous permettent de définir l’état des broches GPIO.
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
2. Créez un objet, un bouton et définissez-le sur GPIO12.
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.GP12)
3. Définissez GPIO 12 comme entrée et tirez la broche vers le haut. Certaines broches GPIO ont une résistance interne que nous pouvons tirer à 3,3 V ou à GND.
button.direction = Direction.INPUT
button.pull = Pull.UP
4. Créez deux variables, active et button_press et stockez 0 dans chacune. Ces deux variables stockeront un 0 ou un 1, identifiant si le jiggler est actif et si le bouton a été enfoncé. Au début du code, ils sont tous deux définis sur inactifs en utilisant 0.
active = 0
button_press = 0
5. Ajoutez une boucle while True pour exécuter le code.
while True:
6. Créez une instruction conditionnelle qui vérifie l’état du bouton et la valeur stockée dans active. Lorsque le bouton est enfoncé, l’état du GPIO 12 passe de haut (vrai) à bas (faux). Lorsqu’il est pressé, l’instruction conditionnelle vérifiera la valeur stockée dans active. La valeur par défaut est 0, ce qui signifie que le jiggler n’est pas actif.
if button.value == False and active == 0:
7. Mettez à jour les variables sur 1, puis imprimez un message dans le shell Python.
active = 1
button_press = 1
print("Turning on")
8. Ajoutez une pause de cinq secondes pour cette condition. Cela nous donne le temps d’appuyer sur le bouton et pour que le code enregistre la presse et offre beaucoup de temps anti-rebond qui empêche les pressions multiples sur les boutons.
sleep(5)
9. Utilisez une condition else if pour vérifier que le bouton n’est pas actuellement enfoncé et que les valeurs stockées dans active et button_press sont 1. Cela signifie que nous avons appuyé sur le bouton et que nous voulons que le code du jiggler de la souris s’exécute.
elif button.value == True and active == 1 and button_press == 1:
dix. Réutilisez le code du mouse jiggler pour déplacer la souris sur l’écran.
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
11. Créez une autre instruction conditionnelle pour vérifier que le bouton a été enfoncé et que active et button_press stockent la valeur 1. Cela signifie que l’utilisateur veut désactiver le code jiggler.
elif button.value == False and active == 1 and button_press == 1:
12. Imprimez un message à l’utilisateur, puis réinitialisez les valeurs stockées dans les variables avant de faire une pause de cinq secondes.
print("Turning off")
active = 0
button_press = 0
sleep(5)
13. Enregistrez le projet sous code.py sur le Raspberry Pi Pico et la carte va réinitialiser et exécuter le code. Appuyez sur le bouton pour activer et désactiver le code jiggler.
Liste complète des codes
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.BUTTON)
button.direction = Direction.INPUT
button.pull = Pull.UP
active = 0
button_press = 0
while True:
if button.value == False and active == 0:
active = 1
button_press = 1
print("Turning on")
sleep(5)
elif button.value == True and active == 1 and button_press == 1:
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
elif button.value == False and active == 1 and button_press == 1:
print("Turning off")
active = 0
button_press = 0
sleep(5)
Version spéciale Adafruit Trinket QT2040
Trinkey QT2040 d’Adafruit est une carte en forme de dongle USB alimentée par le RP2040 de Raspberry Pi. Il n’a pas de GPIO traditionnel en soi, mais utilise plutôt un connecteur StemmaQT pour une utilisation avec des cartes de dérivation compatibles.
Cette version spéciale du code de basculement du bouton utilise les cartes intégrées au bouton utilisateur (BOOT) pour activer / désactiver le code et le NeoPixel pour indiquer si le jiggler est actif. Le code est en grande partie le même que le code de basculement du bouton précédent, juste modifié pour utiliser la référence du bouton (une abstraction CircuitPython) et pour configurer NeoPixels.
1. Télécharger le ensemble de bibliothèques pour la même version de CircuitPython que celle installée sur le Pico. Nous avons installé CircuitPython 8, nous avons donc téléchargé le bundle pour la version 8.x.
2. Extraire le bundle sur votre bureau et puis ouvrez le dossier lib contenue à l’intérieur.
3. Copiez les fichiers/dossiers suivants de ce dossier lib vers le dossier lib sur le lecteur CIRCUITPY.
adafruit_hid
adafruit_pixelbuf.mpy
neopixel.mpy
4. Ouvrez un nouveau fichier dans Thonny et copiez le code de l’exemple précédent.
5. Dans les importations ajoutez une ligne pour importer la librairie NeoPixel.
import neopixel
6. Après avoir configuré le bouton, ajoutez une nouvelle ligne pour créer une connexion au seul NeoPixel sur le Trinkey QT2040.
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
7. Faites défiler jusqu’à la condition else if qui active le jiggler. C’est là que nous appuyons sur le bouton, et les variables active et button_press sont définies sur 1. Ajoutez une ligne pour définir le pixel sur rouge, à un quart de luminosité.
pixel.fill((32, 0, 0))
8. Faites défiler jusqu’à l’endroit où le code jiggler est désactivé. C’est là que le bouton est enfoncé et les variables active et button_press sont définies sur 1. Changez la couleur du NeoPixel en vert, avec un quart de luminosité.
pixel.fill((0, 32, 0))
9. Enregistrez le code sous le nom code.py sur l’Adafruit Trinkey QT2040. La carte se réinitialisera et le code commencera. Appuyez sur le bouton pour basculer le code.
Liste complète des codes
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
import neopixel
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.BUTTON)
button.direction = Direction.INPUT
button.pull = Pull.UP
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
active = 0
button_press = 0
while True:
if button.value == False and active == 0:
active = 1
button_press = 1
print("Turning on")
sleep(5)
elif button.value == True and active == 1 and button_press == 1:
pixel.fill((32, 0, 0))
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
elif button.value == False and active == 1 and button_press == 1:
pixel.fill((0, 32, 0))
print("Turning off")
active = 0
button_press = 0
sleep(5)