はじめに
近藤科学のKRSシリーズをRaspberry Piから動かそうとして四苦八苦したのでその備忘録です.
使ったもの
- RaspberryPi3ModelB+
- 近藤科学 KRS-6003R2HV
- ICS変換基板
- ブレッドボードや抵抗,電源,ジャンパ線などなど
シリアル通信を行うために
今回GPIOからシリアル通信を行うのですが,Raspberry Pi3では本体のUARTがすでにBluetoothで利用されているためこれを設定し直す必要があります.今回Bluetoothを使う予定はないのでOFFにします.
プログラム
近藤科学の通信手順に沿って通信します.
EN_INをLにします) 通信する時信号が流れてないのを確認し、EN_INをHにします。
↓
マイコンのTXからコマンドを送信します。
↓
TXからコマンドを送信終了後すぐにEN_INをLにします。 (ICS機器から信号が送られてくるのですぐ受信に切り替えます)
↓
マイコンのRXよりデータを受信します。
以下のプログラムではシリアル接続後に入力を受け付けてその値にモータを回す物になってます.
import serial
import sys
import time
import pigpio
def main():
args = sys.argv
pi = pigpio.pi()
pi.set_mode(4,pigpio.OUTPUT)
con = serial.Serial('/dev/ttyAMA0', baudrate=115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_EVEN,stopbits=serial.STOPBITS_ONE,timeout=1,)
time.sleep(2)
while 1:
num = int(input("3500 ~ 11500 :"))
num2 = format(num,'014b')#プレフィクス無し14桁2進数に変換,この段階でstr
POSH = "0b" + num2[:7]#2進数のstrを分割
POSL = "0b" + num2[7:]
POSH = int(POSH,0)
POSL = int(POSL,0)
print("POSH : " + str(POSH))
print("POSL : " + str(POSL))
print(con.portstr)
pi.write(4,1)#HIGH
tx1 = 0x80
tx2 = POSH
tx3 = POSL
con.write(bytes([tx1]))
con.write(bytes([tx2]))
con.write(bytes([tx3]))
con.flush()
pi.write(4,0)#low
print(con.read())
if __name__ == '__main__':
main()
参考サイト