본문 바로가기

파이썬18

XML 파일 만들기-#1 import xml.dom.minidom as minidom import xml.etree.ElementTree as ET # XML 생성 예시 root = ET.Element("root") child1 = ET.SubElement(root, "child1") child1.text = "value1" child2 = ET.SubElement(root, "child2") child2.text = "value2" tree = ET.ElementTree(root) # 문자열로 변환한 후 들여쓰기 적용 xml_str = ET.tostring(root, encoding='utf-8', method='xml') pretty_xml = minidom.parseString(xml_str).toprettyxml(inde.. 2024. 10. 2.
파이썬, 데이터베이스 그리고 아두이노 통신 -#3 이전에 올린 코드는 완성된 코드이지만, 사실 완성된 코드는 아니다. 단지 시리얼 통신으로 유선으로 컴퓨터로 통신하고 있다. 이것 또한 거리가 있다면 무선, 블루투스, 지그비, 와이파이, 로라등으로 변경하면 될것이다. 사실 변경 자체가 어렵지는 않다. 단지 한, 두줄 수정하면 된다. 다양한 예제를 제공 할 수있지만, 한두줄 수정을 굳이 설명할 필요는 없을것이다. 그리고 데이터 개수의 추가 이다. 단지 고정된 정수값, 실수값으로 했다. 이것도 본인들이 원하는, 측정값으로 변경하면 될것이다. 개수를 여러개 한다거나, 데이터 종류를 추가하는일이다. 그렇다고 크게 변경되지는 않는일이다. 어차피 정수, 실수, 문자열의 범주속에 있다. 이것 수정 또한 한줄 정도면 가능하다. 한두줄을 강조하는 의미는 크게 어렵지는 않.. 2021. 10. 6.
파이썬, 데이터베이스 그리고 아두이노 통신 -#2 아두이노쪽에서 31바이틀 보내오고 있지만, 데이터베이스에서는 더 많은 데이터를 저장하고 있다. 추가된 내용은 순번, 날짜시간이다. 이것 또한 개인 취향이기는 한데, 순번과 날짜시간이 같이 저장된다면 나중에 데이터분석에 용의 할 것이다. 그렇다고 날짜, 시간을 아두이노에서 구할 필요는 없다. 만약 구한다면 어리석은 일이다. 한마디로 굳이라고 할 수있다. import struct import serial, time import sqlite3 import datetime #먼저 메모리에만 저장(임시) #con = sqlite3.connect(":memory:") #데이터베이스 파일에 저장 con = sqlite3.connect("arduino.db") #커서 객체를 생성 cur = con.cursor() #테.. 2021. 10. 6.
파이썬, 데이터베이스 그리고 아두이노 통신 -#1 이전에 했던것에서 조금 업그레이드 했다. 아두이노에서 받은 데이터를 데이터베이스에 기록하는것이다. 말이 유창해서 데이터베이스 이지만 사실 파일에 기록해도 비슷한 결과를 줄것이다. 아두이노에서 31바이트의 데이터를 제공하고 있다. 문자열, 정수, 실수, 실수해서 총합이 31바이트이다, 파이썬 코드는 그것을 받아서 출력과 같이 데이터베이스에 저장을 하는것이다. 코드가 몇줄 더 길어 졌지만 크게 어려운것은 없다. 테이블이 존재하면 만들지 않을것이고 존재한다면 넘어 갈것이다. 그리고 나머지는 저번에 했던 내용이다. 2021. 10. 6.
파이썬 바이너리파일 쓰기 -#9 이제 문자, 문자열, 숫자를 썩어서 아두이노에서 전송해 보자. typedef struct _Info { char cc; char ss[20]; int age; double height; double weight; _Info() { cc = '1'; strcpy((char*)(ss), "arduino is best"); age =30; height = 1024.0; weight = 768.1; } }Info; Info a; volatile unsigned long previousMillis; void setup() { Serial.begin(9600); previousMillis = millis(); // Serial.println(sizeof(int)); // Serial.println(sizeof(fl.. 2021. 10. 4.
파이썬 바이너리파일 쓰기 -#8 이제 문자와 문자열에 대해서 다루어 보자. 이전에 비해 딱히 어려운것은 없으나 문자열은 크기를 명기 해야 한다, import struct #문자와 문자열20바이트 파일에 읽고 쓰기 # writing data cc = b'1' ss = b'hello wolrd' data = struct.pack('=c20s', cc, ss) f = open('string.dat','wb') f.write(data) f.close() # reading data f = open('string.dat','rb') data = f.read() (cc, ss) = struct.unpack('=c20s', data) print( cc, ss) print(len(data)) 2021. 10. 4.
파이썬 바이너리파일 쓰기 -#7 이전 코드에 대한 최종 설명이다. 아두이노에서 정수, 실수, 실수해서 총 10바이트를 보낸다. 그것을 컴퓨터(원도우)에서 받는 코드 이다. 원도우에서 받는다면 데이터를 가공하거나 데이터베이스에 저장하기 용의 하다. 예를 들어 온도, 습도, 등등 여러개의 값을 아두이노에서 측정하고 혹은 여러군데서 측정하고 무선으로 컴퓨터에 보낸다. 혹은 라즈베리의 리눅서에 보낸다. 보낸 데이터를 저장하거나 활용하면 된다. 아두이노에서 측정한 데이터를 AI에 활용하거나 다양한 방법으로 활용 할 수가 있을것 이다. 마지막으로 데이터를 텍스트 문자열로 보내는것은 무지 피곤한일이다. 데이터 손실도 발생하거나 다시 분리하여 숫자로 만드는 작업 또한 귀찮은 일이다. 그렇게 떄문에 데이터 처리는 바이너리가 편하다고 할 수가 있다. 2021. 10. 3.
파이썬 바이너리파일 쓰기 -#6 마지막으로 주의 할것은 정수, 실수의 크기 이다. 보통 정수는 4바이트 이지만 아두이노 정수는 2바이트ㄷ, 실수는 4바이트 이다. 그렇기 때문에 파이썬 코드에서도 정확하게 맞게 작성해야 한다. 파이썬에서 시리얼 통신을 사용하기 위해서는 설치해야 한다. pip install pyserial #숫자 데이터를 읽고 쓰기 import struct import serial, time #원도우용으로 시리얼 포트를 연다. ser = serial.Serial(port = "com3", baudrate=9600, timeout=2) if (ser.isOpen() == False): ser.open() ser.flushInput() ser.flushOutput() try: while True: if ser.readable.. 2021. 10. 3.
파이썬 바이너리파일 쓰기 -#5 이제 바이너리 파일을 만들어서 쓰고, 읽어 보자. C에서 하는것과 같은 형식으로 정확히 만들어 지는지 확인 하자. #숫자 데이터를 읽고 쓰기 import struct #숫자 데이터를 파일에 읽고 쓰기 # writing data age = 1 # int height = 1024.0 # float weight = 768.0 # float data = struct.pack('=idd',age,height, weight) f = open('mydataid.bin','wb') f.write(data) f.close() # reading data f = open('mydataid.bin','rb') data = f.read() (age, height, weight) = struct.unpack('=idd', dat.. 2021. 10. 3.