Skip to main content

obniz sdk for python

Project description

obniz.py: sdk for python

This sdk is currently out of maintenance.

  • You can use this on obnizOS 1.X.X or 2.X.X, but cannot use 3.X.X.
  • You can use only with obniz board / obniz Board 1Y. Other devices is not supported.

image

obniz sdk for python. You can use obnizBoard or obnizOS.

Control obniz from python.

This sdk works with obniz api.

Compatible with Python 3.8+.

Usage

    import asyncio

    from obniz import Obniz


    async def onconnect(obniz):
        obniz.io0.drive("5v")
        obniz.io0.output(True)
        obniz.io1.pull("3v")
        obniz.io1.drive("open-drain")
        obniz.io1.output(False)
        obniz.io2.drive("3v")
        obniz.io2.output(True)

        def callback(voltage):
            print("change to {} v".format(voltage))

        obniz.ad3.start(callback)

        pwm = obniz.get_free_pwm()
        pwm.start({"io": 4})
        pwm.freq(1000)
        pwm.duty(50)

        uart = obniz.getFreeUart()
        uart.start({"tx": 5, "rx": 6, "baud": 9600})

        def onreceive(data, text):
            print(data)

        uart.onreceive = onreceive

        uart.send("Hello")


    obniz = Obniz('0000-0000')
    obniz.onconnect = onconnect

    asyncio.get_event_loop().run_forever()

Installation

Install obniz via pip

  pip install obniz

and import it on python file.

  from obniz import Obniz

Connect

Details on doc/connection

To use obniz, instantiate obniz with obniz id. and set onconnect callback function. It will be called when connected to obniz successfully.

    import asyncio


    async def onconnect(obniz):
        pass


    obniz = Obniz('0000-0000')
    obniz.onconnect = onconnect

    asyncio.get_event_loop().run_forever()

You are able to use everything on obniz after connect.

    async def onconnect(obniz):
        obniz.io0.drive("5v")
        obniz.io0.output(True)
        obniz.io1.pull("3v")
        obniz.io1.drive("open-drain")
        obniz.io1.output(False)
        obniz.io2.drive("3v")
        obniz.io2.output(True)

        def callback(voltage):
            print("change to {} v".format(voltage))

        obniz.ad3.start(callback)

        pwm = obniz.get_free_pwm()
        pwm.start({"io": 4})
        pwm.freq(1000)
        pwm.duty(50)

        uart = obniz.getFreeUart()
        uart.start({"tx": 5, "rx": 6, "baud": 9600})

        def onreceive(data, text):
            print(data)

        uart.onreceive = onreceive

        uart.send("Hello")

Example

Easy to integrate python libraries like TensorFlow. (need to install tensorflow and opencv-python)

    import asyncio

    from obniz import Obniz

    import cv2
    import numpy as np
    import tensorflow as tf
    from tensorflow import keras

    class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
                'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

    fashion_mnist = keras.datasets.fashion_mnist

    (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

    train_images = train_images / 255.0

    test_images = test_images / 255.0

    model = keras.Sequential([
        keras.layers.Flatten(input_shape=(28, 28)),
        keras.layers.Dense(128, activation=tf.nn.relu),
        keras.layers.Dense(10, activation=tf.nn.softmax)
    ])

    model.compile(optimizer=tf.train.AdamOptimizer(),
                loss='sparse_categorical_crossentropy',
                metrics=['accuracy'])

    model.fit(train_images, train_labels, epochs=5)

    test_loss, test_acc = model.evaluate(test_images, test_labels)

    print('Test accuracy:', test_acc)

    def set_angle(pwm, angle):
        max = 2.4
        min = 0.5
        val = ((max - min) * angle) / 180.0 + min
        pwm.pulse(val)


    async def onconnect(obniz):
        obniz.io0.output(False)
        obniz.io1.output(True)

        pwm = obniz.get_free_pwm()
        pwm.start({"io": 2})
        pwm.freq(50)

        cap = cv2.VideoCapture(0)

        prev = None

        while True:
            ret, frame = cap.read()

            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

            ret, frame = cv2.threshold(frame, 127, 255, cv2.THRESH_BINARY_INV)

            height, width = frame.shape
            x = height if height < width else width
            y = height if height < width else width
            square= np.zeros((x, y), np.uint8)

            x1 = int((width-x)/2)
            x2 = int(width-(width-x)/2)
            y1 = int((height-y)/2)
            y2 = int(height-(height-y)/2)
            square = frame[y1:y2, x1:x2]

            cv2.imshow("frame", square)

            img = cv2.resize(square, (28, 28), interpolation = cv2.INTER_AREA)

            img = (np.expand_dims(img / 255.0, 0))

            predictions_single = model.predict(img)

            answer = np.argmax(predictions_single[0])

            if prev != answer:
                print("answer: {}".format(class_names[answer]))
                set_angle(pwm, answer / 9 * 180)

            prev = answer

            if cv2.waitKey(1) & 0xFF == ord('q'):
                asyncio.get_event_loop().stop()
                break

            await asyncio.sleep(0.1)

        cap.release()
        cv2.destroyAllWindows()

    obniz = Obniz('0000-0000')
    obniz.debugprint = True
    obniz.onconnect = onconnect

    asyncio.get_event_loop().run_forever()

Documentation

You can find the documentation on the website.

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

obniz-0.7.0.tar.gz (13.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

obniz-0.7.0-py3-none-any.whl (14.1 MB view details)

Uploaded Python 3

File details

Details for the file obniz-0.7.0.tar.gz.

File metadata

  • Download URL: obniz-0.7.0.tar.gz
  • Upload date:
  • Size: 13.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for obniz-0.7.0.tar.gz
Algorithm Hash digest
SHA256 08ece906ed6846ff205a1ef621dd8802c7e53002bdad1234d292e6dcd9097e60
MD5 743d1ce02499d5fa5f04b423bcce7e68
BLAKE2b-256 bf1e1158715f3f79bb6340c20e311e2796ddf99a015153f9ae3e71a766e682fe

See more details on using hashes here.

File details

Details for the file obniz-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: obniz-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 14.1 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for obniz-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 47364efced69076dd0be6f3d81e2d616b09c9df6b9e0097016b3b689b698bc88
MD5 39519990f09f1612ad43ca8ab4396ad6
BLAKE2b-256 888e81f49bc0e8181944064d7663a51e44f4ef61634b3e97b77f4654c65f9852

See more details on using hashes here.

Supported by

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