質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

シリアル通信速度を変更したい(Python,RaspberryPi,IM920)

KKK
KKK

総合スコア10

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0評価

0クリップ

429閲覧

投稿2022/01/21 06:30

編集2022/01/23 14:23

前提・実現したいこと

前提
Raspberry Pi用IM無線HATを使用して、IM920sLとRaspberryPi4B間のI2C通信を行っています
また、IM920sL(PC側)とIM920sL(RaspberryPi側)間でシリアル通信を行っています
言語はPythonで、付属のサンプルコードを使用しています。
1つ目がライブラリ、2つ目が送受信のサンプルプログラムです
実現したいこと
シリアル通信速度がデフォルトでは19200bpsなので、115200bpsに変更したいと考えています
シリアル通信速度の変更方法についてご教授いただけると幸いです(解決のヒントになりそうなものなどを頂けるだけでも非常に助かります)

該当のソースコード

Python

# -*- coding: utf-8 -*- """ im_wireless.py : IM920(c/s)をHATにて使うライブラリ (C)2019 interplan Corp. Ver. 0.010 2019/07/08 test version 本ソフトウェアは無保証です。 本ソフトウェアの不具合により損害が発生した場合でも補償は致しません。 改変・流用はご自由にどうぞ。 """ import time import smbus import RPi.GPIO as GPIO # ピンアサイン (BCM) IRQ_PIN = 17 # PIC I2C割り込みピン XMIT_PIN = 18 # 送信中出力ピン SLEEP_PIN = 22 # スリープピン RESET_PIN = 23 # リセットピン BUSY_PIN = 27 # BUSYピン RXBUF_MAXSIZE = 0x400 class IMWireClass: def __init__(self, sladr): # 初期化 self.rxbuf_head = 0 # i2c受信バッファ self.rxbuf_tail = 0 self.rxbuf_num = 0 self.rxbuf_maxsize = RXBUF_MAXSIZE self.i2c_rxbuf = [0] * self.rxbuf_maxsize #self.i2c_rxbuf = np.zeros(self.rxbuf_maxsize, dtype='U250') self.slave_adr = sladr GPIO.setmode(GPIO.BCM) # GPIO設定 GPIO.setup(RESET_PIN, GPIO.OUT) GPIO.setup(XMIT_PIN, GPIO.IN) GPIO.setup(SLEEP_PIN, GPIO.IN) GPIO.setup(IRQ_PIN, GPIO.IN) GPIO.setup(BUSY_PIN, GPIO.IN) GPIO.output(RESET_PIN, 1) self.i2c = smbus.SMBus(1) # i2cの準備 [self.i2c.read_byte(self.slave_adr) for i in range(300)] # 変換ICのバッファ初期化 # GPIO割り込み設定 必要に応じてXMITやSLEEPも使用 GPIO.add_event_detect(IRQ_PIN, GPIO.RISING, callback=self.irq_intrpt, bouncetime=5) #GPIO.add_event_detect(XMIT_PIN, GPIO.RISING, callback=self.xmit_intrpt, bouncetime=1) #GPIO.add_event_detect(SLEEP_PIN, GPIO.RISING, callback=self.slp_intrpt, bouncetime=1) self.Reboot_920() def remove_interrupt(self, port): # GPIO割り込み削除 GPIO.remove_event_detect(port) def Reboot_920(self): # 再起動 GPIO.output(RESET_PIN, 0) time.sleep(500e-3) GPIO.output(RESET_PIN, 1) time.sleep(500e-3) def Write_920(self, cmd): # Moduleにコマンドを入力 busy_sts = 0 if not '?' == cmd[0] : # コマンドの先頭がWake-up用トリガならModuleはSleep中と想定 busy_sts = self.busy_status() while busy_sts: time.sleep(1e-3) busy_sts = self.busy_status() #print('>'+cmd) # コマンドを表示 self.i2c.write_i2c_block_data(self.slave_adr, 0, [ord(i) for i in cmd]) def Read_920(self): # 受信データを返す buf = '' if self.rxbuf_num >= 1: # 受信データ(レスポンス含む)があれば buf = self.i2c_rxbuf[self.rxbuf_head] self.rxbuf_head += 1 self.rxbuf_head &= self.rxbuf_maxsize - 1 self.rxbuf_num -= 1 return buf def irq_intrpt(self, gpio): # I2C割り込み if gpio == IRQ_PIN: i2c_rxlen = 0 while i2c_rxlen == 0: # 受信データ長を取得 i2c_rxlen = self.i2c.read_byte(self.slave_adr) if i2c_rxlen >= 1: # データ保存処理 buf = '' while i2c_rxlen >= 1: buf += chr(self.i2c.read_byte(self.slave_adr)) i2c_rxlen -= 1 self.i2c_rxbuf[self.rxbuf_tail] = buf self.rxbuf_tail += 1 # バッファの更新処理 self.rxbuf_tail &= self.rxbuf_maxsize - 1 self.rxbuf_num += 1 if self.rxbuf_num > self.rxbuf_maxsize: # バッファを上書きしたら self.rxbuf_num = self.rxbuf_maxsize self.rxbuf_head += 1 # headを更新 self.rxbuf_head &= self.rxbuf_maxsize - 1 def slp_intrpt(self, gpio): # SLEEP slp_sts = 1 def xmit_intrpt(self, gpio): # ルート探索,ACK返送,中継でもここに来る xmit_sts = 1 def busy_status(self): # busyのHIGH/LOWを返す return GPIO.input(BUSY_PIN) def gpio_clean(self): # プログラム終了時に必ず使用 GPIO.cleanup()

Python

# -*- coding: utf-8 -*- """ raspihat_TXsample001.py : im_wireless.pyを使用し、受信データを出力かつテキスト保存 子機へACKを返す Crlt+Cでプログラムを終了する (C)2019 interplan Corp. Ver. 0.010 2019/07/08 test version 本ソフトウェアは無保証です。 本ソフトウェアの不具合により損害が発生した場合でも補償は致しません。 改変・流用はご自由にどうぞ。 """ import im_wireless as imw # datalog FILE_NAME = '/../../media/pi/USB/Savelog.txt' # i2c SLAVE_ADR = 0x30 # hatのI2Cアドレスは0x30 ~ 0x33 # Main if __name__ == '__main__': iwc = imw.IMWireClass(SLAVE_ADR) # classの初期化 try: while True: rx_data = iwc.Read_920() # 受信処理 if len(rx_data) >= 1: # 受信してない時は''が返り値 (長さ0) print(rx_data, end='') # 受信データを画面表示 with open(FILE_NAME, 'a') as f: # ファイルを開く f.write(rx_data) # 1dataをファイル末尾に書き込み if len(rx_data) >= 11: # 11は受信データのノード番号+RSSI等の長さ if (rx_data[2]==',' and rx_data[7]==',' and rx_data[10]==':'): rxid = rx_data[3:7] # 子機(送信機)のIDを抽出 txbuf = 'TXDA' + rxid # コマンドにCR+LFはいらない print('>', txbuf) iwc.Write_920(txbuf) # コマンドを送信 except KeyboardInterrupt: # Ctrl + C End iwc.gpio_clean() print ('END')

試したこと

IM920-USBを使用してteratermから設定を変更してみましたが、
プログラムを実行すると設定が初期化されてしまいました

 

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai

2022/01/21 06:38

コードを見るに、シリアル通信じゃなくてI2C通信のようですが
KKK

2022/01/21 07:18

確かにI2C通信の方が適切ですね、修正します ありがとうございます

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。