Arduinoでサーボを動かす(Pythonとのシリアル通信)

環境

Windows10 Pro
Python 3.7.7
Arduino IDE 1.8.12
Arduino Uno R3

バージョン確認(pip freeze)

インストールするのは「pyserial」のみ(pipで可能)

pyserial==3.4

Pythonコード

import serial, time

print("Open Port")
ser =serial.Serial("COM3", 9600)
time.sleep(1.5)

angle = 90

while(True):

    a = input('角度入力:')

    if(a == 'q'):
        break

    try:
        angle = int(a)
        angle = 179 if angle > 179 else angle
        angle = 0 if angle < 0 else angle
    except:
        None

    send_data = angle.to_bytes(1, 'big')
    ser.write(send_data)

print("Close Port")
ser.close()

Arduinoスケッチ

#include <Servo.h>

Servo myServo;
int var = 90;

void setup() {
  myServo.attach(9);
  myServo.write(var);
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()>0){
    var = Serial.read();
    myServo.write(var);
    delay(100);
  }
}

ポイント

Arduinoに送るデータが0~179までの数字なので、文字列を送信するのではなく1byteのデータに変換して送信した。
受信するArduino側では「Serial.read()」で読み込むだけでOK。