태양광 발전의 발전량을 로깅해 보았다. (3) Microbit 간 무선 통신과 RaspberryPi-Microbit 간 직렬 통신으로 측정 값 로깅

【태양광 발전의 발전량을 로깅해 보았다. 목차】

Microbit 간 무선 통신과 RaspberryPi-Microbit 간 시리얼 통신으로 측정값 로깅



여기에서는, 전류·전압 측정 모듈 INA260을 접속한 Microbit로부터, 다른 Microbit에 측정 데이터를 무선 통신으로 전송하고, USB 접속된 RaspberryPi와 시리얼 통신하여 RaspberryPi로 측정값을 로깅한다.

● Microbit 무선 통신



Microbit는 독자적인 무선 통신에 의해, 다른 Microbit와 데이터 통신할 수 있다.
Microbit의 무선 통신은 의외로 대단하다.
냉장고 안에 마이크로비트를 넣어 창고 밖의 마이크로비트로 온도 데이터를 보낼 수 있다.
시험에 정지중인 전자 레인지에도 넣어 보았지만 통신 가능했다.

라디오를 사용하려면 MakeCode에서 다음 블록을 사용하기 만하면됩니다.
· 초기 처리에서 송신 측 · 수신 측에서 동일한 무선 그룹을 설정


・송신측:「무선으로 송신」한다.


・수신측: 「무선으로 수신했을 때」트리거를 사용하여 수신값을 취득한다.


이하, MakeCode 에서 편집한, 센서 접속측의 소스의 전체상이다.
측정값을 무선으로 다른 Microbit에 송신하고 있다.

【센서 접속측 프로그램】


● Microbit-Raspberry 간의 직렬 통신



Microbit에서 시리얼 통신을 하기 위해서는, MakeCode로 「고급 블록」-「시리얼 통신」을 사용한다.
다음은 RasberryPi에 USB 연결하는 Microbit 프로그램이다.
무선 수신된 데이터를 시리얼 통신으로 송신하는 단계;

【시리얼 통신측 프로그램】




● RaspberryPi 측 시리얼 통신



RaspberryPi와 Microbit는 USB 케이블로 연결한다.
RasberryPi로 LXTerminal을 기동하고, 아래의 screen 커맨드를 실행함으로써 Microbit의 송신 데이터를 수신하여 표시할 수 있다.
sudo screen /dev/ttyACM0 115200

그러나 로깅한다면 좀 더 손을 더하고 싶기 때문에 파이썬으로 써 보겠습니다.
import serial
import struct
import datetime as dt

use_port = "/dev/ttyACM0"

_serial = serial.Serial(use_port)
_serial.baudrate = 115200
_serial.parity = serial.PARITY_NONE
_serial.bytesize = serial.EIGHTBITS
_serial.stopbits = serial.STOPBITS_ONE
_serial.timeout = 15

try:
    while True:
        rx = _serial.readline()
        st = "{0},{1}".format(dt.datetime.now(), rx)
        print(st)
        with open('/home/pi/current_{}.log'.format(dt.date.today()), mode="a") as f:
            f.write(st)

except Exception as ex:
    print(ex)
finally:
    _serial.close()

【태양광 발전의 발전량을 로깅해 보았다. 목차】

좋은 웹페이지 즐겨찾기