Skip to main content

Python side of a serial communication library with Arduino Card

Project description

ArduinoPythonSerialRpc

ArduinoPythonSerialRpc is the Python side of a serial communication library with Arduino Card.

The Arduino part of this communication is implemented into ArduinoSerialRpc repository.

The communication model is implemented in form of:

  • Remote Method Invocation. Where Arduino calls a method declared into a Python class.
  • Remote Procedure Call. Where a Python process call a function defined into the Arduino sketch.

The communication is a point to point model, performed through the serial (USB) port.

Architecture

Tbdf

Features

  • Bidirectional communication
  • Low Arduino resources required
  • Easy to learn interface
  • Flexible naming convention

Getting Started

Arduino Side Installation

It is required to:

Python Side Installation

pip install arduinopythonserialrpc

Arduino Sketch basic example

#include <ArduinoSerialRpc.h>

ArduinoSerialRpc rpc("Arduino www.mauxilium.it");

void setup() {
  Serial.begin(9600);
  rpc.registerArduinoFunction("go", startTest);
  rpc.registerArduinoFunction("halt", stopTest);
}


// ##########################################################################
// BE AWARE!!!
// DO NOT FORGET TO ADD THE FOLLOWING serialEvent() FUNCTION INTO YOUR SKETCH
void serialEvent() {
  rpc.serialEventHandler();
}
// ##########################################################################


bool execFlag = false;
int counter = 0;

void startTest() {
  execFlag = true;
}

void stopTest() {
  counter = 0;
  execFlag = false;
}

void loop() {
  delay(200);
  if (execFlag) {
    rpc.executeRemoteMethod("ping_from_arduino", counter, counter++);
  }
}

Python Class basic example

A simplified version of Python test program could be:

from threading import Event
from arduinopythonserialrpc.arduino_python_serial_rpc import ArduinoPythonSerialRpc


class ArduinoRpc(ArduinoPythonSerialRpc):
    def __init__(self):
        super(ArduinoRpc, self).__init__("COM5", 9600, self)

    def ping_from_arduino(self, arg1: int, arg2: int) -> int:
        print("Ping: "+str(arg2))
        if arg1 == 15:
            test_arduino_to_pc_completed.set()
        return arg2


test_arduino_to_pc_completed = Event()

if __name__ == "__main__":
    rpc = ArduinoRpc()
    rpc.connect()
    card_name = rpc.get_card_name()
    print("Connected to: " + card_name)

    print("First cicle of 15 pings")
    rpc.execute_remote_function("go")
    test_arduino_to_pc_completed.wait()
    rpc.execute_remote_function("halt")

    print("Second cicle of 15 pings")
    test_arduino_to_pc_completed.clear()
    rpc.execute_remote_function("go")
    test_arduino_to_pc_completed.wait()
    rpc.execute_remote_function("halt")

    print("Test ends")
    rpc.disconnect()

Build and run

Inside the GitHub repository: https://github.com/Mauxilium/ArduinoPythonSerialRpc

You can find another real complete use case in the source paths:

  • ArduinoPythonSerialRpc\tests\integration\sketch
  • ArduinoPythonSerialRpc\tests\integration\python

In order to execute this integration example test, please follow this steps:

  • Open the sketch ArduinoPythonSerialRpc\tests\integration\sketch\sketch.ino
  • Download it into your Arduino Card
  • Open a terminal and go to ArduinoPythonSerialRpc\tests\integration\python
  • Modify the port name on row 158 of integration_test.py according to your system
  • Execute the following command
python integration_test.py

Next steps

  • ArduinoPythonSerialRpc tutorial - A tutorial to discover a more complex use of library (On Working)
  • www.mauxilium.it - The reference site for my other projects (On Working)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

arduinopythonserialrpc-1.0.0.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

arduinopythonserialrpc-1.0.0-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file arduinopythonserialrpc-1.0.0.tar.gz.

File metadata

  • Download URL: arduinopythonserialrpc-1.0.0.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.2

File hashes

Hashes for arduinopythonserialrpc-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b0667b7ce039ed1f9d8064a2ee67216f5c3400ac3d8ce44128f0e67b55567c1f
MD5 e8e9b716a07122bbc83f6f2e9ae45ed8
BLAKE2b-256 d2b6b38881c3328f0bbd766a77d749d3a9d33989efebf0269bc7a7e33549d1ce

See more details on using hashes here.

File details

Details for the file arduinopythonserialrpc-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: arduinopythonserialrpc-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.2

File hashes

Hashes for arduinopythonserialrpc-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3a003b4bd10af05b7cd2536ef0cd1d821955196f428dca32f9fb842460764e2d
MD5 856d05d04615e0554a6a6602f16464bb
BLAKE2b-256 8e8368648d07f2fdcc3e7c58009ce5f5c1ef64ae9e4b2a731f92e6fb85606e65

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page