Giter Site home page Giter Site logo

python-sakuraio's Introduction

Python library for SakuraIO travis-ci

WARNING: This library is under development with destructive changes.

Overview

This library contains two functions. One is to connect to Sakura Communication Modules (for Hardware). Another one is to connect to Platform API in https://api.sakura.io/ (for Service).

Documentation

For API documentation, usage and examples see files in the "./doc" directory. The ".rst" files can be read in any text editor or being converted to HTML or PDF using Sphinx. An HTML version is online at

Docs

http://python-sakuraio.readthedocs.io/

For Hardware

It currently tested with Raspberry Pi only.

Requirements

Python2

  • Python = 2.7
  • python-smbus (for I2C)
  • python-rpi.gpio (for GPIO on Raspberry Pi)
  • python-serial (for Serial)

Python3

  • Python >= 3.4
  • python3-smbus (for I2C)
  • python3-rpi.gpio (for GPIO on Raspberry Pi)
  • python3-serial (for Serial)

Install

If you want to use python3 it may be required replace pip to pip3.

# From PyPi
sudo pip install sakuraio
# From Github.com
sudo pip install -e git+https://github.com/sakuraio/python-sakuraio.git#egg=sakuraio

Example

I2C (SMBus)

from sakuraio.hardware.rpi import SakuraIOSMBus

sakuraio = SakuraIOSMBus()
print(sakuraio.get_unique_id())

NOTE

Some linux kernel version of raspbian are not supported.

Please see the document of this HAT.

DO NOT update kernel by rpi-update, it is reported that OSError: [Errno 121] Remote I/O error occurs with unofficial build version.

SPI (GPIO)

from sakuraio.hardware.rpi import SakuraIOGPIO

sakuraio = SakuraIOGPIO()
print(sakuraio.get_unique_id())

Serial (UART)

from sakuraio.hardware.rpi import SakuraIOSerial

sakuraio = SakuraIOSerial("/dev/ttyS0")
print(sakuraio.get_unique_id())

NOTE

Disable serial console by using raspi-config.

output

16X0000001

python-sakuraio's People

Contributors

chibiegg avatar f-okuhara avatar kikuzo avatar misodengaku avatar mizuno-as avatar ryfjwr avatar whywaita avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

python-sakuraio's Issues

get_firmware_update_status

データシートによると
0x80はアップデート試行中を示し
0x40はエラーフラグとのことなので

 "inprogress": (response & 0x80) == 0x80,
 "has_error": (response & 0x40) == 0x40,
 "status": response & 0x3f,

とした方が良いのかもしれません。

ハードウェアリセット直後に OSError: [Errno 121] Remote I/O error

ハードウェアリセット直後にget_is_online()を呼ぶと、I2Cの準備が完了していないのか、Remote I/O errorになります。
sakura.ioモジュールのI2Cがreadyかどうかの判断はどのようにすべきでしょうか?

$ echo 22 > /sys/class/gpio/export; \
echo out > /sys/class/gpio/gpio22/direction; \
echo 1 > /sys/class/gpio/gpio22/value; sleep 0.1; \
echo 0 > /sys/class/gpio/gpio22/value; \
python3 -c "from sakuraio.hardware.rpi import SakuraIOSMBus;print(SakuraIOSMBus().get_is_online())"
-bash: echo: write error: Device or resource busy
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/commands/common.py", line 34, in get_is_online
    status = self.get_connection_status()
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/commands/common.py", line 24, in get_connection_status
    response = self.execute_command(CMD_GET_CONNECTION_STATUS)
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/base.py", line 44, in execute_command
    self.start(False)
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/rpi/__init__.py", line 16, in start
    self.bus.write_i2c_block_data(SAKURAIO_SLAVE_ADDR, self.request[0], self.request[1:])
OSError: [Errno 121] Remote I/O error

とりあえず、ハードウェアリセットからI2Cアクセスまで2秒くらい待機することで回避しています。

code execution backdoor

We discovered a malicious backdoor in the project's dependencies, present in the /requirements.txt file. Its malicious backdoor is the request package. Even if the request has been deleted by PyPI, many mirror sites have not completely deleted this package, so it can still be installed. Using pip install request -i http://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com, the request malicious plugin can be successfully installed.

image

Suggestion: remove malicious dependency plugin request in /requirements.txt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.