파이썬 6

라즈베리파이에서 one-wire 온도센서(DS18B20) 읽는 제일 쉬운 방법

1. One wire는? 1개의 데이터 선에 여러 장치를 붙여서 쓰는 식이다. 우리가 멀티탭에 전원을 꽂아서 쓰듯. 이 방식을 이용하면 선 1개로 여러 개의 센서를 붙일 수 있는데, 나는 온도 센서를 한줄로 붙여서 외부, 베란다, 거실 온도를 측정했다. 2. Raspberry 설정 1) one-wire 설정 enable 해주자. sudo raspi-config interface -> one-wire -> enable 2) 아래의 명령으로 w1 모듈을 프로브 해주자. sudo modeprobe w1-gpio sudo modprobe w1-therm 3) reboot을 하자. 4) /sys/bus/w1/devices 디렉터리가 생성되면 설정 완료 3. 디바이스 확인하기 나는 DS18B20 온도 센서를 3개 ..

[Python] IEEE754 부동 소수점 <-> 비트 변환 예제

1. 서론 현재 태양광 모니터링 프로젝트 진행하고 있다. 특히 RTU와 인버터간의 데이터 통신을 통해서 값을 얻어야 하는데, 인버터 제작 회사마다 통신 프로토콜이 다르다. 게다가 일반적으로 소수점을 표현할 때 고정 소숫점을 주로 사용하는 것과 달리 ABB사의 TRIO-50-TL-OUTD 인버터는 부동 소수점을 사용한다. 따라서 IEEE754 32비트 단정도를 헥사로 받아서 이를 변환하여야 한다. C나 C++ 같은 경우 직관적으로 memcpy로 처리하면 될것 같은데 파이썬은 사실 이번 프로젝트에서 처음 사용하는 것이라 구글링이 필요했다. 2. ABB 사의 IEEE754 32비트 부동소수점 표현 방식 ABB사에서 제공하는 TRIO-50-TL-OUTD 인버터 통신 프로토콜 문서 9 페이지를 를 보면 Word ..

[Python3] Multi-threading 및 thread 관리

Python는 thread를 지원한다. C/C++과 Java처럼 함수 단위의 스레딩을 지원한다. 내 경우에는 기능을 완전히 분리하여 동작하기 때문에, Main thread와 별개로 특정 작업을 반복 수행한다. 더불어 각 스레드는 변수로 데이터를 공유하지 않고 DB를 이용한다. # coding=utf-8 import sched import threading # 스케줄러 생성 readSchedule = sched.scheduler(time.time, time.sleep) sendSchedule = sched.scheduler(time.time, time.sleep) # 반복 처리 함수 def read(): data = do_read() insert_data(data) readSchedule.enter(tim..

[Python] 코드로 이미지에 문구 넣기

이번 포스트에서는 파이썬과 PILLOW 라이브러리를 이용하여, 백그라운드 이미지에 글자 추가하여 저장하는 프로그램을 담아볼 예정이다. 예전에 로또 당첨 정보를 이미지화하여 출력하는 프로그램을 작성한 적이 있었는데, 이번에는 내 블로그의 BOJ 위키 포스트에 대표 이미지를 문제 번호를 포함하여 출력하여 사용하려고 작성한다. 전체적인 흐름은 1) 백그라운드 이미지 읽기, 2) 이미지에 포함될 글자 생성, 3) 글자 위치 지정, 4) 백그라운드 이미지 + 글자를 파일로 저장하는 과정을 거친다. 이를 위해서는 PIL 라이브러리가 필요하다. 해당 라이브러리는 아래의 명령을 통하여 설치할 수 있다. sudo apt-get install pillow 정상적으로 Pillow 라이브러리를 설치하였다면, 아래의 코드를 P..

[라즈베리파이/리눅스/우분투] RS232/RS485 to USB 장치 포트(ttyUSB) 검색 방법 및 코드

라즈베리파이(raspberry pi)에서 serial to ttl usb 컨버터 장치를 통해 통신을 하기 위해서는 장치명이 아닌 포트위치가 필요하다. 포트 위치는 /dev/ttyUSB1과 같이 디렉터리이며, 여기서 USB0, USB1...의 장치는 연결되는 USB 장치의 개수에 따라 달라진다. 물론 이 포트 위치는 제조사와 장치 명칭을 통해서 고정하여 쓸 수 있다. 하지만 장치는 언제나 동일 기능을 수행하는 다른 장치로 변경할 수 있으므로 나는 Device ID를 이용해서 해당 장치의 포트를 알아내는 방식을 선택했다. 우선 크게 동작하는 방법을 알아보면, 1) Device 입력 및 해당 device가 존재하는지 확인 configuration파일을 통해서 장치ID를 입력 받을 것이므로, 입력받은 ID 값이..

[Python] Modbus CRC16 파이썬3 예제 코드

C언어로 구현되어 있는 Modbus CRC16 코드는 아래의 링크를 참고하면 된다. http://www.modbustools.com/modbus_crc16.htm 이 코드를 파이썬으로 포팅해야하는 이유가 생겨서 CRC16을 파이썬3에서 구할 수 있도록 코딩하였다. 상세한 내용은 코드를 참고하길 바란다. # This code is ported from modbus CRC16(https://www.modbustools.com/modbus_crc16.htm) crcTable=[0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440,0xCC01,0x0CC0,0x0D80..

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사