# pyuart
## 概要
UARTデバッグをpythonスクリプトで行うためのモジュールです。これまで
Tera-termやArduino IDEコンソールなどでライトウェイトにUARTデバッグをし
ていた人が、リモートデバッグ環境を構築したり、並列UART高負荷耐久テスト
等々、もう少し突っ込んだUARTデバッグをしたい時に効果を発揮するはずです。
## 動作環境
動作確認済みの実機環境
- Python 3.10.6
- PC
- CPU: Intel Core i7-12700
- OS: Ubuntu 22.04.2 LTS
- Raspberry Pi 4 Model B Rev 1.5
- CPU: BCM2835
- OS: Ubuntu 22.04.2 LTS
- USB-TTL converter
- QinHeng Electronics CH340 serial converter
- Future Technology Devices International, Ltd FT232 Serial (UART) IC
## 前提
```1 Byte == 1 Octet == 8 bit```
## Installation
```
pip install pyuart
sudo chmod 666 /dev/ttyUSB0
```
上記例のデバイスファイル名 ```/dev/ttyUSB0```は環境依存です。ご自身の環境に対応したデバイスファイル名をご指定ください。
## サンプル
```pyuart```モジュールの操作方法のサンプルコードを以下にメモしておきます。
このサンプルを見るだけで動かすことができるはずですが、詳細な説明は後日記載する予定です。
### 例1: 1 octetづつTx(送信)したい場合
```:test_tx.py
from pyuart import uart
u0 = uart(dev='/dev/ttyUSB0', baudrate = 115200, timeout = 15)
u0.open()
u0.tx(1)
u0.tx(2)
u0.tx(77)
u0.close()
```
### 例2: 1 octetづつRx(受信)したい場合
```:test_rx.py
from pyuart import uart
u0 = uart(dev='/dev/ttyS0', baudrate = 115200, timeout = 240)
u0.open()
for data in u0.rx():
print (data)
u0.close()
```
※: rx()メソッドはジェネレータです。
### 例3: ファイルをTx(送信)したい場合
```:sample.tx.file.py
from pyuart import uart
u0 = uart(dev='/dev/ttyUSB0', baudrate = 115200, timeout = 15)
u0.open()
u0.tx_file(filename = '/tmp/file.bin')
u0.close()
```
### 例4: ファイルをRx(受信)したい場合
```sample.rx.file.py
from pyuart import uart
u0 = uart(dev='/dev/ttyUSB0', baudrate = 115200, timeout = 15)
u0.open()
u0.rx_file(filename = './recv.bin', n_byte = 1048576)
u0.close()
```
**ファイルRxでの注意事項**
UARTを使ったデータ通信では受け取るファイルのサイズは上位プロトコル層で定義しておかなければファイルサイズを事前に知ることができません。
そのため上位プロトコルを定義していない本モジュールでは、ファイルのRx(受信)実行時に受信ファイルサイズをn_byteで指定する必要があります。
上記のサンプル例では ```n_byte = 1048576```を指定しています。これは1MB(1048576 Byte)のファイルを受信することを指定しています。
(なお、この文章では```1 octet = 1 byte```を仮定しています)
### 例5: 並列Txの実行 (MPI利用)
```mpi.tx.py
#!/usr/bin/env python3
from mpi4py import MPI
from pyuart import uart
comm = MPI.COMM_WORLD
proc_id = comm.Get_rank()
nproc = comm.Get_size()
hostname = MPI.Get_processor_name()
devfile = "/dev/ttyUSB%d" % proc_id
print(devfile, flush=True)
u0 = uart(dev=devfile, baudrate = 115200, timeout = 15)
u0.open()
u0.tx(123)
u0.close()
```
並列実行は```make mpirun```や以下のようにmpirunコマンドを使います。
```
mpirun -np 4 --oversubscribe mpi.tx.py
```
## 注意
Ubuntu 22ではCH341チップを使ったUSB-serialコンバーターはそのままでは動きません。
```
sudo apt remove brltty
```
にてbrlttyを削除してから使用しましょう。
[参考|https://stackoverflow.com/questions/70123431/why-would-ch341-uart-is-disconnected-from-ttyusb]
```
For Ubuntu 22.04 the simplest solution is to remove the package brltty
via sudo apt remove brltty, since its unnecessary unless you're using
a braille e-reader, however unsure if it could cause errors later on.
```
## 参考
### ubuntu22 PCでの/dev/serialの一例
```
arkedge@ci01:~/git/pyuart$ ls -l /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
lrwxrwxrwx 1 root root 13 4月 30 14:58 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 -> ../../ttyUSB0
```
Raw data
{
"_id": null,
"home_page": "https://github.com/arkedge/pyuart",
"name": "pyuart",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "pyuart uart",
"author": "Tsuyoshi Hamada",
"author_email": "hamada@arkedgespace.com",
"download_url": "",
"platform": null,
"description": "# pyuart\n\n## \u6982\u8981\n\nUART\u30c7\u30d0\u30c3\u30b0\u3092python\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u884c\u3046\u305f\u3081\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002\u3053\u308c\u307e\u3067\nTera-term\u3084Arduino IDE\u30b3\u30f3\u30bd\u30fc\u30eb\u306a\u3069\u3067\u30e9\u30a4\u30c8\u30a6\u30a7\u30a4\u30c8\u306bUART\u30c7\u30d0\u30c3\u30b0\u3092\u3057\n\u3066\u3044\u305f\u4eba\u304c\u3001\u30ea\u30e2\u30fc\u30c8\u30c7\u30d0\u30c3\u30b0\u74b0\u5883\u3092\u69cb\u7bc9\u3057\u305f\u308a\u3001\u4e26\u5217UART\u9ad8\u8ca0\u8377\u8010\u4e45\u30c6\u30b9\u30c8\n\u7b49\u3005\u3001\u3082\u3046\u5c11\u3057\u7a81\u3063\u8fbc\u3093\u3060UART\u30c7\u30d0\u30c3\u30b0\u3092\u3057\u305f\u3044\u6642\u306b\u52b9\u679c\u3092\u767a\u63ee\u3059\u308b\u306f\u305a\u3067\u3059\u3002\n\n## \u52d5\u4f5c\u74b0\u5883\n\n\u52d5\u4f5c\u78ba\u8a8d\u6e08\u307f\u306e\u5b9f\u6a5f\u74b0\u5883\n- Python 3.10.6\n- PC\n - CPU: Intel Core i7-12700\n - OS: Ubuntu 22.04.2 LTS\n- Raspberry Pi 4 Model B Rev 1.5\n - CPU: BCM2835\n - OS: Ubuntu 22.04.2 LTS\n- USB-TTL converter\n - QinHeng Electronics CH340 serial converter\n - Future Technology Devices International, Ltd FT232 Serial (UART) IC\n\n## \u524d\u63d0\n\n```1 Byte == 1 Octet == 8 bit```\n\n## Installation\n\n```\npip install pyuart\nsudo chmod 666 /dev/ttyUSB0\n```\n\n\u4e0a\u8a18\u4f8b\u306e\u30c7\u30d0\u30a4\u30b9\u30d5\u30a1\u30a4\u30eb\u540d ```/dev/ttyUSB0```\u306f\u74b0\u5883\u4f9d\u5b58\u3067\u3059\u3002\u3054\u81ea\u8eab\u306e\u74b0\u5883\u306b\u5bfe\u5fdc\u3057\u305f\u30c7\u30d0\u30a4\u30b9\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u3054\u6307\u5b9a\u304f\u3060\u3055\u3044\u3002\n\n\n## \u30b5\u30f3\u30d7\u30eb\n\n```pyuart```\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u64cd\u4f5c\u65b9\u6cd5\u306e\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3092\u4ee5\u4e0b\u306b\u30e1\u30e2\u3057\u3066\u304a\u304d\u307e\u3059\u3002\n\u3053\u306e\u30b5\u30f3\u30d7\u30eb\u3092\u898b\u308b\u3060\u3051\u3067\u52d5\u304b\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u304c\u3001\u8a73\u7d30\u306a\u8aac\u660e\u306f\u5f8c\u65e5\u8a18\u8f09\u3059\u308b\u4e88\u5b9a\u3067\u3059\u3002\n\n\n### \u4f8b1: 1 octet\u3065\u3064Tx(\u9001\u4fe1)\u3057\u305f\u3044\u5834\u5408\n\n```:test_tx.py\nfrom pyuart import uart\n\nu0 = uart(dev='/dev/ttyUSB0', baudrate = 115200, timeout = 15)\nu0.open()\n\nu0.tx(1)\nu0.tx(2)\nu0.tx(77)\n\nu0.close()\n\n```\n\n### \u4f8b2: 1 octet\u3065\u3064Rx(\u53d7\u4fe1)\u3057\u305f\u3044\u5834\u5408\n\n```:test_rx.py\nfrom pyuart import uart\n\nu0 = uart(dev='/dev/ttyS0', baudrate = 115200, timeout = 240)\nu0.open()\n\nfor data in u0.rx():\n print (data)\n\nu0.close()\n\n```\n\n\u203b: rx()\u30e1\u30bd\u30c3\u30c9\u306f\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3067\u3059\u3002\n\n### \u4f8b3: \u30d5\u30a1\u30a4\u30eb\u3092Tx(\u9001\u4fe1)\u3057\u305f\u3044\u5834\u5408\n\n```:sample.tx.file.py\nfrom pyuart import uart\n\nu0 = uart(dev='/dev/ttyUSB0', baudrate = 115200, timeout = 15)\nu0.open()\n\nu0.tx_file(filename = '/tmp/file.bin')\n\nu0.close()\n\n```\n\n### \u4f8b4: \u30d5\u30a1\u30a4\u30eb\u3092Rx(\u53d7\u4fe1)\u3057\u305f\u3044\u5834\u5408\n\n```sample.rx.file.py\nfrom pyuart import uart\n\nu0 = uart(dev='/dev/ttyUSB0', baudrate = 115200, timeout = 15)\nu0.open()\n\nu0.rx_file(filename = './recv.bin', n_byte = 1048576)\n\nu0.close()\n\n```\n\n**\u30d5\u30a1\u30a4\u30ebRx\u3067\u306e\u6ce8\u610f\u4e8b\u9805**\n\nUART\u3092\u4f7f\u3063\u305f\u30c7\u30fc\u30bf\u901a\u4fe1\u3067\u306f\u53d7\u3051\u53d6\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30a4\u30ba\u306f\u4e0a\u4f4d\u30d7\u30ed\u30c8\u30b3\u30eb\u5c64\u3067\u5b9a\u7fa9\u3057\u3066\u304a\u304b\u306a\u3051\u308c\u3070\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u3092\u4e8b\u524d\u306b\u77e5\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\n\u305d\u306e\u305f\u3081\u4e0a\u4f4d\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u306a\u3044\u672c\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u306eRx(\u53d7\u4fe1)\u5b9f\u884c\u6642\u306b\u53d7\u4fe1\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u3092n_byte\u3067\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\u4e0a\u8a18\u306e\u30b5\u30f3\u30d7\u30eb\u4f8b\u3067\u306f ```n_byte = 1048576```\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f1MB(1048576 Byte)\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u53d7\u4fe1\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\n\n(\u306a\u304a\u3001\u3053\u306e\u6587\u7ae0\u3067\u306f```1 octet = 1 byte```\u3092\u4eee\u5b9a\u3057\u3066\u3044\u307e\u3059)\n\n\n\n### \u4f8b5: \u4e26\u5217Tx\u306e\u5b9f\u884c (MPI\u5229\u7528)\n\n```mpi.tx.py\n#!/usr/bin/env python3\nfrom mpi4py import MPI\nfrom pyuart import uart\n\ncomm = MPI.COMM_WORLD\nproc_id = comm.Get_rank()\nnproc = comm.Get_size()\nhostname = MPI.Get_processor_name()\n\ndevfile = \"/dev/ttyUSB%d\" % proc_id\nprint(devfile, flush=True)\n\nu0 = uart(dev=devfile, baudrate = 115200, timeout = 15)\nu0.open()\nu0.tx(123)\n\nu0.close()\n\n```\n\n\u4e26\u5217\u5b9f\u884c\u306f```make mpirun```\u3084\u4ee5\u4e0b\u306e\u3088\u3046\u306bmpirun\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3044\u307e\u3059\u3002\n```\n mpirun -np 4 --oversubscribe mpi.tx.py\n```\n\n\n\n\n## \u6ce8\u610f\n\nUbuntu 22\u3067\u306fCH341\u30c1\u30c3\u30d7\u3092\u4f7f\u3063\u305fUSB-serial\u30b3\u30f3\u30d0\u30fc\u30bf\u30fc\u306f\u305d\u306e\u307e\u307e\u3067\u306f\u52d5\u304d\u307e\u305b\u3093\u3002\n```\nsudo apt remove brltty\n```\n\u306b\u3066brltty\u3092\u524a\u9664\u3057\u3066\u304b\u3089\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002\n\n\n[\u53c2\u8003|https://stackoverflow.com/questions/70123431/why-would-ch341-uart-is-disconnected-from-ttyusb]\n\n```\nFor Ubuntu 22.04 the simplest solution is to remove the package brltty\nvia sudo apt remove brltty, since its unnecessary unless you're using\na braille e-reader, however unsure if it could cause errors later on.\n```\n\n## \u53c2\u8003\n\n### ubuntu22 PC\u3067\u306e/dev/serial\u306e\u4e00\u4f8b\n\n```\narkedge@ci01:~/git/pyuart$ ls -l /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0\nlrwxrwxrwx 1 root root 13 4\u6708 30 14:58 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 -> ../../ttyUSB0\n```\n\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "a simple UART library for python3",
"version": "0.1.1",
"project_urls": {
"Homepage": "https://github.com/arkedge/pyuart"
},
"split_keywords": [
"pyuart",
"uart"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d35b26e87c619c36ba0d95227025edcf2f819e3ca93b56839467cdddf905ec9c",
"md5": "0b6d6b7c64b798de44ead93a4b389322",
"sha256": "aabde62b49928afd7c3868c58dade866e210a6f70edea450ff868e5d12f6250c"
},
"downloads": -1,
"filename": "pyuart-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0b6d6b7c64b798de44ead93a4b389322",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 5015,
"upload_time": "2023-06-06T09:14:23",
"upload_time_iso_8601": "2023-06-06T09:14:23.632697Z",
"url": "https://files.pythonhosted.org/packages/d3/5b/26e87c619c36ba0d95227025edcf2f819e3ca93b56839467cdddf905ec9c/pyuart-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-06 09:14:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "arkedge",
"github_project": "pyuart",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pyuart"
}