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側をプログラムにしてサーボモータを動かすこともできますな。
コメント