A Python Protocol Abstraction Library For Arduino Firmata using Python asyncio
Project description
pymata-express
A high performance, Python asyncio client for the Arduino Firmata Protocol.
Pymata-Express is a Firmata client that, like its conventional Python sibling, pymata4, allows you to control an Arduino using the high-performance FirmataExpress sketch.
It supports both an enhanced version of StandardaFirmata 2.5.8, called FirmataExpress, as well as StandardFirmata and StandardFimataWiFi.
- FirmataExpress adds support for:
- HC-SR04 Ultrasonic Distance Sensors using a single pin.
- DHT Humidity/Temperature Sensors.
- Stepper Motors.
- Piezo Tone Generation.
- Baud rate of 115200
Major features
-
Fully documented intuitive API
-
Python 3.7+ compatible.
-
Set the pin mode and go!
-
Data change events may be associated with a callback function or each pin can be polled for its last event change.
- Each data change event is time stamped and logged.
-
User's Guide, Including Examples.
-
Implements 100% of the StandardFirmata Protocol (StandardFirmata 2.5.8).
-
Advanced auto-detection of Arduino devices (when using FirmataExpress).
Here is an example that monitors for data changes on a digital input pin.
import asyncio
import time
import sys
from pymata_express import pymata_express
"""
Setup a pin for digital input and monitor its changes
using a callback.
"""
# Setup a pin for analog input and monitor its changes
DIGITAL_PIN = 12 # arduino pin number
IDLE_TIME = .001 # number of seconds for idle loop to sleep
# Callback data indices
# Callback data indices
CB_PIN_MODE = 0
CB_PIN = 1
CB_VALUE = 2
CB_TIME = 3
async def the_callback(data):
"""
A callback function to report data changes.
This will print the pin number, its reported value and
the date and time when the change occurred
:param data: [pin, current reported value, pin_mode, timestamp]
"""
date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(data[CB_TIME]))
print(f'Pin: {data[CB_PIN]} Value: {data[CB_VALUE]} Time Stamp: {date}')
async def digital_in(my_board, pin):
"""
This function establishes the pin as a
digital input. Any changes on this pin will
be reported through the call back function.
:param my_board: a pymata_express instance
:param pin: Arduino pin number
"""
# set the pin mode
await my_board.set_pin_mode_digital_input(pin, callback=the_callback)
while True:
try:
await asyncio.sleep(IDLE_TIME)
except KeyboardInterrupt:
await board.shutdown()
sys.exit(0)
# get the event loop
loop = asyncio.get_event_loop()
# instantiate pymata_express
board = pymata_express.PymataExpress()
try:
# start the main function
loop.run_until_complete(digital_in(board, 12))
except (KeyboardInterrupt, RuntimeError) as e:
loop.run_until_complete(board.shutdown())
sys.exit(0)
Sample console output as input change events occur:
Pin: 12 Value: 0 Time Stamp: 2020-03-10 13:26:22
Pin: 12 Value: 1 Time Stamp: 2020-03-10 13:26:27
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pymata-express-1.21.tar.gz
.
File metadata
- Download URL: pymata-express-1.21.tar.gz
- Upload date:
- Size: 24.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.4.2 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1417197ef601c3515829801c2afac158b1c24a78d7590adfdd38231d21c394d1 |
|
MD5 | e415124662af64a3f9c85aa0cf7b9ddd |
|
BLAKE2b-256 | 587520319f69e6ed750d817e4a09bf50ae92f94ddc905a19428bf49b9a99f9e0 |
File details
Details for the file pymata_express-1.21-py2.py3-none-any.whl
.
File metadata
- Download URL: pymata_express-1.21-py2.py3-none-any.whl
- Upload date:
- Size: 49.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.4.2 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a77974b2b79605df179bd3dfb65cf2c125e55207ca03dd810848cd2c73af665 |
|
MD5 | 67343f81440d905bd9df93e8a1c5e4e3 |
|
BLAKE2b-256 | fac85e80feae1776fd3c8fafd30011c8b540f6f93c922ff97e110abfb9671fe7 |