개발자/스마트팜

스마트팜 2차 실행 파일 만들기

지구빵집 2020. 10. 30. 20:07
반응형

 

스마트 팜 만든 지 오래되었습니다. 지금은 왜 2차냐고요? 1차는 회사에서 개발했었고, 지금 2차는 회사에서 나와서 개발하고 있다는 의미입니다. 1차 때 IoT 사업하면서 스마트 팜을 시작했는데 매출액이 꽤 되었지요. 3년간 10억 정도 한 거 같네요. 일을 저 혼자 했거든요. 2차는 더 업그레이드하고 영리한 스마트 팜을 만들어 볼 생각입니다. 

 

서버 코드를 변경하면 아래와 같이 메이크 파일을 실행하여 서버 실행 프로그램을 생성한다. 명령어와 기타 필요한 코드를 아래에 나타낸다.

 

filename은 Makefile 이다. 내용은 잘 모른다. 원체 어려워서 말이징. ㅠ.ㅠ 참고로 폴더구조는 

iot_farmserver - include

                   - libs

                   - src - farm 에 서버 실행파일이 위치한다.

 

 

 

 #############################################################################
 #
 # File Name: Makefile
 #
 #
 #############################################################################
.SUFFIXES : .c .o
CC = gcc
SHELL=/bin/sh
MAKE = make

INC = -I$(PWD)/include
LIBS = -L$(PWD)/libs
INSTALLDIR = $(PWD)/output
IOTLIB = $(PWD)/libs/libiot.a
SUBDIRS = libs src

export INC
export INSTALLDIR
export IOTLIB

all :
	@for i in $(SUBDIRS); do \
    echo "make all in $$i..."; \
    (cd $$i; $(MAKE) $(MFLAGS) $(MYMAKEFLAGS) all); done

install:
	mkdir $(INSTALLDIR)
	@for i in $(SUBDIRS); do \
	echo "Installing in $$i..."; \
	(cd $$i; $(MAKE) $(MFLAGS) $(MYMAKEFLAGS) install); done
								 
clean:
	rm -rf $(INSTALLDIR)
	@for i in $(SUBDIRS); do \
	echo "Clearing in $$i..."; \
	(cd $$i; $(MAKE) $(MFLAGS) $(MYMAKEFLAGS) clean); done
															 

 

이전 컴파일시 생성한 파일을 지운다.

$make clean

 

pi@raspberrypi:~/iot_farmserver $ make clean
rm -rf /home/pi/iot_farmserver/output
Clearing in libs...
make[1]: Entering directory '/home/pi/iot_farmserver/libs'
rm -rf iot_db.o parser.o libiot.a core
make[1]: Leaving directory '/home/pi/iot_farmserver/libs'
Clearing in src...
make[1]: Entering directory '/home/pi/iot_farmserver/src'
Clearing in farm...
make[2]: Entering directory '/home/pi/iot_farmserver/src/farm'
rm -rf farm_main.o farm_sensor.o core
make[2]: Leaving directory '/home/pi/iot_farmserver/src/farm'
make[1]: Leaving directory '/home/pi/iot_farmserver/src'
pi@raspberrypi:~/iot_farmserver $

 

컴파일 한다.

$make

 

pi@raspberrypi:~/iot_farmserver $ make
make all in libs...
make[1]: Entering directory '/home/pi/iot_farmserver/libs'
gcc -c -I/home/pi/iot_farmserver/include -I/usr/include/mysql  iot_db.c -o iot_db.o
gcc -c -I/home/pi/iot_farmserver/include -I/usr/include/mysql  parser.c -o parser.o
ar rcs libiot.a -o iot_db.o parser.o
make[1]: Leaving directory '/home/pi/iot_farmserver/libs'
make all in src...
make[1]: Entering directory '/home/pi/iot_farmserver/src'
make all in farm...
make[2]: Entering directory '/home/pi/iot_farmserver/src/farm'
gcc -g -c -I/home/pi/iot_farmserver/include    -c farm_main.c -o farm_main.o
gcc -g -c -I/home/pi/iot_farmserver/include    -c farm_sensor.c -o farm_sensor.o
gcc -o server_farm farm_main.o farm_sensor.o /home/pi/iot_farmserver/libs/libiot.a -lmysqlclient -lpthread -lwiringPi
make[2]: Leaving directory '/home/pi/iot_farmserver/src/farm'
make[1]: Leaving directory '/home/pi/iot_farmserver/src'
pi@raspberrypi:~/iot_farmserver $

 

실행파일을 생성하여 제 위치에 둔다.

$make install 

 

실행은 실행 파일이 있는 폴더 위치에서 아래와 같이 실행한다.

 

pi@raspberrypi:~/iot_farmserver/src/farm $
pi@raspberrypi:~/iot_farmserver/src/farm $ ls
Makefile  farm_main.c  farm_main.o  farm_query.h  farm_sensor.c  farm_sensor.h  farm_sensor.o  server_farm
pi@raspberrypi:~/iot_farmserver/src/farm $ sudo ./server_farm

 

실행모습은 아래와 같다. 앱은 현재 미개발이므로 연동하는 것은 어렵다. 개발한 앱을 테스트를 위해 실행 파일을 올려둔다.

 

IoT_farm_greenhouse.apk
0.64MB

 

pi@raspberrypi:~/iot_farmserver/src/farm $ sudo ./server_farm
validate database...if not exist, make table
iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmsensorvalue (id INT AUTO_INCREMENT PRIMARY KEY, date DATE, time TIME, temperature FLOAT, humid FLOAT, light INT)
iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmsensorcheck (id INT AUTO_INCREMENT PRIMARY KEY, date DATE, time TIME, temperature INT, humid INT, light INT)
iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmactuoperate (id INT AUTO_INCREMENT PRIMARY KEY, date DATE, time TIME, pump INT, fan INT, dcmotor INT, rgbled INT)
iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmactucheck (id INT AUTO_INCREMENT PRIMARY KEY, date DATE, time TIME, pump INT, fan INT, rgbled INT)
iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmsetting (id INT AUTO_INCREMENT PRIMARY KEY, hour INT, min INT, period INT)
done
iot_count_setting_data_from_db : query - SELECT COUNT(*) FROM tfarmsetting
iot_count_setting_data_from_db data: 1
validate setting data... : 1
starting server...
Data not good, skip
Data not good, skip
Data not good, skip
Data not good, skip
Data not good, skip
Data not good, skip
Temperature = 0
Data not good, skip
Data not good, skip
Humidity = 29.00 % Temperature = 20.90 *C
Humidity = 29 Temperature = 20
Humidity = 29
light sensor = 349
SensorInterruptLoop : write to DB - INSERT INTO  tfarmsensorvalue values (null ,now(), now(), 0.000000, 29.000000, 1)
iot_insert_data_from_db : query - INSERT INTO  tfarmsensorvalue values (null ,now(), now(), 0.000000, 29.000000, 1)
SensorInterruptLoop : write to DB - INSERT into tfarmsensorcheck values (null, now(), now(), 0.000000, 29.000000, 1)
iot_insert_data_from_db : query - INSERT into tfarmsensorcheck values (null, now(), now(), 0.000000, 29.000000, 1)
SensorInterruptLoop : write to DB - INSERT into tfarmactuoperate values (null, now(), now(), 0, 0, 0, 0)
iot_insert_data_from_db : query - INSERT into tfarmactuoperate values (null, now(), now(), 0, 0, 0, 0)
SensorInterruptLoop : write to DB - INSERT into tfarmactucheck values (null, now(), now(), 1, 1, 1)
iot_insert_data_from_db : query - INSERT into tfarmactucheck values (null, now(), now(), 1, 1, 1)
auto sensor = 7
in Manual Mode
switch0 - pump off
switch0 - fan off
Humidity = 29.00 % Temperature = 20.90 *C
Humidity = 29 Temperature = 20
Temperature = 20
Data not good, skip
Humidity = 29.00 % Temperature = 20.90 *C
Humidity = 29 Temperature = 20
Humidity = 29
light sensor = 346
SensorInterruptLoop : write to DB - INSERT INTO  tfarmsensorvalue values (null ,now(), now(), 20.000000, 29.000000, 1)
iot_insert_data_from_db : query - INSERT INTO  tfarmsensorvalue values (null ,now(), now(), 20.000000, 29.000000, 1)
SensorInterruptLoop : write to DB - INSERT into tfarmsensorcheck values (null, now(), now(), 20.000000, 29.000000, 1)
iot_insert_data_from_db : query - INSERT into tfarmsensorcheck values (null, now(), now(), 20.000000, 29.000000, 1)
SensorInterruptLoop : write to DB - INSERT into tfarmactuoperate values (null, now(), now(), 0, 0, 0, 0)
iot_insert_data_from_db : query - INSERT into tfarmactuoperate values (null, now(), now(), 0, 0, 0, 0)
SensorInterruptLoop : write to DB - INSERT into tfarmactucheck values (null, now(), now(), 1, 1, 1)
iot_insert_data_from_db : query - INSERT into tfarmactucheck values (null, now(), now(), 1, 1, 1)
auto sensor = 8
in Manual Mode
switch0 - pump off
switch0 - fan off
Humidity = 29.00 % Temperature = 20.90 *C
Humidity = 29 Temperature = 20
Temperature = 20

 

 

정신 사납지만 그런대로 잘 동작하는 스마트 팜

 

 

 

반응형