라즈베리파이 Request 구현
센서 데이터 측정과 서버 API가 준비되었으니 이제 측정한 센서 데이터를 서버로 전송해보자.
requests 패키지를 사용할 것이기 때문에 만약 없다면 설치해준다.
pip3 install requests
우선 조회 API를 통해 request / response가 잘 되는지 확인하자.
원래 PC에서 무선랜카드로 핫스팟을 틀어서 SSH에 연결했었는데, 인터넷을 찾아보니 Windows10에서 핫스팟을 틀 경우 내부적으로 IP를 변경되어 연결된 기기에서 Windows로 Ping을 못한다고 한다.
그래서 휴대폰에서 핫스팟을 틀고, 라즈베리파이와 PC를 휴대폰에 연결했다.
https://superuser.com/questions/1354338/cant-ping-when-mobile-hotspot-is-enable
Can't ping when Mobile Hotspot is enable
In Windows 10, when Mobile Hotspot feature is enabled, my PC become unreachable in the network and can't even Ping on my IP.
superuser.com
아무튼 변경된 IP주소로 테스트 Request를 날렸을 때 잘 동작하는것을 볼 수 있다.
ajw@raspberrypi:~/sensor-monitoring-system $ python3
>>> import requests
>>> r = requests.get('http://192.168.166.26:8080/api/1/sensor')
>>> print(r)
<Response [200]>
>>> print(r.json())
{'sensorData': [{'eco2': 12, 'tvoc': 15, 'temp': 1.5, 'accel': {'x': 12.0, 'y': 23.0, 'z': 35.0}, 'createdDate': '2022-08-18T10:18:53.587325'}]}
>>>
측정한 센서 데이터를 Dictionary에 넣어 POST Request를 전송해보자.
센서 측정 값이 소수점 18자리까지 나오길래 너무 과한것 같아 셋째 자리에서 반올림했다.
또 가끔 센서 초기화 시 몇 초 동안 0이 측정되는 경우가 있는데, 이런 경우는 전송하지 않도록 했다.
import requests
import smbus
from time import sleep
from CCS811 import CCS811
from MPU6050 import MPU6050
SERVER_IP = '192.168.166.26'
SERVER_PORT = 8080
CLIENT_ID = 1
REQUEST_URL = 'http://{0}:{1}/api/{2}/sensor'.format(SERVER_IP, SERVER_PORT, CLIENT_ID)
i2c = smbus.SMBus(1)
ccs811 = CCS811(i2c)
sensor = MPU6050(i2c)
sleep(0.1)
while True:
sleep(1)
try:
[eco2, tvoc] = ccs811.readData()
accel = sensor.get_accel_data()
temp = sensor.get_temp_data()
if (eco2 == 0 or accel['x'] == 0):
print('Trash value')
continue
print('eCO2: {} TVOC: {} Temp: {}\nAccel: {}'.format(eco2, tvoc, temp, accel))
json = {
'eco2': eco2,
'tvoc': tvoc,
'temp': round(temp, 2),
'accel': {
'x': round(accel['x'], 2),
'y': round(accel['y'], 2),
'z': round(accel['z'], 2)
}
}
response = requests.post(url = REQUEST_URL, json = json)
except Exception as e:
print('Except: {}'.format(e))
psql 창에 select 명령어를 치면 센서에서 Request한 데이터가 DB에 잘 저장되는 것을 볼 수 있다.
조회 API도 잘 동작하는 것을 볼 수 있다. (잠깐 저장했는데 용량이 5.53KB나 된다...)
이제 클라이언트에서 조회 API를 사용해 데이터를 받고, 시각화 하는 작업을 해보자.
'Projects > 센서 모니터링 시스템' 카테고리의 다른 글
[센서 모니터링 시스템] 11. Rechart를 사용한 센서 데이터 시각화 (0) | 2022.08.19 |
---|---|
[센서 모니터링 시스템] 10. React 개발환경 구성 (0) | 2022.08.19 |
[센서 모니터링 시스템] 8. Service, REST Controller 개발 (0) | 2022.08.18 |
[센서 모니터링 시스템] 7. Repository 개발 (0) | 2022.08.17 |
[센서 모니터링 시스템] 6. Spring 서버 기본환경 설정 (0) | 2022.08.17 |