6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python3でGUIを作ってArduinoと連携

Last updated at Posted at 2015-10-11

GCODEを送る簡易的なGUI

自作工作機械を作る課程で、GUIを使ってArduinoを操作しようと試みました。GCODEを送る簡易的なGUIの製作を目指してますが、ひとまず通信するところのメモ。
「ON」、「OFF」と書かれたボタンを押すとArduinoの附属LED(13番ピン)のON, OFFができる。

概要

  • PythonのGUIは標準のTkInterを使用
  • モジュールとしてpySerialを入れる
  • Pythonのバージョンは3.5.0
  • ArduinoUnoを使用

ハマった箇所

シリアル通信でPythonのGUIからArduinoへ文字を送るとき、そのまま送るとTypeError: an integer is requiredというエラーが発生。調べていると文字のエンコードが問題と判明。文字はsomechar.encode('utf-8')のようにUTF-8を指定して送るとエラーが出なくなり、正常に動くようになりました。

Python

from tkinter import *
import serial

class App:
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        # アプリを終了
        self.quit = Button(frame,
                text="QUIT", fg="red",
                command=frame.quit)
        self.quit.pack(side=RIGHT)

        # これから実装予定。今はただ文字をプリントするだけ
        self.init = Button(frame,
                text='INIT',
                command=self.init)
        self.init.pack(side=LEFT)

        # LED ON
        self.on = Button(frame,
                text='ON',
                command=Ser.on)
        self.on.pack(side=LEFT)

        # LED OFF
        self.off = Button(frame,
                text='OFF',
                command=Ser.off)
        self.off.pack(side=LEFT)

    def init(self):
        print ('initialize printer')

class Ser:
    def on():
        flag = 's'
        arduino.write(flag.encode('utf-8'))
    def off():
        flag = 'd'
        arduino.write(flag.encode('utf-8'))
    def init():
        flag = 'a'

root = Tk()
# 通信を開始
arduino = serial.Serial("/dev/tty.usbmodem1411", 9600)
# 画面の大きさを指定
root.geometry('400x300')
app = App(root)
root.mainloop()
# 通信を終了
arduino.close()

Arduino

void setup()
{
  pinMode(13,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  int input;

  if(Serial.available()>0){
    input = Serial.read();
    switch(input){
      case 's':
        digitalWrite(13,HIGH);
        break;
      case 'd':
        digitalWrite(13,LOW);
        break;
    }
  } else {
  }
}

自分の環境(Mac OS:Yosemite)では正常に動作しましたが、他の環境で動作するかは分かりません。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?