본문 바로가기

개발자/스마트팜

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

반응형

 

스마트 팜 만든 지 오래되었습니다. 지금은 왜 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

 

 

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

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩