Skip to content
Home » 아두 이노 파이썬 | (홈오토메이션) 파이썬으로 아두이노제어 1편 Led On/Off 32 개의 정답

아두 이노 파이썬 | (홈오토메이션) 파이썬으로 아두이노제어 1편 Led On/Off 32 개의 정답

당신은 주제를 찾고 있습니까 “아두 이노 파이썬 – (홈오토메이션) 파이썬으로 아두이노제어 1편 LED ON/OFF“? 다음 카테고리의 웹사이트 https://kk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://kk.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 코딩아저씨TV 이(가) 작성한 기사에는 조회수 8,851회 및 좋아요 59개 개의 좋아요가 있습니다.

아두 이노 파이썬 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 (홈오토메이션) 파이썬으로 아두이노제어 1편 LED ON/OFF – 아두 이노 파이썬 주제에 대한 세부정보를 참조하세요

이번 영상에서는 홈오토메이션등 파이썬으로 생각한 대로 코딩을 할 수 있다는 것을 보여주는 영상으로 아두이노의 디지털 핀을 이용하여 신호를 내보내는 코딩을 학습합니다.

아두 이노 파이썬 주제에 대한 자세한 내용은 여기를 참조하세요.

[아두이노] 파이썬으로 제어하기 – 나의 개발 공부 일지

아두이노 기본적으로 아두이노는 시리얼 통신(UART)을 통해 제어하게 된다. 즉, 파이썬에서도 시리얼 통신을 하게 되면 아두이노를 충분히 제어할 수 …

+ 여기를 클릭

Source: return-value.tistory.com

Date Published: 4/29/2022

View: 818

[Python/Serial] 파이썬으로 아두이노 제어하기 – 코딩유치원

설치가 완료되었으면 오늘은 간단하게 아두이노-파이썬 시리얼 통신의 개념에 대해 이해할 수 있는 예제를 함께 살펴보겠습니다. <아두이노 코드>. 먼저 …

+ 자세한 내용은 여기를 클릭하십시오

Source: coding-kindergarten.tistory.com

Date Published: 7/7/2021

View: 8350

한 권으로 끝내는 아두이노와 파이썬으로 52개 작품 만들기 – 도서

기초 프로젝트와 융합 작품 그리고 인공지능 작품까지. 장문철, 박준원 저 앤써북 2022.03.30. 판매지수 173. 아두이노 파이썬 티처블머신 텐서플로우.

+ 여기에 표시

Source: book.interpark.com

Date Published: 4/12/2021

View: 8957

[Python] 파이썬 아두이노 연동법 ( feat. Serial 통신, Firmata )

서론 과외를 하다 Python을 가르치는 학생을 대상으로 아두이노를 진행하게 되었다. 아두이노는 C++ 언어를 기반으로 동작을 하므로 Python을 사용 …

+ 여기에 자세히 보기

Source: defs-program.tistory.com

Date Published: 6/8/2021

View: 1644

파이썬을 이용한 아두이노 시리얼 통신 – 지팡이의 블로그임

필수 준비물. 아두이노 보드 – 이 글에서는 우노보드를 사용합니다. arduino IDE – https://www.arduino.cc/en/donate/ …

+ 여기에 표시

Source: boa9448.tistory.com

Date Published: 11/11/2022

View: 3519

한 권으로 끝내는 아두이노와 파이썬으로 52개 작품 만들기

기초 프로젝트와 융합 작품 그리고 인공지능 작품까지 아두이노 파이썬 티처블머신 텐서플로우 | 아두이노는 오픈소스라는 막강한 무기로 하드웨어를 제어하여 작품을 …

+ 여기를 클릭

Source: www.kyobobook.co.kr

Date Published: 7/27/2022

View: 6300

주제와 관련된 이미지 아두 이노 파이썬

주제와 관련된 더 많은 사진을 참조하십시오 (홈오토메이션) 파이썬으로 아두이노제어 1편 LED ON/OFF. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

(홈오토메이션) 파이썬으로 아두이노제어 1편 LED ON/OFF
(홈오토메이션) 파이썬으로 아두이노제어 1편 LED ON/OFF

주제에 대한 기사 평가 아두 이노 파이썬

  • Author: 코딩아저씨TV
  • Views: 조회수 8,851회
  • Likes: 좋아요 59개
  • Date Published: 2019. 10. 7.
  • Video Url link: https://www.youtube.com/watch?v=DuvVQ6wGaT0

[아두이노] 파이썬으로 제어하기

아두이노

기본적으로 아두이노는 시리얼 통신(UART)을 통해 제어하게 된다. 즉, 파이썬에서도 시리얼 통신을 하게 되면 아두이노를 충분히 제어할 수 있다.

단, 하드웨어 코딩은 아두이노 IDE로 해야 한다.

흐름도

※ 기본적인 통신 방법은 시리얼 통신이다.

파이썬

시리얼 통신

파이썬으로 시리얼 통신을 하려면, 관련 모듈(pyserial)을 설치해야 한다.

PyPI 명령어는 ‘python -m pip install pyserial’이다.

파이썬에서 데이터 보내기

파이썬으로 사용자에게 입력받은 값을 토대로 13번 led핀을 on/off 해보자.

아두이노 IDE 코드

int input_data; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(13, OUTPUT); digitalWrite(13,LOW); } void loop() { // put your main code here, to run repeatedly: while(Serial.available()) { input_data = Serial.read(); } if(input_data == ‘1’) { digitalWrite(13, HIGH); // led_on } else if(input_data == ‘0’) { digitalWrite(13, LOW); // led_off } }

파이썬 코드

import serial import time # ‘COM3’ 부분에 환경에 맞는 포트 입력 ser = serial.Serial(‘COM3’, 9600) while True: if ser.readable(): val = input() if val == ‘1’: val = val.encode(‘utf-8’) ser.write(val) print(“LED TURNED ON”) time.sleep(0.5) elif val == ‘0’: val = val.encode(‘utf-8’) ser.write(val) print(“LED TURNED OFF”) time.sleep(0.5)

※ 바이트 단위로 인코딩해서 아두이노에 넘겨줘야 정상적으로 작동한다.

참고로 아두이노 내에서 data type 크기가 보통 사용하는 data type 보다 작다.

Arduino variable types

파이썬으로 데이터 입력받기

파이썬에 아두이노로부터 받은 값을 입력받아 출력해보자.

아두이노 IDE 코드

int output_data = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Serial.println(output_data++); delay(500); // delay 500ms }

파이썬 코드

import serial import time # ‘COM3’ 부분에 환경에 맞는 포트 입력 ser = serial.Serial(‘COM3’, 9600) while True: if ser.readable(): val = ser.readline() print(val.decode()[:len(val)-1]) # 넘어온 데이터 중 마지막 개행문자 제외

※ 데이터 받을 때도 디코딩 과정을 해줘야 정상적으로 출력된다.

[Python/Serial] 파이썬으로 아두이노 제어하기

반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

오늘은 아주 유명한 마이크로 컨트롤러 중의 하나인 아두이노를 파이썬으로 제어하는 법에 대해 알아보겠습니다.

저의 경우엔 컴퓨터의 GUI 프로그램으로 모터를 제어하기 위해서 파이썬과 아두이노를 결합하는 방법을 공부했습니다.

이 글을 보시는 대부분의 분들께서는 이미 아두이노를 아신다는 가정하에 글을 썼으니, 이 점 참고 부탁드립니다.

1. 개념도

파이썬이 어떻게 아두이노를 제어할 수 있는지 한 눈에 이해하기 쉽도록 개념도를 그려보았습니다.

기본적으로 아두이노는 UART 방식의 Serial 통신을 지원하며, 이 통신 방식으로 컴퓨터와 통신이 가능합니다.

여기서 말씀드리고 싶은 것은 아두이노를 파이썬이 직접 제어하는 것이 아니라, 아두이노는 컴퓨터와 통신을 하고, 파이썬은 pyserial 모듈을 이용해서 컴퓨터(정확히는 컴퓨터의 시리얼 통신 기능)를 제어 한다는 것입니다.

즉, 아두이노 IDE로 코딩을 해서 아두이노 보드에 시리얼 통신 기능이 포함된 코드를 컴파일 해주고, 별도로 파이썬으로 코딩을 해줘야 한다는 말입니다.

2. pySerial 사용법

우선 pySerial을 설치해보겠습니다. 무난하게 pip 명령어를 이용해서 설치해주세요.

# 터미널 창에서 pip로 설치 pip install pyserial # conda로도 설치 가능 conda install pyserial

설치가 완료되었으면 오늘은 간단하게 아두이노-파이썬 시리얼 통신의 개념에 대해 이해할 수 있는 예제를 함께 살펴보겠습니다.

<아두이노 코드>

먼저 아두이노 코드는 아래와 같이 작성하고, 아두이노에 ‘업로드’ 해주시면 됩니다.

시리얼 통신을 통해 아두이노로 명령이 전달될 때마다, 명령어를 파악해서 명령어의 종류에 따라 시리얼 통신으로 특정 메시지를 전송하는 코드입니다.

char cmd; void setup() { // 시리얼 통신 시작 (boadrate: 9600) Serial.begin(9600); } void loop() { // 컴퓨터로부터 시리얼 통신이 전송되면, 한줄씩 읽어와서 cmd 변수에 입력 if(Serial.available()){ cmd = Serial.read(); if(cmd==’a’){ Serial.println(“아두이노: a”); delay(100); } else if(cmd==’b’){ Serial.println(“아두이노: b”); delay(100); } } }

시리얼 모니터에서 아두이노 코드 작동 확인

<파이썬 코드>

파이썬 코드는 아래와 같이 작성해서 파이썬 파일(.py)로 실행시켜주시면 됩니다.

여기서 주의하실 점은 꼭 아두이노의 시리얼 모니터를 종료하고 실행시켜주셔야 한다는 것입니다.

이를 지키지 않을 시, 아래와 같은 에러를 출력합니다.

raise SerialException(“could not open port {!r}: {!r}”.format(self.portstr, ctypes.WinError()))

serial.serialutil.SerialException: could not open port ‘COM3’: PermissionError(13, ‘액세스가 거부되었습니다.’, None, 5)

import serial import time py_serial = serial.Serial( # Window port=’COM3′, # 보드 레이트 (통신 속도) baudrate=9600, ) while True: commend = input(‘아두이노에게 내릴 명령:’) py_serial.write(commend.encode()) time.sleep(0.1) if py_serial.readable(): # 들어온 값이 있으면 값을 한 줄 읽음 (BYTE 단위로 받은 상태) # BYTE 단위로 받은 response 모습 : b’\xec\x97\x86\xec\x9d\x8c\r

‘ response = py_serial.readline() # 디코딩 후, 출력 (가장 끝의

을 없애주기위해 슬라이싱 사용) print(response[:len(response)-1].decode())

코드를 나누어서 설명드리자면,

1) 먼저 아까 설치한 pyserial 모듈과 파이썬 내장 라이브러리에 있는 time 모듈을 불러와줍니다.

import serial import time

2) serial 모듈의 Serial 함수를 이용해서 port와 baudrate를 설정해줍니다.

py_serial = serial.Serial( # Window port=’COM3’, # 보드 레이트 (통신 속도) baudrate=9600, )

3) 아두이노에게 내릴 명령을 input 함수를 이용해서 입력해주고, 그 명령어를 시리얼 통신을 이용해서 보내주는 부분입니다.

아두이노와 같이 무한 루프(loop)를 돌기 위해서 while문을 사용한다는 점 꼭 기억해 주세요. 아니면 한 번 실행되고 그냥 프로그램이 종료됩니다.

while True: commend = input(‘아두이노에게 내릴 명령:’) py_serial.write(commend.encode()) time.sleep(0.1)

여기서 encode( )와 decode( )에 대해서 아셔야 하는데요.

encode란 우리가 사용하는 한글이나 영어를 시리얼 통신에 최적화된 상태로 변형시켜 주는 것을 말하며,

decode란 시리얼 통신에 최적화된 형태의 문자열을 다시 원래의 형태로 원상복구 시켜주는 것을 말합니다.

그 형태는 아래의 코드에서 주석으로 설명해 두었으니 주의깊게 봐주세요.

4) 아두이노에서 보낸 시리얼 통신(명령에 대한 반응 메시지)을 받는 부분입니다.

아두이노와 마찬가지로 메시지가 들어오면, 해당 메시지를 한 줄 읽고, 디코딩해줍니다.

if py_serial.readable(): # 들어온 값이 있으면 값을 한 줄 읽음 (BYTE 단위로 받은 상태) # BYTE 단위로 받은 response 모습 : b’\xec\x95\x84\xeb\x91\x90\xec\x9d\xb4\xeb\x85\xb8: a\r

‘ response = py_serial.readline() # 디코딩 후, 출력 (가장 끝의

을 없애주기위해 슬라이싱 사용) print(response[:len(response)-1].decode())

위에서 설명드린 파이썬 코드를 실행하면 아래와 같이 터미널 창을 마치 아두이노 시리얼 모니터 처럼 사용할 수 있습니다.

오늘 준비한 내용은 여기까지입니다.

다음에 기회가 된다면 GUI 프로그램으로 아두이노 모터 제어를 해보는 프로젝트를 포스팅 해보겠습니다.

2022.09.28 – [파이썬 패키지/아두이노] – [Python/Serial] 파이썬과 아두이노로 스텝모터 제어하기

감사합니다.

<참고 자료>

https://pyserial.readthedocs.io/en/latest/pyserial.html

https://kamang-it.tistory.com/entry/Arduino-Python%EC%9C%BC%EB%A1%9C-UARTSerial%ED%86%B5%EC%8B%A0%ED%95%98%EA%B8%B0

반응형

추가 적립 안내

CHAPTER 01 아두이노 시작하기

01_ 1 아두이노란 무엇인가?

아두이노란 무엇인가?

우리는 아두이노를 어떻게 동작 시키는가?

아두이노로 무엇을 만들 수 있나?

왜 세계 여러 나라에서 아두이노를 사용하는가?

인공지능과 아두이노의 만남

아두이노 보드 종류

01_ 2 아두이노 개발환경 구축하기

아두이노 IDE 설치하기

아두이노 실행과 IDE 구조 살펴보기

01_ 3 아두이노 및 프로그래밍 기초

아두이노 스케치 프로그램 구조 살펴보기

아두이노에 내장된 LED 제어하기 1

아두이노에 내장된 LED 제어하기 2

아두이노에 내장된 LED 제어하기 3

CHAPTER 02 아두이노 기본 기능 익히기

02_ 1 3색 LED 제어하기

3색 LED 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

3색 LED의 빨간색 LED 깜빡이기

3색 LED의 빨간색 LED 더 빨리 깜빡이기

3색 LED의 빨간색, 녹색, 파란색 LED 번갈아 켜보기

#define 전처리문을 사용하여 코드의 가독성 높이기

02_ 2 3색 LED PWM으로 밝기 조절

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

아날로그 출력(PWM)으로 LED 밝기 조절하기

아날로그 출력(PWM)으로 LED 색상 조합하기

아날로그 출력(PWM)으로 무지개색상 출력하기

02_ 3 피에조부저 출력하기

피에조부저 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

tone 함수 사용하여 피에조부저 출력하기

피에조부저로 학교종이 땡땡땡 출력하기

for문을 사용하여 코드 간략화하여 “학교종이 땡땡땡”출력하기

02_ 4 시리얼통신

시리얼통신 이해하기

시리얼통신으로 hello 전송하기

시리얼통신으로 hello 줄바꿈하여 전송하기

시리얼통신 통신속도 변경하여 통신하기

시리얼통신으로 PC에서 데이터 받아서 되돌려주기

시리얼통신으로 PC에서 명령어 받아서 LED 제어하기

02_ 5 버튼 입력받기

버튼 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

버튼 값 읽어서 시리얼통신으로 전송하기

버튼을 누를 때 한 번 동작으로 코드 만들기 1

버튼을 누를 때 한 번 동작으로 코드 만들기 2

함수를 사용하여 버튼을 누를 때 한 번 동작하는 코드 만들기

02_ 6 가변 저항 값 입력받기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

가변 저항 값 입력받아서 시리얼통신으로 전송하기

가변 저항 값 map 함수 사용하여 0~100%로 변경 후 시리얼통신으로 전송하기

02_ 7 CDS 조도센서 입력받기

CDS 조도센서 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

CDS 조도센서 값 읽어 시리얼통신으로 전송하기

CDS 조도센서 값 읽어 if 조건문으로 값 비교하기

02_ 8 서보모터 제어하기

서보모터 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

서보모터 각도 변경해보기

가변저항으로 서보모터 제어해보기

02_ 9 DHT11 온습도 센서

DHT11 온습도 센서 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

DHT11 라이브러리 설치하고 센서 값 읽기

DHT11 센서의 온도 습도 값으로 불쾌지수 구하기

02_ 10 4-digit FND 출력하기(TM1637)

4-digit FND 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

TM1637 라이브러리 설치하고 4-digit FND에 숫자 출력하기

4-digit FND에 영어 출력하기

02_ 11 비접촉 온도센서(MLX90614)로 체온 측정하기

비접촉 온도센서(MLX90614) 이해하기

인공지능 쉴드 이용하는 방법

부품 이용하여 연결하는 방법

MLX90614 라이브러리 설치하고 비접촉 온도 읽기

비접촉센서로 온도 읽어서 특정 온도 이상이면 시리얼통신으로 데이터 보내기

02_ 12 millis() 사용하여 아두이노를 일정시간마다 동작 시키기

delay 함수로 시리얼통신에 1초마다 hello 출력하기

delay 함수로 시리얼통신에 1초마다 hello 출력하고 0.5초마다 빨간색 LED 깜빡이기

millis 함수로 시리얼통신에 1초마다 hello 출력하기

millis 함수로 시리얼통신에 1초마다 hello 출력하고 0.5초마다 빨간색 LED 깜박이기

함수를 사용하여 코드의 가독성 높이기

CHAPTER 03 아두이노 프로젝트 만들기

03_ 1 어두워지면 자동으로 켜지는 전등 만들기

CDS 조도센서의 값을 시리얼통신으로 전송하기

어두워지면 자동으로 켜지는 전등 만들기

어두워지면 3초후 켜지는 전등 만들기

03_ 2 가변 저항으로 제어하는 LED 스탠드 만들기

가변 저항 값 읽어 시리얼통신으로 값 전송하기

가변 저항 값으로 LED의 밝기 조절하기

가변 저항 값으로 LED의 밝기 단계로 조절하기

03_ 3 버튼으로 제어하는 LED 스탠드 만들기

버튼을 눌러 값을 시리얼통신으로 전송하기

버튼을 눌러 LED의 밝기를 조절하기

03_ 4 온도습도 불쾌지수 표시기 만들기

온도습도 값을 읽어 불쾌지수를 계산하여 시리얼통신으로 전송하기

온도습도 값을 읽어 불쾌지수를 계산하여 4-digit FND에 표시하기

03_ 5 체온 측정기 만들기

비접촉온도센서로 체온 측정하여 시리얼통신으로 값 전송하기

비접촉온도센서로 체온 측정하여 4-digit FND에 표시하기

비접촉온도센서로 체온 측정하여 38도가 넘으면 부저 울리기

CHAPTER 04 시리얼통신으로 아두이노 제어하기

04_ 1 String 문자열

클래스에서 사용한 함수와 연산자 확인하기

String 문자열 더하기

String 문자열 공백 넣어 더하기

String 문자열 공백 계속 더하기

String 문자열 equals() 함수 사용하여 문자열 비교하기

String 문자열 length() 함수 사용하여 문자열 길이 구하기

String 문자열 indexOf() 함수 사용하여 문자열 찾기

String 문자열 indexOf() 함수 인자 넣어서 특정 위치부터 찾기

String 문자열 indexOf() 함수 if 조건문과 함께 사용하기

String 문자열 lastIndexOf() 함수 사용하여 문자열의 끝에서부터 찾기

String 문자열 substring() 함수 사용하여 문자열 자르기

String 문자열 toInt() 함수 사용하여 문자열을 숫자형으로 변환하기

String 문자열 toFloat() 함수 사용하여 문자열을 소수점형으로 변환하기

String 문자열 trim() 함수 사용하여 문자열의 좌우 공백 제어하기

04_ 2 RGB LED 제어하기

시리얼통신으로 하나의 문자를 받아 RGB LED 제어하기

시리얼통신으로

종료문자까지 문자열을 입력받기

시리얼통신으로 RGB=255,50,0 값 입력받아 255,50,0의 값 찾아 분리하기

시리얼통신으로 RGB=빨간색, 녹색, 파란색의 숫자값 입력받아 RGB LED 제어하기

04_ 3 서보모터 제어하기

시리얼통신으로 서보모터 명령어 입력받아 시리얼통신으로 값 전송하기

시리얼통신으로 서보모터 명령어 입력받아서 서보모터 제어하기

04_ 4 피에조부저 제어하기

시리얼통신으로 부저 주파수 입력받아서 소수점형으로 변환하기

시리얼통신으로 부저 주파수 입력받아서 피에조부저에 주파수 출력하기

04_ 5 FND에 숫자 출력하기

시리얼통신으로 FND 명령어 입력받아 소수점형으로 변환하기

시리얼통신으로 FND 명령어 입력받아 FND에 표시하기

04_ 6 버튼이 눌리면 값 전송하기

버튼이 눌리면 시리얼통신으로 버튼 값 전송하기

04_ 7 가변 저항, 조도센서 값 요청받고 응답하기

가변 저항과 조도센서의 값을 요청받으면 응답하기

가변 저항과 조도센서의 값을 요청받으면 실제 값 측정하여 응답하기

04_ 8 온도, 습도센서 값 요청받고 응답하기

온도센서와 습도센서의 값을 요청받으면 응답하기

온도센서와 습도센서의 값을 요청받으면 실제 값 측정하여 응답하기

04_ 9 비접촉 온도센서 값 요청받고 응답하기

비접촉온도센서와 주변 온도의 값을 요청받으면 응답하기

비접촉온도센서와 주변 온도의 값을 요청받으면 실제 값 측정하여 응답하기

04_ 10 통신 기능 모두 추가하기

3색 LED, 서보모터, 피에조부저, FND 통신기능 추가하기

버튼 통신기능 추가하기

가변저항, 조도센서, 온도센서, 습도센서, 비접촉온도센서 통신기능 추가하여 모든 통신규칙 만들기

CHAPTER 05 파이썬 시작하기

05_ 1 파이썬이란?

05_ 2 파이썬 개발환경구성

아나콘다를 통한 파이썬 설치

VS CODE 설치 및 파이썬 개발환경 구성 + 아나콘다 연동

VS CODE의 유용한 기능 추가 설치하기

05_ 3 파이썬의 기본 문법 익히기

출력 print

입력 input

변수 – 숫자형, 문자형, 소수점형, BOOL형

자료형 – 리스트, 튜플, 딕셔너리, set

연산 – 사칙연산, 논리연산, 비교연산

조건문

반복문 – while, for 반복문

오류 및 예외처리

함수

클래스

주석

import

CHAPTER 06 파이썬으로 간단한 프로그램 만들기

06_ 1 숫자 맞추기 게임 만들기

임의의 숫자 생성 코드 만들기

숫자 맞추는 게임 코드 만들기

try: except: 문으로 예외처리하기

06_ 2 로또번호 생성기 만들기

range 함수를 사용하여 1부터 45까지 값 생성하기

랜덤함수 사용하여 1부터 45까지 값 중에 6개의 값 무작위로 선택하기

994회차 로또번호와 비교하여 당첨 시뮬레이션 해보기

06_ 3 텍스트를 음성으로 변환

텍스트를 음성으로 변환하기

음성으로 변환된 파일 재생하기

파일에서 문자를 읽어 음성으로 출력해보기

06_ 4 엑셀파일 읽고 쓰기

리스트의 항목을 엑셀에 쓰기

리스트의 항목에 나이를 추가하여 엑셀로 쓰기

엑셀에 쓰는 다양한 방법 알아보기

엑셀에서 값 읽기

엑셀에서 마지막 길이만큼 읽어 리스트에 저장하기

CHAPTER 07 파이썬으로 아두이노와 통신하기

07_ 1 파이썬으로 아두이노 RGB LED 제어하기

시리얼통신으로 아두이노와 통신하여 아두이노 RGB LED 제어하기

아두이노와 연결된 시리얼포트 자동으로 찾아 연결하기

시리얼통신으로 아두이노와 통신하여 아두이노 RGB LED 제어하고 응답받기

시리얼통신으로 수신부를 쓰레드로 분리하여 성능 높이기

RGB LED제어하는 코드를 함수로 만들어 코드의 가독성 높이기

main() 함수를 생성하여 프로그램을 직관적으로 만들기

07_ 2 파이썬으로 아두이노 서보모터, 피에조부저, FND 제어하기

시리얼통신의 기본 코드 만들기

서보모터, 피에조부저, FND를 제어하는 함수르 만들고 명령어를 전송하여 제어해보기

07_ 3 파이썬으로 아두이노 스위치 값 수신받기

아두이노에서 버튼이 눌리면 PC의 파이썬에서 확인하는 프로그램 만들기

시리얼통신 수신 쓰레드에서 값을 받아 main() 함수에서 확인하기

07_ 4 파이썬으로 아두이노 가변 저항, 조도센서 값을 요청하여 받기

가변 저항, 조도센서의 요청 응답의 통신 규칙 살펴보기

시리얼통신으로 아두이노에게 가변 저항, 조도센서 값을 요청하여 받기

1초마다 실행하는 부분을 조금 더 파이썬 답게 변경하기

가변 저항과 밝기값에서 원하는 값 분리하기

07_ 5 파이썬으로 아두이노 온습도센서, 비접촉 온도센서 값을 요청하여 받기

시리얼통신으로 아두이노에게 온도센서, 습도센서, 비접촉온도센서, 비접촉 온도 주변 온도 값을 요청하여 받기

CHAPTER 08 파이썬과 아두이노로 작품 만들기

08_ 1 파이썬으로 실시간 환율 정보 읽어와 아두이노 FND에 표시하기

지원되는 통화목록을 출력하기

1달러당 원화 출력하기

실시간 환율정보 크롤링하는 코드 만들기

1달러에 원화비를 아두이노의 FND에 표시하기

08_ 2 파이썬으로 기상청 날씨 받아와 아두이노 FND에 표시하기

기상청에서 날씨정보 데이터 받기

파이썬에서 기상청 주소 접속하여 데이터 출력하기

정규식으로 사용하여 온도와 습도 데이터를 가져오기

온도 데이터를 아두이노의 FND에 표시하기

08_ 3 아두이노에서 버튼을 누르면 파이썬으로 이메일 보내기

네이버 이메일 설정하기

파이썬으로 네이버 이메일을 통해 이메일 보내기

아두이노에서 버튼을 누르면 파이썬으로 네이버 이메일을 통해 이메일 보내기

08_ 4 파이썬으로 미세먼지 농도 가져와 아두이노 LED, FND에 표시하기

공공데이터 포탈 가입 및 API 신청하기

파이썬 프로그램을 이용하여 웹페이지에 접속 후 미세먼지와 측정소를 출력하기

강남구의 미세먼지 데이터 출력하기

PM25의 미세먼지 농도를 FND와 LED에 표시하기

08_ 5 파이썬으로 코로나 19 현황 가져와 아두이노 FND표시하기

공공데이터 포탈 가입 및 API 신청하기

파이썬 프로그램을 이용하여 웹페이지에 접속 후 코로나 현황을 받아오기

전국의 코로나 확진자수 출력하기

오늘 날짜를 자동으로 입력하여 전국의 코로나 확진자수 출력하기

코로나 확진자수를 아두이노 FND에 표시하기

08_ 6 파이썬으로 색상 검출하여 아두이노 LED에 표시하기

OpenCV를 이용하여 색상 추출하기

OpenCV를 이용하여 색상 값 수치화하기

색상별 임계점 정하고 색상 판별하기

08_ 7 파이썬으로 가변 저항 값을 요청하여 실시간 그래프 그리기

matplotlib를 활용하여 그래프 그려보기

실시간 그래프 그리기

시리얼통신으로 가변 저항 값 요청받아 실시간 그래프 그리기

08_ 8 파이썬으로 밝기값을 요청하여 어두워지면 스마트폰으로 알림보내기

워크스페이스 생성하기

봇(로봇) 만들기

slack으로 메시지 전송하기

봇이 메시지를 잘 보냈는지 확인하기

아두이노의 밝기값이 어두워지면 slack으로 메시지 전송하기

08_ 9 파이썬으로 온도습도센서 값을 요청하여 엑셀에 기록하기

아두이노의 온도 습도 데이터 요청하여 받기

온도습도 값 수신 확인하기

온도습도 값 엑셀에 기록하기

08_ 10 파이썬으로 비접촉 온도센서 값을 요청하여 GUI로 표시하기

GUI 프로그램 만들기

GUI 프로그램의 글자크기 키우기

랜덤숫자 GUI에 표시하기

아두이노의 비접촉 온도센서 값 GUI에 표시하기

비접촉 온도센서의 값이 37.5도 이상이며 GUI의 색상 변경하기

08_ 11파이썬으로 GUI 만들어 서보모터 제어하기

GUI에 슬라이드바 생성하기

GUI에 슬라이드바를 조절하여 아두이노의 서보모터 제어하기

CHAPTER 09 파이썬 인공지능과 아두이노로 작품 만들기

09_ 0 가상환경으로 파이썬 3.8.8 버전 설치 후 진행하기

가상환경 생성하기

09_ 1 음성인식하여 아두이노 제어하기

음성 녹음하고 재생하기

음성을 텍스트로 변환하기

음성을 텍스트로 변환 후 특정 키워드 비교하기

음성으로 LED 제어하기

09_ 2 눈을 인식하여 졸음방지 알리미 만들기

OpenCV에서 카메라 영상 보여주기

OpenCV에서 얼굴과 눈을 찾기

눈을 계속 감고 있으면 OpenCV에서 아두이노로 알람보내기

09_ 3 인공지능 마스크검출 시스템 만들기

티처블머신에서 모델생성하기

티처블머신에서 생성된 모델 가져와 파이썬에서 마스크 착용 유무 판별하기

label 파일에서 예측값 매칭하기

마스크 미착용 시 아두이노의 알람 울리기

09_ 4 인공지능 동물원 만들기

티처블머신에서 모델생성하기

티처블머신에서 생성된 모델 가져와 기린, 코끼리, 상어, 배경화면 분류하기

기린이 보이면 아두이노의 서보모터 제어하여 문열어주기

[Python] 파이썬 아두이노 연동법 ( feat. Serial 통신, Firmata )

서론

과외를 하다 Python을 가르치는 학생을 대상으로 아두이노를 진행하게 되었다.

아두이노는 C++ 언어를 기반으로 동작을 하므로 Python을 사용하는 사람에게는 이용이 어려운게 현실이다.

물론, 시리얼 통신을 하면 되지 않나? 라고 반박한다면 맞는말이다.

학습과 실습이 중심이 되는 시스템에서는 아무런 문제가 발생하지 않을 것이다.

하지만 아두이노에 올린 프로그램을 작품으로 동작하게 하고 싶다면? ( PC와의 연결을 해제하고 )

그때는 얘기가 꽤나 달라진다. 왜냐하면 컴퓨터를 중간에 두고 통신을 진행하고 있기 때문에.

물론 가능하다, 하지만 아두이노가 PC에 연결되어 있지 않다면?

블루투스를 통해 송수신할것인가?

엄청난 노가다가 필요할 것이고 낭비가 심할 것이다.

차라리 C++을 배우는게 편할지도 모른다.

그러므로 필자는 아두이노를 다루고 싶다면 C++을 공부하는것을 강.추. 하지만 Python을 이용하여 환경을 구축하는 것에 대해도 나름의 장점이 있으므로 이에 대해 말해볼까 한다.

C++에 대한 지식이 없지만 학습과 실습을 중심으로 하는 환경을 만들어 아두이노가 어떻게 동작하는지 알고싶은 사람이라면 좋은 시도가 될 것이다.

Serial 통신이란?

일단은 Serial 통신이 무엇인지부터 알아보도록 하자.

Serial은 어떤 뜻을 가진 영단어인가?

혹시 이것을 생각한 독자가 있을지도 모르겠다

잡담은 여기까지 하고 Serial은 영어로 ‘직렬’ 이라는 뜻을 가지고 있다.

자, 직렬까지 말했다면 생각해보자. 직렬의 반댓말은 무엇일까?

똑똑한 독자분들은 모두 알고있듯이 그렇다. ‘병렬’이다! 영어로는 Parallel 이다!

직렬과 병렬에서 추론할 수 있듯이

직렬통신, Serial Communication 은 직선으로, 하나의 선을 통해 정보를 비트단위로 송수신하는 것이다.

그에 반해 병렬통신, Parallel Communication 은 여러개의 선을 통해 동시에 정보를 비트단위로 송수신하는 것이다.

위 그림에서는 D0~D7 까지의 각각의 비트를 전송하는 방식을 각각의 통신방법을 예를 들어 설명한다.

자, 보면 직렬, 병렬 통신의 모호한 개념이 머리에 잡혔을 것이다.

사실 이에 대해 설명하자면 끝이 없다. 한 포스트로 다 설명할수도 없을 뿐더러..

쨋든 우리의 목적은 아두이노와 파이썬의 연동이므로 아두이노는 시리얼 통신을 이용하는구나~ 까지만 이해하고 넘어가도록 하자.

※ USB의 약자는 Universal Serial Bus 이다! 생각해보면 USB를 통해 아두이노를 컴퓨터로 연결하지 않는가?

아두이노 우노의 경우 Serial 통신 방식을 사용할 수 있다.

우리는 이것을 사용하여 아두이노 – PC – Python 간의 통신방식을 사용할 것이다.

그림으로 표현하자면 이와같다.

파이썬으로 컴퓨터에 연결되어있는 아두이노에 직렬 통신으로 정보를 전달하고,

아두이노는 이 정보을 해석해 미리 정해진 방식대로 동작하게 하는 시스템인 것이다!

문제점

하지만 문제는 또 존재한다.

간단히 예를 들어보자, 아두이노 IDE에 위와 같은 코드를 작성하여 아두이노에 업로드하였다 생각해보자.

void Setup() { Serial.begin(9600); pinMode(13,OUTPUT); } void loop() { while(Serial.available()) { serial_data = Serial.read(); } if(serial_data == ‘1’) { digitalWrite(13, HIGH); } else if(serial_data == ‘0’) { digitalWrite(13, LOW); } }

그리고 파이썬에서 아두이노가 연결된 시리얼 포트로 0 혹은 1을 전송하는 코드를 짜서 실행시켰다고 가정해보자.

파이썬에서 아두이노에게 Serial 통신으로 0을 보낸다면 13번 핀이 출력을 멈출 것이고,

파이썬에서 아두이노에게 Serial 통신으로 1을 보낸다면 13번 핀이 출력을 할 것이다.

좋다. 의도한대로 Python에서 정보를 보내면 아두이노가 동작할 수 있을 것이다.

하지만 만약, 13번 핀이 아니라 다른 핀을 제어하고 싶다면?

디지털이 아니라 아날로그 핀을 제어하고 싶다면?

아날로그 입력을 기준으로 어떠한 행동을 하고 싶다면?

매번 아두이노IDE에 시리얼 통신으로 전달된 정보의 의미를 부여하는 코드를 작성해야 할 것이다.

이와같이 각각을 의미하는 정보를 정하고 이를 Python, 아두이노IDE에 코딩을 진행하면,

그게 과연 Python으로 아두이노를 제어하는 이점을 살린 것일까?

필자는 아니라고 말하고 싶다.

그러므로 필자는 조금만 더! 스마트~한 방법을 사용해보고자 한다.

물론, 각 센서와 모듈에 종속된 라이브러리를 사용하고자 할 경우에는 아두이노 IDE에서 코딩이 필요할 것이다.

혹시 파이썬 설치가 제대로 되어 있지 않은 독자들은 이 포스트를 참고해 파이썬과 IDE를 설치하고 오자

https://defs-program.tistory.com/entry/Python-%EC%A3%BC%EC%8B%9D-%EC%9E%90%EB%8F%99%EA%B1%B0%EB%9E%98-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-1-%ED%80%80%ED%8A%B8-%ED%88%AC%EC%9E%90-Python-%EC%85%8B%EC%97%85

자, 글을 읽고온 독자들은 Python과 VSCode가 PC에 있을 것이다. 물론, 혹시 몰라 아두이노 IDE가 없는 독자들을 위해

아두이노 IDE의 사이트를 준비했다.

https://www.arduino.cc/en/software

모두 설치하였으면 시작해보자.

자, 방금 코드 예제에서 보았다싶이 우리는 직접 ‘0을 송신할 경우 13핀의 출력을 종료, 1을 송신할 경우 핀 출력’ 을 정의하였다.

하지만 말했듯이 모~든 경우의 수에 대해 우리가 직접 정의를 하는 것은 너무나 번거롭고 귀찮은 일이 아닐 수 없다.

우리의 구세주, Firmata

여기서 등장하는 우리의 구세주는 바로 Firmata이다!

Firmata는 통신 프로토콜이다. 통신 프로토콜이 무엇인지 간단히 설명하고 넘어가자.

통신 프로토콜이란?

통신 프로토콜이란 일종의 규약이다.

대표적으로 HTTP, HTTPS, FTP, SSL, SSH 등의 프로토콜들이 존재한다.

데이터 전송 시, 어떤 데이터를 어떠한 순서대로, 어떠한 크기로 전송할지를 미리 정의한 일종의 약속 이라 할 수 있다.

http 의 예제를 보자.

이러한 정보들을 이러한 순서로 담아서 보내는 약속 이 http 프로토콜인 것이다.

아래의 예제는 웹페이지를 요청하는 Http 프로토콜의 예시이다.

GET / HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: en-GB,en;q=0.5 Accept-Encoding: gzip, deflate, br Connection: keep-alive

물론 응답의 경우도 이렇게 http에 약속되어 있다.

HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 155 Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) ETag: “3f80f-1b6-3e1cb03b” Accept-Ranges: bytes Connection: close An Example Page

Hello World, this is a very simple HTML document.

자 간단한 예제로 통신 프로토콜이란 일종의 약속, 이라는 것을 알게 되었다.

그렇다면 이제는 Firmata에서 데이터를 전송하기 위해 정한 규칙은 무엇인지 알아봐야 할 것이다.

https://github.com/tino/pyFirmata

위 사이트는 pyFirmata ( Firmata의 Python 버전 ) 이 올라와있는 Github Repository 이다.

이 사이트에서 간단한 Firmata의 통신 약속을 살펴볼 수 있다.

영어로 되있는 사이트 구조상 필자가 간단히 필요한 정보만을 알려줄 것이다.

Firmata 설정

일단 Firmata의 통신 규약에 대해 보기 전에 먼저 Firmata를 사용하기 위한 설정을 해보자.

간단하다, 일단 아두이노를 PC에 연결하고 아두이노IDE를 실행한다.

다음과 같이 파일->예제->Firmata->StandardFirmata를 클릭한다.

열린 새로운 창에서 자신의 아두이노를 포트에서 선택한 후, 업로드를 클릭하여 파일을 아두이노에 업로드한다.

이제 약속한 프로토콜대로 Python 코드를 작성하면, Firmata가 이를 해석하여 아두이노가 동작할 것이다.

위에서 본대로 우리는 Python을 사용하므로 pyFirmata가 필요하다.

윈도우 검색 창 -> cmd 실행 -> pip install pyFirmata 명령을 입력하여 pyFirmata 라이브러리를 설치하자.

필자의 다른 포스트를 보고 Python 설치하였을 경우 경로 에러없이 설치가 가능하였을 것이다.

pip라는 명령이 존재하지 않습니다~ 라는 에러가 나올 경우에는 PATH를 설정하지 않았을 가능성이 존재하므로 직접 환경변수를 설정하던가 Python을 삭제 후 필자의 포스트를 보고 재설치를 진행하자.

자 이제 환경셋업은 완료했다. 다음 예제 코드를 실제 파이썬 파일을 만들어서 따라해보자.

import pyfirmata import time board = pyfirmata.Arduino(‘COM6’) while True: board.digital[13].write(1) time.sleep(1) board.digital[13].write(0) time.sleep(1)

자, 주의해야 할 사항이 있다.

board = pyfirmata.Arduino(‘COM6’) 에서 COM6 는 아두이노가 연결된 포트를 의미한다.

아두이노 IDE의 툴-> 포트를 설정한 기억이 있을 것이다.

필자의 아두이노는 COM6포트에 연결되었고, 그래서 필자는 COM6를 적어 생성자의 매개변수로 전달한 것이다.

자신의 아두이노가 연결된 COM포트를 매개변수로 제출하여 파일을 실행해보자.

다음과 같이 13번 핀과 연결된 L 우측의 라이트가 1초 간격으로 점멸하는 것을 볼 수 있다.

다음 포스팅에서 다른 제어 방법들을 설명할 것이니 기대해도 좋을 것!이다 아마..ㅎㅎ

못 기다리는 독자들은 Firmata Github Page를 참조하기 바란다.

그럼 20000~

파이썬을 이용한 아두이노 시리얼 통신

개요

이 글에서는 파이썬을 이용해서 아두이노와 데이터를 교환하는 방법에 대해서 알아봅니다

시리얼 통신에 대한 상세 내용은 최소한으로 언급합니다. 실제 사용방법에 중점을 둡니다

필수 준비물

아두이노 보드 – 이 글에서는 우노보드를 사용합니다

arduino IDE – https://www.arduino.cc/en/donate/ 여기에서 다운로드 받고 설치합니다

그 외 개발도구는 자신이 편한걸로 선택합니다

소스 코드 링크 – https://github.com/boa9448/SerialTest

개발 환경

os – windows10

python – python 3.9.7 x64

개발도구 – vs code

개발도구(확장) – pylance, python

arduino – arduino ide

보드 – uno

전체 순서

전체 순서는 다음과 같습니다

파이썬 라이브러리 설치 문자열 에코 예제 구조화된 데이터 에코 예제 잡기술

1. 라이브러리 설치

pyserial 모듈을 이용해서 시리얼통신을 할 수 있습니다

위 모듈은 시리얼 포트에 대한 액세스를 캡슐화 합니다

windows, linux, mac에서 호환가능합니다

다음 커맨드를 이용해서 라이브러리를 설치합니다

pip install pyserial

pyserial 모듈이 이미 설치되어 있는 모습

2. 문자열 에코 예제

arduino ide를 열고 다음 코드와 같이 작성 합니다

void setup() { Serial.begin(9600); } void loop() { // 만약 시리얼에 읽을 데이터가 있다면… if(Serial.available()) { // 시리얼에서 읽어온 데이터를 다시 시리얼로 출력 Serial.write(Serial.read()); } }

ide에서 코드를 입력한 모습

ide에서 보드와 포트를 선택하고 업로드 합니다

이때 포트 번호를 기억해둡니다

ide에서 포트를 확인

성공적으로 업로드가 되었다면 시리얼 모니터를 이용해서 테스트합니다

우측 하단에 다음 화면처럼 설정한 뒤 전송을 누릅니다

다음과 같은 화면을 볼 수 있습니다

시리얼로 입력된 데이터를 그대로 다시 출력하는 예제입니다

python 개발 도구를 열고 다음 코드와 같이 작성 합니다

실행하기 전에 반드시 앞에서 열었던 시리얼 모니터를 닫아주세요

시리얼 모니터를 닫았다면 실행합니다

import time import serial # port : 앞에서 arduino ide에서 확인한 포트 이름을 입력합니다 # baudrate : 아두이노 setup함수에서 serial.begin에 사용된 값을 사용합니다 # 포트가 연결되면 보드가 껐다 켜집니다 # 초기화가 완료될 시간을 약간 기다려줍니다 arduino = serial.Serial(port = “COM6″, baudrate = 9600) time.sleep(3) # 시리얼에 test string을 보냄 arduino.write(b”test string”) # 잠시 대기 time.sleep(1) data = arduino.read_all() print(data) arduino.close()

다음과 같은 출력을 볼 수 있습니다

bytes형태의 test string을 볼 수 있습니다

아두이노에서 보낸 b”test string”이 출력된 모습

3. 구조화된 데이터 에코 예제

구조화된 데이터를 송수신하는 방법입니다

고정길이의 패킷을 정의하고 해당 패킷을 이용해서 아두이노와 시리얼로 통신하는 예제입니다

표시 방법은 다음과 같습니다 [필드 이름 : 필드 사이즈]

ex : [시작 사인 : 2][데이터 : 4] -> 시작 사인은 2바이트, 데이터는 4바이트

예제에서 사용할 패킷은 다음과 같습니다

[시작 사인 : 1][데이터 타입 : 1][데이터 : 4][체크섬 : 2]

총 8바이트 길이의 패킷입니다

c로 표현하면 다음과 같습니다

#pragma pack(push, 1) typedef struct packet_ { unsigned char start_sign; // 시작 사인 : 1 unsigned char data_type; // 데이터 타입 : 1 uint32_t data; // 데이터 : 4 unsigned short checksum; // 체크섬 : 2 }PACKET; #pragma pack(pop) //또는 //unsigned char packet[8];

구조체의 정렬을 1바이트로 맞추기 위해서 #pragma pack을 이용했습니다

해당 정렬을 맞추지 않는다면 구조체 정렬에 의해서 1, 2, 4, 8, 16과 같은 단위로 멤버 변수가 정렬됩니다

이번 예제에서는 위 구조체를 이용해서 데이터를 손쉽게 작성 및 수정하고 직렬화 합니다

1바이트로 정렬된 구조체는 sizeof로 크기를 가져왔을때 멤버변수의 합과 같은 크기를 리턴합니다

그리고 char형 포인터로 캐스팅했을 때 올바르게 직렬화할 수 있습니다

해당 예제에서는 위와 같은 형식의 패킷을 정의하고 그 패킷으로만 통신을 합니다

항상 고정 사이즈의 패킷을 보내고 받는 예제입니다

다음 코드를 arduino ide에 작성한 뒤 업로드 합니다

#pragma pack(push, 1) typedef struct packet_ { unsigned char start_sign; // 시작 사인 : 1 unsigned char data_type; // 데이터 타입 : 1 uint32_t data; // 데이터 : 4 unsigned short checksum; // 체크섬 : 2 }PACKET; #pragma pack(pop) //또는 //unsigned char packet[8]; // 데이터를 받을 버퍼 선언 PACKET data = {0, }; void setup() { Serial.begin(9600); } void loop() { // 시리얼에 읽을 데이터가 있다면 if(Serial.available()) { // packet 사이즈만큼 읽어옴 Serial.readBytes((char*)&data, sizeof(data)); // 데이터 값에 + 1을 한 뒤에 다시 전송 data.data += 1; Serial.write((char*)&data, sizeof(data)); } }

고정길이로 통신을 하기 때문에

아두이노에서는 시리얼 버퍼에서 읽을 수 있는 데이터가 있을 때는

항상 Packet구조체의 사이즈만큼 읽으려고 시도합니다

Serial.readBytes((char*)&data, sizeof(data));

그리고 받은 패킷의 데이터 값에 +1을 해서 다시 전송합니다

data.data += 1; Serial.write((char*)&data, sizeof(data));

파이썬은 다음 코드를 작성 한뒤 실행합니다

import time from ctypes import Structure, c_ubyte, c_ushort, c_uint32 import serial # ctypes를 이용한 구조체 클래스 작성 class Packet(Structure): # pragma pack(push, 1)과 같은 표현 # 구조체 정렬을 1바이트 단위로 하도록 설정 _pack_ = 1 # 실제 구조체 멤버 선언 _fields_ = [(“start_sign”, c_ubyte) , (“data_type”, c_ubyte) , (“data”, c_uint32) , (“checksum”, c_ushort)] # 보낼 데이터를 생성 # 시작 사인은 #, 데이터 타입과 체크섬은 임의의 값으로 생성 # 데이터는 123을 입력 MY_DATA_TYPE = 1 data = Packet(ord(‘#’), MY_DATA_TYPE, 123, 456) # 데이터 출력 print(f”start_sign : {data.start_sign}\ data_type : {data.data_type}\ data : {data.data}\ checksum : {data.checksum}”) # 바이트로 변환해서 출력 print(f”bytes : {bytes(data)}”) arduino = serial.Serial(port = “COM6″, baudrate = 9600) time.sleep(3) # 시리얼에 데이터를 보냄 send_count = arduino.write(bytes(data)) # 보낸 사이즈만큼 읽어들임 data = arduino.read(send_count) # 받은 bytes형식의 데이터를 구조체로 변환 data = Packet.from_buffer_copy(data) # 데이터 출력 print(f”start_sign : {data.start_sign}\ data_type : {data.data_type}\ data : {data.data}\ checksum : {data.checksum}”) # 바이트로 변환해서 출력 print(f”bytes : {bytes(data)}”) arduino.close()

정상적으로 실행됐다면 다음과 같은 결과를 볼 수 있습니다

보낸 값과 받은 값의 출력

data의 값으 1증가된 모습으로 보인다면 정상적으로 실행된 모습입니다

만약 그대로 돌아온다면 아두이노 코드를 제대로 업로드 했는지 확인해주세요

파이썬에서는 내장 모듈인 ctypes를 이용해서 구조체를 작성, 직렬화에 사용합니다

Structure를 상속하고 구조체 클래스를 작성합니다

클래스 멤버 _pack_을 이용해서 구조체의 정렬을 1바이트로 설정합니다

_fields_를 이용해서 실제 멤버변수를 작성합니다

# ctypes를 이용한 구조체 클래스 작성 class Packet(Structure): # pragma pack(push, 1)과 같은 표현 # 구조체 정렬을 1바이트 단위로 하도록 설정 _pack_ = 1 # 실제 구조체 멤버 선언 _fields_ = [(“start_sign”, c_ubyte) , (“data_type”, c_ubyte) , (“data”, c_uint32) , (“checksum”, c_ushort)]

구조체의 인스턴스를 생성하고 값을 출력합니다

바이트로 변환한 뒤 직렬화된 값을 확인합니다

체크섬의 값은 이 예제에서는 생략하고 임의의 값으로 입력합니다

# 보낼 데이터를 생성 # 시작 사인은 #, 데이터 타입과 체크섬은 임의의 값으로 생성 # 데이터는 123을 입력 MY_DATA_TYPE = 1 data = Packet(ord(‘#’), MY_DATA_TYPE, 123, 456) # 데이터 출력 print(f”start_sign : {data.start_sign}\ data_type : {data.data_type}\ data : {data.data}\ checksum : {data.checksum}”) # 바이트로 변환해서 출력 print(f”bytes : {bytes(data)}”)

성공적으로 실행됐다면 다음과 같은 결과를 볼 수 있습니다

보낼 데이터를 출력한 모습

다음은 시리얼포트를 열고 해당 포트로 데이터를 전송합니다

전송한 바이트 수를 저장하고 보낸 바이트 수 만큼 읽어들입니다

arduino = serial.Serial(port = “COM6″, baudrate = 9600) time.sleep(3) # 시리얼에 데이터를 보냄 send_count = arduino.write(bytes(data)) # 보낸 사이즈만큼 읽어들임 data = arduino.read(send_count)

받은 바이트형식의 데이터를 ctypes 구조체로 변환합니다

# 받은 bytes형식의 데이터를 구조체로 변환 data = Packet.from_buffer_copy(data)

변환된 구조체의 데이터를 출력합니다

그리고 포트를 닫습니다

# 받은 bytes형식의 데이터를 구조체로 변환 data = Packet.from_buffer_copy(data) # 데이터 출력 print(f”start_sign : {data.start_sign}\ data_type : {data.data_type}\ data : {data.data}\ checksum : {data.checksum}”) # 바이트로 변환해서 출력 print(f”bytes : {bytes(data)}”) arduino.close()

4. 잡기술

다음 코드를 이용해서 포트를 열거할 수 있습니다

from serial.tools import list_ports port_list = list_ports.comports() print(port_list) print([port.name for port in port_list])

사용 가능한 포트를 확인 가능

다음 코드를 이용해서 ide를 열지않고 펌웨어를 업로드할 수 있습니다

import os def upload(port : str, src_path : str, arduino_dir : str = “C:\\Program Files (x86)\\Arduino”, use_debug : bool = True) -> bool: arduino_bin = “arduino_debug.exe” if use_debug else “arduino.exe” arduino_bin_full_path = os.path.join(arduino_dir, arduino_bin) if not os.path.isfile(arduino_bin_full_path): return False upload_command = f”\”{arduino_bin_full_path}\” –board arduino:avr:uno –port {port} –upload {src_path}” ret_code = os.system(upload_command) return True if ret_code == 0 else False upload(“포트”, “소스코드 이름”, “arduino ide가 설치된 폴더 경로”)

자세한 내용은 다음 링크를 참고해주세요

https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc

참고

포트 연결 후 펌웨어의 버전을 조사하는 패킷을 보내고

응답에 따라서 arduino ide를 통해서 업로드하는 코드를 작성할 수 있습니다

체계적인 프로토콜을 정의해서 동적으로 모듈을 변경하거나 통신하는 코드를 작성할 수 있습니다

비슷한 방법으로 다른 통신에도 적용할 수 있습니다

한 권으로 끝내는 아두이노와 파이썬으로 52개 작품 만들기

아두이노는 오픈소스라는 막강한 무기로 하드웨어를 제어하여 작품을 만드는 곳에서 많이 사용하고 있습니다. 하지만 인공지능이나 통신, 카메라 인식 등을 사용하기 위해서는 연산능력이 부족합니다. 부족한 부분을 파이썬을 이용하여 PC에서 처리하고 처리된 결과를 통신을 통해 아두이노를 제어합니다. 즉 아두이노와 파이썬은 서로 부족한 부분을 체워줄 수 있습니다.

아두이노를 이용하여 하드웨어를 만들고 제어하는 재미를 느끼고 파이썬을 이용하여 PC에서 프로그램을 만드는 재미를 느끼면서 자연스럽게 아두이노와 파이썬을 배울 수 있도록 구성하였습니다. 아두이노와 파이썬에 익숙해지면 파이썬의 강력한 기능을 통해 인공지능을 만들어보면서 파이썬의 강력한 다양한 기능을 활용할 수 있는 작품을 직접 만들어 볼수 있도록 하였습니다.

어떻게 하면 인공지능을 배우려는 출발점을 가볍게 할 수 있을지 또한 인공지능을 활용하여 나만의 아이디어 작품을 만들게 하자의 결과물이 이 책입니다.

인공지능 플랫폼을 사용하기 위해 파이썬 언어를 학습해야 합니다. 인공지능 프로그램의 대부분이 파이썬 언어로 이루어져 있기 때문입니다. 이 책에서는 파이썬 기본 문법을 학습하고 다양한 응용프로그램을 만들어 봅니다.

나만의 인공지능 작품을 만들기 위한 하드웨어로 아두이노를 배우고 동작시켜봅니다. 파이썬 프로그램으로 아두이노를 동작 시키기 위해 나만의 통신규칙을 만들어 봅니다. 통신 규칙을 만들어 보며 인공지능 로봇에게 가르칠 명령어들을 생각해보아도 좋습니다.

인공지능 플랫폼으로는 티쳐블 머신을 사용했습니다. 티쳐블 머신을 통하여 인공지능 학습 단계들을 배울 수 있습니다. 이 책의 아두이노, 파이썬, 티쳐블 머신 각각의 사용법들을 익히고 통신하는 학습을 끝내고 나면 여러분만의 인공지능을 활용한 작품이 만들 수 있도록 구성하였습니다.

이 책의 처음은 아두이노를 제어하며 가볍게, 중간은 파이썬으로 다양하게, 마지막은 인공지능을 활용한 작품을 선물로 받게 됩니다. 또한, 책을 따라가며 학습을 마치고 나면 인공지능을 배우려는 동기가 생기게 될 것입니다.

다음 분들에게 이 책을 추천합니다.

– 아두이노와 파이썬을 연결해서 아이디어 작품을 만들고자 하는 분

– 인공지능 교육을 처음 시작하는 선생님

학생들은 만드는 것을 좋아합니다. 만들면서 배우면 스스로 익히게 됩니다.

– 인공지능 티쳐블 머신 활용법이 궁금한 분

– 캡스톤 디자인을 위한 교육 또는 작품 구상 중인 대학생

– 이 책을 믿고 끝까지 학습할 학생

이 책의 예제 소스 코드, 저자에게 질문하는 방법은 “4~5쪽”을 참고한다.

키워드에 대한 정보 아두 이노 파이썬

다음은 Bing에서 아두 이노 파이썬 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 (홈오토메이션) 파이썬으로 아두이노제어 1편 LED ON/OFF

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

(홈오토메이션) #파이썬으로 #아두이노제어 #1편 #LED #ON/OFF


YouTube에서 아두 이노 파이썬 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 (홈오토메이션) 파이썬으로 아두이노제어 1편 LED ON/OFF | 아두 이노 파이썬, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  고구마 순 볶음 | 고구마순볶음 고소하고 아삭하게 맛있는 반찬 만들기 [엄마의손맛] 196 개의 베스트 답변

Leave a Reply

Your email address will not be published. Required fields are marked *