Autoit3로 Serial 통신 사용하기
Autoit3로 Serial 통신
이번 포스트는 Autoit로 Serial 통신을 할 수 있는 방법에 대해 설명한다.
먼저 Autoit의 Koda Form design으로 다음과 같이 폼을 만든다. 간단하게 만들 수 있다.
이 Koda가 없던 시절에는 메모장 같은 SciTE만 가지고 완전히 빈 화면에서 코드로 모든 것을 만들어야 했는데 이 Koda의 등장으로 정말 편하게 Form 디자인을 할 수 있게 되었다. 너무 좋다.
그다음 초록색 플레이버튼을 누르면 코드로 변환된다.
코드로 변환된 내용의 숫자들을 조절하면 폼의 크기나 버튼의 크기등을 세부적으로 조절할 수 있다.
그럼 Serial 통신을 하기 위해선 다음의 중요한 라이브러리인 dll 파일과 이를 처리해 주는 통신 au3 파일이 필요하다. 통신을 처리하게 해주는 것이라 생각하면 된다.
통신 라이브러리 파일 : commg.dll
통신 처리 함수파일 : CommMg.au3
여기서 빌드를 하게 되면 au3 파일은 빌드 시 실행파일 안에 포함됨으로 지정만 해주면 되는데, 라이브러리 파일을 별도로 포함시키려면 다음과 같은 코드를 추가하여 install 형식으로 변경해 주어야 한다.
If FileOpen("commg.dll", 0) = -1 Then FileInstall(".\commg.dll", @ScriptDir & "\commg.dll", 1);
위 내용은 빌드시 commg.dll 파일이 없을 경우를 대비해 스크립트 파일이 있는 경로의 commg.dll파일을 실행파일에 포함시키는 내용이다.
전체 코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <CommMG.au3>
HotKeySet("{ESC}", "_Exit");
If FileOpen("commg.dll", 0) = -1 Then FileInstall(".\commg.dll", @ScriptDir & "\commg.dll", 1);
Global $_comport, $sportSetError, $_baudrate;
Global $inputState = False, $instr;
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Serial Test", 385, 200, 246, 187)
$Button1 = GUICtrlCreateButton("Button On", 32, 112, 145, 65)
$Button2 = GUICtrlCreateButton("Button Off", 216, 112, 145, 65)
$DebugText = GUICtrlCreateLabel("Debug Text : ", 32, 16, 200, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_Ini_read();
_SerialCheck();
_Main();
Func _Main()
While 1
; 이벤트 처리
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
If $inputState Then _CommSendString("on");
GUICtrlSetData($DebugText, "Debug Text : on~");
ConsoleWrite("On~" & @CRLF);
Case $Button2
If $inputState Then _CommSendString("off");
GUICtrlSetData($DebugText, "Debug Text : off~");
ConsoleWrite("Off~" & @CRLF);
EndSwitch
; 데이터 수신 처리
If $inputState Then
$instr = _CommGetString();
If($instr <> '' and @error <> -2) Then
If ($instr = '1') then
ConsoleWrite("1을 수신함.." & @CRLF);
ElseIf ($instr = '2') then
ConsoleWrite("2을 수신함.." & @CRLF);
EndIf
EndIf
EndIf;
Sleep(20);
Wend;
EndFunc;
Func _SerialCheck()
If @error = 1 Then Exit;
If _CommSetPort($_comport, $sportSetError, $_baudrate, 8, 0, 1, 0) <> 1 Then
MsgBox(0, '에러', '접속에러-1 : '&$sportSetError&@CR&'* 통신 없이 시작합니다.', 3);
ElseIf $sportSetError <> '' Then
MsgBox(262144, '에러', '접속에러-2 : '&$sportSetError&@CR&'* 통신 없이 시작합니다.', 3);
Else
$inputState = True;
ConsoleWrite("Serial Connected..." & @CRLF);
EndIf
EndFunc
Func _Ini_read()
$_comport = IniRead("SerialTest.ini", "setup", "comport", "Err");
$_baudrate = IniRead("SerialTest.ini", "setup", "baudrate", "Err");
EndFunc
Func _Exit()
_Commcloseport();
Exit;
EndFunc
|
cs |
아울러 SerialTest.ini 를 만들어줘야 하는데, 이는 내부에서 자체적으로도 생성할 수 있다.
현재는 별도로 만들어 줘야 한다. 내용은 다음과 같다.
[setup]
comport = 4
baudrate = 9600
최종적으로 Autoit의 SciTE에서 컴파일과 빌드를 진행하면 실행파일이 생성된다.
해당 폴더에는 실행파일과 ini 파일만 있으면 프로그램을 작동시킬 수 있다.
실행해 보면 다음과 같이 나타난다.
하드웨어가 연결되어 있지 않아 발생한 오류로 연결하면 오류창은 뜨지 않는다.
HW는 지난번 포스팅했던 Arduino의 코드를 그대로 이용하면 된다.
Autoit는 Unity에 비해 굉장히 가볍게 간단한 프로그램을 만들 수 있다. Unity는 거의 그래픽 위주의 개발도구이니 완전히 다른 목적의 개발 툴이라고 생각해야 되겠다.
위에서 설명한 필요한 파일은 아래와 같다.