python3系でラズパイとarduino系マイコンのシリアル通信Lチカ編

PC関係

python3でraspberry pi3 B+とQinHeng Electronics HL-340のシリアル通信でLチカまでの備忘録。タイトルがarduino系マイコンになってるのは、最近まで貰い物のHL-340をarduinoUNOと勘違いして使ってたから。まったく気づかんかった。UNOってデカく書いてあるもん。

HL-340はarduinoと同じようにsketchでイケマツ。↓参考にさせていただきました。
RaspberryPiとArduinoを連携する【USBシリアル編】

#include 
#define maxLength 64
String inString = String(maxLength);

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13,HIGH);
  inString = "";
}

void loop() {
  if (Serial.available() > 0){
    char inChar = Serial.read();
    if (inString.length() < maxLength) {
      inString.concat(String(inChar));
      if(inChar =='\n') {
        if(inString.startsWith("ON")) {
          Serial.println("<---HI--->");
          digitalWrite(13, HIGH);
        } else if (inString.startsWith("OFF")){
          Serial.println("<--LOW-->");
          digitalWrite(13,LOW);
        }
        inString = "";
      }
      Serial.println(inString);
    }
    else {
      Serial.println("Maximum numberof characters.");
    }
  }
}

あんまり理解できてないのでおいおい修正していくとして、これで書き込めばとりあえずLチカできます。

ラズパイとHL-340はUSBケーブルで接続。

ラズパイから信号を送るとチカチカできます。pySerialを利用しますが、python3系だと直接文字列を送れないようで、バイトコードにしてね的なエラーが出て躓きました。文字列の入った変数をencode()するといいようで、

$ python3
Python 3.7.3 (default, Apr  3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> s = serial.Serial("/dev/ttyUSB0",9600)
>>> off = "OFF\n"
>>> s.write(off.encode())
4
>>> on = "ON\n"
>>> s.write(on.encode())
3

これでチカチカします。

ここまでできてしまえば、python側をプログラムにしてサーボモータを動かすこともできますな。

コメント