스마트 팜 만든 지 오래되었습니다. 지금은 왜 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
실행모습은 아래와 같다. 앱은 현재 미개발이므로 연동하는 것은 어렵다. 개발한 앱을 테스트를 위해 실행 파일을 올려둔다.
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

'개발자 > 스마트팜' 카테고리의 다른 글
| 아쿠아포닉스란? Aquaponics 농업에 대한 쉬운 설명 (1) | 2023.01.20 |
|---|---|
| 스마트팜 스위치 사용 (0) | 2020.11.03 |
| Greenhouse 원격 관리시스템 안드로이드 앱 9 (0) | 2020.08.25 |
| Greenhouse 원격 관리시스템 서버프로그램과 카메라 8 (0) | 2020.08.24 |
| Greenhouse 원격 관리시스템 소프트웨어 테스트 7 (0) | 2020.08.21 |
| Greenhouse 원격 관리시스템 연결도 6 (0) | 2020.08.20 |
| Greenhouse 원격 관리시스템 전원부 5 (0) | 2020.08.19 |
| Greenhouse 원격 관리시스템 액츄에이터 4 (0) | 2020.08.18 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩