{ "info": { "author": "yukisato", "author_email": "yuki@yuki-sato.com", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# obniz.py: sdk for python\n\n[![image](https://img.shields.io/pypi/pyversions/obniz.svg)](https://pypi.org/project/obniz/)\n\n[obniz](https://obniz.io/) sdk for python.\nYou can use [obnizBoard](https://obniz.io/doc/obniz_board_hobby_90/hw_overview) or [obnizOS](https://obniz.io/doc/obnizos/os_overview).\n\nControl obniz from python.\n\nThis sdk works with [obniz api](https://obniz.io/doc/about_obniz_api).\n\nCompatible with **Python 3.6+**.\n\n\n\n## Usage\n```py\n import asyncio\n\n from obniz import Obniz\n\n\n async def onconnect(obniz):\n obniz.io0.drive(\"5v\")\n obniz.io0.output(True)\n obniz.io1.pull(\"3v\")\n obniz.io1.drive(\"open-drain\")\n obniz.io1.output(False)\n obniz.io2.drive(\"3v\")\n obniz.io2.output(True)\n\n def callback(voltage):\n print(\"change to {} v\".format(voltage))\n\n obniz.ad3.start(callback)\n\n pwm = obniz.get_free_pwm()\n pwm.start({\"io\": 4})\n pwm.freq(1000)\n pwm.duty(50)\n\n uart = obniz.getFreeUart()\n uart.start({\"tx\": 5, \"rx\": 6, \"baud\": 9600})\n\n def onreceive(data, text):\n print(data)\n\n uart.onreceive = onreceive\n\n uart.send(\"Hello\")\n\n\n obniz = Obniz('0000-0000')\n obniz.onconnect = onconnect\n\n asyncio.get_event_loop().run_forever()\n```\n\n## Installation\n\nInstall obniz via pip\n```shell\n pip install obniz\n```\nand import it on python file.\n```python\n from obniz import Obniz\n```\n\n## Connect\n\nDetails on [doc/connection](https://obniz.io/doc/sdk/doc/connection)\n\nTo use obniz, instantiate obniz with obniz id. and set onconnect callback function. It will be called when connected to obniz successfully.\n```python\n import asyncio\n\n\n async def onconnect(obniz):\n pass\n\n\n obniz = Obniz('0000-0000')\n obniz.onconnect = onconnect\n\n asyncio.get_event_loop().run_forever()\n```\n\nYou are able to use everything on obniz after connect.\n```python\n async def onconnect(obniz):\n obniz.io0.drive(\"5v\")\n obniz.io0.output(True)\n obniz.io1.pull(\"3v\")\n obniz.io1.drive(\"open-drain\")\n obniz.io1.output(False)\n obniz.io2.drive(\"3v\")\n obniz.io2.output(True)\n\n def callback(voltage):\n print(\"change to {} v\".format(voltage))\n\n obniz.ad3.start(callback)\n\n pwm = obniz.get_free_pwm()\n pwm.start({\"io\": 4})\n pwm.freq(1000)\n pwm.duty(50)\n\n uart = obniz.getFreeUart()\n uart.start({\"tx\": 5, \"rx\": 6, \"baud\": 9600})\n\n def onreceive(data, text):\n print(data)\n\n uart.onreceive = onreceive\n\n uart.send(\"Hello\")\n```\n\n## Example\nEasy to integrate python libraries like TensorFlow.\n(need to install `tensorflow` and `opencv-python`)\n```py\n import asyncio\n\n from obniz import Obniz\n\n import cv2\n import numpy as np\n import tensorflow as tf\n from tensorflow import keras\n\n class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',\n 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']\n\n fashion_mnist = keras.datasets.fashion_mnist\n\n (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()\n\n train_images = train_images / 255.0\n\n test_images = test_images / 255.0\n\n model = keras.Sequential([\n keras.layers.Flatten(input_shape=(28, 28)),\n keras.layers.Dense(128, activation=tf.nn.relu),\n keras.layers.Dense(10, activation=tf.nn.softmax)\n ])\n\n model.compile(optimizer=tf.train.AdamOptimizer(),\n loss='sparse_categorical_crossentropy',\n metrics=['accuracy'])\n\n model.fit(train_images, train_labels, epochs=5)\n\n test_loss, test_acc = model.evaluate(test_images, test_labels)\n\n print('Test accuracy:', test_acc)\n\n def set_angle(pwm, angle):\n max = 2.4\n min = 0.5\n val = ((max - min) * angle) / 180.0 + min\n pwm.pulse(val)\n\n\n async def onconnect(obniz):\n obniz.io0.output(False)\n obniz.io1.output(True)\n\n pwm = obniz.get_free_pwm()\n pwm.start({\"io\": 2})\n pwm.freq(50)\n\n cap = cv2.VideoCapture(0)\n\n prev = None\n\n while True:\n ret, frame = cap.read()\n\n frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)\n\n ret, frame = cv2.threshold(frame, 127, 255, cv2.THRESH_BINARY_INV)\n\n height, width = frame.shape\n x = height if height < width else width\n y = height if height < width else width\n square= np.zeros((x, y), np.uint8)\n\n x1 = int((width-x)/2)\n x2 = int(width-(width-x)/2)\n y1 = int((height-y)/2)\n y2 = int(height-(height-y)/2)\n square = frame[y1:y2, x1:x2]\n\n cv2.imshow(\"frame\", square)\n\n img = cv2.resize(square, (28, 28), interpolation = cv2.INTER_AREA)\n\n img = (np.expand_dims(img / 255.0, 0))\n\n predictions_single = model.predict(img)\n\n answer = np.argmax(predictions_single[0])\n\n if prev != answer:\n print(\"answer: {}\".format(class_names[answer]))\n set_angle(pwm, answer / 9 * 180)\n\n prev = answer\n\n if cv2.waitKey(1) & 0xFF == ord('q'):\n asyncio.get_event_loop().stop()\n break\n\n await asyncio.sleep(0.1)\n\n cap.release()\n cv2.destroyAllWindows()\n\n obniz = Obniz('0000-0000')\n obniz.debugprint = True\n obniz.onconnect = onconnect\n\n asyncio.get_event_loop().run_forever()\n```\n\n## Documentation\nYou can find the documentation on [the website](https://obniz.io/doc/).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://obniz.io/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "obniz", "package_url": "https://pypi.org/project/obniz/", "platform": "", "project_url": "https://pypi.org/project/obniz/", "project_urls": { "Homepage": "https://obniz.io/" }, "release_url": "https://pypi.org/project/obniz/0.5.1/", "requires_dist": [ "pyee (==6.0.0)", "websockets (==7.0)", "attrdict (==2.0.1)", "semver (==2.8.1)" ], "requires_python": "", "summary": "obniz sdk for python", "version": "0.5.1" }, "last_serial": 5987728, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "146e8a2279dd01c000a537ccc94c80d4", "sha256": "5570d04654e81bd27850c577c60cae39fcf1935021c9d7bcee14d65d8e47baeb" }, "downloads": -1, "filename": "obniz-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "146e8a2279dd01c000a537ccc94c80d4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59577, "upload_time": "2018-12-27T10:49:55", "url": "https://files.pythonhosted.org/packages/94/24/7ef0f58cb51121579ebf8f0fd2944ee16c3365335f521b3b5f2339ba3933/obniz-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bdc40a2272c75ba5110b0ccbf0f840d", "sha256": "abcb14f2635cb6ad83822220936fe6a10204c71172871f1bcb41420c73e2ac3a" }, "downloads": -1, "filename": "obniz-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6bdc40a2272c75ba5110b0ccbf0f840d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40344, "upload_time": "2018-12-27T10:49:58", "url": "https://files.pythonhosted.org/packages/04/e1/8eb00585c806277c059eab747b1ef2ac3ad6f4dc32bfe1670ff6cc948305/obniz-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "94935f82fc4b46be4e9ebb7d48ba0aa1", "sha256": "0cd09960ab1f3ffe469d6e5031de895083c41059880a1268441610f9c7594620" }, "downloads": -1, "filename": "obniz-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "94935f82fc4b46be4e9ebb7d48ba0aa1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59671, "upload_time": "2019-01-11T03:11:19", "url": "https://files.pythonhosted.org/packages/ed/e1/54ef44522c98aaecb69bd8c0d6fa47e2fa49d65ec3511c1d9ca6ac94bb40/obniz-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e017051ceffacadc387babe37cf1e51", "sha256": "bf39aef5d941d6567baa10ea36f5934b354e5d66605e36286134b290fdf88e46" }, "downloads": -1, "filename": "obniz-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7e017051ceffacadc387babe37cf1e51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40522, "upload_time": "2019-01-11T03:11:21", "url": "https://files.pythonhosted.org/packages/9b/d8/5fa8966d0383821a347ca4984a6a38b9796045da4f0ebdf7a20195647a02/obniz-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f4b5b80596526d60602bfefbb59c44d8", "sha256": "939f78fd210d728fa077225eed90c6a36208a36102253496ff3556f847f5214e" }, "downloads": -1, "filename": "obniz-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f4b5b80596526d60602bfefbb59c44d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 60926, "upload_time": "2019-02-28T07:01:11", "url": "https://files.pythonhosted.org/packages/d4/92/df7ef1744588f64d5b860356c68ab9b71394e15ac94f8c031800a279b4b6/obniz-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "faaf05f7dc140b8850d6b7c60cb31503", "sha256": "c22c6ec4718c8f36412b5551220c185b4d685b8ea2d23ef7737f0e03841206c5" }, "downloads": -1, "filename": "obniz-0.2.0.tar.gz", "has_sig": false, "md5_digest": "faaf05f7dc140b8850d6b7c60cb31503", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40205, "upload_time": "2019-02-28T07:01:13", "url": "https://files.pythonhosted.org/packages/f1/56/20a87d5f1463bee2d55c0470475078ebd1247a9cbc61880dc74a0acab076/obniz-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "5334a41d17158783d76d6e735cb4df70", "sha256": "6f8fa97444fa10873a30d1a7a474b806e3500e673f5194d593d6506dcd632382" }, "downloads": -1, "filename": "obniz-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5334a41d17158783d76d6e735cb4df70", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 64214, "upload_time": "2019-05-24T06:42:52", "url": "https://files.pythonhosted.org/packages/9d/38/b2d2293aa9950f70a13ccabc4c2d9cca40deda2f18b1c2c02c2d53163bdc/obniz-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c403e0ee9d7e17449aaab32187084dfb", "sha256": "4e90f3e3d1601fec88999127435c7bb4f673c261c2ef4976e9ffcc63ea7e3ab8" }, "downloads": -1, "filename": "obniz-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c403e0ee9d7e17449aaab32187084dfb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42185, "upload_time": "2019-05-24T06:42:54", "url": "https://files.pythonhosted.org/packages/91/33/540c6504add677965294db2149962c3a1a843ac0fc2346f19179b1db1b92/obniz-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "34a0a6b0cd53d86a71ab871628465e43", "sha256": "325d8f98e97b6e1e0c8fd13880c164f0afb8a2a9cd592aa1df9ece4ebe504d42" }, "downloads": -1, "filename": "obniz-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "34a0a6b0cd53d86a71ab871628465e43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 65496, "upload_time": "2019-08-30T10:02:08", "url": "https://files.pythonhosted.org/packages/1d/26/5b4a09f9d05ded0558f621f0fea9def673cf58f3af654cb79733730a1af1/obniz-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20347a2116706ead877b135d39816357", "sha256": "7b2f02653f0ef9b8b84696224fdb8bfff6c34db28b1ec350ed0d95a54261d703" }, "downloads": -1, "filename": "obniz-0.4.0.tar.gz", "has_sig": false, "md5_digest": "20347a2116706ead877b135d39816357", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13504785, "upload_time": "2019-08-30T10:02:17", "url": "https://files.pythonhosted.org/packages/dd/3f/eaf64edaa5e945da24a0460db0af1a1613205d38908a97fc77a82a62ca44/obniz-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "31a19174e539f910bf27a44123879df1", "sha256": "a0f9ab1e435beb90d4cbfdd6ea6789c93ee4303d0d592ebc207b7ea1ba0f7376" }, "downloads": -1, "filename": "obniz-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "31a19174e539f910bf27a44123879df1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 83504, "upload_time": "2019-08-30T10:51:52", "url": "https://files.pythonhosted.org/packages/bf/71/f1a979af588749613f8aa40d5b80a9d5df1a4e1ca800ce83dc8a71b4ba81/obniz-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0674e1a3d0bafbe893819df91981774e", "sha256": "946845187c777ddba67c0d69a70304a0187f6327fc84094f9a00428b0ff61f23" }, "downloads": -1, "filename": "obniz-0.4.1.tar.gz", "has_sig": false, "md5_digest": "0674e1a3d0bafbe893819df91981774e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13505122, "upload_time": "2019-08-30T10:51:57", "url": "https://files.pythonhosted.org/packages/c4/50/79b15ea6f4c19317629aae5fde0943f9b4cbfd5acd960f364e72acb6b7fb/obniz-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "0317da03f475262a6e7007b6166ca0e9", "sha256": "640183f68a31a72bdb0352bd42822d060743dca861d2c30211121da1162f573c" }, "downloads": -1, "filename": "obniz-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0317da03f475262a6e7007b6166ca0e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 83856, "upload_time": "2019-09-30T01:39:07", "url": "https://files.pythonhosted.org/packages/17/ea/c35c39c8b3df7de668b3aa899a2a5bcfbc9ea49ca4ed6deb58507f7a336b/obniz-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea7bbf2eb4ecdbcb2a25a5c88b8d3aea", "sha256": "b0419980fb5c21d2c33980a7f566b32548246febff3b2fce569be79b02c72435" }, "downloads": -1, "filename": "obniz-0.5.0.tar.gz", "has_sig": false, "md5_digest": "ea7bbf2eb4ecdbcb2a25a5c88b8d3aea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13505888, "upload_time": "2019-09-30T01:39:14", "url": "https://files.pythonhosted.org/packages/d5/28/63f5673dc49a0f99dd7909f39058121164dda6e387dbb4cd0d7ed7c21162/obniz-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "d5daf3ace82e1eb3edc145e319f47d90", "sha256": "4f8f9cde1f35fff7df860c8bc03c0f7a66dcd4db2dd0f64181544ccd1efc6099" }, "downloads": -1, "filename": "obniz-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d5daf3ace82e1eb3edc145e319f47d90", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13542831, "upload_time": "2019-10-17T05:20:55", "url": "https://files.pythonhosted.org/packages/f4/bb/4130ca30dc42d3ec1fc89807594d030be7d09fd6c6d4b36f0b0549c133ee/obniz-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96fb1d4dde8455e2a1a17684d248a6d1", "sha256": "699f156c3c54afb41c1c288d0185251de11d76326341197329e86dd045c3c4dc" }, "downloads": -1, "filename": "obniz-0.5.1.tar.gz", "has_sig": false, "md5_digest": "96fb1d4dde8455e2a1a17684d248a6d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13506697, "upload_time": "2019-10-17T05:21:07", "url": "https://files.pythonhosted.org/packages/2c/74/4beac21e922a01f8a36918c81b67aa02e97e83e3a09b915109486a495515/obniz-0.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d5daf3ace82e1eb3edc145e319f47d90", "sha256": "4f8f9cde1f35fff7df860c8bc03c0f7a66dcd4db2dd0f64181544ccd1efc6099" }, "downloads": -1, "filename": "obniz-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d5daf3ace82e1eb3edc145e319f47d90", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13542831, "upload_time": "2019-10-17T05:20:55", "url": "https://files.pythonhosted.org/packages/f4/bb/4130ca30dc42d3ec1fc89807594d030be7d09fd6c6d4b36f0b0549c133ee/obniz-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96fb1d4dde8455e2a1a17684d248a6d1", "sha256": "699f156c3c54afb41c1c288d0185251de11d76326341197329e86dd045c3c4dc" }, "downloads": -1, "filename": "obniz-0.5.1.tar.gz", "has_sig": false, "md5_digest": "96fb1d4dde8455e2a1a17684d248a6d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13506697, "upload_time": "2019-10-17T05:21:07", "url": "https://files.pythonhosted.org/packages/2c/74/4beac21e922a01f8a36918c81b67aa02e97e83e3a09b915109486a495515/obniz-0.5.1.tar.gz" } ] }