I’ve made a small python script to act as an interface between a TCode serial port and the DG-Labs Coyote directly via Bluetooth.
No more relying on XToys!
It uses a trimmed down version of the code from GameInterfaceForToys to connect/communicate with the Coyote.
The script supports two axis (L0 and R2) mapped to Channels A/B.
Works with:
- MultiFunPlayer
- FapTap
- Ayva Stroker Lite
- Virt-a-Mate OSR2 plugin
- Buttplug.io configured to use an OSR2
Notes
- The Bluetooth library used sometimes takes a few attempts to connect (you may need to restart the script if taking too long)
- If you’re not familiar with e-stim, do some research before attempting to use this and follow common sense (nothing near the chest, across the heart, etc.)
- Don’t adjust the maximum output limit unless you’re familiar with the capability of the Coyote. It can hurt if you don’t know what you’re doing.
- The hardware has a limitation of changing intensity once every 100ms which sounds fast, but with fast scripts it may not be able to react quick enough.
Setup
In order to use the script, you need a few things:
-
The following Python packages - it is recommended that you use python’s built-in package manager “pip”:
-
pip install bleak
pip install pyserial
pip install pyglet
-
-
com0com for Windows to create two virtual COM ports paired together.
- com0com creates a pair of COM ports (e.g. COM3 and COM4) linked together to allow connecting one COM port based application to another. All the default settings seem to work fine.
- i.e. the script connects to COM3, while whatever app you’re using connects to COM4
- This allows the script to receive T-Code commands and translate it into something the Coyote can respond to.
Usage
There are a few user-configurable items:
COM_PORT
- The COM port used by the script from com0comOUTPUT_LIMIT
- Default maximum intensity (adjustable via GUI once running), an integer value from 0-2047. Default is 300.OUTPUT_LIMIT_CAP
- Maximum intensity cap as an integer value from 0-2047. Be careful adjusting this value.OUTPUT_LIMIT_RANGE
- A scaled range of intensity relative to the max output. Default is 10%. E.g. If the T-Code command is between 0-9999, 0 corresponds to the currentOUTPUT_LIMIT
, 9999 corresponds to theOUTPUT_LIMIT
minus 10%.DEVICE_UID
- Your specific device bluetooth MAC address. You can configure this to allow connecting without scanning first.A_B_LINKED
- By default, axis R2 (pitch) is connected to Channel B. You can optionally link both Channel B to axis L0.A_B_INVERTED
- IfTrue
, Channel B will output the inverse of Channel AB_MIDPOINT
- IfTrue
, any values received for axis R2 assumes the home position is the midpoint, with the absolute delta value relative to home used as intensity
Unzip the files and run interface.py
:
python ./interface.py
A small window will open showing the max/min output as a percentage. Hover over and use a mouse scroll wheel to adjust in real time.
Coyote Interface Download
V1.0:
https://mega.nz/file/ZYoGzZqA#9uSGRJ9W2a761DzzZ1D70SaEuhupz_UZzg_AxT5r5cM
V1.1:
https://mega.nz/file/AFZCGJpZ#08ZHdBue23WDy-gIZ73EqfgoPjZnE3uiCNVUk4-yto0
Changelog:
- V1.1
- Added ability to adjust max intensity in real time with mouse wheel
- Scale T-Code command to configurable intensity range of intensity rather than relying on software/players to scale properly
- Added option for inverted output on Channel B when using as a single axis (FapTap / Buttplug.io)